«По душе» · ingestion · продуктовый отчёт

Ночная волна сбора — 27 августа

Полная cron-волна по 25 площадкам, запущенная под живым наблюдением на сервере разработки: что привезли, сколько это стоило по времени и запросам, что из собранного готово к ленте, какие проблемы всплыли и что с ними сделано.

64 287событий в каталоге · было 2 287 (×28)
39 531полностью готовы к ленте · 97% от экспортируемых
73 869записей за волну · 95 110 запросов
25 / 25площадок отработало · 19 привезли данные
2бага найдено и починено по ходу волны

Волна шла с 09:23 до 13:26 UTC (~4 часа, включая 8-минутный разрыв на рестарт сеанса наблюдения); режим — ночной, полный (--refresh-all): детали качались даже у неизменившихся анонсов, попутно каталог запомнил отпечатки для дневной экономии.

01Второй проход действительно быстрее — с одной оговоркой

После волны тем же вечером прогнан контрольный пропускающий проход (как дневная волна: деталь не качается, если анонс не менялся) по четырём площадкам. Три ускорились в 3–5 раз; nethouse — нет, и это не поломка: его список не показывает дат, а правило безопасности «пропускать только датированные анонсы» главнее скорости.

полный проходпропускающий
afisha
121 м
38 м · ×3,2
nethouse
85 м
83 м · ×1,0
bileter
18 м
3,9 м · ×4,7
radario
9,7 м
1,8 м · ×5,4
Что именно сэкономлено
ПлощадкаПолныйПропускДеталей пропущеноСкачано зановоЗапросы: было → стало
afisha120м51с38м07с8 0192 50211 033 → 3 064 (−72%)
nethouse84м30с82м38с8395 60616 260 → 15 441 (−5%)
bileter18м09с3м52с2 4262402 971 → ~530 (−82%)
radario9м41с1м47с2 01752 146 → 115 (−95%)

Совпадение отпечатков — 100% там, где им положено совпадать (radario 2021/2021). Механизм внедрён на 17 площадках из 25; крупнейший неохваченный кандидат — timepad (деталь через браузер ~2,5 с, следующий шаг).

02Все 25 площадок: время, статус, привоз

Полная волна, режим ночной (--city all --full --refresh-all)
ПлощадкаВремяСтатусЗаписейЗапросовКомментарий
kassir75м51суспех14 06512 685крупнейший привоз волны
gorodzovet80м59суспех12 02913 496обход календаря по дням
yandex_afisha52м01счастично10 80512 2726 ошибок деталей — баг №2, починен
mtslive95м11суспех10 11211 819самый долгий в волне
afisha120м51счастично9 65311 033анти-бот пройден лестницей httpx→curl
russpass23м20счастично4 0686 66211 мелких ошибок деталей
bileter18м09суспех2 6622 971
nethouse84м30суспех2 05016 260два хоста, тяжёлые формы
radario9м41суспех2 0352 146
ticketland30м36суспех1 9022 107
kudago1м43суспех1 56624эталон экономности: 65 событий на запрос
leader_id12м39счастично9041 85255 городов; одна страница отдала 422
timepad17м15счастично765815обложки 763/765; в 3 городах из 8 не прочитались категории
dobro1м45суспех51574после фикса бага №1; без обложек до обновления ключа
all_events2м26суспех45693
intickets1м41суспех144316
hse1м33суспех581114 кампуса
venue_cals0м31суспех32823 сайта параллельно — первый прогон после фиксов
qtickets0м12суспех2730
habr_events0м11суспех1528
ithrhub0м05счастично674 карточки-брака отсеяны нормализацией
vk1м14скрасный0207токен привязан к IP прод-машины — среда
data_mos34м06скрасный011apidata.mos.ru не отвечает с этого сервера
opendata_mkrf3м16скрасный06хост недоступен отсюда (и повтор тоже)
mosafisha9м03скрасный03bilet.mos.ru не отвечает — известное ограничение

Все четыре красных — ограничения сервера разработки (недоступность инфраструктуры mos.ru/mkrf, привязка ключа ВК к IP), не дефекты кода: с прод-машины оператора эти же площадки собираются.

03Готовность собранного к ленте

Проверено не приближением, а настоящей проекцией экспорта — той же функцией, которая отдаёт карточки стенду, со всеми её правилами (обязательная ссылка на источник, обложка, интересы, место, окно 45 дней).

40 675карточек проходят экспорт (окно 45 дней)
97,2%из них полностью готовы к ленте
1 144не готовы: 601 без интересов · 315 без обложки · 228 без места

Крупнейшие поставщики готовых карточек: gorodzovet 9 250, mtslive 7 010, kassir 6 309, yandex_afisha 5 175, afisha 4 808. Требование «обложка обязательна» работает как задумано: например, 515 событий Добра, собранных без ключа картинок, честно ждут в каталоге и в ленту не идут — обложки доберутся штатным скриптом после обновления ключа.

04Обслуживание после сбора — весь конвейер прошёл

05Что сломалось и что с этим сделали

Баг №1 · Добро.рф лежал целиком из-за необязательного ключа

Протухший JWT (нужен только для картинок) прикладывался к каждому запросу, и площадка отвечала 401 даже на публичные пути. Починено в ходе волны: мёртвый токен больше не прикладывается, в статистике появился честный флаг bearer_expired. Повторный прогон: успех, +515 событий. Добавлены 4 юнит-теста.

Баг №2 · Яндекс Афиша теряла детали на ретрае

NameError: interruptible_sleep — при переезде пауз на общие ворота хоста имя выпало из импорта, а ветка ретрая его зовёт. Ошибка жила только в живом ретрае и стоила деталей, не прогона. Починено + AST-сторож на весь класс таких обрывов по всем 22 модулям коллекторов.

Среда сервера разработки (4 красных)

Инфраструктура mos.ru (data_mos, mosafisha) и opendata.mkrf.ru отсюда не отвечают вовсе; пользовательский ключ ВК привязан к IP прод-машины. Код исправен — с машины оператора эти источники собираются.

Наблюдения качества

Timepad: в 3 городах из 8 не прочитались разделы категорий (события собраны, но размечены слабее — интересы добираются фолбэком по тексту). Nethouse: экономия пропуска структурно ограничена — список площадки не несёт дат. Leader-ID: одна страница отдала 422, сбор честно доехал остальное.

Проверено заодно

Первый боевой прогон всех фиксов вчерашнего ревью: параллельный обход трёх календарей площадок, проводка ночного режима, счётчики цены прогона (запросы/ожидание) во всех статистиках, журнал склеек, корректный якорь админки в тревоге.

06Что сделать дальше