feat(proxy-pool): P4 — browser dynamic pool-proxy (acquire→/fetch→relaunch) + orchestration wiring, ship-dark (#2164) #2219

Merged
lekss361 merged 1 commit from feat/proxy-pool-p4-browser into main 2026-07-02 19:20:30 +00:00
Owner

Закрывает #2164 (Epic #2160, P4). Финальный код-компонент боевой активации. Ship-dark — оба proxy-флага дефолт off + двойной gate за USE_KIT_SCHEDULER. Прод не меняется.

Wiring (активирует P3 curl + P4 browser при флагах)

  • scheduler_main: proxy_provider = RealProxyProvider() if (use_proxy_pool_curl or use_proxy_pool_browser) else None → в SchedulerContext
  • orchestration/scheduler.py: SchedulerContext.proxy_provider + прокинут в 4 sweep-джобы
  • orchestration/pipeline.py: proxy_provider param у avito/cian sweep'ов → в BrowserFetcher(proxy_provider, use_pool=config.use_proxy_pool_browser) + cian_fetch_detail(config, proxy_provider). Parity-фикс: cian_fetch_detail раньше звался без config → шёл direct без прокси; теперь off→env cian_proxy_url (как боевой pipeline), on→пул

Browser /fetch (Q1: scraper передаёт прокси)

  • browser_fetcher.py: use_pool+proxy_provideracquire(source)proxy=lease.url+proxy_kind в тело /fetchmark_health+release в finally. Пустой пул/off → без proxy (env)
  • browser/server.py: /fetch+/fetch-json принимают опц. proxy/proxy_kind; _launched_proxy[provider] кэш → relaunch camoufox только при смене (тот же → no-op); socks5 игнор (camoufox не умеет socks5-auth → env); Lock/pacing/crash-recovery сохранены

Инвариант ship-dark

Флаги off → proxy_provider=None/use_pool=False → env-прокси, /fetch без proxy, релонча нет → прод как есть.

Verify

  • kit browser-pool+contracts 13, scheduler/pipeline parity+curl+cian_city 94, avito/cian/base golden+proxy_pool 65, browser server 59 — зелёные; ruff чисто
  • guard: use_proxy_pool_browser в config-тесте
  • боевые app/services/scrapers/* не тронуты; P4-деплой пересоберёт образ tradein-browser

⚠️ Pre-existing (не P4)

browser/test_server.py::test_pace_provider_disabled_when_zero падает на unmodified main тоже (тест патчит BROWSER_MIN_PAGE_INTERVAL_S, не per-provider dict) — не регрессия P4. Глянуть при CI-прогоне.

Закрывает #2164 (Epic #2160, P4). Финальный код-компонент боевой активации. **Ship-dark** — оба proxy-флага дефолт off + двойной gate за `USE_KIT_SCHEDULER`. Прод не меняется. ## Wiring (активирует P3 curl + P4 browser при флагах) - `scheduler_main`: `proxy_provider = RealProxyProvider() if (use_proxy_pool_curl or use_proxy_pool_browser) else None` → в `SchedulerContext` - `orchestration/scheduler.py`: `SchedulerContext.proxy_provider` + прокинут в 4 sweep-джобы - `orchestration/pipeline.py`: `proxy_provider` param у avito/cian sweep'ов → в `BrowserFetcher(proxy_provider, use_pool=config.use_proxy_pool_browser)` + `cian_fetch_detail(config, proxy_provider)`. **Parity-фикс:** cian_fetch_detail раньше звался без config → шёл direct без прокси; теперь off→env `cian_proxy_url` (как боевой pipeline), on→пул ## Browser /fetch (Q1: scraper передаёт прокси) - `browser_fetcher.py`: `use_pool`+`proxy_provider` → `acquire(source)` → `proxy=lease.url`+`proxy_kind` в тело `/fetch` → `mark_health`+`release` в finally. Пустой пул/off → без proxy (env) - `browser/server.py`: `/fetch`+`/fetch-json` принимают опц. `proxy`/`proxy_kind`; `_launched_proxy[provider]` кэш → relaunch camoufox **только при смене** (тот же → no-op); socks5 игнор (camoufox не умеет socks5-auth → env); Lock/pacing/crash-recovery сохранены ## Инвариант ship-dark Флаги off → `proxy_provider=None`/`use_pool=False` → env-прокси, `/fetch` без proxy, релонча нет → прод как есть. ## Verify - kit browser-pool+contracts 13, scheduler/pipeline parity+curl+cian_city 94, avito/cian/base golden+proxy_pool 65, browser server 59 — зелёные; ruff чисто - guard: `use_proxy_pool_browser` в config-тесте - боевые `app/services/scrapers/*` не тронуты; P4-деплой пересоберёт образ `tradein-browser` ## ⚠️ Pre-existing (не P4) `browser/test_server.py::test_pace_provider_disabled_when_zero` падает на unmodified main тоже (тест патчит `BROWSER_MIN_PAGE_INTERVAL_S`, не per-provider dict) — не регрессия P4. Глянуть при CI-прогоне.
lekss361 added 1 commit 2026-07-02 19:20:22 +00:00
feat(proxy-pool): P4 — browser dynamic pool-proxy (acquire→/fetch→relaunch) + orchestration wiring, ship-dark (#2164)
All checks were successful
CI / changes (pull_request) Successful in 9s
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
15361e6662
lekss361 merged commit ca473a0012 into main 2026-07-02 19:20:30 +00:00
lekss361 deleted branch feat/proxy-pool-p4-browser 2026-07-02 19:20:30 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2219
No description provided.