2017-12-20 09:41:36 +01:00
|
|
|
#!/usr/bin/env python2.7
|
|
|
|
|
|
|
|
import collectd
|
|
|
|
import json
|
|
|
|
import xmlrpclib
|
|
|
|
|
|
|
|
pybmurl = ""
|
|
|
|
api = ""
|
|
|
|
|
2021-09-29 13:57:46 +02:00
|
|
|
|
2017-12-20 09:41:36 +01:00
|
|
|
def init_callback():
|
|
|
|
global api
|
|
|
|
api = xmlrpclib.ServerProxy(pybmurl)
|
|
|
|
collectd.info('pybitmessagestatus.py init done')
|
|
|
|
|
2021-09-29 13:57:46 +02:00
|
|
|
|
2017-12-20 09:41:36 +01:00
|
|
|
def config_callback(ObjConfiguration):
|
|
|
|
global pybmurl
|
|
|
|
apiUsername = ""
|
|
|
|
apiPassword = ""
|
|
|
|
apiInterface = "127.0.0.1"
|
|
|
|
apiPort = 8445
|
|
|
|
for node in ObjConfiguration.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]
|
2021-09-29 13:57:46 +02:00
|
|
|
pybmurl = "http://" + apiUsername + ":" + apiPassword + "@" + apiInterface + ":" + str(int(apiPort)) + "/"
|
2017-12-20 09:41:36 +01:00
|
|
|
collectd.info('pybitmessagestatus.py config done')
|
|
|
|
|
2021-09-29 13:57:46 +02:00
|
|
|
|
2017-12-20 09:41:36 +01:00
|
|
|
def read_callback():
|
|
|
|
try:
|
|
|
|
clientStatus = json.loads(api.clientStatus())
|
2021-09-29 13:57:46 +02:00
|
|
|
except (json.decoder.JSONDecodeError, TypeError()):
|
2017-12-20 09:41:36 +01:00
|
|
|
collectd.info("Exception loading or parsing JSON")
|
|
|
|
return
|
|
|
|
|
2021-09-29 13:57:46 +02:00
|
|
|
for i in ["networkConnections", "numberOfPubkeysProcessed",
|
|
|
|
"numberOfMessagesProcessed", "numberOfBroadcastsProcessed"]:
|
2017-12-20 09:41:36 +01:00
|
|
|
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 = [clientStatus[i]]
|
2021-09-29 13:57:46 +02:00
|
|
|
except (NameError, KeyError):
|
2017-12-20 09:41:36 +01:00
|
|
|
collectd.info("Value for %s missing" % (i))
|
|
|
|
metric.dispatch()
|
|
|
|
|
2021-09-29 13:57:46 +02:00
|
|
|
|
2017-12-20 09:41:36 +01:00
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|
|
|
|
else:
|
|
|
|
collectd.register_init(init_callback)
|
|
|
|
collectd.register_config(config_callback)
|
|
|
|
collectd.register_read(read_callback)
|