Add KUMA UI health endpoint workflow
This commit is contained in:
@@ -125,7 +125,7 @@ WHITELIST_TIMEOUT=10
|
||||
|
||||
## Версионирование
|
||||
|
||||
Версия KUMA установлена в `0.0.2`. В дальнейшем увеличивается только третья позиция: `0.0.*`.
|
||||
Версия KUMA установлена в `0.0.3`. В дальнейшем увеличивается только третья позиция: `0.0.*`.
|
||||
|
||||
## SMTP-алерты
|
||||
|
||||
@@ -143,3 +143,5 @@ SMTP_SUBJECT_PREFIX=[KUMA]
|
||||
Для сортировки почты добавлен префикс темы `[KUMA]`. `SMTP_FROM` остаётся реальным адресом SMTP-аккаунта; несуществующий адрес отправителя не используется.
|
||||
|
||||
Добавлен UI на `/` для ручной проверки whitelist и отправки алерта. Whitelist URL предустановлен: `https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app`.
|
||||
|
||||
`POST /alert` больше не отправляет HTML страницы Keycloak. При редиректе отправляется краткое сообщение со статусом и URL авторизации; обычный ответ ограничен 4000 символами.
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
# История чата KUMA
|
||||
|
||||
Дата: 2026-08-26
|
||||
|
||||
> Секреты и токены замаскированы.
|
||||
|
||||
## Запросы и действия
|
||||
|
||||
1. Локальный каталог `/home/naeel/nubes/kuma` был привязан к пустому Git-репозиторию:
|
||||
`https://gitea.services.ngcloud.ru/forcloud/kuma.git`.
|
||||
2. Создан stateless Flask-сервис KUMA для whitelist:
|
||||
`https://whitelist.nodejsk8s.services.ngcloud.ru/`.
|
||||
3. Добавлены Docker-файлы и Python-код. Код перенесён в каталог `src/`.
|
||||
4. Добавлен `.gitignore` для `.env`, кэшей Python, окружений, логов, БД, бинарников, архивов, IDE и временных файлов.
|
||||
5. Создан локальный файл секретов `/home/naeel/nubes/kuma/.env`; он игнорируется Git.
|
||||
6. Создан каталог `History` для документации проекта.
|
||||
7. Проверен Gitea Container Registry:
|
||||
`https://gitea.services.ngcloud.ru/v2/`.
|
||||
8. Образы публиковались в Registry:
|
||||
- `gitea.services.ngcloud.ru/forcloud/kuma:0.1.0`
|
||||
- `gitea.services.ngcloud.ru/forcloud/kuma:0.2.0`
|
||||
- `gitea.services.ngcloud.ru/forcloud/kuma:0.2.1`
|
||||
- `gitea.services.ngcloud.ru/forcloud/kuma:0.0.1`
|
||||
- `gitea.services.ngcloud.ru/forcloud/kuma:0.0.2`
|
||||
9. Зафиксировано правило версий: использовать только формат `0.0.*`.
|
||||
10. Проверено, что whitelist endpoint без авторизации отвечает `HTTP 302` с перенаправлением на `/v2/login`.
|
||||
11. В KUMA добавлен `GET /check` для проверки whitelist.
|
||||
12. Добавлен UI на `/` с предустановленным whitelist URL и ручными кнопками проверки и отправки алерта.
|
||||
13. Добавлен `POST /alert`, который получает ответ whitelist и отправляет его по SMTP.
|
||||
14. Для сортировки писем добавлен префикс темы `[KUMA]`.
|
||||
15. SMTP Яндекса проверен напрямую через `smtp.yandex.ru:465` SSL. После включения обязательной настройки IMAP аутентификация прошла.
|
||||
16. Git-коммиты и push выполнялись в ветку `master`.
|
||||
|
||||
## Текущий managed service
|
||||
|
||||
URL UI:
|
||||
|
||||
`https://kuma.containerk8s.dev.nubes.ru/`
|
||||
|
||||
Актуальный образ:
|
||||
|
||||
`gitea.services.ngcloud.ru/forcloud/kuma:0.0.3`
|
||||
|
||||
Последний коммит:
|
||||
|
||||
`будет создан после текущего изменения`
|
||||
|
||||
## Текущие endpoint
|
||||
|
||||
- `GET /` — UI KUMA.
|
||||
- `GET /health` — проверка состояния.
|
||||
- `GET /check` — запрос whitelist без автоматического перехода по redirect.
|
||||
- `POST /alert` — отправка ответа whitelist по SMTP.
|
||||
|
||||
## Конфигурация
|
||||
|
||||
Whitelist URL предустановлен:
|
||||
|
||||
`https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app`
|
||||
|
||||
SMTP использует сервер Яндекса, SSL-порт `465`, полный email как логин и пароль приложения. Значения логина и пароля в этот файл не записываются.
|
||||
|
||||
Тема алертов начинается с:
|
||||
|
||||
`[KUMA]`
|
||||
|
||||
## Важные уточнения
|
||||
|
||||
- IMAP требуется включить в интерфейсе Яндекс Почты, чтобы активировать пароли приложений и OAuth-токены.
|
||||
- KUMA IMAP не использует и почту не читает.
|
||||
- KUMA использует SMTP только для отправки алертов.
|
||||
- Пароли и токены не должны попадать в Git, Dockerfile, образ или History.
|
||||
+10
-2
@@ -8,7 +8,7 @@ from flask import Flask, jsonify, request
|
||||
import requests
|
||||
|
||||
app = Flask(__name__)
|
||||
VERSION = "0.0.2"
|
||||
VERSION = "0.0.3"
|
||||
WHITELIST_URL = os.getenv(
|
||||
"WHITELIST_URL",
|
||||
"https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app",
|
||||
@@ -100,7 +100,15 @@ def check():
|
||||
|
||||
@app.post("/alert")
|
||||
def alert():
|
||||
payload = requests.get(request.json.get("url", WHITELIST_URL), timeout=10).text
|
||||
url = request.json.get("url", WHITELIST_URL)
|
||||
response = requests.get(url, allow_redirects=False, timeout=10)
|
||||
if response.is_redirect:
|
||||
payload = (
|
||||
f"Whitelist недоступен без авторизации. HTTP {response.status_code}. "
|
||||
f"URL авторизации: {response.headers.get('Location', 'не указан')}"
|
||||
)
|
||||
else:
|
||||
payload = f"Whitelist HTTP {response.status_code}\n\n{response.text[:4000]}"
|
||||
try:
|
||||
send_alert("KUMA whitelist alert", payload)
|
||||
return jsonify({"ok": True, "sent": True})
|
||||
|
||||
Reference in New Issue
Block a user