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>
5.0 KiB
5.0 KiB
Анализ проекта: сделано и осталось (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> ошибку, если список ещё не создан.
Новые наблюдения
- Реальные
data.jsonиfqdn_data.jsonещё в старом формате (нет блокаseen). Миграция и TTL заработают после первого запуска сборщика. - Невалидные адреса при
aggregate=trueи в форматах пропускаются с предупреждением в логе, клиент об этом не узнаёт. - В данных нет версии схемы, что осложнит следующую миграцию (например, на SQLite).
/addressesчитает и разбирает JSON при каждом запросе. Для текущих объёмов это нормально, при росте списков понадобится кэш.
Рекомендуемый порядок
- Гигиена:
git initс первым коммитом, закрепление версий (pip freezeвнутри контейнера), резервная копияdata.json.bak(риски 1, 4, 6). - Dockerfile и compose для приложения (продолжение работы с контейнерами).
- Управление ASN и FQDN через API с токеном и
/metrics. - SQLite и diff/уведомления, если понадобится история изменений.
Связанные документы
plan-reliability-security.md,summary-reliability-security.mdplan-tests-in-container.md,summary-tests-in-container.mdplan-output-formats.md,summary-output-formats.md