2026-04-03 08:36:35 +03:00
# Доменная модель onGuard24
2026-04-03 08:45:19 +03:00
Версия **1.1+** вводит явные сущности и задел под **события** между модулями. Таблицы БД для инцидентов пока не добавлены — см. [Alembic ](../alembic/versions/ ).
2026-04-03 08:36:35 +03:00
## Сущности (код: `onguard24/domain/entities.py`)
| Сущность | Назначение |
|----------|------------|
| **Alert** | Нормализованный алерт после парсинга webhook (Grafana и др.): `severity` , `labels` , `payload` . |
| **Incident** | Жизненный цикл инцидента: статус, связь с алертами (`alert_ids` ). |
| **EscalationPolicy** / **EscalationStep** | Цепочка эскалаций (уведомления, паузы) — задел под модуль schedules/IRM. |
**Severity** — перечисление: `info` , `warning` , `critical` .
## События (код: `onguard24/domain/events.py`)
| Событие | Когда |
|---------|--------|
| **AlertReceived** (`name=alert.received` ) | Алерт принят и (в будущем) сохранён/сопоставлен. |
**EventBus** — протокол; **InMemoryEventBus** — простая реализация для тестов и прототипа.
### Как модули подписываются (план)
1. Модуль реализует ** `Module` **: свойство `name` , метод `on_event(event)` .
2. При старте приложения модуль регистрируется: `bus.subscribe("alert.received", handler)` .
2026-04-03 08:45:19 +03:00
3. После успешного INSERT в `ingress_events` ядро вызывает `await bus.publish_alert_received(Alert, raw_payload_ref=id_с тр о ки)` .
2026-04-03 08:36:35 +03:00
2026-04-03 08:45:19 +03:00
Подключение к шине и регистрация модулей: ** `app.state.event_bus` **, список модулей — ** `modules/registry.py` ** (см. [MODULES.md ](MODULES.md )).
2026-04-03 08:36:35 +03:00
## Связь с БД
- **ingress_events** — сырой JSON от Grafana (`alembic` миграция `001_initial` ).
- Сущности **Alert** / **Incident** — пока только в памяти; позже — таблицы и маппинг.