summaryrefslogtreecommitdiff
path: root/systemd.py
blob: 9b85660893fb14e8bfd6aa3e40e307f2f1570f77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/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)