Ожидаемые исходы скрапинга перестают быть ошибками #3488

Merged
lekss361 merged 3 commits from fix/3471-scraper-log-levels into main 2026-09-12 11:48:45 +00:00
Owner

Зачем

Скраперы пишут 3006 строк уровня error в сутки, и почти весь объём — это штатные исходы: пул прокси пуст, площадка подтверждённо забанила. От такого потока алерты перестают читать, и настоящая ошибка тонет.

Что сделано

12 мест в 9 файлах переведены с error на warning. Переводились только подтверждённо ожидаемые исходы: пустой пул и серия блоков, опознанных по HTTP-статусу площадки.

Файлы: avito_detail_backfill.py, domclick_detail_backfill.py, yandex_detail_backfill.py, yandex_newbuilding_sweep.py, cian_history_backfill.py, cian_session.py, cian_price_history.py, yandex_address_backfill.py, proxy_egress.py.

Что намеренно осталось error

  • Cookie-алерты Cian (#2658) и DomClick (#2674) — в докстрингах прямо написано «logger.error, НЕ warning»: при event_level=ERROR понижение убьёт сигнал, который уже терялся 37 дней.
  • ABORT по мягким сбоям без единого подтверждённого блока (#3272, #2674, #3196) — авторы сознательно не стали отличать это от нашего бага.
  • Изменение разметки Cian, протухший токен ASocks, house_imv_backfill — настоящие неожиданности.

Правка sentry_scrub.py не нужна: LoggingIntegration поднимает в GlitchTip только error, понижение уровня само убирает записи из потока событий.

Test plan

  • ruff check по всем девяти файлам — чисто
  • существующие тесты этих путей не проверяют уровень логов (caplog в них не встречается), регресса не ожидается
  • после деплоя: сверить суточный объём error у скраперов в Loki

Refs #3471

🤖 Generated with Claude Code

https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG

## Зачем Скраперы пишут 3006 строк уровня `error` в сутки, и почти весь объём — это штатные исходы: пул прокси пуст, площадка подтверждённо забанила. От такого потока алерты перестают читать, и настоящая ошибка тонет. ## Что сделано 12 мест в 9 файлах переведены с `error` на `warning`. Переводились только подтверждённо ожидаемые исходы: пустой пул и серия блоков, опознанных по HTTP-статусу площадки. Файлы: `avito_detail_backfill.py`, `domclick_detail_backfill.py`, `yandex_detail_backfill.py`, `yandex_newbuilding_sweep.py`, `cian_history_backfill.py`, `cian_session.py`, `cian_price_history.py`, `yandex_address_backfill.py`, `proxy_egress.py`. ## Что намеренно осталось error - Cookie-алерты Cian (#2658) и DomClick (#2674) — в докстрингах прямо написано «logger.error, НЕ warning»: при `event_level=ERROR` понижение убьёт сигнал, который уже терялся 37 дней. - ABORT по мягким сбоям без единого подтверждённого блока (#3272, #2674, #3196) — авторы сознательно не стали отличать это от нашего бага. - Изменение разметки Cian, протухший токен ASocks, `house_imv_backfill` — настоящие неожиданности. Правка `sentry_scrub.py` не нужна: `LoggingIntegration` поднимает в GlitchTip только `error`, понижение уровня само убирает записи из потока событий. ## Test plan - [x] `ruff check` по всем девяти файлам — чисто - [x] существующие тесты этих путей не проверяют уровень логов (`caplog` в них не встречается), регресса не ожидается - [ ] после деплоя: сверить суточный объём `error` у скраперов в Loki Refs #3471 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
lekss361 added 1 commit 2026-09-12 11:20:50 +00:00
fix(scrapers): ожидаемые исходы сбора (бан, пустой пул, капча) больше не error
Some checks failed
CI Trade-In / changes (pull_request) Successful in 14s
CI / changes (pull_request) Successful in 18s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Failing after 6m17s
ac5b044f7e
Скрапер один давал 3006 error-строк в сутки из ~3700 по всему Trade-In —
ленту перестали читать, и настоящая поломка терялась в ней.

Принцип: ожидаемый исход сбора (площадка забанила, пул прокси пуст,
капча/недогруз, серия блоков перевалила порог circuit breaker) — это
состояние работы против недружелюбного источника, а не инцидент. В error
остаётся только неожиданное: изменившаяся вёрстка/схема (Cian markup
change), просроченный токен ротации прокси (ASocks 401), неразобранное
исключение.

Переведено error -> warning в 9 файлах, 12 мест: "СТОП — пул прокси пуст"
(avito/domclick/cian_history/yandex_newbuilding_sweep x2), "пул прокси
исчерпан" (cian_session, cian_price_history, yandex_address_backfill),
FAIL-CLOSED без здорового узла для source (proxy_egress), ABORT по счётчику
подтверждённых блоков площадки (avito, domclick, yandex_detail_backfill).

Оставлено error намеренно: cookie-алерты Cian/DomClick (#2658, #2674) —
они рассчитаны именно на LoggingIntegration(event_level=ERROR) в
scheduler_main.py и без него молчат по 37 дней; ABORT по смешанным/soft
причинам без единого подтверждённого блока площадки (#3272, #2674/#3196) —
это может быть наш баг, а не бан, сигнал сознательно не приглушали.

GlitchTip: сентри-интеграция скрапера уже настроена как
LoggingIntegration(level=INFO, event_level=ERROR) в scheduler_main.py —
отдельной правки sentry_scrub.py не требуется, понижение уровня logger
само убирает эти записи из GlitchTip.

Итоговая FINISHED-строка со счётчиками (attempted/enriched/blocked/failed)
уже существует в каждом detail_backfill — новую не добавлял.

Refs #3471
bot-backend added 2 commits 2026-09-12 11:40:06 +00:00
test(scrapers): поднять caplog-фильтры под error->warning штатных исходов
All checks were successful
CI Trade-In / backend-tests (pull_request) Successful in 8m2s
CI Trade-In / changes (pull_request) Successful in 10s
CI / changes (pull_request) Successful in 12s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
6608fd5c70
Ветка fix/3471-scraper-log-levels понизила error на warning для штатных
исходов скрапинга (пустой/исчерпанный пул прокси, серия подтверждённых
блоков площадки) -- 7 тестов фильтровали caplog по ERROR и падали на
пустом списке. Поправлен только уровень фильтра/set_level, содержательные
assert'ы (streak vs ratio, отсутствие qrator/ip_rate_limited литералов,
различимость текстов "исчерпан" и "пуст") не менялись.

В test_exhausted_and_empty_pool_log_texts_are_distinct оба сценария
(пустой пул и fail-closed) теперь на одном уровне (warning) -- тест
адаптирован проверять различимость по тексту, а не по уровню.

Refs #3471

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
lekss361 merged commit 994eb79323 into main 2026-09-12 11:48:45 +00:00
lekss361 deleted branch fix/3471-scraper-log-levels 2026-09-12 11:48:46 +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#3488
No description provided.