Skip to content

Conversation

@samcm
Copy link
Member

@samcm samcm commented Feb 12, 2026

Summary

  • Adds "Node Resources" tab to slot detail page showing per-node CPU utilization from Observoor eBPF agent
  • CL and EL CPU usage as separate time series within the slot (0-12s)
  • Annotation overlays: block arrival, head update, execution timing, data columns (min–p95 ranges in aggregate, exact positions for single node)
  • Slot phase boundary markLines (Block / Attestations / Aggregations)
  • Node selector with client logos, EIP-7870 reference node filter, metric selector (mean/min/max)
  • Adds markArea support to shared MultiLineChart component
  • Extracts shared CONSENSUS_CLIENTS, EXECUTION_CLIENTS_SET, and getClientLayer() to utils/ethereum.ts

Backend counterpart: ethpandaops/xatu-cbt#218

Add CPU utilization visualization to the slot detail page, powered by
observoor eBPF agent data via the new fct_node_cpu_utilization model.

Features:
- Per-node CL/EL CPU utilization chart (0-12s slot window)
- Aggregate view (mean/min/max toggle) and single-node detailed view
- Normalized system utilization (sys mean/min/max) and hottest single core
- EIP-7870 reference nodes filter toggle
- Block arrival time overlay (markLines)
- URL-backed state for node selection, metric, and filter
@samcm samcm requested a review from Savid as a code owner February 12, 2026 04:25
Replace 8 separate line series with shaded min-max bands and clean
mean lines. Legend drops from 8 items to 2-4. "sys" terminology
replaced with "% of all cores". Slot number added to subtitle.
Peak core series hidden by default (toggle-able in legend).
Replace broken stacking bands with clean gradient area fills. Add
annotation overlay system with toggleable markLines for block arrival,
head update, execution duration, and data column range. Single-node
view shows exact per-node events; aggregate view shows p50 values.
Execution timing data fetched from intEngineNewPayload API.
…ments

- Add markArea support to MultiLineChart (colored regions on chart)
- Add slot phase boundary markLines (Block/Attestations/Aggregations)
- Move metric dropdown into chart PopoutCard header
- Change aggregate annotation ranges from p25-p75 to min-p95
- Fix double-toggle on annotation/7870 checkboxes (pointer-events-none)
- Fix scroll-to-top on control changes (resetScroll: false)
- Extract shared CL/EL client sets to utils/ethereum.ts
- Update subtitle to link to Observoor repo
- Update IntEngineNewPayloadFastest → IntEngineNewPayloadFastestExecutionByNodeClass
  after table rename (pre-existing master issue)
- Fix navigate type narrowing by using search spread instead of prev callback
- Replace any casts with EChartsTooltipParam interface in tooltip formatter
- Move PHASE_BOUNDARY_COLORS to module scope to fix exhaustive-deps warning
- Regenerate API types from local cbt-api (removes stale max_single_core_pct)
Regenerated API types and updated component/hook imports to match
the renamed xatu-cbt table.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant