1
0
Fork 0
rspamd_exporter/rspamd_exporter.py

39 lines
1.2 KiB
Python

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