diff --git a/app.py b/app.py new file mode 100755 index 0000000..0eeee14 --- /dev/null +++ b/app.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 + +from uptimestatus import app + +if __name__ == "__main__": + app.run(debug=True) diff --git a/uptimestatus/__init__.py b/uptimestatus/__init__.py index e9e4371..71c343a 100644 --- a/uptimestatus/__init__.py +++ b/uptimestatus/__init__.py @@ -1,3 +1,7 @@ #!/usr/bin/env python3 +from flask import Flask + +app = Flask(__name__) + from .views import app diff --git a/uptimestatus/utils.py b/uptimestatus/utils.py new file mode 100644 index 0000000..a708e15 --- /dev/null +++ b/uptimestatus/utils.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 + +def ratio_to_status(ratio): + if ratio > 0.99: + return "ok" + elif ratio > 0.8: + return "warning" + else: + return "critical" + +def process_instance(instance): + return { + "name": instance["metric"]["instance"].split(".")[0], + "i": [{"status": "unknown", "ratio": None} for i in range(56 - len(instance["values"]))] + [{"status": ratio_to_status(float(i[1])), "ratio": float(i[1])} for i in instance["values"]], + } diff --git a/uptimestatus/views.py b/uptimestatus/views.py index 02dd700..ab94596 100644 --- a/uptimestatus/views.py +++ b/uptimestatus/views.py @@ -1,31 +1,15 @@ #!/usr/bin/env python3 -from flask import Flask, render_template +from . import app +from .utils import process_instance + +from flask import render_template import json import requests -app = Flask(__name__) - -def ratio_to_status(ratio): - if ratio > 0.99: - return "ok" - elif ratio > 0.8: - return "warning" - else: - return "critical" - -def process_instance(instance): - return { - "name": instance["metric"]["instance"].split(".")[0], - "i": [{"status": "unknown", "ratio": None} for i in range(56 - len(instance["values"]))] + [{"status": ratio_to_status(float(i[1])), "ratio": float(i[1])} for i in instance["values"]], - } - @app.route("/") def status(): r = requests.get("https://prometheus.monitoring.clerie.de/api/v1/query?query=%28sum_over_time%28up%7Bjob%3D%22node-exporter%22%7D%5B6h%5D%29+%2F+count_over_time%28up%7Bjob%3D%22node-exporter%22%7D%5B6h%5D%29%29%5B14d%3A6h%5D") j = json.loads(r.text) metrics = sorted(map(process_instance, j["data"]["result"]), key=lambda m: m["name"]) return render_template("status.html", metrics=metrics) - -if __name__ == "__main__": - app.run()