feat: SAC daily reports from DB aggregation (notif-32)
- Aggregate report.daily.ssh/rdp from 24h ingest; job and systemd timer - notify_daily_report bypasses NOTIFY_MIN_SEVERITY; ingest routes agent reports - HTML templates, env SAC_DAILY_REPORT_*, docs and tests (56 cases) Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -45,7 +45,35 @@ SAC_HEARTBEAT_STALE_MINUTES=780
|
||||
|
||||
3. **Хосты** → статус `online` после свежего heartbeat.
|
||||
|
||||
4. Ежедневный отчёт: после `DAILY_REPORT_HOUR` — событие `report.daily.ssh`.
|
||||
4. Ежедневный отчёт: после `DAILY_REPORT_HOUR` — событие `report.daily.ssh` (от агента) **или** от SAC при `SAC_DAILY_REPORT_ENABLED=true` и отсутствии отчёта агента за сутки.
|
||||
|
||||
---
|
||||
|
||||
## SAC: отчёт без агента (exclusive / пропуск агента)
|
||||
|
||||
В `config/sac-api.env`:
|
||||
|
||||
```bash
|
||||
SAC_DAILY_REPORT_ENABLED=true
|
||||
SAC_DAILY_REPORT_HOUR=9
|
||||
SAC_DAILY_REPORT_TIMEZONE=Europe/Moscow
|
||||
SAC_DAILY_REPORT_SKIP_IF_AGENT_SENT=true
|
||||
SAC_DAILY_REPORT_REQUIRE_ACTIVITY=true
|
||||
```
|
||||
|
||||
- Job: `cd backend && .venv/bin/python -m app.jobs.daily_report` (ручной прогон: `--force`).
|
||||
- Timer: `deploy/systemd/sac-daily-report.service` + `.timer` (по умолчанию 09:15 UTC в unit; час проверяется по `SAC_DAILY_REPORT_TIMEZONE`).
|
||||
- Оповещение: `notify_daily_report` — **не** режется `NOTIFY_MIN_SEVERITY=warning` (severity отчёта `info`).
|
||||
- UI **Отчёты** и Telegram используют `details.report_html` / `report_body` как у агента.
|
||||
|
||||
Установка timer (один раз на сервере):
|
||||
|
||||
```bash
|
||||
sudo cp /opt/security-alert-center/deploy/systemd/sac-daily-report.service /etc/systemd/system/
|
||||
sudo cp /opt/security-alert-center/deploy/systemd/sac-daily-report.timer /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now sac-daily-report.timer
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user