43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
import collectd,os,subprocess
|
|
|
|
# https://www.programcreek.com/python/example/106897/collectd.register_read
|
|
|
|
PATHS = []
|
|
INTERVAL = 60 * 60 * 24
|
|
|
|
def du(path):
|
|
return subprocess.check_output(['du','-Dsb', path]).split()[0].decode('utf-8')
|
|
|
|
def init():
|
|
global PATHS
|
|
collectd.info('custom du plugin initialized with %s' % PATHS)
|
|
|
|
# configure is called for each module block
|
|
def configure(config):
|
|
global PATHS
|
|
|
|
for node in config.children:
|
|
key = node.key
|
|
|
|
if key == 'Path':
|
|
PATHS.append({ 'name': node.values[0], 'path': node.values[1] })
|
|
collectd.info('du plugin: monitoring %s' % node.values[1])
|
|
else:
|
|
collectd.info('du plugin: Unknown config key "%s"' % key)
|
|
|
|
def read():
|
|
for p in PATHS:
|
|
path = p['path']
|
|
collectd.info('computing size of %s' % path)
|
|
size = du(path)
|
|
collectd.info('du plugin: size of %s is %s' % (path, size))
|
|
|
|
# type comes from https://github.com/collectd/collectd/blob/master/src/types.db
|
|
val = collectd.Values(type='capacity', plugin='du', plugin_instance=p['name'])
|
|
|
|
val.dispatch(values=[size], type_instance='usage')
|
|
|
|
collectd.register_init(init)
|
|
collectd.register_config(configure)
|
|
collectd.register_read(read, INTERVAL)
|