Commit aabf5f8
authored
feat(slots): add memory, disk I/O, and network charts (#419)
* feat: add Node Resources tab to slot detail page
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
* refactor: redesign CPU chart with min-max bands and clearer labels
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).
* feat: add timeline event annotations to CPU chart
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.
* feat: add markArea annotations, slot phase boundaries, and UX improvements
- 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
* fix: resolve build and lint errors
- 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)
* refactor: deduplicate client name lists into single source of truth
* fix(slots): align node resource annotations and CL/EL layer detection
* rename: fct_node_cpu_utilization → fct_node_cpu_utilization_by_process
Regenerated API types and updated component/hook imports to match
the renamed xatu-cbt table.
* feat(slots): add memory, disk I/O, and network charts to node resources
Add three new resource charts alongside existing CPU utilization:
- Memory Usage: RSS total/anon/file/swap per CL/EL process
- Disk I/O: read/write bytes with CL/EL breakdown per node
- Network I/O: traffic by port label (P2P, discovery, etc.)
with beacon API/RPC ports hidden by default
Resource type tabs allow switching between charts. All charts share
the same annotation overlays, node selector, and sync group.
* Show all 4 resource charts in 2x2 grid, add smoothing and zero-padding
Replace tab-based switching with a 2-column grid showing CPU, Memory,
Disk I/O, and Network charts simultaneously. Zero-pad all 250ms buckets
so charts show continuous lines (no gaps in quiet periods). Add smooth
curve interpolation (0.4) to all series for cleaner visualization.
* Break down Disk I/O by CL/EL in aggregate mode
Show CL Read, CL Write, EL Read, EL Write series (matching the
single-node view pattern) instead of just Read/Write totals.
* Plot data points at end of aggregation window
Shift bucket offset by BUCKET_SIZE (250ms) so each data point represents
the end of its aggregation window rather than the start.
* Forward-fill gauge metrics (CPU, memory) instead of zero-filling
Gauge metrics always have a value, so empty leading buckets should use
the first known value rather than 0. Prevents false spike from 0 at
chart start. Delta metrics (disk, network) still zero-fill correctly.
* fixes
* fix(slots): address node resources review findings and CI stability1 parent 8774ba2 commit aabf5f8
File tree
35 files changed
+19755
-8497
lines changed- src
- api
- @tanstack
- client
- components/Charts
- Globe
- Map
- MultiLine
- pages
- ethereum
- execution/timings
- components/NewPayloadTab
- hooks
- slots
- components/NodeResources
- hooks
- useSlotNodeDiskIo
- useSlotNodeMemory
- useSlotNodeNetworkIo
- useSlotNodeResources
- xatu/locally-built-blocks/utils
- routes/ethereum/slots
- utils
35 files changed
+19755
-8497
lines changedLarge diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
162 | 162 | | |
163 | 163 | | |
164 | 164 | | |
165 | | - | |
166 | 165 | | |
167 | 166 | | |
168 | 167 | | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
169 | 175 | | |
170 | 176 | | |
171 | 177 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
181 | 181 | | |
182 | 182 | | |
183 | 183 | | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
184 | 192 | | |
185 | 193 | | |
186 | 194 | | |
| |||
257 | 265 | | |
258 | 266 | | |
259 | 267 | | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
260 | 272 | | |
261 | 273 | | |
262 | 274 | | |
| |||
297 | 309 | | |
298 | 310 | | |
299 | 311 | | |
300 | | - | |
301 | | - | |
| 312 | + | |
| 313 | + | |
302 | 314 | | |
303 | 315 | | |
304 | 316 | | |
305 | 317 | | |
| 318 | + | |
| 319 | + | |
306 | 320 | | |
307 | 321 | | |
308 | 322 | | |
| |||
1343 | 1357 | | |
1344 | 1358 | | |
1345 | 1359 | | |
| 1360 | + | |
| 1361 | + | |
| 1362 | + | |
| 1363 | + | |
| 1364 | + | |
| 1365 | + | |
| 1366 | + | |
| 1367 | + | |
| 1368 | + | |
| 1369 | + | |
| 1370 | + | |
| 1371 | + | |
| 1372 | + | |
| 1373 | + | |
| 1374 | + | |
| 1375 | + | |
| 1376 | + | |
| 1377 | + | |
| 1378 | + | |
| 1379 | + | |
| 1380 | + | |
| 1381 | + | |
| 1382 | + | |
| 1383 | + | |
| 1384 | + | |
| 1385 | + | |
| 1386 | + | |
| 1387 | + | |
| 1388 | + | |
| 1389 | + | |
| 1390 | + | |
| 1391 | + | |
| 1392 | + | |
| 1393 | + | |
| 1394 | + | |
| 1395 | + | |
| 1396 | + | |
| 1397 | + | |
| 1398 | + | |
| 1399 | + | |
| 1400 | + | |
| 1401 | + | |
| 1402 | + | |
| 1403 | + | |
1346 | 1404 | | |
1347 | 1405 | | |
1348 | 1406 | | |
| |||
1708 | 1766 | | |
1709 | 1767 | | |
1710 | 1768 | | |
| 1769 | + | |
| 1770 | + | |
| 1771 | + | |
| 1772 | + | |
1711 | 1773 | | |
1712 | 1774 | | |
1713 | 1775 | | |
| |||
1746 | 1808 | | |
1747 | 1809 | | |
1748 | 1810 | | |
| 1811 | + | |
| 1812 | + | |
1749 | 1813 | | |
1750 | 1814 | | |
1751 | 1815 | | |
| |||
1766 | 1830 | | |
1767 | 1831 | | |
1768 | 1832 | | |
1769 | | - | |
| 1833 | + | |
1770 | 1834 | | |
1771 | 1835 | | |
| 1836 | + | |
1772 | 1837 | | |
1773 | 1838 | | |
1774 | 1839 | | |
| |||
1936 | 2001 | | |
1937 | 2002 | | |
1938 | 2003 | | |
| 2004 | + | |
| 2005 | + | |
| 2006 | + | |
| 2007 | + | |
| 2008 | + | |
| 2009 | + | |
| 2010 | + | |
| 2011 | + | |
| 2012 | + | |
| 2013 | + | |
| 2014 | + | |
| 2015 | + | |
| 2016 | + | |
| 2017 | + | |
| 2018 | + | |
| 2019 | + | |
| 2020 | + | |
| 2021 | + | |
| 2022 | + | |
| 2023 | + | |
| 2024 | + | |
| 2025 | + | |
1939 | 2026 | | |
1940 | 2027 | | |
1941 | 2028 | | |
| |||
2157 | 2244 | | |
2158 | 2245 | | |
2159 | 2246 | | |
2160 | | - | |
2161 | | - | |
2162 | | - | |
2163 | | - | |
2164 | | - | |
2165 | | - | |
2166 | | - | |
2167 | | - | |
2168 | | - | |
2169 | | - | |
2170 | | - | |
| 2247 | + | |
| 2248 | + | |
| 2249 | + | |
| 2250 | + | |
| 2251 | + | |
| 2252 | + | |
| 2253 | + | |
| 2254 | + | |
| 2255 | + | |
| 2256 | + | |
| 2257 | + | |
2171 | 2258 | | |
2172 | 2259 | | |
2173 | 2260 | | |
| |||
2189 | 2276 | | |
2190 | 2277 | | |
2191 | 2278 | | |
| 2279 | + | |
| 2280 | + | |
| 2281 | + | |
| 2282 | + | |
| 2283 | + | |
| 2284 | + | |
| 2285 | + | |
| 2286 | + | |
| 2287 | + | |
| 2288 | + | |
| 2289 | + | |
2192 | 2290 | | |
2193 | 2291 | | |
2194 | 2292 | | |
| |||
2532 | 2630 | | |
2533 | 2631 | | |
2534 | 2632 | | |
| 2633 | + | |
| 2634 | + | |
| 2635 | + | |
| 2636 | + | |
2535 | 2637 | | |
2536 | 2638 | | |
2537 | 2639 | | |
| |||
2570 | 2672 | | |
2571 | 2673 | | |
2572 | 2674 | | |
| 2675 | + | |
| 2676 | + | |
2573 | 2677 | | |
2574 | 2678 | | |
2575 | 2679 | | |
| |||
2590 | 2694 | | |
2591 | 2695 | | |
2592 | 2696 | | |
2593 | | - | |
| 2697 | + | |
2594 | 2698 | | |
2595 | 2699 | | |
| 2700 | + | |
2596 | 2701 | | |
2597 | 2702 | | |
2598 | 2703 | | |
| |||
0 commit comments