clusev/app/Livewire
boban 265136fc42 Metric history fix, service-failure audit trail, alert channels + secret-retarget hardening
Metric history: the per-minute sampler (clusev:sample-metrics) now reads
cpu/mem/disk from the `servers` DB row — the same source the live gauges read,
shared via MariaDB — instead of a cross-container Redis cache the poller may
not share in prod. It gates on last_seen_at freshness (skip offline/unpolled)
and keeps `load` as a best-effort cache read. History now fills whenever the
gauges have data, independent of the cache driver or container split — the
prod detail page no longer shows "Noch keine Verlaufsdaten" after hours.

Service-action failures are persisted: a failed systemctl start/stop/restart
writes a red service.<op>.failed AuditEvent with the FULL systemctl reason in
meta['output'] (mb_scrub-ed, 4000-cap), shown expandable in the audit log — a
truncated, ephemeral toast is no longer the only trace. The failure toast is a
short pointer to the audit log, level=error, and error toasts now linger 9s.

Alert delivery: a warning banner appears on the alerts page when NO channel
would reach anyone (no SMTP + no safe webhook + no Gotify). A new Gotify push
channel (server URL + encrypted app token) posts title/message/priority with
the token in X-Gotify-Key; a self-hosted LAN Gotify is allowed (scheme-checked,
not private-range-blocked like the SSRF-guarded webhooks) — a real push when a
service goes down, no e-mail needed.

Secret-retarget hardening (Codex-found class): changing a target while leaving
its secret blank could send the OLD secret to the NEW endpoint. Closed for the
Gotify token, the SMTP password (save + test-send + the runtime mailer), and
the host-terminal SSH credential (username/port change) — each drops/forbids
the stale secret before the new target is stored. Setting::uncached() reads the
security-sensitive keys DB-direct so a cache-repopulation race can't re-pair an
old secret with a new target. Three Codex rounds, clean; 778 tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 22:21:54 +02:00
..
Alerts Metric history fix, service-failure audit trail, alert channels + secret-retarget hardening 2026-07-08 22:21:54 +02:00
Audit fix(rbac,honeypot): gate audit-retention + email sendTest; honeytoken scans JSON body 2026-07-05 02:28:13 +02:00
Auth feat(auth): drop password complexity — minimum is now just 6 characters 2026-06-26 06:29:33 +02:00
Certs fix: alert mail on queue, SMTP reset, cert/uptime auto-probe, pill heights, XSS 2026-07-06 19:46:46 +02:00
Commands feat(commands): ad-hoc fleet commands + runbooks (feature 4/8) 2026-07-05 20:38:09 +02:00
Concerns perf(fleet,wg) + i18n(dashboard,update) + a11y(btn): re-audit design/perf cleanups 2026-07-05 17:10:19 +02:00
Docker UI consistency batch: docker names, chart axis, empty states, control heights 2026-07-08 21:20:18 +02:00
Files fix(security): close file-read RBAC gap + fail2ban arg-injection + update/HMAC hardening 2026-07-05 16:05:16 +02:00
Health fix: alert mail on queue, SMTP reset, cert/uptime auto-probe, pill heights, XSS 2026-07-06 19:46:46 +02:00
Help feat(wg): WireGuard help topic (registration + DE/EN content + test) 2026-06-20 22:46:04 +02:00
Modals Metric history fix, service-failure audit trail, alert channels + secret-retarget hardening 2026-07-08 22:21:54 +02:00
Onboarding feat(onboarding): first-run spotlight tour — dimmed backdrop, sidebar highlights, relaunchable 2026-07-02 20:00:19 +02:00
Patch feat(patch): fleet patch view + security-update awareness (feature 6/8) 2026-07-05 20:51:17 +02:00
Posture feat(security): fleet security-posture score (feature 5/8) 2026-07-05 20:43:56 +02:00
Release refactor(release): single stable channel — cut internal release candidates (-rc), remove all beta wording 2026-07-05 13:13:09 +02:00
Servers UI consistency batch: docker names, chart axis, empty states, control heights 2026-07-08 21:20:18 +02:00
Services Metric history fix, service-failure audit trail, alert channels + secret-retarget hardening 2026-07-08 22:21:54 +02:00
Settings Metric history fix, service-failure audit trail, alert channels + secret-retarget hardening 2026-07-08 22:21:54 +02:00
Shell fix(ui): uniform action-element height + live fleet status / alerts 2026-07-06 20:42:09 +02:00
System feat(rbac): gate fleet, host terminal + domain/TLS actions (manage-fleet/operate/manage-panel) 2026-07-05 01:01:24 +02:00
Terminal feat(nav): 3-group sidebar; split Docker + Terminal into host page + per-server tabs 2026-07-06 19:21:13 +02:00
Threats harden honeypot/ban path: close evasions, unmask & audit-DoS vectors 2026-07-05 15:05:35 +02:00
Versions feat(rbac): gate network + panel actions (manage-network/manage-panel) 2026-07-05 00:52:09 +02:00
Wireguard perf(fleet,wg) + i18n(dashboard,update) + a11y(btn): re-audit design/perf cleanups 2026-07-05 17:10:19 +02:00
Dashboard.php i18n: complete DE/EN localization (modals, shell, backend) + v0.3.0 2026-06-13 23:27:42 +02:00
ServerSwitcher.php fix(ui): keep the sidebar server-switcher in sync with the viewed server 2026-06-14 19:24:56 +02:00