stability and vps runtime updates

This commit is contained in:
qananasikq
2026-04-23 20:07:12 +03:00
parent 6aba4f0dbd
commit 86ade31f54
13 changed files with 509 additions and 82 deletions

View File

@@ -124,10 +124,22 @@ docker compose ps
- `worker` имеет healthcheck через `celery inspect ping`
- `beat` имеет healthcheck по файлу `celerybeat-schedule`
### Автовосстановление worker/beat на VPS
Чтобы `worker` и `beat` поднимались автоматически после падения, в проект добавлен `ensure_services.sh`.
Скрипты `deploy_vps.sh` и `setup_vps.sh` устанавливают systemd-таймер `iaai-selfheal.timer`,
который выполняет проверку каждую минуту и при необходимости делает `docker compose up -d worker beat`.
Проверка статуса на VPS:
```bash
systemctl status iaai-selfheal.timer
docker compose ps
```
## API
**Статистика:**
**Здоровье и статистика:**
- `GET /health` — статус сервиса и подключения к БД
- `GET /api/v1/stats` — сколько машин и картинок в базе, топ брендов
@@ -243,6 +255,11 @@ pytest -q
## `pyproject.toml` + `uv.lock`
Проект переведён на современную схему зависимостей:
- `pyproject.toml` — декларация зависимостей и метаданных проекта
- `uv.lock` — зафиксированные версии для воспроизводимых установок
Локально можно использовать:
```bash
@@ -250,6 +267,40 @@ uv sync
uv run pytest -q
```
### Soak / resilience (24h / 72h)
Для длительного мониторинга отказоустойчивости и проверки recovery на пустых страницах:
```bash
python scripts/soak_resilience_check.py --duration-hours 24 --poll-seconds 120 --inject-empty-page-tests --report-file artifacts/json/soak_24h.json
python scripts/soak_resilience_check.py --duration-hours 72 --poll-seconds 180 --inject-empty-page-tests --report-file artifacts/json/soak_72h.json
```
Удобный контроллер для Docker-воркеров (старт/статус/стоп 24h+72h):
```bash
python scripts/soak_control.py start
python scripts/soak_control.py status
python scripts/soak_control.py stop
```
`status` показывает:
- жив ли процесс `soak_resilience_check.py`
- куда пишется лог (`soak_24h.log` / `soak_72h.log`)
- есть ли промежуточный/финальный JSON-отчёт (`soak_24h.json` / `soak_72h.json`)
Скрипт:
- периодически проверяет `/health` и `/api/v1/sync-runs`
- фиксирует признаки стагнации прогресса
- периодически отправляет synthetic-запрос `sync-listing` с несуществующим `make`
(эмуляция пустых страниц и проверка, что пайплайн не умирает)
- сохраняет итоговый JSON-отчёт в `artifacts/json/`
## Runtime-фильтры
Файл `runtime_config.json` управляет runtime-поведением sync и фильтрацией автомобилей.
### Секция `sync`
Поддерживаются поля: