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:
+18
-4
@@ -1264,14 +1264,28 @@ def _restart_check_service():
|
|||||||
def run_check_now():
|
def run_check_now():
|
||||||
"""Manueller 'Jetzt prüfen'-Trigger (Zahnrad-Icon neben dem Prüf-Timer):
|
"""Manueller 'Jetzt prüfen'-Trigger (Zahnrad-Icon neben dem Prüf-Timer):
|
||||||
startet denselben Service neu wie eine Intervalländerung — das erzeugt
|
startet denselben Service neu wie eine Intervalländerung — das erzeugt
|
||||||
sofort ein frisches Logfile mit einem neuen Durchlauf, der Countdown
|
sofort ein frisches Logfile mit einem neuen Durchlauf. Liefert den neuen
|
||||||
'Nächste Prüfung' setzt sich dadurch automatisch auf den manuell
|
Zeitpunkt direkt in der Antwort mit, damit app.js den Topbar-Countdown
|
||||||
ausgelösten Zeitpunkt zurück."""
|
auf JEDER Seite zurücksetzen kann (vorher aktualisierte nur die
|
||||||
|
Dashboard-eigene Live-Aktualisierung die Anzeige — auf allen anderen
|
||||||
|
Seiten lief der Countdown mit dem alten Zeitpunkt weiter, obwohl im
|
||||||
|
Hintergrund längst neu geprüft wurde)."""
|
||||||
if not current_user.is_admin:
|
if not current_user.is_admin:
|
||||||
return {"success": False, "msg": "Keine Berechtigung."}, 403
|
return {"success": False, "msg": "Keine Berechtigung."}, 403
|
||||||
_restart_check_service()
|
_restart_check_service()
|
||||||
log_action("check.run_now", "Prüfintervall")
|
log_action("check.run_now", "Prüfintervall")
|
||||||
return {"success": True, "msg": "Prüfung gestartet."}
|
# Kurz warten, bis der frisch gestartete Dienst den ersten Durchlauf ins
|
||||||
|
# neue Logfile geschrieben hat — dann kann die Antwort den aktuellen
|
||||||
|
# Zeitpunkt direkt mitliefern, ohne dass das Frontend dafür einen
|
||||||
|
# zweiten Request/Endpunkt braucht (Flask läuft threaded, blockiert also
|
||||||
|
# keine anderen Anfragen währenddessen).
|
||||||
|
time.sleep(1.5)
|
||||||
|
last_run_at = get_last_run_at()
|
||||||
|
return {
|
||||||
|
"success": True,
|
||||||
|
"msg": "Prüfung gestartet.",
|
||||||
|
"last_run_epoch_ms": int(last_run_at.timestamp() * 1000) if last_run_at else None,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -297,13 +297,20 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.showToast(data.msg || "Prüfung gestartet.", "success");
|
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"));
|
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.disabled = false;
|
||||||
btn.classList.remove("spinning");
|
btn.classList.remove("spinning");
|
||||||
}, 1500);
|
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
window.showToast("Fehler beim Starten der Prüfung.", "danger");
|
window.showToast("Fehler beim Starten der Prüfung.", "danger");
|
||||||
|
|||||||
Reference in New Issue
Block a user