diff --git a/routermon.py b/routermon.py new file mode 100644 index 0000000..2d3188a --- /dev/null +++ b/routermon.py @@ -0,0 +1,62 @@ +import sys +import json +import time +import routeros_api + +import influxdb_client +from influxdb_client import Point +from influxdb_client.client.write_api import ASYNCHRONOUS + +INTERVAL = 5 +INFLUXDB_TOKEN='rg5dZrBHQxJTH4Etq2jmDduggCC28QaWcua0VVvW4hjsEVhy_JUpVhcyg-aLAbM-TXv92pTB7IGJlyAPvi7Kvw==' +URL = "http://10.0.2.249:4567" +ORG = "edelweiss" +BUCKET = "router" + +def main(): + + write_client = influxdb_client.InfluxDBClient(url=URL, token=INFLUXDB_TOKEN, org=ORG) + write_api = write_client.write_api(write_options=ASYNCHRONOUS) + + connection = routeros_api.RouterOsApiPool('10.128.0.1', username='service', password='edxservice', plaintext_login=True) + api = connection.get_api() + run = True + if_stats_old = None + last = 0 + while run: + try: + if_stats = api.get_resource('/interface/ethernet').call('print', {'proplist': 'name,rx-bytes,tx-bytes'}) + hw_stats = api.get_resource('/system/resource').call('print', {'proplist':'uptime,cpu-load'})[0] + # calcolo della velocita' interfaccia a ogni ciclo + now = time.time() + points = [] + for n,d in enumerate(if_stats): + for k,v in d.items(): + if str.isdecimal(v): + if_stats[n][k] = int(v) + if if_stats_old is not None: + if_stats[n]['rx-rate'] = int((d['rx-bytes']-if_stats_old[n]['rx-bytes'])/(now-last)) + if_stats[n]['tx-rate'] = int((d['tx-bytes']-if_stats_old[n]['tx-bytes'])/(now-last)) + points.append( + Point("interfaces") + .tag("interface", d['name']) + .field('rx-rate', if_stats[n]['rx-rate']) + .field('tx-rate', if_stats[n]['tx-rate']) + ) + write_api.write(bucket=BUCKET, org=ORG, record=points) + write_api.write(bucket=BUCKET, org=ORG, + record=Point('resources') + .field('cpu',int(hw_stats['cpu-load'])) + ) + if_stats_old = if_stats + print(json.dumps(if_stats, indent=2)) + print(json.dumps(hw_stats, indent=2)) + last = time.time() + time.sleep(INTERVAL) + except KeyboardInterrupt: + run = False + connection.disconnect() + return 0 + +if __name__ == "__main__": + sys.exit(main())