proxy-pool P1: таблица scrape_proxies + admin bulk-load + seed env #2161

Closed
opened 2026-07-02 16:25:22 +00:00 by lekss361 · 1 comment
Owner

Часть Epic #2160, шаг P1 (аддитивно, безопасно — можно сразу). Проект tradein (tradein-mvp/).

Goal

Таблица scrape_proxies + ручка массовой загрузки + перенос текущих env-прокси в таблицу (seed). Пул ещё не подключён к боевому сбору (это P3/P4) — только хранилище.

Files

  • tradein-mvp/backend/data/sql/NNN_scrape_proxies.sql (новый; свободный номер после последних)
  • tradein-mvp/backend/app/api/v1/admin_*.py — ручка POST /api/v1/admin/proxies/bulk (список {url, provider_affinity, rotate_url?, kind?} → INSERT ... ON CONFLICT DO UPDATE) + GET /api/v1/admin/proxies (список со статусами)
  • (опц.) seed-скрипт/миграция: перенести текущие env-прокси (BROWSER_PROXY_/_PROXY_URL) в таблицу с правильным affinity

Схема таблицы (из Epic)

id, label, url, kind (http/socks5), provider_affinity (avito/cian/yandex/generic/any), rotate_url, enabled, last_check_at, last_ok_at, consecutive_fails, exit_ip, latency_ms, leased_by (bigint null), leased_at, geo, operator, expires_at, created_at. Индексы: (provider_affinity, enabled, leased_by), (enabled, consecutive_fails). BEGIN/COMMIT, idempotent (CREATE TABLE IF NOT EXISTS).

Acceptance

  • миграция создаёт таблицу + индексы, auto-apply на деплое
  • bulk-ручка принимает список, INSERT/UPSERT по url; валидация affinity (whitelist)
  • GET отдаёт прокси со статусами
  • НЕ подключать к fetch (P3/P4)
  • psycopg v3 (CAST(:x AS type)), параметризация; секреты прокси НЕ в коде

Agent: database-expert (таблица) + backend-engineer (ручки). Веду одним backend-воркером (таблица + ручки вместе).

Часть Epic #2160, шаг P1 (аддитивно, безопасно — можно сразу). Проект tradein (`tradein-mvp/`). ## Goal Таблица `scrape_proxies` + ручка массовой загрузки + перенос текущих env-прокси в таблицу (seed). Пул ещё не подключён к боевому сбору (это P3/P4) — только хранилище. ## Files - `tradein-mvp/backend/data/sql/NNN_scrape_proxies.sql` (новый; свободный номер после последних) - `tradein-mvp/backend/app/api/v1/admin_*.py` — ручка `POST /api/v1/admin/proxies/bulk` (список {url, provider_affinity, rotate_url?, kind?} → INSERT ... ON CONFLICT DO UPDATE) + `GET /api/v1/admin/proxies` (список со статусами) - (опц.) seed-скрипт/миграция: перенести текущие env-прокси (BROWSER_PROXY_*/*_PROXY_URL) в таблицу с правильным affinity ## Схема таблицы (из Epic) `id, label, url, kind (http/socks5), provider_affinity (avito/cian/yandex/generic/any), rotate_url, enabled, last_check_at, last_ok_at, consecutive_fails, exit_ip, latency_ms, leased_by (bigint null), leased_at, geo, operator, expires_at, created_at`. Индексы: `(provider_affinity, enabled, leased_by)`, `(enabled, consecutive_fails)`. BEGIN/COMMIT, idempotent (CREATE TABLE IF NOT EXISTS). ## Acceptance - миграция создаёт таблицу + индексы, auto-apply на деплое - bulk-ручка принимает список, INSERT/UPSERT по url; валидация affinity (whitelist) - GET отдаёт прокси со статусами - НЕ подключать к fetch (P3/P4) - psycopg v3 (CAST(:x AS type)), параметризация; секреты прокси НЕ в коде ## Agent: database-expert (таблица) + backend-engineer (ручки). Веду одним backend-воркером (таблица + ручки вместе).
lekss361 added the
data
priority/p2
scope/backend
scope/db
scrapers
status/ready
tradein
labels 2026-07-02 16:26:04 +00:00
Author
Owner

Смержено (PR #2167). Аддитивно — таблица scrape_proxies (миграция 157, strict auto-apply) + admin-ручки bulk/list/patch с маскировкой паролей. Не подключено к боевому сбору. 11 новых + 32 регресс тестов passed. Прокси грузятся оператором через POST /api/v1/admin/proxies/bulk (секреты не в SQL). Prod-проверка пула — на P2/P3.

Смержено (PR #2167). Аддитивно — таблица `scrape_proxies` (миграция 157, strict auto-apply) + admin-ручки bulk/list/patch с маскировкой паролей. Не подключено к боевому сбору. 11 новых + 32 регресс тестов passed. Прокси грузятся оператором через `POST /api/v1/admin/proxies/bulk` (секреты не в SQL). Prod-проверка пула — на P2/P3.
Sign in to join this conversation.
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#2161
No description provided.