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>
3.1 KiB
3.1 KiB
Итоги: разделение сборщика и API на два процесса
План: docs/plan-process-split.md. Часть B (управление ASN/FQDN через API) не реализована, план: docs/plan-asn-fqdn-api.md.
Сделано
collector_daemon.py(новый): отдельный процесс сBlockingScheduler. Расписание берёт изconfig.json, раз в 30 с сверяет его и перепланирует задания без перезапуска (невалидный cron игнорируется). Пишетstatus.json(состояние заданий и heartbeat). Один экземпляр гарантируется блокировкойcollector.daemon.lock. ПоSIGTERMзавершается штатно после текущего сбора.api_server.py: планировщик,lifespanи состояние заданий удалены.POST /scheduleтолько валидирует cron и пишет конфиг (в ответеapplied_within_seconds).GET /healthчитаетstatus.json:collector_alive(heartbeat моложе 120 с), задания, счётчики; без демонаstatus = degraded.storage.py:try_lock(неблокирующая блокировка для singleton).cidr_collector.py:STATUS_FILE,SYNC_INTERVAL,STATUS_STALE_AFTER.- README: два сервиса (systemd и OpenRC), примечание об обновлении, переписаны «Scheduler Logic» и описание
/health; cron оставлен как альтернатива демону.status.jsonдобавлен в.gitignoreи.dockerignore. - Тесты:
tests/test_daemon.py(2 теста: перепланирование и heartbeat в/health). Всего 11, в контейнере: 11 passed.
Проверка (два реальных процесса на копии данных)
- Сбор идёт демоном без участия API;
/health:ok,collector_alive: true. - Второй запуск демона завершается с ошибкой singleton (exit 1).
POST /schedule(*/1->*/2): демон перепланировал задание через 19 с,/healthпоказал новый cron.- Перезапуск API не повлиял на демон.
SIGTERM: демон остановился штатно.- Через ~130 с после остановки:
status = degraded,collector_alive = false.
Замечания
- Обязательное действие при обновлении: нужно запустить сервис
ripe-collector, одногоripe-apiбольше недостаточно. - Изменение расписания применяется с задержкой до 30 с.
- Демон пишет
status.jsonкаждые 30 с (маленький файл, атомарная запись). - Реальные
data.json,fqdn_data.json,config.jsonне менялись.