fix(tradein): persist scrape_runs.total_seen/new_count from sweep counters (#1926) #1928

Merged
bot-backend merged 1 commit from fix/1926-scrape-total-seen into main 2026-06-26 18:09:18 +00:00
Collaborator

Root (audit #1871/#1926): city-sweep counters (yandex/avito/cian/domclick/newbuilding) писали lots_fetched/lots_inserted только в scrape_runs.counters jsonb; колонки total_seen/new_count (схема 015) не выставлялись → observability показывала total_seen=0 при реально сохранённых строках («observability врёт»).

Fix (Option A — одно место, все источники): helper _column_counts() в scrape_runs.py мапит lots_fetchedtotal_seen, lots_insertednew_count (явные ключи приоритетнее). update_heartbeat/mark_done/mark_failed/mark_banned SET-ят обе колонки через COALESCE(CAST(:x AS int), col) (psycopg v3) — отсутствие ключа сохраняет старое значение. Покрывает yandex+avito+cian (+domclick/newbuilding), т.к. все пайплайны идут через эти финализаторы. Без миграции (колонки уже есть).

Tests: +6 в test_city_sweep.py; полный сьют 2419 passed, 0 failed (с 2 known-flaky deselect). ruff clean.

Refs #1926, #1871

**Root (audit #1871/#1926):** city-sweep counters (yandex/avito/cian/domclick/newbuilding) писали `lots_fetched`/`lots_inserted` только в `scrape_runs.counters` jsonb; колонки `total_seen`/`new_count` (схема 015) не выставлялись → observability показывала `total_seen=0` при реально сохранённых строках («observability врёт»). **Fix (Option A — одно место, все источники):** helper `_column_counts()` в `scrape_runs.py` мапит `lots_fetched`→`total_seen`, `lots_inserted`→`new_count` (явные ключи приоритетнее). `update_heartbeat`/`mark_done`/`mark_failed`/`mark_banned` SET-ят обе колонки через `COALESCE(CAST(:x AS int), col)` (psycopg v3) — отсутствие ключа сохраняет старое значение. Покрывает yandex+avito+cian (+domclick/newbuilding), т.к. все пайплайны идут через эти финализаторы. Без миграции (колонки уже есть). **Tests:** +6 в `test_city_sweep.py`; **полный сьют 2419 passed, 0 failed** (с 2 known-flaky deselect). ruff clean. Refs #1926, #1871
bot-backend added 1 commit 2026-06-26 18:05:12 +00:00
fix(tradein): persist scrape_runs.total_seen/new_count columns from sweep counters (#1926)
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
f87b6ada4c
Root: city-sweep counters (yandex/avito/cian/domclick/newbuilding) wrote
lots_fetched/lots_inserted only into scrape_runs.counters jsonb; the dedicated
columns total_seen/new_count (schema 015) were never SET, so admin/observability
reported total_seen=0 despite real rows saved (audit #1871/#1926).

Fix (Option A): single-place extraction in scrape_runs.py via _column_counts()
maps counters lots_fetched->total_seen and lots_inserted->new_count (with
explicit total_seen/new_count keys taking priority). update_heartbeat, mark_done,
mark_failed and mark_banned now SET both columns with COALESCE(CAST(:x AS int),
col) so a missing key preserves the existing value. Covers all sweep sources at
once since every pipeline routes counters through these finalizers.
bot-backend merged commit 89d05bbfec into main 2026-06-26 18:09:18 +00:00
bot-backend deleted branch fix/1926-scrape-total-seen 2026-06-26 18:09:18 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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#1928
No description provided.