# Доменная модель onGuard24 Версия **1.1+** вводит явные сущности и задел под **события** между модулями. Таблицы БД для инцидентов пока не добавлены — см. [Alembic](../alembic/versions/). ## Сущности (код: `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)`. 3. После успешного INSERT в `ingress_events` ядро вызывает `await bus.publish_alert_received(Alert, raw_payload_ref=id_строки)`. Подключение к шине и регистрация модулей: **`app.state.event_bus`**, список модулей — **`modules/registry.py`** (см. [MODULES.md](MODULES.md)). ## Связь с БД - **ingress_events** — сырой JSON от Grafana (`alembic` миграция `001_initial`). - Сущности **Alert** / **Incident** — пока только в памяти; позже — таблицы и маппинг.