feat(tradein-browser): per-provider page-interval override (#1812 follow-up) #1826

Merged
lekss361 merged 1 commit from feat/browser-per-provider-pacing into main 2026-06-20 08:47:07 +00:00
Owner

Follow-up к #1812: per-provider pacing-интервалы вместо единого глобала.

Проблема

_pace_provider притормаживает перед page.goto одного провайдера на BROWSER_MIN_PAGE_INTERVAL_S (prod=12с, единый для всех). Cian при 12с упирается в rate-cap прокси (~12% fetch-fail на detail-backfill), а avito/yandex при 12с избыточно медленные. Нужен per-provider интервал.

Что сделано (tradein-mvp/browser/server.py)

  • Чистая функция _resolve_min_interval(provider, environ=None) — читает BROWSER_MIN_PAGE_INTERVAL_S_{PROVIDER} (upper-case: _CIAN/_AVITO/_YANDEX/_GENERIC); невалидный/пустой → фолбэк на глобал BROWSER_MIN_PAGE_INTERVAL_S без exception.
  • На module-load → _MIN_PAGE_INTERVAL_BY_PROVIDER: dict[str, float] для 4 провайдеров; _on_startup логирует эффективные значения.
  • _pace_provider берёт per-provider интервал (guard <= 0 сохранён = без пейсинга для конкретного провайдера).
  • Docstring обновлён.
  • Аддитивно: при незаданных per-provider env поведение идентично текущему (глобал). Никакого изменения дефолта.

Тест

tradein-mvp/browser/test_server_pacing.py (6 тестов): override>глобал, фолбэк при отсутствии/невалидном/пустом env, 0=disable, покрытие всех провайдеров. test_server_resource_block.py (11) — без регрессий. ruff clean.

Деплой / env (после мержа)

Код инертен пока per-provider env не заданы. Рекомендуемые значения в прод backend/.env.runtime (там же где BROWSER_MIN_PAGE_INTERVAL_S=12):

BROWSER_MIN_PAGE_INTERVAL_S_CIAN=18
BROWSER_MIN_PAGE_INTERVAL_S_AVITO=8
BROWSER_MIN_PAGE_INTERVAL_S_YANDEX=8

(generic фолбэк на глобал 12). Затем recreate browser (env подхватывается при recreate): docker compose -p gendesign-tradein -f docker-compose.prod.yml up -d --force-recreate --no-deps browser. Тюнится без пересборки образа — только edit .env.runtime + recreate.

Cross-ref #1812, #1793, #883.

Follow-up к #1812: per-provider pacing-интервалы вместо единого глобала. ## Проблема `_pace_provider` притормаживает перед `page.goto` одного провайдера на `BROWSER_MIN_PAGE_INTERVAL_S` (prod=12с, единый для всех). Cian при 12с упирается в rate-cap прокси (~12% fetch-fail на detail-backfill), а avito/yandex при 12с избыточно медленные. Нужен per-provider интервал. ## Что сделано (`tradein-mvp/browser/server.py`) - Чистая функция `_resolve_min_interval(provider, environ=None)` — читает `BROWSER_MIN_PAGE_INTERVAL_S_{PROVIDER}` (upper-case: `_CIAN`/`_AVITO`/`_YANDEX`/`_GENERIC`); невалидный/пустой → фолбэк на глобал `BROWSER_MIN_PAGE_INTERVAL_S` без exception. - На module-load → `_MIN_PAGE_INTERVAL_BY_PROVIDER: dict[str, float]` для 4 провайдеров; `_on_startup` логирует эффективные значения. - `_pace_provider` берёт per-provider интервал (guard `<= 0` сохранён = без пейсинга для конкретного провайдера). - Docstring обновлён. - **Аддитивно**: при незаданных per-provider env поведение идентично текущему (глобал). Никакого изменения дефолта. ## Тест `tradein-mvp/browser/test_server_pacing.py` (6 тестов): override>глобал, фолбэк при отсутствии/невалидном/пустом env, `0`=disable, покрытие всех провайдеров. `test_server_resource_block.py` (11) — без регрессий. ruff clean. ## Деплой / env (после мержа) Код инертен пока per-provider env не заданы. Рекомендуемые значения в прод `backend/.env.runtime` (там же где `BROWSER_MIN_PAGE_INTERVAL_S=12`): ``` BROWSER_MIN_PAGE_INTERVAL_S_CIAN=18 BROWSER_MIN_PAGE_INTERVAL_S_AVITO=8 BROWSER_MIN_PAGE_INTERVAL_S_YANDEX=8 ``` (generic фолбэк на глобал 12). Затем **recreate browser** (env подхватывается при recreate): `docker compose -p gendesign-tradein -f docker-compose.prod.yml up -d --force-recreate --no-deps browser`. Тюнится без пересборки образа — только edit .env.runtime + recreate. Cross-ref #1812, #1793, #883.
lekss361 added 1 commit 2026-06-20 07:45:17 +00:00
feat(tradein-browser): per-provider page-interval override (BROWSER_MIN_PAGE_INTERVAL_S_{PROVIDER}) — #1812 follow-up
All checks were successful
CI / changes (pull_request) Successful in 6s
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
3f30c1c924
lekss361 merged commit 7d92411347 into main 2026-06-20 08:47:07 +00:00
lekss361 deleted branch feat/browser-per-provider-pacing 2026-06-20 08:47:07 +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#1826
No description provided.