diff --git a/app.py b/app.py index 5ad62b8..0f735d3 100644 --- a/app.py +++ b/app.py @@ -1924,8 +1924,17 @@ GERAETE_HEALTH_SPALTEN_SQL = """d.debug_mode_until, d.health_disk_used_percent, def _health_felder_aus_row(debug_mode_until, disk, ram, uptime, load1, load5, load15, collected_at) -> dict: + # Live gefunden (11.09.2026): debug_mode_until wird beim Ablaufen nie + # in der DB geloescht (agent_checkin() vergleicht nur zur Laufzeit + # gegen "jetzt", um das Poll-Intervall zu bestimmen - das bleibt + # korrekt) - aber die Kundenplattform-Anzeige (Auftragskatalog-Seite, + # Geraeteliste) pruefte bisher nur "ist das Feld gesetzt", nicht "liegt + # es noch in der Zukunft" - ein laengst abgelaufener Debug-Modus + # wurde dadurch dauerhaft als "noch aktiv" angezeigt. Hier an der + # Quelle gefiltert, damit kein Aufrufer das selbst wissen muss. + ist_noch_aktiv = debug_mode_until is not None and debug_mode_until > datetime.now(timezone.utc) return { - "debug_mode_until": debug_mode_until.isoformat() if debug_mode_until is not None else None, + "debug_mode_until": debug_mode_until.isoformat() if ist_noch_aktiv else None, "health": { "disk_used_percent": disk, "ram_used_percent": ram, @@ -2930,6 +2939,12 @@ def fetch_unassigned_devices(organization_id: str): """ Geräte einer Organisation ohne Bereitstellungsvorlagen-Zuweisung - die Kandidaten für die Neugerät-Bestätigung (ADR-0008) im Flows-Bereich. + + Live gefunden (11.09.2026): fehlte bisher der "archived_at IS NULL"- + Filter, den fetch_devices_for_organization()/fetch_all_devices() schon + hatten - ein per "Gerät löschen" bereits archiviertes Gerät ohne + Zuweisung erschien dadurch dauerhaft als offene "unbestätigt"-Aufgabe, + obwohl es gar nicht mehr existiert. """ with get_database_connection() as conn: @@ -2939,7 +2954,7 @@ def fetch_unassigned_devices(organization_id: str): SELECT d.id, d.hostname, d.device_fingerprint, d.created_at FROM devices d LEFT JOIN assignments a ON a.device_id = d.id - WHERE d.organization_id = %s AND a.id IS NULL + WHERE d.organization_id = %s AND a.id IS NULL AND d.archived_at IS NULL ORDER BY d.created_at """, (organization_id,), diff --git a/migrations/0040_backend_namen_aufraeumen.sql b/migrations/0040_backend_namen_aufraeumen.sql new file mode 100644 index 0000000..8305021 --- /dev/null +++ b/migrations/0040_backend_namen_aufraeumen.sql @@ -0,0 +1,23 @@ +BEGIN; + +-- GUI-Umbau 11.09.2026 (Nutzer-Wunsch): kuerzere Backend-Namen ohne den +-- "(Golden Image)"-Zusatz, der seit ADR-0024 ohnehin fuer alle drei +-- aktiven Backends gilt und daher keine Unterscheidung mehr traegt. +UPDATE backends SET name = 'Debian' WHERE key = 'debian-image'; +UPDATE backends SET name = 'Mint' WHERE key = 'mint-image'; +UPDATE backends SET name = 'Ubuntu' WHERE key = 'ubuntu-image'; + +-- Das alte, VOR dem Golden-Image-Pivot (ADR-0024) genutzte "mint"-Backend +-- (nicht "mint-image") wird durch "mint-image" vollstaendig ersetzt und +-- hat aktuell keine einzige Bereitstellungsvorlage mehr - gefahrlos +-- loeschbar (blueprints.backend_id hat ON DELETE CASCADE, dort verwaiste +-- Alt-Blueprints verschwinden automatisch mit). +-- +-- "fedora" bewusst NICHT geloescht in dieser Migration: es gibt eine +-- echte Bereitstellungsvorlage ("Schulcomputer (Fedora)", Default Lab) +-- mit RESTRICT-Fremdschluessel und historischen (archivierten) Geraete- +-- Zuweisungen - das braucht eine bewusste, separate Entscheidung, siehe +-- Rueckfrage an den Nutzer. +DELETE FROM backends WHERE key = 'mint'; + +COMMIT;