Feldtest auf zwei echten Proxmox-VE-9.2-Hosts (#018): Installation, Timer, Zwischenspeicher und Nachsenden laufen wie vorgesehen. `pvesubscription get` kennt kein JSON, ohne Subscription fehlen fast alle Felder, `pveversion` enthaelt den Kernel doppelt - alles im Agent beruecksichtigt. Dabei zeigte sich: in Proxmox hat jeder Knoten eine eigene Subscription. Der Agent meldet darum die Cluster-Mitglieder aus `pvecm nodes`, und eine elfte Warnregel meldet Knoten, von denen sich kein Agent meldet (#022). Ausserdem behoben: die Bilder des Handbuchs zeigten allesamt die Anmeldeseite, weil Firefox eine selbst erzeugte Cookie-Datei stillschweigend verwirft. Das Skript nutzt jetzt einen lokalen Vermittler und bricht ab, wenn alle Aufnahmen gleich gross sind. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -46,6 +46,16 @@ export default async function HostDetailSeite({ params }: { params: Promise<{ id
|
||||
select: { id: true, name: true },
|
||||
});
|
||||
|
||||
// Welche Cluster-Mitglieder melden sich selbst? Fehlende Knoten haben keinen Agent (#022).
|
||||
const geschwister =
|
||||
host.clusterMitglieder.length > 0
|
||||
? await prisma.host.findMany({
|
||||
where: { hostname: { in: host.clusterMitglieder, mode: "insensitive" } },
|
||||
select: { id: true, hostname: true, subStatus: true, letzterReportAm: true },
|
||||
})
|
||||
: [];
|
||||
const meldende = new Map(geschwister.map((eintrag) => [eintrag.hostname.toLowerCase(), eintrag]));
|
||||
|
||||
const jetzt = new Date();
|
||||
const meldetNicht = !host.letzterReportAm || host.letzterReportAm < meldungsGrenze(jetzt);
|
||||
const socketAbweichung =
|
||||
@@ -113,6 +123,31 @@ export default async function HostDetailSeite({ params }: { params: Promise<{ id
|
||||
<Zeile bezeichnung="Cluster / Node">
|
||||
{host.clusterName ? `${host.clusterName} / ${host.nodeName ?? "?"}` : "–"}
|
||||
</Zeile>
|
||||
{host.clusterMitglieder.length > 0 ? (
|
||||
<Zeile bezeichnung={`Cluster-Knoten (${host.clusterMitglieder.length})`}>
|
||||
<span className="d-inline-block text-start">
|
||||
{host.clusterMitglieder.map((mitglied) => {
|
||||
const eintrag = meldende.get(mitglied.toLowerCase());
|
||||
return (
|
||||
<span key={mitglied} className="d-block small">
|
||||
{eintrag ? (
|
||||
<Link href={`/hosts/${eintrag.id}`} className="text-decoration-none">
|
||||
{mitglied}
|
||||
</Link>
|
||||
) : (
|
||||
mitglied
|
||||
)}{" "}
|
||||
{eintrag ? (
|
||||
<Badge farbe="success">meldet sich</Badge>
|
||||
) : (
|
||||
<Badge farbe="warning">kein Agent</Badge>
|
||||
)}
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
</span>
|
||||
</Zeile>
|
||||
) : null}
|
||||
<Zeile bezeichnung="IP-Adressen">{host.ips.join(", ") || "–"}</Zeile>
|
||||
<Zeile bezeichnung="CPU">{host.cpuModell ?? "–"}</Zeile>
|
||||
<Zeile bezeichnung="Sockets (lizenziert / physisch)">
|
||||
|
||||
Reference in New Issue
Block a user