Регулярный сбор по Москве и области (#3541)
All checks were successful
Deploy Trade-In / changes (push) Successful in 14s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 4m13s
Deploy Trade-In / build-backend (push) Successful in 44s
Deploy Trade-In / deploy (push) Successful in 1m16s
Deploy Trade-In / deploy-status (push) Successful in 1s
Deploy Trade-In / perimeter-smoke (push) Successful in 1m41s

This commit is contained in:
lekss361 2026-09-16 19:25:09 +00:00
parent 1c039b358c
commit ad239db034

View file

@ -0,0 +1,77 @@
-- 305_scrape_schedules_seed_msk_city_sweeps.sql
-- Регулярный сбор объявлений по Москве (77) и Московской области (50).
--
-- Apply after: 304_asking_to_sold_ratios_region.sql
--
-- WHY:
-- Корпус 77/50 живёт разовой загрузкой: всё, что есть, собрано 10-12.09.2026.
-- При LISTINGS_FRESH_DAYS = 14 свежих объявлений не останется с 26-27.09, после
-- чего оценка по этим регионам деградирует до релаксированного тира, а
-- asking->sold ratio перестанет переписываться. Регулярного сбора для 77/50 в
-- расписании не было ни одной строки: код якорей, гео-профилей и региональной
-- параметризации слит (#3533), но не включён.
--
-- Слаги "moskva" / "moskovskaya_oblast" уже заведены в CITY_ANCHORS
-- (pipeline.py): 25 якорей сетки 5x5 по Москве и 44 по области (22 городских +
-- 22 кластерных по массе объявлений). Wildcard-хендлеры "*_city_sweep_*"
-- резолвят эти source'ы на те же джобы, что и ЕКБ.
--
-- radius_m задан ЯВНО и равен тому, на котором мерили покрытие сетки: 8000 м по
-- Москве, 10000 м по области (MOSCOW_ANCHOR_RADIUS_M / MOSCOW_OBLAST_ANCHOR_
-- RADIUS_M). Дефолт джобы — 1500 м; оставить его значило бы обрушить покрытие,
-- ради которого якоря и подбирались (замер: 73.8% -> 95.2% массы лотов области).
--
-- newbuilding_only=false у cian — дефолт джобы true, а корпус нужен вторичный.
-- Тот же ключ стоит во всех oblast-строках миграции 179.
--
-- ВКЛЮЧЕНЫ СРАЗУ (enabled=true), в отличие от seed-строк 289/302, где включение
-- оставляли отдельным решением. Причина названа выше: без сбора корпус истекает
-- 26-27.09, а регионы отдаются тестировщикам. Решение принято явно 16.09.2026.
--
-- DomClick (≈23% корпуса обоих регионов) здесь НЕ заводится: у него нет
-- wildcard-хендлера ("domclick_city_sweep_*" отсутствует в _default_kit_handlers),
-- а единственная возможная строка source='domclick_city_sweep' занята
-- Екатеринбургом. Нужна правка кода — отдельной задачей.
--
-- Окна 16-23 UTC выбраны как наименее занятые (по одной строке на час против
-- 5-7 в ночных окнах); прогоны всё равно сериализуются планировщиком, а
-- трёхчасовое окно даёт запас на overrun предшественника.
--
-- Оценка нагрузки на такт: Москва avito 25x3 страниц при 7 с ≈ 9 мин, cian при
-- 5 с ≈ 6 мин, yandex при 9 с ≈ 11 мин; область (44 якоря) ≈ 15 / 11 / 20 мин.
-- Суммарно ≈ 72 мин раз в 3 суток.
--
-- ИДЕМПОТЕНТНОСТЬ: ON CONFLICT (source) DO NOTHING — повторный прогон no-op и не
-- сбрасывает enabled, если строку потом выключили вручную.
BEGIN;
SET LOCAL lock_timeout = '5s';
INSERT INTO scrape_schedules (source, enabled, window_start_hour, window_end_hour, default_params)
VALUES
('avito_city_sweep_moskva', true, 16, 19,
'{"city": "moskva", "region_code": 77, "radius_m": 8000, "pages_per_anchor": 3,
"detail_top_n": 0, "enrich_houses": true, "interval_days": 3,
"request_delay_sec": 7}'::jsonb),
('cian_city_sweep_moskva', true, 17, 20,
'{"city": "moskva", "region_code": 77, "radius_m": 8000, "pages_per_anchor": 3,
"detail_top_n": 10, "enrich_houses": true, "interval_days": 3,
"newbuilding_only": false, "request_delay_sec": 5}'::jsonb),
('yandex_city_sweep_moskva', true, 18, 21,
'{"city": "moskva", "region_code": 77, "radius_m": 8000, "pages_per_anchor": 3,
"interval_days": 3, "request_delay_sec": 9}'::jsonb),
('avito_city_sweep_moskovskaya_oblast', true, 19, 22,
'{"city": "moskovskaya_oblast", "region_code": 50, "radius_m": 10000,
"pages_per_anchor": 3, "detail_top_n": 0, "enrich_houses": true,
"interval_days": 3, "request_delay_sec": 7}'::jsonb),
('cian_city_sweep_moskovskaya_oblast', true, 20, 23,
'{"city": "moskovskaya_oblast", "region_code": 50, "radius_m": 10000,
"pages_per_anchor": 3, "detail_top_n": 10, "enrich_houses": true,
"interval_days": 3, "newbuilding_only": false, "request_delay_sec": 5}'::jsonb),
('yandex_city_sweep_moskovskaya_oblast', true, 21, 23,
'{"city": "moskovskaya_oblast", "region_code": 50, "radius_m": 10000,
"pages_per_anchor": 3, "interval_days": 3, "request_delay_sec": 9}'::jsonb)
ON CONFLICT (source) DO NOTHING;
COMMIT;