chore: release v1.0.0 — каркас FastAPI, ingress Grafana, интеграции, документация
Made-with: Cursor
This commit is contained in:
55
docs/ARCHITECTURE.md
Normal file
55
docs/ARCHITECTURE.md
Normal file
@ -0,0 +1,55 @@
|
||||
# Архитектура onGuard24 (для разработки и доработок)
|
||||
|
||||
Цель продукта: **модульный монолит** в духе IRM — ядро + подключаемые области (дежурства, контакты, «светофор» по сервисам). Текущая версия — **каркас v1**: HTTP, БД, ingress Grafana, проверки интеграций.
|
||||
|
||||
## Дерево пакетов
|
||||
|
||||
```
|
||||
onGuard24/
|
||||
├── onguard24/
|
||||
│ ├── main.py # FastAPI app, lifespan, маршруты верхнего уровня
|
||||
│ ├── config.py # Settings: .env из корня репозитория (не от cwd)
|
||||
│ ├── db.py # asyncpg pool, миграция ingress_events
|
||||
│ ├── status_snapshot.py # Единый сборщик JSON для /api/v1/status
|
||||
│ ├── root_html.py # HTML главной страницы со статусами
|
||||
│ ├── vaultcheck.py # Vault /v1/sys/health
|
||||
│ ├── ingress/grafana.py # POST webhook Grafana → INSERT ingress_events
|
||||
│ ├── integrations/
|
||||
│ │ ├── grafana_api.py # Grafana HTTP API (Bearer SA)
|
||||
│ │ └── forgejo_api.py # Forgejo/Gitea API (token + probe/fallback)
|
||||
│ └── modules/ # Заглушки: schedules, contacts, statusboard
|
||||
├── web/ # Vite + React (опционально)
|
||||
├── pyproject.toml
|
||||
├── CHANGELOG.md
|
||||
└── docs/
|
||||
```
|
||||
|
||||
## Поток данных (сейчас)
|
||||
|
||||
1. **Grafana** (отдельно настроенный contact point) шлёт **POST** на `/api/v1/ingress/grafana` → тело JSON пишется в **`ingress_events`**.
|
||||
2. **Параллельно** Grafana может слать в Mattermost — это вне этого репозитория (конфиг Grafana).
|
||||
3. **Статус страницы** не ходит в Grafana за алертами — только **проверка доступности API** (токен SA).
|
||||
|
||||
## Куда класть новый функционал
|
||||
|
||||
| Задача | Место |
|
||||
|--------|--------|
|
||||
| Новый HTTP-роут модуля | `onguard24/modules/<name>.py` + `include_router` в `main.py` |
|
||||
| Общая логика инцидентов / событий | позже: `onguard24/core/` или сервисный слой + события из БД |
|
||||
| Новая таблица БД | пока: SQL в `db.py` (MIGRATION_00N); позже: Alembic |
|
||||
| Новая внешняя интеграция | `onguard24/integrations/<name>.py`, вызов из `status_snapshot` при необходимости |
|
||||
|
||||
## Конфигурация
|
||||
|
||||
Все секреты только через **переменные окружения** / `.env` (файл **не в git**). Список ключей — `.env.example`.
|
||||
|
||||
## Зависимости между компонентами
|
||||
|
||||
- `status_snapshot.build(request)` читает `request.app.state.pool` и `request.app.state.settings` (устанавливаются в `lifespan`).
|
||||
- Модули **не** зависят друг от друга; общий контракт позже можно ввести через **таблицы БД** и **внутренние события** (ещё не реализовано).
|
||||
|
||||
## Известные ограничения v1
|
||||
|
||||
- Нет единой модели «инцидент» в БД — только сырой ingest в `ingress_events`.
|
||||
- Нет очереди/воркеров для эскалаций.
|
||||
- Нет auth на GET `/api/v1/status` (только для внутренней сети / за reverse proxy с ограничением).
|
||||
Reference in New Issue
Block a user