feat(devops): rpc_probe + measured rpc-pool, log/metrics libs, node runbook (WP 7898, 7916) #8
No reviewers
Labels
No labels
auto-merge
auto-merge
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
fortiblox/arc-mev-bot!8
Loading…
Reference in a new issue
No description provided.
Delete branch "devops/rpc-probe-observability"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
WP 7898 — real RPC latency (Phase 0 close-out) + WP 7916 — structured logs & Prometheus (library part)
What
bot/rpc_probe.py(stdlib): per[[endpoint]]— N×eth_blockNumberp50/p95/max, oneeth_getLogs, block-height lag in a tight final round, real RFC 6455 websocket round-trip (eth_chainIdover a frame).--writestampsmeasured_latency_msin place with when/where;--checkexits 3 on0placeholders;--max-p50/--max-lagexit 4 (health-check mode);resolve = "<ip>"keeps hostname for SNI/Host (needed forarc-node-lxc139, MagicDNS gap on LXC 140).load_pool(require_measured=True)is the runtime guard for the pool loader.config/rpc-pool.example.toml: 9 verified endpoints (local node, LXC 139 tailnet node, arc.io + 3 official provider mirrors, dRPC/Tenderly/arc.network), measured on LXC 140 2026-09-16 13:43 UTC, provenance comment per line; excluded/keyed endpoints listed in the header. The real gitignoredconfig/rpc-pool.tomlis installed on the box.bot/log.py: JSON lines, fixedts/level/event/blockfirst, ints > 2^53 as strings, any 64-hex redacted (architecture §4.9), single-write thread safety, bound context loggers.bot/metrics.py: Counter/Gauge/Histogram + text exposition 0.0.4, sharedarcmev_*metric set (documented in the module docstring),serve()on0.0.0.0:9109(/metrics,/healthz→ 503 on unhealthy), env overrides.monitoring/prometheus/arc-mev-bot.scrape.yml+monitoring/grafana/arc-mev-bot-dashboard.json: drop-ins for the fleet stack on the validator (registration = separate wave-3 PR tofortiblox/x1-trading-bot, documented indocs/monitoring.md).docs/runbook-node.md: start/stop/health-check the node, PATH-under-pct-exec fix, probe procedure, measured table, observed node backlog on probe day.docs/architecture.md: one row only (bot/metrics.py→ bind0.0.0.0:9109, overridable) per that file's change-control rule; needed so the validator Prometheus can scrape over Tailscale.make probealready runspython3 bot/rpc_probe.py, which works as a script.Tests
make lint(py-compile + secret-scan) andmake testgreen locally and on LXC 140 (Python 3.12.3): 63 offline cases incl. a recorded probe fixturebot/tests/fixtures/rpc_probe/probe-lxc140-62411028.json.🤖 Generated with Claude Code
dfc03c4268304cc148beautomerger v2 auto-approved: all 7 gates pass. Approver: fortiblox-dev (opposite-identity rule). Gates: mergeable=true,label=auto-merge,author=buddysan,identity=ok,status_checks=not_required,signatures=upstream_BP_only,opt_in=repo_marker.
Auto-merged by forgejo-automerger at 2026-09-16 13:54:41 UTC. Approver:
fortiblox-dev(opposite-identity rule, Option C upgrade 2026-05-13). Merger:buddysanviafast-forward-only(NOT adminforce_merge). Criteria passed:mergeable=true,label=auto-merge,author=buddysan,identity=ok,status_checks=not_required,signatures=upstream_BP_only,opt_in=repo_marker. Branch304cc148bemerged ontomainand feature branch deleted. Seeproject_forgejo_automergermemory for rationale.