PolymarketClickHouse Workshops

03 Stream live data

복원력 있는 collector를 실행하고 WebSocket, REST 정합화, Cloud 쓰기를 검증합니다.

Your computer
macOS terminal: Run workshop commands in Terminal using zsh or bash.

시작 지점

여섯 개 polymarket 객체가 존재하고 .env.polymarket이 source되어 있습니다.

무엇이 시작되는가

상태 없는 Python 컨테이너 하나:

  • Gamma를 통해 활성 시장 다섯 개를 탐색합니다;
  • 공개 CLOB WebSocket에서 양쪽 결과 토큰을 구독합니다;
  • 10초마다 공개 거래를 정합화합니다;
  • WebSocket이 멈추면 CLOB book을 폴링합니다; 그리고
  • 확인 응답을 받는 비동기 삽입으로 ClickHouse Cloud에 씁니다.

로컬 데이터베이스, 브로커, 대시보드 서버, Polymarket 자격 증명은 없습니다.

Step 1 — collector 빌드 및 시작

docker compose --env-file .env.polymarket up -d --build collector
docker compose --env-file .env.polymarket ps

탐색이 끝나고 첫 Cloud 쓰기가 성공하면 상태가 healthy로 바뀝니다. REST가 최신이고 WebSocket이 재연결 중이라면 애플리케이션 상태가 degraded여도 여전히 Docker 기준으로는 healthy입니다.

Step 2 — 헬스 계약 읽기

curl --fail --silent http://localhost:8090/health \
  | python3 -m json.tool

예상 필드:

{
  "status": "live",
  "websocket": "connected",
  "queue_depth": 0,
  "queue_capacity": 10000,
  "watched_markets": 5,
  "watched_tokens": 10,
  "fresh_tokens": 10
}

last_trade_reconcile_at와 last_book_fallback_at가 계속 전진한다면 reason: websocket_stale_rest_active와 함께 나오는 status: degraded는 허용됩니다. unhealthy는 허용되지 않으며, Troubleshooting을 사용하세요.

Step 3 — 소스 및 쓰기 이벤트 관찰

docker compose --env-file .env.polymarket logs --tail=30 collector

로그는 JSON입니다. collector_ready를 찾으세요. 소스 또는 ClickHouse 실패에는 길이가 제한된 오류 미리보기와 재시도 지연이 포함되며, 비밀번호는 로그에 남지 않습니다.

Step 4 — 행이 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
  "

Module 04 전에 markets, quote_midpoints, one_minute_states는 0보다 커야 합니다. trades는 보통 1분 안에 늘어나지만, 조용한 시장에서는 늦어질 수 있습니다.

Step 5 — 필요할 때만 결정적 픽스처 모드 사용

강의실 네트워크가 Polymarket을 차단하거나, 60초가 지나도 선택된 시장이 전혀 움직이지 않는 경우:

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

헬스와 행 수 확인을 다시 실행하세요. 예상 상태: fixture. tick과 trade 수가 5초마다 증가합니다. 모듈이 끝날 때까지 백업 파일을 보관하세요.

완료 조건

  • 헬스가 live, 신선한 REST 타임스탬프를 가진 degraded, 또는 fixture이다;
  • watched_markets가 5이다; 그리고
  • 네 개의 Cloud 행 수가 모두 반환되고, quote와 1분 행 수가 0보다 크다.

다음: 증분 집계를 쿼리합니다.

이 페이지의 내용

Track your progress?

Optional. We email a link to confirm your address; progress records once you open it.

Please use your work email address, not a personal one.

Progress tracking also requires accepting the current Terms of Service in Privacy settings.

KO