Files
security-alert-center/docs/todo-2026-05-29.md
T
PTah 4167687dec feat: notification cooldown dedup for events and problems (notif-31)
Store last notify time by dedup_key/fingerprint, gate dispatch before
channels; config SAC_NOTIFY_*_COOLDOWN_SEC, migration 008.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 16:24:01 +10:00

89 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 | 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](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 → каналы» без сложного конструктора | ✅ `notification_policy` + UI «Правило оповещений» |
### P3 — Качество сообщений (можно сдвинуть)
| ID | Задача |
|----|--------|
| `notif-30` | Шаблон TG ближе к агенту (HTML, поля user/ip/logon_type из `details`) | ✅ `telegram_templates.py`, `parse_mode=HTML` |
| `notif-31` | Cooldown/dedup на уровне SAC (F-NOT-03) — не дублировать problem при burst | ✅ `notification_cooldown`, env 90/300 с |
| `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 | 23 |
| P1 UI Settings + API Telegram | 46 |
| 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`