feat(260923-dhh): Proxmox-Modul Aufgabe 6 - Modulseite mit Auslastung
- ServerCard.tsx: einzige Stelle, die einen Messwert in Text verwandelt (formatMetric) — null wird ueberall "unbekannt", nie 0/NaN/leer; verzweigt ueber productType auf PVE/PBS/PMG; PBS ohne Sicherung zeigt "noch keine Sicherung" statt eines Fehlers; nicht erreichbarer Server zeigt Klartext-Ursache plus Zeitpunkt der letzten erfolgreichen Messung - page.tsx: "Jetzt aktualisieren" fragt alle Server neu ab und laedt die Liste danach neu, waehrend des Laufs gesperrt; ruhiger Hinweis bei leerer Liste mit Weg zu den Einstellungen; Link zu den Einstellungen nur fuer Administratoren sichtbar (Anzeige, kein Zugriffsriegel) - proxmox-api.ts: ProxmoxMetrics-Union (Pve/Pbs/Pmg) fuer typsichere Verzweigung im Frontend - umlaut-dictionary.ts: zwei weitere korrekte Woerter auf die Positivliste (Messung, Prozessorlast) Tore: web 708/708 (>=693), type-check 4/4, Biome apps/web 53 Warnungen (unveraendert). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,54 @@ export type ProxmoxErrorKind =
|
||||
| 'server'
|
||||
| 'unbekannt';
|
||||
|
||||
export interface ProxmoxPveNodeMetric {
|
||||
node: string;
|
||||
cpu: number | null;
|
||||
maxcpu: number | null;
|
||||
mem: number | null;
|
||||
maxmem: number | null;
|
||||
}
|
||||
|
||||
export interface ProxmoxPveStorageMetric {
|
||||
storage: string;
|
||||
node: string;
|
||||
disk: number | null;
|
||||
maxdisk: number | null;
|
||||
}
|
||||
|
||||
export interface ProxmoxPveMetrics {
|
||||
productType: 'pve';
|
||||
nodeCount: number;
|
||||
guestsRunning: number;
|
||||
guestsStopped: number;
|
||||
nodes: ProxmoxPveNodeMetric[];
|
||||
storages: ProxmoxPveStorageMetric[];
|
||||
}
|
||||
|
||||
export interface ProxmoxPbsDatastoreMetric {
|
||||
name: string;
|
||||
total: number | null;
|
||||
used: number | null;
|
||||
free: number | null;
|
||||
lastBackupAt: number | null;
|
||||
lastVerifyState: string | null;
|
||||
}
|
||||
|
||||
export interface ProxmoxPbsMetrics {
|
||||
productType: 'pbs';
|
||||
datastores: ProxmoxPbsDatastoreMetric[];
|
||||
}
|
||||
|
||||
export interface ProxmoxPmgMetrics {
|
||||
productType: 'pmg';
|
||||
countIn: number | null;
|
||||
countOut: number | null;
|
||||
spamCount: number | null;
|
||||
virusCount: number | null;
|
||||
}
|
||||
|
||||
export type ProxmoxMetrics = ProxmoxPveMetrics | ProxmoxPbsMetrics | ProxmoxPmgMetrics;
|
||||
|
||||
export interface ProxmoxServerStatus {
|
||||
id: string;
|
||||
serverId: string;
|
||||
@@ -29,7 +77,7 @@ export interface ProxmoxServerStatus {
|
||||
reachable: boolean;
|
||||
errorKind: ProxmoxErrorKind | null;
|
||||
errorDetail: string | null;
|
||||
metrics: unknown;
|
||||
metrics: ProxmoxMetrics | null;
|
||||
rawSample: unknown;
|
||||
updatedAt: string;
|
||||
}
|
||||
@@ -72,7 +120,7 @@ export interface ProxmoxTestResult {
|
||||
reachable: boolean;
|
||||
errorKind: ProxmoxErrorKind | null;
|
||||
errorDetail: string | null;
|
||||
metrics: unknown;
|
||||
metrics: ProxmoxMetrics | null;
|
||||
rawSample: unknown;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user