gendesign/tradein-mvp/backend/app/api/v1
bot-backend 2e4a82dd46 Упавший прогон финализирует общий runs.mark_crashed: и ручные запуски из админки, и без дубля алерта (#1940)
Ревью PR #3561, две находки.

1. Ручные запуски из админки (avito/cian city sweep, cian_full_load,
   yandex_full_load, yandex_city_sweep) идут мимо scheduler._dispatch: в except
   был только logger.exception, и отказ «пул пуст» до try-финализатора пайплайна
   оставлял строку running до zombie. Логика финализации переехала из
   планировщика в runs.mark_crashed; её зовут планировщик и все пять ручек.

2. Обычный путь пайплайна — mark_failed и raise; планировщик звал mark_failed
   второй раз. UPDATE — no-op, но _alert_on_run_id срабатывал снова с тем же
   стриком, и на вехе лестницы в Sentry уходил дубль (+ WARNING «no-op»).
   mark_crashed сначала читает статус и финализирует только running.

Тесты по значению над двойником строки scrape_runs и боевыми mark_*:
статус banned/infra или failed после планировщика и после каждой из пяти ручек,
одна отправка в Sentry на неудаче пайплайна.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 13:57:34 +05:00
..
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
admin.py Упавший прогон финализирует общий runs.mark_crashed: и ручные запуски из админки, и без дубля алерта (#1940) 2026-09-17 13:57:34 +05:00
audit.py fix(tradein/auth): отказ по насыщению — до выборки из БД и с агрегированным следом (#2715) (#2734) 2026-08-06 14:27:26 +00:00
auth.py feat(metrics): продуктовые счётчики Prometheus для Меры и Птицы + дашборд 2026-09-12 14:22:33 +03:00
brand.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
buildings.py feat(tradein): второй % «за 45 дней» + zhkh-знаменатель slot (146) (#2071) 2026-06-28 17:51:38 +00:00
geocode.py feat(metrics): продуктовые счётчики Prometheus для Меры и Птицы + дашборд 2026-09-12 14:22:33 +03:00
glitchtip.py feat(glitchtip): фоновая ретрай-доставка алерта в Telegram при отказе синхронной попытки 2026-09-12 14:11:01 +03:00
lead.py feat(metrics): продуктовые счётчики Prometheus для Меры и Птицы + дашборд 2026-09-12 14:22:33 +03:00
me.py fix(tradein/auth): убрать устаревшее «Caddy basic_auth required» из 401 (#2573) (#2649) 2026-08-05 08:45:57 +00:00
payments.py fix(payments): обрыв соединения и Init без PaymentURL перестают запирать покупателя 2026-09-06 00:11:35 +05:00
privacy_admin.py Отмена по бюджету больше не оставляет сироту в сессии запроса (#3449) 2026-09-12 13:20:44 +05:00
search.py chore(format): нормализация под ruff 0.15.20 — 161 файл, только формат (#2864) (#3022) 2026-08-21 12:01:52 +00:00
support.py fix(tradein): включаем idempotency-key на фронте, чиним assert-crash и честность докстрингов (#3471) 2026-09-12 15:24:21 +03:00
team.py fix(tradein): резолвить роль из реестра, roles.yaml — только fallback (#3316) 2026-09-02 14:49:27 +05:00
trade_in.py 22 города Московской области в покрытии (#3536) 2026-09-16 16:42:06 +00:00
version.py feat(tradein): версионирование продукта — единый источник, подвал, PDF, /versions (#2824) 2026-08-10 16:00:54 +00:00