hub v0.132.0: the System page (versions + OS updates with the ring/switch/approve buttons, R-852), the Hosts Proxmox/kernel column, the operator-approved Docker engine release (2 healthy ring-0 nights), the crash-guard events (R-851); evidence audits/os-docker-crash-2026-10-04
gates / gates (push) Successful in 30s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-10-04 16:16:02 +02:00
parent bee277ffad
commit 175ecfcdd2
45 changed files with 2198 additions and 12 deletions
+9
View File
@@ -11,6 +11,7 @@ import (
"gitea.dooplex.hu/admin/felhom-hub/internal/semver"
"gitea.dooplex.hu/admin/felhom-hub/internal/store"
"gitea.dooplex.hu/admin/felhom-hub/internal/sysfacts"
)
// agentOrUnknown renders an agent version for operator text, mapping the empty (never-reported)
@@ -502,6 +503,8 @@ func parseHostStorageTargets(reportJSON string) []storageTargetView {
// hostListRow is the per-host view model for the fleet list.
type hostListRow struct {
PVEVersion string // R-852 (hub v0.132.0): from the report's system stanza; "unknown" when not reported
KernelRunning string
HostID string
CustomerID string
CustomerName string
@@ -590,8 +593,14 @@ func (s *Server) handleHostsList(w http.ResponseWriter, r *http.Request) {
}
// Vitals from the latest report body.
row.PVEVersion, row.KernelRunning = sysfacts.Unknown, sysfacts.Unknown
if reportJSON, _ := s.store.GetLatestHostReportJSON(h.CustomerID); reportJSON != "" {
row.Vitals = parseHostVitals(reportJSON)
sf := sysfacts.Parse(reportJSON)
row.PVEVersion, row.KernelRunning = sysfacts.ShortPVE(sf.PVEVersion), sf.Host.KernelRunning
if row.KernelRunning == sysfacts.Unknown {
row.KernelRunning = sysfacts.ShortKernel(sf.KernelVersion)
}
}
if wf, ok := worstFill[h.HostID]; ok {