#!/usr/bin/python import requests, sys import json """ Multigraph munin plugin to monitor the status of Resin.io devices Author: JP Meijers 2018-01-09 """ #munin autoconfig if len(sys.argv) == 2 and sys.argv[1] == "autoconf": print "yes" exit(0) apiKey = "get your own apiKey and enter here" #should be changed to be a config variable from /etc/munin/plugin-conf.d/munin-node applications = [] devices = [] # appId = 520279 # gwId = 753388 resp = requests.get('https://api.resin.io/v1/application?apikey='+apiKey) data = json.loads(resp.text) for i in data['d']: application = {} application['name'] = i['app_name'] application['id'] = i['id'] applications.append(application) resp = requests.get('https://api.resin.io/v1/device?apikey='+apiKey) data = json.loads(resp.text) for i in data['d']: device = {} device['id'] = i['id'] device['name'] = i['name'] device['online'] = i['is_online'] device['appid'] = i['application']['__id'] devices.append(device) #munin graph setup if len(sys.argv) == 2 and sys.argv[1] == "config": for app in applications: print("multigraph "+str(app["id"])) print("graph_title "+app["name"]) print("graph_vlabel Online devices") print("graph_category Resin.io") print("graph_info This graph shows the number of online devices for Resin.io application "+app["name"]) area = False for dev in devices: if(dev['appid'] != app['id']): continue print(str(dev['id'])+".label "+dev['name']) print(str(dev['id'])+".min 0") print(str(dev['id'])+".type GAUGE") if(area): print(str(dev['id'])+".draw STACK") else: print(str(dev['id'])+".draw AREA") area = True exit(0) #munin values for app in applications: print("multigraph "+str(app["id"])) for dev in devices: if(dev['appid'] != app['id']): continue if(dev['online']): print(str(dev['id'])+".value 1") else: print(str(dev['id'])+".value 0")