diff --git a/VERSION b/VERSION index b223598..40124e2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.98 +1.1.99 diff --git a/cmd/edgeguard-api/main.go b/cmd/edgeguard-api/main.go index 91b3216..2cc0813 100644 --- a/cmd/edgeguard-api/main.go +++ b/cmd/edgeguard-api/main.go @@ -60,7 +60,7 @@ import ( usersvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/users" ) -var version = "1.1.98" +var version = "1.1.99" func main() { addr := os.Getenv("EDGEGUARD_API_ADDR") diff --git a/cmd/edgeguard-ctl/main.go b/cmd/edgeguard-ctl/main.go index e58392a..4c9f517 100644 --- a/cmd/edgeguard-ctl/main.go +++ b/cmd/edgeguard-ctl/main.go @@ -11,7 +11,7 @@ import ( "git.netcell-it.de/projekte/edgeguard-native/internal/services/setup" ) -var version = "1.1.98" +var version = "1.1.99" const usage = `edgeguard-ctl — EdgeGuard CLI diff --git a/cmd/edgeguard-scheduler/main.go b/cmd/edgeguard-scheduler/main.go index 835f9c0..c02775b 100644 --- a/cmd/edgeguard-scheduler/main.go +++ b/cmd/edgeguard-scheduler/main.go @@ -35,7 +35,7 @@ import ( "git.netcell-it.de/projekte/edgeguard-native/internal/services/tlscerts" ) -var version = "1.1.98" +var version = "1.1.99" const ( // renewTickInterval — how often we re-evaluate expiring certs. diff --git a/internal/handlers/system.go b/internal/handlers/system.go index 798460a..5f54b02 100644 --- a/internal/handlers/system.go +++ b/internal/handlers/system.go @@ -8,6 +8,7 @@ import ( "net/http" "os" "os/exec" + "runtime" "strconv" "strings" "syscall" @@ -211,6 +212,7 @@ type resources struct { LoadAvg1 float64 `json:"load_avg_1"` LoadAvg5 float64 `json:"load_avg_5"` LoadAvg15 float64 `json:"load_avg_15"` + NumCPUs int `json:"num_cpus"` MemTotalKB int64 `json:"mem_total_kb"` MemAvailKB int64 `json:"mem_avail_kb"` MemUsedPct float64 `json:"mem_used_pct"` @@ -234,7 +236,7 @@ func (h *SystemHandler) Resources(c *gin.Context) { // gin.Context erstellen kann. Best-effort: fehlende Quellen lassen // die jeweiligen Felder einfach auf 0. func computeLocalSystemResources() resources { - r := resources{} + r := resources{NumCPUs: runtime.NumCPU()} if data, err := os.ReadFile("/proc/loadavg"); err == nil { f := strings.Fields(string(data)) if len(f) >= 3 { diff --git a/management-ui/src/components/Layout/Sidebar.tsx b/management-ui/src/components/Layout/Sidebar.tsx index 248233f..ef1ac03 100644 --- a/management-ui/src/components/Layout/Sidebar.tsx +++ b/management-ui/src/components/Layout/Sidebar.tsx @@ -112,13 +112,16 @@ export default function Sidebar({ isOpen, onClose }: SidebarProps) { queryKey: ['system', 'health'], queryFn: async () => { const r = await apiClient.get('/system/health') - return isEnvelope(r.data) ? (r.data.data as { version?: string }) : { version: '' } + return isEnvelope(r.data) + ? (r.data.data as { version?: string; hostname?: string }) + : { version: '' } }, refetchInterval: 60_000, refetchOnWindowFocus: true, staleTime: 30_000, }) - const version = health?.version || '…' + const version = health?.version || '…' + const hostname = health?.hostname || null return ( @@ -162,7 +165,14 @@ export default function Sidebar({ isOpen, onClose }: SidebarProps) { ))} - v{version} + + {hostname && ( + + {hostname} + + )} + v{version} + ) } diff --git a/management-ui/src/pages/Dashboard/index.tsx b/management-ui/src/pages/Dashboard/index.tsx index dcee3eb..421f08b 100644 --- a/management-ui/src/pages/Dashboard/index.tsx +++ b/management-ui/src/pages/Dashboard/index.tsx @@ -89,6 +89,7 @@ interface ServiceStatus { } interface Resources { load_avg_1: number; load_avg_5: number; load_avg_15: number + num_cpus?: number mem_total_kb: number; mem_avail_kb: number; mem_used_pct: number disk_total_gb: number; disk_free_gb: number; disk_used_pct: number conntrack_count: number; conntrack_max: number @@ -664,7 +665,10 @@ function ResourcesCard({ r }: { r?: Resources | null }) { - {t('dashboard.resCard.load')} + + {t('dashboard.resCard.load')} + {r.num_cpus != null && ({r.num_cpus} CPU)} + {r.load_avg_1.toFixed(2)} / {r.load_avg_5.toFixed(2)} / {r.load_avg_15.toFixed(2)}