feat(workers): data-freshness monitor (Celery beat → GlitchTip) #1904

Merged
bot-backend merged 2 commits from feat/freshness-monitor into main 2026-06-25 11:29:35 +00:00
Collaborator

Rank-7 follow-up: автоматический мониторинг свежести данных с алертом в GlitchTip.

Что

Логика свежести уже была в GET /admin/scrape/freshness (admin_scrape.py, реестр _FRESHNESS_SOURCES + _classify_freshness). Не хватало периодической проверки.

  • Вынес compute_freshness(db) из FastAPI-хендлера (единый источник правды; ответ эндпоинта байт-в-байт не изменился — 4 существующих теста зелёные).
  • Новый Celery-таск scrape_freshness_check: SessionLocal()compute_freshness → при stale/failed источниках sentry_sdk.capture_message(level=...). level=error если критичный источник полностью упал, иначе warning. Дополнительно логирует в той же severity (no-DSN воркер всё равно surface'ит). Graceful: любая ошибка → лог + return, beat не падает.
  • Зарегистрирован в celery_app.include + beat_scheduleежедневно 09:00 MSK (после ночного кластера скраперов 03:00-07:00).

Тесты

test_scrape_freshness_check.py (5: stale+failed→warning, critical-failed→error, all-ok→no-alert, compute раняет→graceful, хендлер делегирует) + 4 существующих endpoint-теста. 9 passed, ruff clean. Без API-schema изменений → codegen не нужен.

Closes #73 (follow-up — beat-часть)

Rank-7 follow-up: автоматический мониторинг свежести данных с алертом в GlitchTip. ## Что Логика свежести уже была в `GET /admin/scrape/freshness` (`admin_scrape.py`, реестр `_FRESHNESS_SOURCES` + `_classify_freshness`). Не хватало периодической проверки. - Вынес `compute_freshness(db)` из FastAPI-хендлера (единый источник правды; **ответ эндпоинта байт-в-байт не изменился** — 4 существующих теста зелёные). - Новый Celery-таск `scrape_freshness_check`: `SessionLocal()` → `compute_freshness` → при stale/failed источниках `sentry_sdk.capture_message(level=...)`. `level=error` если **критичный** источник полностью упал, иначе `warning`. Дополнительно логирует в той же severity (no-DSN воркер всё равно surface'ит). Graceful: любая ошибка → лог + return, beat не падает. - Зарегистрирован в `celery_app.include` + `beat_schedule` — **ежедневно 09:00 MSK** (после ночного кластера скраперов 03:00-07:00). ## Тесты `test_scrape_freshness_check.py` (5: stale+failed→warning, critical-failed→error, all-ok→no-alert, compute раняет→graceful, хендлер делегирует) + 4 существующих endpoint-теста. **9 passed**, ruff clean. Без API-schema изменений → codegen не нужен. Closes #73 (follow-up — beat-часть)
bot-backend added 1 commit 2026-06-25 11:02:34 +00:00
feat(workers): Celery-beat data-freshness monitor with GlitchTip alerts
Some checks failed
CI / backend-tests (pull_request) Successful in 11m11s
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Failing after 2m3s
6d6abf30b1
Extract compute_freshness(db) from the /admin/scrape/freshness handler (single
source of truth, endpoint response unchanged) and add a daily beat task
scrape_freshness_check that alerts via sentry_sdk.capture_message when a source
is stale/failed — level=error if a critical source fully failed, else warning;
also logs at matching severity so a no-DSN worker still surfaces it. Registered
in celery include + beat (09:00 MSK daily, after the nightly scraper cluster).

Closes #freshness-monitor (rank 7 follow-up)
Light1YT added 1 commit 2026-06-25 11:17:28 +00:00
chore(codegen): regen api-types after /freshness handler refactor
All checks were successful
CI / frontend-tests (pull_request) Successful in 1m10s
CI / openapi-codegen-check (pull_request) Successful in 2m10s
CI / changes (pull_request) Successful in 8s
CI / backend-tests (pull_request) Successful in 11m25s
f59d874bac
The endpoint docstring (→ openapi description → api-types JSDoc) changed when
scrape_freshness was split into compute_freshness + thin handler, so the
committed api-types.ts was stale and openapi-codegen-check failed. Regenerated
via the CI chain (only JSDoc lines differ; no shape change). Refs #73
bot-backend merged commit 55811ff7cc into main 2026-06-25 11:29:35 +00:00
bot-backend deleted branch feat/freshness-monitor 2026-06-25 11:29:35 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1904
No description provided.