39 lines
1.2 KiB
Python
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
|