PolymarketClickHouse Workshops

03 Transmitir datos en vivo

Ejecuta el colector resiliente y verifica WebSocket, conciliación REST y escrituras en Cloud.

Tu equipo
Terminal de macOS: Ejecuta los comandos del taller en Terminal con zsh o bash.

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 ps

El 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.tool

Campos 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 collector

Los 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 collector

Repite 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, degraded con timestamps REST recientes o fixture;
  • watched_markets sea 5; y
  • respondan los cuatro recuentos de Cloud, con filas de cotización y por minuto superiores a cero.

Siguiente: consultar el agregado incremental.

En esta página

¿Quieres seguir tu progreso?

Opcional. Enviaremos un enlace por correo para confirmar tu dirección; el progreso se registrará cuando lo abras.

Usa tu correo de trabajo, no uno personal.

Para seguir el progreso también debes aceptar los Términos del servicio actuales en la Configuración de privacidad.

ES