feat(tradein): secondary_only — параметр расписания, выброшенное считается (#1781) #3008
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#3008
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/1781-secondary-only-param"
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?
Готовит решение по #1781 / #2994, не принимая его: дефолт остаётся прежним, поведение прода не меняется ни на строку.
Что было
Включить новостройки в полный обход можно было только деплоем. Теперь это параметр с тем же дефолтом
True, проброшенный доCianFullLoadRequest— то есть доscrape_schedules.default_params. Включение и откат становятся правкой одной ячейки в БД.Почему это дешевле, чем кажется
Новостройки не пропускаются при запросе. Они скачиваются, разбираются и выбрасываются последним шагом:
Так сделано намеренно: SERP-параметр
object_type=1у Cian ненадёжен (~5 % выдачи), поэтому фильтруют по authoritativelisting_segmentизoffer.newbuilding.id— уже после парсинга.Проверил, что «ноль лишних запросов» — не догадка, а следствие кода: проба бакета берёт
totalOffersиз Redux-состояния SERP, дробление считается какpages_needed = ceil(totalOffers / offers_per_page), иtotalOffersвключает обе категории. Страницы с новостройками уже скачаны — и лимитом страниц, и антибан-бюджетом за них уже заплачено. Выбрасывается только результат разбора.Второе: выброшенное теперь считается
dropped_nbлогировался, но вscrape_runs.countersне попадал. Из-за этого на вопрос «сколько инвентаря выбрасывает полный обход» я не смог ответить задним числом: логи за 17.08 (последнийcian_full_load) уже ротировались —docker logs --since 120hне находит ни одной строки «cian:» ни в одном контейнере.Добавлен
dropped_novostroykiвCianFullLoadCounters— по тому же доводу, что записан рядом уpartial_buckets: «видно только грепом логов, которые теряются при редеплое».Копится в атрибуте инстанса, а не аргументом
on_bucket: у колбэка есть внешние реализации, менять его сигнатуру ради счётчика нельзя. Сброс на каждый прогон — инстанс переиспользуется, иначе второй прогон унаследовал бы число первого.Замер, ради которого это делается
Прод, 21.08.2026 — доля активного инвентаря, которую свип подтверждает своим приходом:
11 993 активные строки cian/novostroyki, медианный возраст 81 сутки, 10 585 старше 30 суток. Именно этот пробел даёт большую часть «26 203 фантомов» из #2994 — и он же не даёт расширить туда деактивацию: при охвате 11.7 % TTL=30 снёс бы ≈88 % инвентаря, ровно механизм #2659.
Как проверено
origin/mainпять тестов красные, и краснота везде по значению, а не по отсутствию символа — ни одногоKeyError. Сообщения перечисляют фактическое состояние:параметра нет в сигнатуре; параметры: ['db', 'run_id', ...],поля нет в запросе; поля: [...].True(без этого контроля правка «сделать параметром» могла бы тихо включить сбор новостроек на проде); фильтр приsecondary_only=Trueна месте и по-прежнему зависит от флага.pytest tradein-mvp/backend— 4644 passed, 23 skipped.Что дальше — решение владельца
Включать ли
secondary_only=falseдляcian_full_load. Первый же прогон с ним даст точное число новых строк, аdropped_novostroykiв counters — цену вопроса и без включения, на ближайшем обычном прогоне.