store docker df output as well

This commit is contained in:
Girish Ramakrishnan
2019-08-19 16:15:31 -07:00
parent 43bf0767f1
commit 9d3b4ba816

View File

@@ -1,4 +1,4 @@
import collectd,os,subprocess,sys
import collectd,os,subprocess,sys,re
# https://www.programcreek.com/python/example/106897/collectd.register_read
@@ -17,7 +17,23 @@ def du(pathinfo):
return size
except Exception as e:
collectd.info('\terror getting the size of %s: %s' % (pathinfo['dir'], str(e)))
return -1
return 0
def parseSize(size):
units = {"B": 1, "KB": 10**3, "MB": 10**6, "GB": 10**9, "TB": 10**12}
number, unit, _ = re.split('([a-zA-Z]+)', size.upper())
return int(float(number)*units[unit])
def dockerSize():
# use --format '{{json .}}' to dump the string. '{{if eq .Type "Images"}}{{.Size}}{{end}}' still creates newlines
cmd = 'timeout 1800 docker system df --format "{{.Size}}" | head -n1'
try:
size = subprocess.check_output(cmd, shell=True).strip().decode('utf-8')
collectd.info('\tsize of docker images is %s' % size)
return parseSize(size)
except Exception as e:
collectd.info('\terror getting docker images size : %s' % str(e))
return 0
# configure is called for each module block. this is called before init
def configure(config):
@@ -50,9 +66,14 @@ def read():
# type comes from https://github.com/collectd/collectd/blob/master/src/types.db
val = collectd.Values(type='capacity', plugin='du', plugin_instance=pathinfo['name'])
val.dispatch(values=[size], type_instance='usage')
size = dockerSize()
val = collectd.Values(type='capacity', plugin='du', plugin_instance='docker')
val.dispatch(values=[size], type_instance='usage')
collectd.register_init(init)
collectd.register_config(configure)
collectd.register_read(read, INTERVAL)