import type { Metadata } from "next"; import Link from "next/link"; import { Karte } from "@/components/karte"; import { Status } from "@/components/status"; import { ART_TEXT, STATUS_ANZEIGE } from "@/lib/auftrag-text"; import { bytes, zeitpunkt } from "@/lib/formate"; import { seiteSchuetzen } from "@/server/auth/zugang"; import { auftraegeSuchen } from "@/server/services/auftraege"; import { serverListe } from "@/server/services/server"; import { ServerStatus } from "./server/server-status"; export const metadata: Metadata = { title: "Übersicht" }; /** Server mit Status und freien Ressourcen (aus dem letzten Verbindungstest), letzte Aufträge. */ export default async function Uebersicht() { const benutzer = await seiteSchuetzen("lesen", "/"); const [server, { eintraege }] = await Promise.all([serverListe(), auftraegeSuchen({ seite: 1 })]); const letzte = eintraege.slice(0, 8); return (

Willkommen, {benutzer.anzeigename}

Übersicht

{/* min-w-0: Gitterspalten schrumpfen sonst nicht unter lange Zeilen – am Handy zoomte der Browser dann heraus. */}
Alle } > {server.length === 0 ? ( Noch kein Proxmox-Server angelegt. ) : (
    {server.map((eintrag) => { const knoten = eintrag.letzterTest?.knoten ?? []; const online = knoten.filter((k) => k.online); const frei = online.reduce( (s, k) => s + ((k.speicherGesamt ?? 0) - (k.speicherBelegt ?? 0)), 0, ); const cpus = online.reduce((s, k) => s + (k.cpus ?? 0), 0); return (
  • {eintrag.titel}{" "} {eintrag.name}
    {knoten.length > 0 ? (

    {online.length} von {knoten.length} {knoten.length === 1 ? "Node" : "Nodes"} online {online.length > 0 ? ` · ${cpus} CPUs · ${bytes(frei)} RAM frei` : ""} {eintrag.letzterTest?.cluster ? ` · Cluster ${eintrag.letzterTest.cluster.name}` : ""}

    ) : null}
  • ); })}
)}
Verlauf } > {letzte.length === 0 ? ( Noch keine Deployments. ) : (
    {letzte.map((a) => { const [art, text] = STATUS_ANZEIGE[a.status]; return (
  • {a.name ?? ART_TEXT[a.art]} {" "} {a.art !== "AUSROLLEN" && a.name ? `· ${ART_TEXT[a.art]} ` : ""}· {a.server.name} {a.vmid ? ` · ${a.vmid}` : ""} · {zeitpunkt(a.erstelltAm)} {text}
  • ); })}
)}
); }