Сбор
Замер от: 2026-08-14 · чем проверено: ZAMER-KARTY-BLOKOV-2026-08-14.md (рантайм боевого s3), ZAMER-BAZY-2026-08-14.md (живая база), прогон
python3 marketplace-collector-v3/next_collector.py --list— 82 описания Для кого: кто добавляет площадку, меняет расписание или чинит «сбор не пошёл». Читать до первой правки вmarketplace-collector-v3/.
Что делает
Ходит на API площадок по расписанию и складывает сырые ответы в gwptd_intake.raw_payload: 8 134 349 строк и 14 198 МБ на 14.08. Рядом payload_lineage_receipt — 3 942 697 строк; вместе эти две таблицы занимают 67 % объёма схемы приёма (замер базы). Начинается записями расписания на s3, которые зовут run_collector.sh / run_collector_fleet.sh из отдельной рабочей копии /opt/gwptd-collector/repo; ядро и наблюдение работают из /opt/gwptd-analytics/repo, поэтому выкладка одного дерева не доказывает обновление другого (замер карты). Кончается строками приёма и распиской прогона. Разбор ответа в колонки идёт в том же проходе — это страница РАЗБОР.
Точка входа в код
marketplace-collector-v3/next_collector.py, функция main() — единственная точка входа в бою. next_raw_collector.py и next_parser.py лежат в дереве, но в расписании их нет вовсе: if grep -qE 'next_raw_collector|next_parser' marketplace-collector-v3/scripts/crontab.s3-next.txt; then echo 'найдено'; else echo 0; fi → 0.
Чем задаётся
- Описания
specs/products/*.yaml: 82 ProductSpec, 169 целей приёма, 3225 колонок (замер карты). Предел страницы задаёт сама площадка в своём описании API: операция ссылается через$refнаcomponents.parameters.limit, где и лежитmaximum(сохранённый образец: wb-02-products.yaml). В рабочее описание выбранные параметры пагинации переносятся вtransportкакlimit,limitParam,pageParam,maxPagesиshortPageStop(образец:specs/products/lamoda.orders.yaml). Поэтому общего предела в коде сборщика нет и подставлять одно число всем адресам нельзя (RULES.md, правило 25). - Расписание
marketplace-collector-v3/scripts/crontab.s3-next.txt— 26 записей (замер карты, подтверждено двумя независимыми способами). Основные полосы:run_collector_fleet.sh --lanes wb,ozon,ym,lamodaв 04:00 и 16:00 UTC, 1С в 03:45 и 04:55, кабинет Lamoda в 02:00–02:40. - Секреты —
/etc/gwptd/secrets/runtime.env, принадлежитrootи не хранится в Git (run_collector.sh). - Реестр
spec_runtime/next_registry.py: перед живым запускомassert_exact_promoted_setсверяет набор выложенных описаний с реестром — при расхождении запуск прекращается.
Какие правила обязан соблюдать
- Один живой сбор на ключ: аренда
gwptd_monitoring.collector_lease(marketplace-collector-v3/spec_runtime/lease.py) — занято значит отказ от параллельного запуска. Пустая аренда = «сейчас никто не собирает», а не «механизм мёртв» (замер базы). - До обращения к API должны пройти блокировка рабочей копии на время выкладки, замок области площадки и ограда входных данных. Их устройство — в data-fence.md, причины отказа — в каталоге сторожей.
- Живой запуск обязан идти с
V3_SPEC_FAIL_CLOSED=1, из чистой рабочей копии веткиnext/spec-platformи с доступной БД (next_collector.py, проверки вrun_collector.sh). - Общий канон — DO-NOT-REGRESS.md. Отгрузка неприкосновенна: сбор её не задевает, а правка рядом — отдельное решение владельца (RULES.md, «НЕПРИКОСНОВЕННОЕ»).
Чем проверяется
python3 marketplace-collector-v3/next_collector.py --list— реестр описаний, работает без базы; на 14.08 отдаёт 82 описания (прогнал, вывод в отчёте).python3 -m pytest marketplace-collector-v3/tests/test_s3_next_schedule_registry.py -q— 25 passed, 0 skipped (прогнал 14.08).if grep -qE 'next_raw_collector|next_parser' marketplace-collector-v3/scripts/crontab.s3-next.txt; then echo 'найдено'; else echo 0; fi— 0: раздельная пара не в расписании; команда завершается успешно и при нуле совпадений.
Чего делать нельзя
- Править cron руками: источник расписания —
crontab.s3-next.txt, выкладка сверяет его с живым crontab побайтно. - Снимать ограды и замки или ослаблять закрытый отказ как побочный итог починки: снятие защиты — отдельное изменение с отдельным доказательством (RULES.md, правило 18).
- Обходить
run_collector.shпри живом запуске: без него нет проверки чистоты рабочей копии, замка области и ограды входных данных. - Запускать живой
--all: запрещён самим входом, только--mp/--endpoint(next_collector.py).
Что НЕ установлено
- Кто и когда должен включить учёт слотов
schedule_slot_*: писатель найден, но штатное расписание его не запускает. Включение объявлено отложенным: контракты P3-B и P3-C имеют статусDEPLOYED / DARK / NOT ACTIVATED(строки 3 обоих). Код и оставшаяся граница описаны в СЛУЖЕБНОЕ. - Свежесть данных внутри таблиц и заполненность колонок — не замерено (замер базы, раздел «Чего в этом замере НЕТ»).
Куда за подробностью
- РАЗБОР — что происходит с ответом внутри того же прохода.
- ENDPOINTS-CATALOG.md — порождённый каталог адресов, окон и лимитов.
- Каталог сторожей — сторожа, в том числе отказы сбора.
Служба 1С — адрес и период
Внутренняя служба, ключа в адресе нет (подтверждено владельцем 14.08.2026): «это не ключ, это просто ссылка уникальная, прятать нечего».
POST https://www.gwptd.com/service/df58e51061a24820ac2c51f325c65532/901dbaa9448044ba886d8e00a89e2f7f
{"StartDate": "2026-08-01T00:00:00", "EndDate": "2026-08-31T23:59:59"}
Период любой — служба отдаёт запрошенное окно целиком. Дата обязана быть со
временем: замер 11.08.2026 на окне 01–05.08 дал 1064 записи без времени против
1224 с временем, потеря 13 % — 1С читает 2026-08-05 как полночь и последний
день не отдаёт вовсе.
В описании specs/products/1c.warehouse_movements.yaml окно сейчас три дня.
Расширять безопасно: загрузка идёт INSERT IGNORE по row_content_hash, и
повторный сбор того же периода ничего не задваивает.