From 51d105399b0bd5c8652273e614478773ef660365 Mon Sep 17 00:00:00 2001 From: alientim Date: Thu, 13 Aug 2026 15:54:40 +0200 Subject: [PATCH] Kritischen poe.sh-Pfadbug beheben + verschachteltes
in Wartung fixen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - KRITISCH: usr/local/bin/custom/poe.sh wurde bei der TESM-Umbenennung übersehen und zeigte weiterhin komplett auf die alten Pfade (/srv/poe_manager/sqlite.db, /srv/poe_manager/generate_ips.py, /var/log/poe-manager) -- der Ping-Check/PoE-Neustart-Loop (tesm-check.service) lief dadurch seit dem Umzug nur noch auf Fehler ("No such file or directory"), das Live-Log stand seit gestern 19 Uhr still und automatische PoE-Neustarts bei Geräteausfall liefen die ganze Zeit ins Leere. Auf POETEST live behoben und verifiziert: Log schreibt wieder frische Einträge, Checks laufen wieder durch. - Wartung: "Update starten" nahm live IMMER zusätzlich das erste Gerät mit, auch ganz ohne angehakte Checkbox. Ursache: der "Neustart"-Button jeder Zeile saß in einem eigenen , das INNERHALB des großen #updateForm verschachtelt war -- ungültiges HTML, wodurch Browser das äußere Formular vorzeitig schließen/aufspalten. Behoben, indem jedes Neustart- jetzt außerhalb von #updateForm steht und der Button es nur per form="reboot-" referenziert. Live verifiziert: ein gezielt einzeln ausgewähltes Gerät startet jetzt ausschließlich sich selbst, keine leere Auswahl mehr möglich. - Zusätzlich defensiv: Checkboxen werden beim Laden der Wartungsseite jetzt explizit zurückgesetzt (manche Browser stellen den Checked-Zustand nach einem Redirect/Reload sonst aus dem Verlauf wieder her). - Restliche "poe"-Relikte aus der TESM-Umbenennung bereinigt: Export- Dateiname (poe_manager_export_… → tesm_export_…), Kommentare (poe_web.service → tesm.service) sowie ein für den Nutzer sichtbarer Hinweistext in Systemeinstellungen (rpi-check.service → tesm-check.service). --- srv/tesm/app.py | 8 +++--- srv/tesm/static/js/app.js | 2 +- srv/tesm/templates/maintenance.html | 38 ++++++++++++++++++++++++++--- srv/tesm/templates/settings.html | 2 +- usr/local/bin/custom/poe.sh | 12 ++++----- 5 files changed, 46 insertions(+), 16 deletions(-) diff --git a/srv/tesm/app.py b/srv/tesm/app.py index ba54035..7362ef6 100644 --- a/srv/tesm/app.py +++ b/srv/tesm/app.py @@ -140,7 +140,7 @@ os.makedirs(AVATAR_DIR, exist_ok=True) app = Flask(__name__) # Eigene, rotierte Datei für App-seitige Fehler/Warnungen ("Syslog"-Äquivalent -# der App) — vorher landete das nur im journalctl-Output von poe_web.service, +# der App) — vorher landete das nur im journalctl-Output von tesm.service, # ohne eigene, von der App aus kontrollierbare Aufbewahrung. Bewusst nur # WARNING und höher (kein INFO/Request-Rauschen) — reine Fehlerdiagnose, # kein Access-Log. @@ -2788,7 +2788,7 @@ def settings(): else: ok, out = _dhcp_run_privileged(["timedatectl", "set-timezone", new_tz], timeout=10) if ok: - # Ohne tzset() würde diese bereits laufende poe_web.service- + # Ohne tzset() würde diese bereits laufende tesm.service- # Instanz die neue Zeitzone für datetime.now() (Änderungslog, # App-Log) erst nach einem Neustart übernehmen -- glibc # cached die Zeitzone sonst ab dem ersten Zugriff im Prozess. @@ -4399,7 +4399,7 @@ def export_data(): summary = ", ".join(f"{EXPORT_SECTION_LABELS[k]}: {counts[k]}" for k in payload) log_action("data.export", ", ".join(EXPORT_SECTION_LABELS[k] for k in payload), summary) - filename = f"poe_manager_export_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json" + filename = f"tesm_export_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json" response = jsonify(envelope) response.headers["Content-Disposition"] = f"attachment; filename={filename}" return response @@ -5010,7 +5010,7 @@ def credentials(): # auf dem Gerät selbst -- unabhängig davon, ob/wie es an einen Switch # angeschlossen ist. Job-Status lebt bewusst nur im Prozessspeicher (wie # das SSH-Terminal auch keine Sitzung persistiert) -- ein Neustart des -# poe_web.service verwirft laufende Job-Anzeigen, nicht aber die +# tesm.service verwirft laufende Job-Anzeigen, nicht aber die # zugrundeliegende SSH-Aktion selbst (die läuft serverseitig auf dem # Zielgerät unabhängig vom Anzeigezustand hier weiter). # --------------------------------------------------------------------------- diff --git a/srv/tesm/static/js/app.js b/srv/tesm/static/js/app.js index d543894..c6a4523 100644 --- a/srv/tesm/static/js/app.js +++ b/srv/tesm/static/js/app.js @@ -445,7 +445,7 @@ } /* "Jetzt prüfen"-Button neben dem globalen Timer (nur Admins): startet - rpi-check.service neu (frisches Logfile + sofortiger Durchlauf) und + tesm-check.service neu (frisches Logfile + sofortiger Durchlauf) und meldet das per Custom Event, damit Dashboard/Live-Log sich selbst aktualisieren können, ohne dass app.js die Seiteninhalte kennen muss. */ function initRunCheckNow() { diff --git a/srv/tesm/templates/maintenance.html b/srv/tesm/templates/maintenance.html index 839dcd1..cb19af5 100644 --- a/srv/tesm/templates/maintenance.html +++ b/srv/tesm/templates/maintenance.html @@ -68,10 +68,16 @@ {% if can_run %} - - - - + + {% endif %} @@ -97,12 +103,36 @@ {% endif %} + + +{% if can_run %} +{% for d in devices %} +
+ +
+{% endfor %} +{% endif %} {% endif %} {% endblock %} {% block scripts %}