Fix: 'Jetzt pruefen' aktualisierte Topbar-Countdown nur auf dem Dashboard

Der Klick loeste den Neustart von rpi-check.service und damit einen
echten, sofortigen Pruef-Durchlauf immer korrekt aus -- nur die
Topbar-Anzeige 'Naechste Pruefung in Xs' wurde ausserhalb des Dashboards
nie aktualisiert, da nur index.html einen Listener fuer das
poe:check-triggered-Event registrierte. Auf allen anderen Seiten (DHCP,
Switches, Settings, ...) lief der Countdown deshalb sichtbar mit dem alten
Zeitpunkt weiter, obwohl im Hintergrund laengst neu geprueft wurde.

Fix (klein gehalten, kein neuer Endpunkt): run_check_now() wartet kurz auf
den ersten Log-Eintrag des frisch gestarteten Dienstes und liefert den
neuen Zeitpunkt direkt in seiner bestehenden JSON-Antwort mit. app.js
schreibt diesen Wert danach unabhaengig von der aktuellen Seite ins
global-timer-pill-Element -- der laufende Countdown liest seine Werte
ohnehin bei jedem Tick frisch aus dem DOM.

Live auf der Test-VM verifiziert (mehrere echte Durchlaeufe ueber
/check/run-now, frischer last_run_epoch_ms in der Antwort, keine Fehler
im journalctl-Log).
This commit is contained in:
2026-08-11 14:51:07 +02:00
parent bf9b816fa2
commit 182457629d
2 changed files with 32 additions and 11 deletions
+14 -7
View File
@@ -297,13 +297,20 @@
return;
}
window.showToast(data.msg || "Prüfung gestartet.", "success");
// Der Service braucht einen Moment, um neu zu starten und den
// ersten Durchlauf ins frische Logfile zu schreiben.
setTimeout(() => {
document.dispatchEvent(new CustomEvent("poe:check-triggered"));
btn.disabled = false;
btn.classList.remove("spinning");
}, 1500);
document.dispatchEvent(new CustomEvent("poe:check-triggered"));
// Topbar-Countdown auf JEDER Seite aktualisieren, nicht nur auf
// dem Dashboard — vorher lief er auf allen anderen Seiten mit dem
// alten Zeitpunkt weiter, obwohl im Hintergrund längst neu geprüft
// wurde (die Prüfung lief trotzdem korrekt, nur sichtbar tat sich
// nichts). Der Server liefert den frischen Zeitpunkt direkt in
// dieser Antwort mit (siehe run_check_now) statt eines zweiten
// Requests dafür.
const pill = document.getElementById("global-timer-pill");
if (pill && data.last_run_epoch_ms) {
pill.dataset.lastRunMs = data.last_run_epoch_ms;
}
btn.disabled = false;
btn.classList.remove("spinning");
})
.catch(() => {
window.showToast("Fehler beim Starten der Prüfung.", "danger");