Перейти к основному содержимому

GWPTD Marketplace Collector — автономный S3 Next

Единственный активный движок этой ветки — универсальный spec-runtime. Каждый источник описан ProductSpec в ../specs/products/; endpoint-specific Python коллекторов и fallback на старый dispatcher в Next нет.

Поток

ProductSpec + auth/transport/plugin
→ next_collector.py
→ collection_run + raw_payload + typed gwptd_intake table
→ kernel/etl/build_all.py (15 шагов)
→ gwptd_kernel facts/dimensions
→ Data API → /new

Это всё ещё действующий совмещённый поток. Рядом подготовлен, но пока не развёрнут независимый контур:

next_raw_collector.py / capture_source_profile.py
→ immutable gwptd_raw
parse_pending_captures.py → next_parser.py / next_source_parser.py
→ immutable gwptd_stage generation
activate_parse_generation.py
→ accepted generation → будущий canonical publisher

Его точные границы, S20/current/future 1C profiles, права и rollout gates: docs/architecture/INDEPENDENT-SOURCE-PIPELINE.md.

Канонический S3 root: /opt/gwptd-analytics/repo. MySQL, PostgreSQL, MinIO, collector, ETL, Data API и frontend находятся на S3; S2 не входит в write или deploy path Next. Отдельный comparator читает с S2 только закрытые агрегаты и пишет результат локально на S3.

Структура active runtime

  • next_collector.py — единственный CLI entrypoint;
  • spec_runtime/next_registry.py — exact active ProductSpec allowlist;
  • spec_runtime/runner.py, fetch_plugins.py, parse_plugins.py — общий transport/pagination/extraction runtime;
  • mapper/ — declarative mapper и только необходимые shared transforms;
  • intake/ — CollectionRun/raw/error envelope;
  • kernel/etl/ — штатные 15 шагов расчёта;
  • monitoring/ — freshness, reconciliation, invariants и Canon↔Next compare;
  • archive/maintenance/ — изолированные разовые backfill, не active runtime;
  • scripts/crontab.s3-next.txt — каноническое расписание S3.

Параллельный, пока не активный source pipeline:

  • next_raw_collector.py — ProductSpec raw-only acquisition;
  • spec_runtime/runner.py — parser-free acquisition runtime;
  • spec_runtime/parsed_runner.py — лениво загружаемый старый combined parser/intake writer, отсутствующий в raw process;
  • capture_source_profile.py — S20/1C raw-only acquisition;
  • next_parser.py, next_source_parser.py — отдельные parser generations;
  • parse_pending_captures.py — независимый drain накопившегося сырья;
  • activate_parse_generation.py — отдельный control-plane switch;
  • source_pipeline/ и specs/sources/ — parser contracts без секретов;
  • specs/acquisition/products/ и specs/acquisition/sources/ — отдельные parser-free acquisition contracts, проверяемые генераторами;
  • scripts/run_source_pipeline.sh — разные DB identities на одной безопасной operational оболочке;
  • scripts/crontab.s3-source-pipeline.example.txtне действующий cron.

Проверка на S3

Не запускайте Python напрямую для live-сбора: wrapper загружает root-owned секреты, фиксирует локальную S3 DB и включает fail-closed contract. Штатные run_collector.sh и run_kernel_etl.sh запускает только root crontab из scripts/crontab.s3-next.txt. Ручной collector или build_all в день естественной P1B-проверки запрещён: он делает доказательство цикла неприемлемым.

cd /opt/gwptd-analytics/repo

# декларативный реестр без обращения к API
marketplace-collector-v3/venv/bin/python3 \
marketplace-collector-v3/next_collector.py --list

# read-only проверка завершённого естественного P1B-цикла
cd marketplace-collector-v3
PYTHONDONTWRITEBYTECODE=1 ./venv/bin/python3 -B -m monitoring.p1b3_natural_cycle \
--slot-date YYYY-MM-DD

Одноточечный тестовый полигон допускается только в явно согласованное окно и не заменяет штатный cron, receipt или естественный P1B-цикл. Перед ним нужны проверка host process, DB lease и последнего collection_run: дубль того же marketplace запрещён. Для обычной эксплуатации использовать S3-NEXT-AUTONOMOUS-RUNBOOK.md и P1B runbook.

Секреты

Operational store: /etc/gwptd/secrets/runtime.env, root:root, mode 0600. Секреты не передаются в аргументах процесса, Git и документации. Полный список обязательных имён проверяет scripts/deploy/deploy-s3-next.sh; значения он не печатает.

Тесты

PYTHONPATH=marketplace-collector-v3 python -m pytest \
marketplace-collector-v3/tests -q
python scripts/architecture/measure_next_change_surface.py --check
python scripts/architecture/check_s3_next_frontend_cleanroom.py

81 ProductSpec имеют exact golden parity. Maintenance запускается только через archive/maintenance/run.sh с GWPTD_MAINTENANCE_CONFIRM=YES и не включён в cron либо основной collector image.

Эксплуатационная топология, deploy и rollback: docs/remediation/S3-NEXT-AUTONOMOUS-RUNBOOK.md.