Conversation
Co-authored-by: Codex <codex-noreply@coinbase.com>
🟡 Heimdall Review Status
|
|
✅ All benchmarks green — 14 within ±2% (deterministic instruction counts). View run Benchmark details (14)
|
Review SummaryPR: feat(devnet): Add Dynamic Upgrades Dashboard This PR adds a Grafana dashboard for observing dynamic upgrade signals on the local devnet, a Python test harness validating all 21 PromQL queries against the devnet's Prometheus image, documentation, and a control-room link from the existing devnet dashboard. Scope: Devnet observability tooling only (JSON, Python, Markdown). No Rust code or block-production paths are affected. Findings: No issues found. The dashboard structure, PromQL queries, template variables, test coverage, and documentation are all sound. |
| rules = [{"record": f"dashboard_expression_{index}", "expr": interpolate(expression, defaults)} | ||
| for index, expression in enumerate(expressions.values())] | ||
| compose = (DIRECTORY.parents[2] / "docker/docker-compose.yml").read_text() | ||
| image = re.search(r"image:\s*(prom/prometheus:[^\s]+)", compose).group(1) |
There was a problem hiding this comment.
Nit: re.search(…).group(1) raises an opaque AttributeError: 'NoneType' object has no attribute 'group' if the Prometheus image line is ever removed or reformatted in docker-compose.yml. Consider a guard with a descriptive message:
| image = re.search(r"image:\s*(prom/prometheus:[^\s]+)", compose).group(1) | |
| match = re.search(r"image:\s*(prom/prometheus:[^\s]+)", compose) | |
| assert match, "Could not find prom/prometheus image in docker-compose.yml" | |
| image = match.group(1) |
Review SummaryThis PR adds a Grafana dashboard for monitoring dynamic upgrade signals on the local devnet, along with a Python test harness that validates all 21 PromQL queries and 16 behavioral scenarios using Scope: Devnet observability tooling only — no Rust code, no block-production paths, no node logic changes. What looks good:
One minor finding: posted inline on the test script ( No blocking issues found. |
Summary
Adds an automatically provisioned Grafana dashboard for local devnet dynamic upgrades, linked from the control room with preserved node filters and time range. Adapts the internal chain-overview panels to Prometheus, covering observed schedules, cross-node and EL/CL divergence, read health, and apply diagnostics without treating missing telemetry as healthy zero. Documents usage and adds regression coverage for all 21 queries and 16 behavioral scenarios; provisioning, queries, and rendering were smoke-tested in Grafana 10.4.3 with synthetic metrics rather than a full devnet.