clusev/resources/views
boban 6227505528 feat(metrics): persistent resource-history graph on the Server-Details page
A CPU/RAM/Disk history graph over selectable ranges (1h/24h/7d/30d) on the server
detail page, backed by a persisted time series (the live 15s view stays cache-only).

- metric_samples table (server_id cascade, cpu/mem/disk %, load, sampled_at indexed).
- clusev:sample-metrics (scheduled every minute, mirrors clusev:wg-sample): persists
  one row per server from the cached live reading, prunes beyond --retention (30d).
- MetricHistory::series() buckets + averages samples for a window; empty buckets stay
  null so the chart shows gaps, not fabricated values.
- Servers/Show: range selector + a gap-aware SVG line chart (theme-token strokes,
  R3-compliant, mirrors the dashboard chart). historyRange is clamped via setRange()
  and the updatedHistoryRange() hook (it's a public, client-settable property).

Codex review: fixed a right-edge bucket off-by-one, clamped percentages on write, and
guarded the public range property against direct client values. Browser-verified: the
chart renders with data, range buttons, legend and gaps, zero console errors. 447
tests green, pint clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 01:31:27 +02:00
..
components feat(release): flag-gated /release page + Deploy-to-Staging via host bridge 2026-06-22 23:39:47 +02:00
errors feat(auth): guests-only BlockBannedIp middleware + 403 page 2026-06-20 17:45:16 +02:00
layouts feat(brand): source-view comment + console branding with self-XSS warning (v0.9.56) 2026-06-22 06:19:46 +02:00
livewire feat(metrics): persistent resource-history graph on the Server-Details page 2026-06-25 01:31:27 +02:00
partials fix(modals): reliable open + spinner/error feedback on every modal trigger 2026-06-15 21:07:25 +02:00
vendor/wire-elements-modal fix(modal)+ux: panel above backdrop, one <x-btn> style, SSH credential form 2026-06-12 23:32:28 +02:00
update-progress.blade.php fix(update): make the update-progress screen survive a browser refresh 2026-06-24 23:05:54 +02:00