From 8a15e705cddfcb84991d2ecabb925f3be8e5dbf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 26 Aug 2026 13:55:47 +0300 Subject: [PATCH] Add KUMA monitoring UI --- History/2026-08-26.md | 4 +++- src/app.py | 37 +++++++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/History/2026-08-26.md b/History/2026-08-26.md index e8775a9..137a271 100644 --- a/History/2026-08-26.md +++ b/History/2026-08-26.md @@ -125,7 +125,7 @@ WHITELIST_TIMEOUT=10 ## Версионирование -Версия KUMA установлена в `0.0.1`. В дальнейшем увеличивается только третья позиция: `0.0.*`. +Версия KUMA установлена в `0.0.2`. В дальнейшем увеличивается только третья позиция: `0.0.*`. ## SMTP-алерты @@ -141,3 +141,5 @@ SMTP_SUBJECT_PREFIX=[KUMA] ``` Для сортировки почты добавлен префикс темы `[KUMA]`. `SMTP_FROM` остаётся реальным адресом SMTP-аккаунта; несуществующий адрес отправителя не используется. + +Добавлен UI на `/` для ручной проверки whitelist и отправки алерта. Whitelist URL предустановлен: `https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app`. diff --git a/src/app.py b/src/app.py index e6bd981..47d3f4e 100644 --- a/src/app.py +++ b/src/app.py @@ -4,11 +4,11 @@ import smtplib import ssl from email.message import EmailMessage -from flask import Flask, jsonify +from flask import Flask, jsonify, request import requests app = Flask(__name__) -VERSION = "0.0.1" +VERSION = "0.0.2" WHITELIST_URL = os.getenv( "WHITELIST_URL", "https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app", @@ -26,13 +26,14 @@ def mariadb_configuration(): } -def check_whitelist(): +def check_whitelist(url=None): + url = url or WHITELIST_URL headers = {} token = os.getenv("WHITELIST_TOKEN") if token: headers["Authorization"] = f"Bearer {token}" response = requests.get( - WHITELIST_URL, + url, headers=headers, allow_redirects=False, timeout=int(os.getenv("WHITELIST_TIMEOUT", "10")), @@ -40,7 +41,7 @@ def check_whitelist(): content_type = response.headers.get("Content-Type", "") body = response.json() if "json" in content_type else response.text return { - "url": WHITELIST_URL, + "url": url, "status": response.status_code, "location": response.headers.get("Location"), "body": body, @@ -66,13 +67,20 @@ def send_alert(subject, body): @app.get("/") def index(): - return jsonify({ - "service": "kuma", - "version": VERSION, - "state": "stateless", - "target": "https://whitelist.nodejsk8s.services.ngcloud.ru/", - "mariadb": mariadb_configuration(), - }) + return """ + +KUMA

KUMA

Мониторинг whitelist и почтовые алерты. Версия __VERSION__.

+ +
Готово к проверке
+
""".replace("__VERSION__", VERSION).replace("__URL__", WHITELIST_URL) @app.get("/health") @@ -83,7 +91,8 @@ def health(): @app.get("/check") def check(): try: - result = check_whitelist() + url = request.args.get("url") + result = check_whitelist(url) return jsonify({"ok": 200 <= result["status"] < 300, **result}) except requests.RequestException as exc: return jsonify({"ok": False, "url": WHITELIST_URL, "error": str(exc)}), 502 @@ -91,7 +100,7 @@ def check(): @app.post("/alert") def alert(): - payload = requests.get(WHITELIST_URL, timeout=10).text + payload = requests.get(request.json.get("url", WHITELIST_URL), timeout=10).text try: send_alert("KUMA whitelist alert", payload) return jsonify({"ok": True, "sent": True})