20fa7e2c27
Add webhook config (DB/env), JSON POST on events/problems, settings API, Settings UI section, and notify_dispatch for multi-channel ingest. Co-authored-by: Cursor <cursoragent@cursor.com>
89 lines
5.2 KiB
Markdown
89 lines
5.2 KiB
Markdown
# ToDo — 29.05.2026 (оповещения SAC + «Настройки»)
|
||
|
||
Контекст: при **`UseSAC=exclusive`** на агентах Telegram/email с хоста **не идут** — оператору нужны оповещения **из SAC**. Аналитика и прочее — отдельно ([analytics-backlog.md](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 | Webhook ✅; SMTP — `notif-20` |
|
||
|
||
**Вывод на завтра:** для 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](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` | Отправка тестового письма |
|
||
| `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 (отдельный эпик) |
|
||
|
||
---
|
||
|
||
## Связь с агентами
|
||
|
||
```text
|
||
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](TZ.md) §4.6 F-NOT-01 … F-NOT-05
|
||
- [agent-integration.md](agent-integration.md) — режимы UseSAC
|
||
- `backend/app/config.py` — `telegram_*`
|
||
- `backend/app/services/telegram_notify.py`
|