9b177c145b
Migration 006, email config DB/env, smtplib sender, settings API, Settings UI section, and dispatch on event/problem ingest. Co-authored-by: Cursor <cursoragent@cursor.com>
5.2 KiB
5.2 KiB
ToDo — 29.05.2026 (оповещения SAC + «Настройки»)
Контекст: при UseSAC=exclusive на агентах Telegram/email с хоста не идут — оператору нужны оповещения из SAC. Аналитика и прочее — отдельно (analytics-backlog.md).
Уже есть в коде (не путать с «ещё не сделано»)
| Что | Где | Ограничение |
|---|---|---|
| Telegram из SAC | backend/app/services/telegram_notify.py |
Только если в sac-api.env: TELEGRAM_ENABLED=true, токен, chat_id |
| Порог severity | telegram_min_severity (по умолчанию high) |
События info (успешный RDP rdp.login.success) не уходят в TG, пока порог не снизить до warning |
| Вызов при ingest | events.py → notify_event / notify_problem |
Шаблон короткий («🚨 SAC событие»), не как у агента |
| UI «Настройки» | /settings, GET/PUT Telegram |
БД notification_channels (миграция 004) + fallback на sac-api.env |
| Email / webhook | TZ F-NOT-01 | Email ✅, Webhook ✅ |
Вывод на завтра: для exclusive нужно (1) включить и настроить TG на сервере SAC или (2) сделать раздел «Настройки» в UI + хранение каналов; порог warning и выше для событий и problems.
Замечание по коду: notify_problem() сейчас не проверяет telegram_min_severity (в отличие от notify_event) — исправить в рамках notif-03.
Задачи (приоритет)
P0 — exclusive + Telegram
| ID | Задача | Критерий |
|---|---|---|
notif-01 |
Зафиксировать в agent-integration.md / runbook: при exclusive канал оповещений = SAC; рекомендуемый TELEGRAM_MIN_SEVERITY=warning |
✅ docs + env.native.example |
notif-02 |
Проверить на staging/prod: ingest rdp.login.failed (warning) → TG; rdp.login.success (info) → нет TG при min=warning |
✅ чеклист testing-e2e-checklist.md § SAC Telegram |
notif-03 |
notify_problem: учитывать telegram_min_severity |
✅ unit-тест |
P1 — UI «Настройки» (каналы)
| ID | Задача | Критерий |
|---|---|---|
notif-10 |
Маршрут /settings, пункт в сайдбаре (только admin JWT) |
✅ страница + GET API |
notif-11 |
Блок Telegram: enabled, bot token, chat id, min severity | ✅ форма + GET/PUT |
notif-12 |
Хранение: вариант A — запись в БД notification_channels + fallback на env |
✅ миграция 004, PUT /notifications/telegram |
notif-13 |
Секреты: токен не возвращать целиком в GET (маска ***…last4) |
✅ GET settings |
notif-14 |
Кнопка «Проверить Telegram» → тестовое сообщение | ✅ POST …/telegram/test + UI |
P2 — Email и webhook (после Telegram)
| ID | Задача | Критерий |
|---|---|---|
notif-20 |
SMTP: host, port, user, from, to, TLS — по аналогии с RDP login_monitor.settings |
✅ PUT/test API + UI + ingest |
notif-21 |
Webhook: URL, optional secret header, JSON payload (event/problem) | ✅ PUT/test API + UI + ingest |
notif-22 |
TZ F-NOT-02 урезанно: правило «severity ≥ X → каналы» без сложного конструктора | Одна строка в настройках |
P3 — Качество сообщений (можно сдвинуть)
| ID | Задача |
|---|---|
notif-30 |
Шаблон TG ближе к агенту (HTML, поля user/ip/logon_type из details) |
notif-31 |
Cooldown/dedup на уровне SAC (F-NOT-03) — не дублировать problem при burst |
notif-32 |
F-NOT-05: daily report из SAC при exclusive (отдельный эпик) |
Связь с агентами
UseSAC=off → только агент (Telegram на хосте)
UseSAC=dual → агент + SAC ingest (+ опционально SAC TG, риск дублей)
UseSAC=exclusive→ только SAC ingest; TG/email = настройки SAC (UI/env)
Оценка на день
| Блок | Часы (оценка) |
|---|---|
| P0 док + notif-03 + smoke | 2–3 |
| P1 UI Settings + API Telegram | 4–6 |
| P2 webhook/email | +1 день |
Минимум на завтра: notif-01 … notif-03 + черновик notif-10 … notif-14 (хотя бы API без полировки UI).
См. также
- TZ.md §4.6 F-NOT-01 … F-NOT-05
- agent-integration.md — режимы UseSAC
backend/app/config.py—telegram_*backend/app/services/telegram_notify.py