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())