Files
ripe-cidr-collector/docs/analysis-2026-09-20.md
T

63 lines
5.0 KiB
Markdown
Raw Normal View History

2026-09-21 07:29:38 +03:00
# Анализ проекта: сделано и осталось (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`