#!/usr/bin/env python2 # # This should be both valid Python 2 and 3, but currently the collectd # Python plugin is only Python 2. import dbus def get_property(dbus_iface, propname): return dbus_iface.proxy_object.Get(dbus_iface.dbus_interface, propname, dbus_interface='org.freedesktop.DBus.Properties') def init(): global system_manager system_manager = dbus.Interface(dbus.SystemBus().get_object("org.freedesktop.systemd1", "/org/freedesktop/systemd1"), "org.freedesktop.systemd1.Manager") def read(): global system_manager dat = dict() for unit in system_manager.ListUnits(): key = ('count', 'N%sUnits' % unit[3].capitalize()) dat[key] = dat.get(key, 0) + 1 for count in ['NJobs']: dat[('count', count)] = int(get_property(system_manager, count)) for counter in ['NInstalledJobs', 'NFailedJobs']: dat[('counter', counter)] = int(get_property(system_manager, counter)) return dat def dump(dat): for key, val in read().iteritems(): if __name__ == '__main__': print("%s => %s" % (key, val)) else: collectd.Values(plugin='systemd', type=key[0], type_instance=key[1], values=[val]).dispatch() if __name__ == '__main__': init() dump(read()) else: import collectd def _config(conf): pass def _read(): dump(read()) collectd.register_config(_config) collectd.register_init(init) collectd.register_read(_read)