import os import requests from flask import Flask password = os.environ.get("RSPAMD_EXPORTER_PASSWORD") url = os.environ.get("RSPAMD_EXPORTER_URL") instance = os.environ.get("RSPAMD_EXPORTER_INSTANCE") def json_to_prom(json, prefix, instance): outlines = "" for k,v in json.items(): k = k.replace(' ', '_') k = k.replace('.', '_') if type(k) != list: v = [v] for item in v: if len(v) != 1: prefix = prefix + "_" + v.index(item) if type(item) is bool: outlines += '{}_{}{{instance="{}"}} {}\n'.format(prefix, k, instance, 1 if item else 0) if type(item) in [int, float]: outlines += '{}_{}{{instance="{}"}} {}\n'.format(prefix, k, instance,item) if type(item) is dict: outlines += json_to_prom(item, "{}_{}".format(prefix, k), instance) return outlines app = Flask(__name__) @app.route('/metrics') def metrics(): rspamd_json = requests.get(url, headers={"Password": password}).json() prom_lines = json_to_prom(rspamd_json, "rspamd", instance) prom_lines += 'up{{instance="{}"}} 1'.format(instance) return prom_lines