47 lines
1.3 KiB
Python
Executable File
47 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# Load modules from $CHARM_DIR/lib
|
|
import sys
|
|
sys.path.append('lib')
|
|
|
|
import yaml
|
|
import os
|
|
from subprocess import check_output, check_call, CalledProcessError
|
|
|
|
|
|
def build_command(doc):
|
|
values = {}
|
|
metrics = doc.get("metrics", {})
|
|
for metric, mdoc in metrics.items():
|
|
if not mdoc:
|
|
continue
|
|
cmd = mdoc.get("command")
|
|
if cmd:
|
|
try:
|
|
value = check_output(cmd, shell=True, universal_newlines=True)
|
|
except CalledProcessError as e:
|
|
check_call(['juju-log', '-lERROR',
|
|
'Error collecting metric {}:\n{}'.format(
|
|
metric, e.output)])
|
|
continue
|
|
value = value.strip()
|
|
if value:
|
|
values[metric] = value
|
|
|
|
if not values:
|
|
return None
|
|
command = ["add-metric"]
|
|
for metric, value in values.items():
|
|
command.append("%s=%s" % (metric, value))
|
|
return command
|
|
|
|
|
|
if __name__ == '__main__':
|
|
charm_dir = os.path.dirname(os.path.abspath(os.path.join(__file__, "..")))
|
|
metrics_yaml = os.path.join(charm_dir, "metrics.yaml")
|
|
with open(metrics_yaml) as f:
|
|
doc = yaml.load(f)
|
|
command = build_command(doc)
|
|
if command:
|
|
check_call(command)
|