03 Transmitir datos en vivo
Ejecuta el colector resiliente y verifica WebSocket, conciliación REST y escrituras en Cloud.
Punto de partida
Existen los seis objetos polymarket y .env.polymarket está cargado.
Qué se inicia
Un único contenedor Python sin estado:
- descubre cinco mercados activos mediante Gamma;
- se suscribe a los tokens de ambos resultados en el WebSocket CLOB público;
- concilia operaciones públicas cada 10 segundos;
- consulta libros CLOB si WebSocket se bloquea; y
- escribe inserciones asíncronas confirmadas en ClickHouse Cloud.
No hay base de datos local, broker, servidor de panel ni credencial de Polymarket.
Paso 1 — Construir e iniciar el colector
docker compose --env-file .env.polymarket up -d --build collector
docker compose --env-file .env.polymarket psEl estado cambia a healthy tras el descubrimiento y la primera escritura correcta en Cloud. Un
estado de aplicación degraded sigue siendo saludable para Docker si REST está actualizado y
WebSocket se está reconectando.
Paso 2 — Leer el contrato de salud
curl --fail --silent http://localhost:8090/health \
| python3 -m json.toolCampos esperados:
{
"status": "live",
"websocket": "connected",
"queue_depth": 0,
"queue_capacity": 10000,
"watched_markets": 5,
"watched_tokens": 10,
"fresh_tokens": 10
}status: degraded con reason: websocket_stale_rest_active es aceptable si
last_trade_reconcile_at y last_book_fallback_at siguen avanzando. unhealthy no lo es; usa la
Resolución de problemas.
Paso 3 — Observar eventos de origen y escritura
docker compose --env-file .env.polymarket logs --tail=30 collectorLos logs son JSON. Busca collector_ready. Los fallos de origen o ClickHouse incluyen una vista
previa acotada del error y el retraso del reintento; no se registra ninguna contraseña.
Paso 4 — Demostrar que las filas están en Cloud
clickhouse client \
--host "$CLICKHOUSE_HOST" \
--port "$CLICKHOUSE_PORT" \
--user "$CLICKHOUSE_USER" \
--password "$CLICKHOUSE_PASSWORD" \
--secure \
--query "
SELECT 'markets' AS table, count() AS rows FROM polymarket.markets
UNION ALL
SELECT 'quote_midpoints', countIf(midpoint > 0) FROM polymarket.price_ticks
UNION ALL
SELECT 'trades', count() FROM polymarket.trades_clean
UNION ALL
SELECT 'one_minute_states', count() FROM polymarket.market_midpoints_1m
"markets, quote_midpoints y one_minute_states deben superar cero antes del Módulo 04. trades
suele crecer en un minuto; un mercado tranquilo puede retrasarlo.
Paso 5 — Usar el modo fixture determinista solo cuando sea necesario
Si la red bloquea Polymarket o ningún mercado seleccionado se mueve tras 60 segundos:
sed -i.bak 's/^POLYMARKET_MODE=.*/POLYMARKET_MODE=fixture/' .env.polymarket
set -a; source ./.env.polymarket; set +a
docker compose --env-file .env.polymarket up -d --build --force-recreate collectorRepite las comprobaciones de salud y recuento. Estado esperado: fixture; los recuentos de ticks y
operaciones aumentan cada cinco segundos. Conserva la copia de seguridad hasta acabar el módulo.
Terminado cuando
- la salud sea
live,degradedcon timestamps REST recientes ofixture; watched_marketssea 5; y- respondan los cuatro recuentos de Cloud, con filas de cotización y por minuto superiores a cero.
Siguiente: consultar el agregado incremental.