feat: Live-Metriken via WebSockets (Phase 3)
This commit is contained in:
+20
-5
@@ -72,9 +72,24 @@ async function pollJobs() {
|
||||
catch { /* still */ }
|
||||
}
|
||||
|
||||
async function pollSystem() {
|
||||
try { applySystem(await api("/api/system/status")); }
|
||||
catch { /* still */ }
|
||||
function connectSystemStream() {
|
||||
const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
|
||||
const wsUrl = `${protocol}//${window.location.host}/api/system/stream`;
|
||||
const ws = new WebSocket(wsUrl);
|
||||
|
||||
ws.onmessage = (e) => {
|
||||
try {
|
||||
const data = JSON.parse(e.data);
|
||||
applySystem(data);
|
||||
} catch (err) {}
|
||||
};
|
||||
|
||||
ws.onclose = () => {
|
||||
// Bei Verbindungsabbruch nach 3 Sekunden erneut versuchen
|
||||
setTimeout(connectSystemStream, 3000);
|
||||
};
|
||||
|
||||
ws.onerror = () => ws.close();
|
||||
}
|
||||
|
||||
// ---- Boot ----
|
||||
@@ -106,8 +121,8 @@ document.addEventListener("mc:refresh", pollStatus);
|
||||
|
||||
pollStatus();
|
||||
pollJobs();
|
||||
pollSystem();
|
||||
connectSystemStream();
|
||||
|
||||
setInterval(tickClock, 1000);
|
||||
setInterval(pollStatus, 3000);
|
||||
setInterval(pollJobs, 1500);
|
||||
setInterval(pollSystem, 2000);
|
||||
|
||||
@@ -34,9 +34,9 @@ function kvRow(k, v, cls = "") {
|
||||
return `<div class="kv-row"><span class="kv-k">${k}</span><span class="kv-v ${cls}">${v}</span></div>`;
|
||||
}
|
||||
|
||||
// Chart-Daten (letzte 60 Sekunden, je 3s Polling = 20 Punkte)
|
||||
// Chart-Daten (letzte 30 Sekunden, je 0.5s Stream = 60 Punkte)
|
||||
const hist = { cpu: [], ram: [], gpu: [] };
|
||||
const MAX_HIST = 20;
|
||||
const MAX_HIST = 60;
|
||||
|
||||
function renderSys() {
|
||||
if (!SYS) return;
|
||||
|
||||
Reference in New Issue
Block a user