Skip to content

Instantly share code, notes, and snippets.

@bachp
Last active September 27, 2017 17:57
Show Gist options
  • Select an option

  • Save bachp/9509e9f55efe1eefa0fec1cfbd3fde4a to your computer and use it in GitHub Desktop.

Select an option

Save bachp/9509e9f55efe1eefa0fec1cfbd3fde4a to your computer and use it in GitHub Desktop.
Export rdiff-backup statistics to prometheus
#!/usr/bin/env python3
import glob
import os
import sys
# Select file
base = sys.argv[1]
backup = sys.argv[2]
files = glob.glob(os.path.join(base,"rdiff-backup-data/session_statistics.*.data"))
files.sort(reverse=True)
iname = next(iter(files or []), None)
oname = "/var/lib/prometheus/node-exporter/%s_rdiff.prom" % backup
import re
def prom_name(name, prefix=""):
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
return prefix + re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
def prom_attrs(attrs):
attr_str = ",".join(["%s=\"%s\"" % (k,v) for (k,v) in attrs.items()])
return "{%s}" % attr_str if attr_str != "" else ""
bkp_attrs = {"backup":backup} if backup else {}
def metrics(data):
out = []
for line in data.readlines():
(name, value, *detail) = line.split()
pname = prom_name(name, prefix="rdiff_")
pattrs = prom_attrs(bkp_attrs)
phelp = "# HELP %s %s" % (pname, name)
out.append("%s\n%s%s %s\n" % (phelp, pname, pattrs, value))
return out
with open(oname+".$$", "w") as o, open(iname, "r") as i:
o.writelines(metrics(i))
os.rename(oname+".$$", oname)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment