fix(tradein/proxy): отличать ручное выключение узла от авто-выключения (#2610) #2652

Merged
bot-backend merged 1 commit from fix/tradein-proxy-disabled-reason into main 2026-08-05 10:18:03 +00:00

1 commit

Author SHA1 Message Date
bda7fa0950 fix(tradein/proxy): отличать ручное выключение узла от авто-выключения (#2610)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 7s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 2m41s
PR #2609 сделал mark_health(ok=True) безусловно ставящим enabled=true —
это лечило реальный инцидент (авто-выключенный узел больше никогда не
проверялся и не мог вернуться). Побочка: узел, снятый оператором руками,
молча возвращался в строй первой же ipify-пробой. Особенно больно в
главном сценарии — узел выключили из-за бана площадкой, а ipify никого не
банит, значит проба всегда проходит и узел гарантированно воскресает.

Колонка scrape_proxies.disabled_reason (text, NULL = не выключен вручную):
выбран текст, а не булев флаг — #2600 п.1 добавит третью причину («бан
площадкой»), и она ляжет в ту же колонку без новой миграции. Авто-
выключение по consecutive_fails по-прежнему оставляет NULL, поэтому
поведение #2609 сохранено.

Флаг уважают все места записи enabled: mark_health, bulk_upsert_proxies
(второй unconditional-enable, issue его не называл) и patch_proxy —
ручное включение сбрасывает причину безусловно, иначе узел, выключенный
однажды, больше никогда не был бы авто-восстановим. Пропуск воскрешения
логируется (раньше происходило молча). Healthcheck продолжает пробовать
ручно-выключенные (метрики свежие), но счётчик revived считает только
настоящие воскрешения.

Refs #2610
2026-08-05 15:13:49 +05:00