Collector daemon, FastAPI server (addresses, diff, collect, sources), SQLite storage with change journal, Docker Compose deployment, tests, documentation and project rules. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
64 lines
5.0 KiB
Markdown
64 lines
5.0 KiB
Markdown
# Анализ проекта: сделано и осталось (2026-09-20)
|
||
|
||
Состояние проекта после трёх доработок: надёжность и безопасность, тесты в контейнере, форматы вывода. Планы и итоги лежат рядом в `docs/`.
|
||
|
||
## Сделано
|
||
|
||
| Направление | Результат |
|
||
|---|---|
|
||
| Токен на `POST /schedule` | Заголовок `X-API-Key`, токен из `RIPE_API_TOKEN`, без токена запись отключена (503). Читающие эндпоинты открыты намеренно. |
|
||
| TTL записей | `ttl_days` (по умолчанию 90, `0` = бессрочно), `first_seen`/`last_seen`, авто-миграция старых данных. |
|
||
| Надёжность хранения | Атомарная запись, `flock`, битый JSON переименовывается в `*.corrupt-*`, API отвечает 503. |
|
||
| Логирование и `/health` | `logging` вместо `print`, `/health` со статусом заданий. |
|
||
| Агрегация CIDR, `ip_version` | Параметры `aggregate`, `ip_version` в `GET /addresses`; ответ по умолчанию побайтно прежний. |
|
||
| Форматы вывода | `nftables`, `mikrotik`, `bird`, `frr` (`format`, `name`). Проверены `bird -p` и `nft -c`. |
|
||
| Тесты | 9 тестов, запуск в контейнере (`Dockerfile.test`). |
|
||
| Развёртывание | Запуск не от root в systemd и OpenRC (документация в README). |
|
||
|
||
## Не сделано
|
||
|
||
| Направление | Комментарий |
|
||
|---|---|
|
||
| Метрики Prometheus (`/metrics`), алерты | Не начато |
|
||
| Управление ASN и FQDN через API | Сейчас только CLI |
|
||
| Diff-эндпоинт (`?since=`), уведомления (webhook, Telegram) | Не начато |
|
||
| Хранение в SQLite | Не начато |
|
||
| Разделение сборщика и API на два процесса | Не начато |
|
||
| Контейнер для самого приложения (Dockerfile, compose) | Не начато |
|
||
| Форматы `text`, `ipset` | Пользователь не выбрал |
|
||
|
||
## Остаточные риски
|
||
|
||
| # | Риск | Статус |
|
||
|---|---|---|
|
||
| 1 | После порчи файла API отдаёт пустой список, резервной копии нет | Не закрыт |
|
||
| 2 | Токен только на `POST`, читать список может любой | Осознанный выбор |
|
||
| 3 | CLI `add`/`remove` меняет конфиг без общей блокировки | Не закрыт |
|
||
| 4 | Версии в `requirements.txt` не закреплены | Не закрыт |
|
||
| 5 | Запросы к RIPE без повторов | Не закрыт |
|
||
| 6 | Нет репозитория git, истории изменений нет | Не закрыт |
|
||
| 7 | MikroTik и FRR не проверены на реальном ПО | Не закрыт |
|
||
| 8 | Тесты не покрывают `/health` и параллельную запись | По правилам проекта минимум |
|
||
|
||
Для FRR отдельно проверить: не выдаёт ли `no ip prefix-list <name>` ошибку, если список ещё не создан.
|
||
|
||
## Новые наблюдения
|
||
|
||
1. Реальные `data.json` и `fqdn_data.json` ещё в старом формате (нет блока `seen`). Миграция и TTL заработают после первого запуска сборщика.
|
||
2. Невалидные адреса при `aggregate=true` и в форматах пропускаются с предупреждением в логе, клиент об этом не узнаёт.
|
||
3. В данных нет версии схемы, что осложнит следующую миграцию (например, на SQLite).
|
||
4. `/addresses` читает и разбирает JSON при каждом запросе. Для текущих объёмов это нормально, при росте списков понадобится кэш.
|
||
|
||
## Рекомендуемый порядок
|
||
|
||
1. **Гигиена:** `git init` с первым коммитом, закрепление версий (`pip freeze` внутри контейнера), резервная копия `data.json.bak` (риски 1, 4, 6).
|
||
2. **Dockerfile и compose для приложения** (продолжение работы с контейнерами).
|
||
3. **Управление ASN и FQDN через API с токеном и `/metrics`.**
|
||
4. **SQLite и diff/уведомления**, если понадобится история изменений.
|
||
|
||
## Связанные документы
|
||
|
||
- `plan-reliability-security.md`, `summary-reliability-security.md`
|
||
- `plan-tests-in-container.md`, `summary-tests-in-container.md`
|
||
- `plan-output-formats.md`, `summary-output-formats.md`
|