chore(tradein): удалить мёртвые mobileproxy env-переменные и rotate-ip (#2616 шаги 2-3) #2650
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2650
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "chore/tradein-remove-dead-proxy-vars"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
#2616 шаги 2 и 3 (шаг 1 fail-closed сделан вчера — #2634 + дожим). Порядок из issue соблюдён строго: чистить переменные можно было только после fail-closed, иначе пустая переменная означала бы прямое подключение с IP сервера (засветить перед Авито/Цианом).
Шаг 2 — удалены 9 мёртвых mobileproxy-переменных (
AVITO/CIAN/YANDEX_PROXY_URL,BROWSER_PROXY_*,*_PROXY_ROTATE_URL; все на закрытых аккаунтах — 407/connection refused, #2613): поля config, чтения вbrowser/server.py::_provider_proxy, ProtocolScraperConfig,RealScraperConfig.SCRAPER_PROXY_URL(ASocks) — единственный источник egress для всех провайдеров.Каскад: changeip-ротация mobileproxy мертва вместе с подпиской →
_rotate_proxy_ip/_rotate_ipзастаблены. Ревью проследило: поведение идентично — мёртвый URL и так возвращал False после впустую потраченного round-trip;max_rot 4→0даёт тот же исход (никогда не проходил дальше), бюджет ban-rotation считался одинаково и раньше. Убрана только потерянная сетевая задержка.Шаг 3 — удалена мёртвая ручка
POST /scraper/{source}/rotate-ip+ её кнопки во фронте (dead-branch удалён, не оставлен unreachable). Живая ASocks-ротацияPOST /admin/proxies/{id}/rotate(#2611) и fail-closed guard — zero behavior diff (проверено ревью).Побочный фикс, найденный ревью: cian curl-путь брал
config.cian_proxy_url=CIAN_PROXY_URL(мёртвый) вместо живогоSCRAPER_PROXY_URL— теперь passthrough на живой узел.По egress-изоляции: per-provider узлы были фикцией (мёртвые креды;
BROWSER_PROXY_AVITO— задокументированный корень «52/53 забаненных прогонов за 14 дней»). Кодификация «один живой узел на всех» отражает реальность (#2638), а не вводит новую single-point-of-failure.Test plan
tsc --noEmit+ lint фронта чисто; ноль dangling-ссылок на rotate-ip/scraper/healthрендерится без кнопок ротации/opt/gendesign/tradein-mvp/backend/.env.runtime(безопасно из-заextra="ignore")Review
deep-code-reviewer: ✅ APPROVE, ноль критичных/high/medium. Проверено по существу: fail-closed цел (
providers/_proxy.pyzero-diff), все 8 call-sites ban-rotation прослежены (нет бесконечных циклов, бюджет исчерпывается как раньше), ASocks-ротация не тронута, схема/scraper/healthне сломана, pre-existing падения подтверждены запуском на чистом main.Refs #2616