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

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> ошибку, если список ещё не создан.

Новые наблюдения

  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