diff --git a/drpc.yml b/drpc.yml index 163d44e0..a6b4418f 100644 --- a/drpc.yml +++ b/drpc.yml @@ -1,12 +1,26 @@ services: + # Streams the dshackle access log (NDJSON, one line per response) to the splits + # listener on the insights host. Deliberately decoupled from dshackle via the + # file: a dead listener or slow link only ever stalls this sidecar, never the + # gateway. tail -F follows logrotate copytruncate; on disconnect the retry + # loop resumes at the file END (bounded loss, no duplication floods) — the + # per-gateway prometheus-vs-lines reconciliation on the listener side makes + # any gap visible within the hour. + accesslog-shipper: + image: busybox:1.36 + restart: unless-stopped + volumes: + - ./dshackle_logs:/logs:ro + command: sh -c 'while true; do tail -F /logs/access_log.jsonl 2>/dev/null | nc ${SPLITS_LISTENER_HOST:-78.47.193.225} ${SPLITS_LISTENER_PORT:-9102}; echo "shipper: listener connection lost, retrying in 10s"; sleep 10; done' + dshackle: image: drpcorg/dshackle:0.79.10 restart: unless-stopped volumes: - ./main_configs:/etc/dshackle # dshackle accessLog target (main_configs/dshackle.yaml accessLog.filename=/logs/...). - # Host-side dir so the splits tailer can aggregate gateway->region request shares - # (earnings misattribution fix, operator + claude-machine design 2026-07-09). + # Host-side dir so the shipper sidecar above can stream gateway->region request + # shares (earnings misattribution fix, operator + claude-machine design 2026-07-09). - ./dshackle_logs:/logs expose: - 8080