Files
ripe-cidr-collector/docs/summary-collect-endpoint.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

3.3 KiB
Raw Blame History

Итоги: POST /collect (немедленный сбор)

План: docs/plan-collect-endpoint.md. Результат анализа сохранён отдельно: docs/analysis-2026-09-21.md.

Сделано

  • POST /collect (api_server.py, токен X-API-Key): тело необязательно (type: asn/fqdn/all, по умолчанию all), ответ 202. Если демон не жив (нет свежего heartbeat), ответ 503 и запрос не ставится в очередь.
  • Передача запроса демону (cidr_collector.py): request_collection/pop_collection_requests через файл collect_request.json в DATA_DIR (атомарная запись под блокировкой); повторные запросы объединяются.
  • Демон (collector_daemon.py): задание check_collect_requests каждые 5 с ставит разовые задания <type>_manual; на каждый тип один запуск за раз (наложение планового и ручного сбора пропускается с записью в лог); в status.json добавлены running и last_finished; служебные запуски опроса скрыты из лога.
  • /health: общий помощник collector_state() (используется и /collect), в заданиях новые поля.
  • README: описание эндпоинта, /health, логика планировщика; collect_request.json в .gitignore/.dockerignore.
  • Тесты: 2 новых (API /collect; демон ставит задания и пропускает наложение). Всего 16, в контейнере 16 passed.

Проверка

  • Отдельные процессы на копии данных (расписание 0 4 * * *, чтобы плановых запусков не было): без демона 503; POST /collect {"type":"asn"} запустил сбор через ~1 с (24 -> 42 CIDR), /health показал running: true, затем last_finished; два быстрых запроса дали один запуск; запрос без тела запустил asn и fqdn.
  • Docker Compose (API и демон в разных контейнерах, общий том): запрос принят, сбор выполнен, данные сохранены в /data/ripe.db, оба сервиса healthy; стенд убран.

Замечания

  • Сбор стартует не мгновенно, а в пределах 5 секунд (интервал опроса демона).
  • Любой владелец токена может запускать сбор без ограничения частоты; повторные запросы во время идущего сбора пропускаются, но защиты от частых запросов к RIPE нет.
  • Ручной сбор не сбрасывает и не сдвигает расписание.
  • POST /collect не ждёт результата: итог виден в /health (last_error показывает только исключение сбора, но не сбои отдельных источников - это остаётся в списке улучшений).