03 Thu nhận dữ liệu trực tiếp
Chạy collector có khả năng chịu lỗi và kiểm chứng WebSocket, việc đối chiếu qua REST và các lần ghi lên Cloud.
Điểm khởi đầu
Sáu đối tượng polymarket đã tồn tại và .env.polymarket đã được source.
Những gì được khởi động
Một container Python không lưu trạng thái:
- khám phá năm thị trường đang hoạt động thông qua Gamma;
- đăng ký cả hai token kết quả trên CLOB WebSocket công khai;
- đối chiếu các giao dịch công khai mỗi 10 giây;
- poll CLOB book khi WebSocket bị treo; và
- ghi các async insert đã được xác nhận vào ClickHouse Cloud.
Không có database cục bộ, broker, dashboard server, hay thông tin đăng nhập Polymarket nào.
Bước 1 — Build và khởi động collector
docker compose --env-file .env.polymarket up -d --build collector
docker compose --env-file .env.polymarket psTrạng thái chuyển thành healthy sau khi khám phá xong và lần ghi thành công đầu tiên lên Cloud.
Trạng thái ứng dụng degraded vẫn được Docker coi là healthy khi REST còn mới và
WebSocket đang kết nối lại.
Bước 2 — Đọc hợp đồng health
curl --fail --silent http://localhost:8090/health \
| python3 -m json.toolCác trường mong đợi:
{
"status": "live",
"websocket": "connected",
"queue_depth": 0,
"queue_capacity": 10000,
"watched_markets": 5,
"watched_tokens": 10,
"fresh_tokens": 10
}status: degraded kèm reason: websocket_stale_rest_active là chấp nhận được nếu
last_trade_reconcile_at và last_book_fallback_at tiếp tục tiến lên. unhealthy thì không
chấp nhận được; hãy dùng phần Xử lý sự cố.
Bước 3 — Quan sát các sự kiện nguồn và ghi dữ liệu
docker compose --env-file .env.polymarket logs --tail=30 collectorLog ở dạng JSON. Hãy tìm collector_ready. Các lỗi từ nguồn hoặc từ ClickHouse có kèm một đoạn
xem trước lỗi giới hạn độ dài và độ trễ trước khi thử lại; không mật khẩu nào được ghi log.
Bước 4 — Chứng minh rằng dữ liệu đã có trên 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 và one_minute_states phải lớn hơn không trước khi sang
Module 04. trades thường tăng lên trong vòng một phút; một thị trường ít giao dịch có thể làm nó chậm hơn.
Bước 5 — Chỉ dùng chế độ fixture tất định khi cần thiết
Nếu mạng trong phòng chặn Polymarket hoặc không thị trường nào đã chọn biến động sau 60 giây:
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 collectorChạy lại các bước kiểm tra health và số dòng. Trạng thái mong đợi: fixture; số tick và số
giao dịch tăng lên mỗi năm giây. Giữ file backup cho đến khi module kết thúc.
Hoàn thành khi
- health là
live,degradedvới timestamp REST còn mới, hoặcfixture; watched_marketsbằng 5; và- cả bốn số đếm dòng trên Cloud đều trả về, với số dòng quote và số dòng một phút lớn hơn không.
Tiếp theo: truy vấn aggregate tăng dần.