Files
ripe-cidr-collector/docs/analysis-2026-09-20.md
T
ayurishchevandClaude Sonnet 5 bcf8156085 Initial commit: RIPE CIDR/FQDN collector
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>
2026-09-21 07:29:38 +03:00

64 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Анализ проекта: сделано и осталось (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`