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-алерты
|
## SMTP-алерты
|
||||||
|
|
||||||
@@ -143,3 +143,5 @@ SMTP_SUBJECT_PREFIX=[KUMA]
|
|||||||
Для сортировки почты добавлен префикс темы `[KUMA]`. `SMTP_FROM` остаётся реальным адресом SMTP-аккаунта; несуществующий адрес отправителя не используется.
|
Для сортировки почты добавлен префикс темы `[KUMA]`. `SMTP_FROM` остаётся реальным адресом SMTP-аккаунта; несуществующий адрес отправителя не используется.
|
||||||
|
|
||||||
Добавлен UI на `/` для ручной проверки whitelist и отправки алерта. Whitelist URL предустановлен: `https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app`.
|
Добавлен 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
|
import requests
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
VERSION = "0.0.2"
|
VERSION = "0.0.3"
|
||||||
WHITELIST_URL = os.getenv(
|
WHITELIST_URL = os.getenv(
|
||||||
"WHITELIST_URL",
|
"WHITELIST_URL",
|
||||||
"https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app",
|
"https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app",
|
||||||
@@ -100,7 +100,15 @@ def check():
|
|||||||
|
|
||||||
@app.post("/alert")
|
@app.post("/alert")
|
||||||
def 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:
|
try:
|
||||||
send_alert("KUMA whitelist alert", payload)
|
send_alert("KUMA whitelist alert", payload)
|
||||||
return jsonify({"ok": True, "sent": True})
|
return jsonify({"ok": True, "sent": True})
|
||||||
|
|||||||
Reference in New Issue
Block a user