Files
ripe-cidr-collector/docs/summary-reliability-security.md
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

3.2 KiB

Итоги: надёжность и безопасность

План: docs/plan-reliability-security.md.

Что сделано

  • storage.py (новый): атомарная запись (temp + fsync + os.replace), межпроцессная блокировка flock, безопасное чтение: битый JSON переименовывается в *.corrupt-<ts>, вызывается StorageError (раньше молча возвращался {} и затирал данные).
  • cidr_collector.py: TTL записей (ttl_days, по умолчанию 90, 0 = бессрочно) на основе first_seen/last_seen; при сбое RIPE/DNS ничего не удаляется; авто-миграция старых данных (TTL идёт с момента миграции); logging вместо print; сетевые запросы вне блокировки; пути к файлам теперь относительно каталога скрипта (cron больше не зависит от cwd).
  • api_server.py: POST /schedule требует X-API-Key (токен из RIPE_API_TOKEN, без токена - 503, сравнение через compare_digest); pydantic-модель тела; атомарная запись конфига под блокировкой; lifespan вместо on_event; GET /health; StorageError -> 503; хост по умолчанию для __main__ - 127.0.0.1.
  • Документация/окружение: README (токен, TTL, /health, non-root systemd/OpenRC), .gitignore, requirements-dev.txt, ttl_days в config.json.
  • Тесты (3): tests/test_core.py - TTL и безопасность при сбое, битый JSON, авторизация POST.

Проверка

  • pytest -q: 3 passed.
  • На копии данных: миграция без потерь (список префиксов не уменьшился), повторный запуск не меняет файлы, параллельный запуск двух сборщиков не портит JSON, битый файл -> API 503, сборщик завершается с ошибкой; POST без ключа 401, с ключом 200 и конфиг обновлён; /health возвращает статусы.

Замечания

  • Старый venv/ был создан на macOS (/Users/tstark/...) и на этом сервере не запускался. Он удалён, создан новый Linux venv/.
  • После первого 503 битый файл уже переименован, поэтому следующие запросы вернут пустой список, пока сборщик не создаст данные заново. История накопления в этом случае теряется; сам битый файл сохранён как *.corrupt-*.
  • 0.0.0.0 в systemd оставлен (потребители удалённые): доступ к порту 8000 нужно ограничить файрволом.
  • Реальные data.json/fqdn_data.json не изменялись; миграция произойдёт при первом запуске сборщика.