fix(tradein/yandex): просмотры режутся по разделителю тысяч + Циан молчит о непонятой фразе (#2669) #2773
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2773
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2669-views-total"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Диагноз
Заявленная в #2669 причина (
int()по фразе у Циана) подтвердилась, но уже была починена в PR #2705 (merged 2026-08-06, живёт на проде — свереноinspect.getsourceв контейнереtradein-scraper). Проверка «а даёт ли она строки» вскрыла две вещи, которых в issue не было.1. Яндекс кладёт в БД НЕВЕРНОЕ число (не пустоту)
RE_VIEWSбыл(\d+)\s+просмотр— при том что соседниеRE_PRICE/RE_PPM2в том же файле давно(\d[\d\s]+). Причина известна автору тех строк: блокOfferCardSummary, из которого и читаются просмотры, отдаёт числа с NBSP-разделителем. Дословно из сохранённого ответаtests/fixtures/yandex_offer_3402418396407468801.html:(
\xa0между всеми разрядами). На1 234 просмотрапоиск цеплялся за хвост и писал 234.Косвенное подтверждение с прода на 2026-08-07: из 1620 непустых
views_total_yandex— ровно ноль значений ≥1000, при 2512 таких у avito. Тихо неверное число хуже пустого: оно не отличимо от правды и уже утекло в 1620 строк.2. Циан глотал непонятую фразу молча
_parse_viewsвозвращала(None, None)без единой строки в журнале. Пустая колонка одинаково выглядела и при сломанном разборе, и при молчании площадки — ровно та слепота, из-за которой потеря держалась месяцами (эпик #2674). Теперь непустая, но непонятая строка уходит вlogger.warningвместе с собой (обрезанной до 80 символов). Отсутствие ключа вовсе и штатное «0 просмотров» без хвоста «за сегодня» не шумят.Проверено, а не пересказано
"totalViewsFormattedString":"146 просмотров, 8 за сегодня"— изcian_flat_330982715.html.8\xa0просмотров+3\xa0850\xa0000 ₽— изyandex_offer_3402418396407468801.html.Тесты красные на старом коде
После правки — 57 passed; весь yandex/cian-срез: 452 passed, 1 skipped.
Test plan
452 passedна срезе-k "yandex or cian or views"— RE_VIEWS общий, регрессий нетПрод-верификация: критерий приёмки ДО факта
Яндекс — проверяемо, прогон ежедневный.
yandex_detail_backfillпоследний раз отработал 2026-08-07 01:55, следующий — 2026-08-08 20:39 UTC.Критерий: после первого прогона на новом образе среди строк с
detail_enriched_at > <момент деплоя>появляется хотя бы одноviews_total_yandex >= 1000. Сейчас таких 0 из 1620.Отрицательный результат тоже информативен: если за 3 прогона не появится ни одного ≥1000, гипотеза «у Яндекса есть лоты с 1000+ просмотров» неверна и правка просто безвредна.
Циан — проверить нельзя, и это отдельная поломка.
views_totalостанется пуст у всех 21 951 строк независимо от этого PR:cian_history_backfillskipped с причинойcian_cookies_expired, куки протухли 2026-06-30 (38 дней назад), последний удачный прогон — 2026-06-29. Следующий тик 2026-08-08 04:15 UTC снова дастskipped.Критерий (условный, до перезалива кук): в первом прогоне со статусом
done— доля непустыхviews_totalсреди обработанных в этом прогоне cian-строк ≥ 90%; ожидаемый объём первого прогона — batch_size (50), пул кандидатов 18 682.Уже собранные 1571 detail-строки Циана не перезаполнятся: выборка backfill'а берёт только листинги без
offer_price_history, а у 1569 из них она уже есть.Отдельно: колонку никто не читает
Потребителей
views_totalв коде ноль — только писатели четырёх провайдеров и частичный индекс. «Признак ликвидности» из #2669 пока ничем не пользуется.Предлагаю оставить и чинить (сделано здесь), а не удалять: 18 651 непустая строка уже собрана честно (avito 12 355, domklik 6 296), колонка стоит int + partial index. Но «копим впрок» без потребителя — это состояние со сроком годности: если к следующему пересмотру оценщика ликвидность так и не будет читаться, честнее удалить колонку, чем поддерживать четыре парсера ради
NULL-склада.Refs #2669, #2674