#!/usr/bin/env python2.7 import collectd import json import xmlrpclib pybmurl = "" api = "" def init_callback(): global api api = xmlrpclib.ServerProxy(pybmurl) collectd.info('pybitmessagestatus.py init done') def config_callback(obj_configuration): global pybmurl apiUsername = "" apiPassword = "" apiInterface = "127.0.0.1" apiPort = 8445 for node in obj_configuration.children: key = node.key.lower() if key.lower() == "apiusername" and node.values: apiUsername = node.values[0] elif key.lower() == "apipassword" and node.values: apiPassword = node.values[0] elif key.lower() == "apiinterface" and node.values: apiInterface = node.values[0] elif key.lower() == "apiport" and node.values: apiPort = node.values[0] pybmurl = "http://" + apiUsername + ":" + apiPassword + "@" + apiInterface+ ":" + str(int(apiPort)) + "/" collectd.info('pybitmessagestatus.py config done') def read_callback(): try: client_status = json.loads(api.clientStatus()) except: collectd.info("Exception loading or parsing JSON") return con_data = ["networkConnections", "numberOfPubkeysProcessed", "numberOfMessagesProcessed", "numberOfBroadcastsProcessed"] for i in con_data: metric = collectd.Values() metric.plugin = "pybitmessagestatus" if i[0:6] == "number": metric.type = 'counter' else: metric.type = 'gauge' metric.type_instance = i.lower() try: metric.values = [client_status[i]] except: collectd.info("Value for %s missing" % (i)) metric.dispatch() if __name__ == "__main__": main() else: collectd.register_init(init_callback) collectd.register_config(config_callback) collectd.register_read(read_callback)