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.2 KiB
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/...) и на этом сервере не запускался. Он удалён, создан новый Linuxvenv/. - После первого 503 битый файл уже переименован, поэтому следующие запросы вернут пустой список, пока сборщик не создаст данные заново. История накопления в этом случае теряется; сам битый файл сохранён как
*.corrupt-*. 0.0.0.0в systemd оставлен (потребители удалённые): доступ к порту 8000 нужно ограничить файрволом.- Реальные
data.json/fqdn_data.jsonне изменялись; миграция произойдёт при первом запуске сборщика.