[Frontend] Neuer Tab "Dienste" im VM-Modal: laufende Dienste, Ausblendliste, Rollen mit Evidenz #217

Open
opened 2026-07-20 22:55:25 +00:00 by chinux · 1 comment
Owner

Frontend-Haelfte zu #215 / #216: ein eigener Tab im VM-Modal, der die laufenden Dienste zeigt und ueber den die Ausblendliste gepflegt wird.

Warum ein eigener Tab

Die Dienste sind die Grundlage der Rollen-Ableitung (#216). Damit die Ableitung ueberpruefbar und korrigierbar bleibt, muss man sehen koennen, worauf sie sich stuetzt — und direkt dort eingreifen, statt in einer separaten Einstellungsmaske. Der Kurationsschritt gehoert an die Stelle, an der man das Problem bemerkt.

Bestand

frontend/src/lib/components/admin-vm-modal/ mit 16 Tabs. Registrierung an drei Stellen:

  • types.ts:6 — Union-Typ VmTabId
  • types.ts:29VmTabDefinition (id, label, …)
  • VmModalShell.svelte — Import + Pane im Scroll-Container

PortsTab.svelte ist die naechstliegende Vorlage: gleiche Datenform (Liste mit Prozessbezug), gleiche Herkunft aus dem Guest-Agent.


Prompt fuer Claude Code

Baue einen "Dienste"-Tab ins VM-Modal von theProx.
SETZT #216 VORAUS (API + Klassifizierung liegen dort).
Svelte 5 Runes ($state/$derived/$effect), keine neuen Stores erfinden,
bestehende $lib/api.ts-Konventionen nutzen.

--- 1. REGISTRIERUNG ---
types.ts: VmTabId um "services" erweitern, Tab-Definition ergaenzen
(Label "Dienste"). Position: direkt NACH "ports" — inhaltlich verwandt,
und der Nutzer sucht beides am selben Ort.
VmModalShell.svelte: Import + Pane analog zu PortsTab.

Tab NUR anzeigen, wenn Daten vorliegen (vm.services_total > 0). Bei einer
VM ohne Agent oder mit altem Agent waere ein leerer Tab nur verwirrend —
Muster von DockerTab uebernehmen, der macht das bereits so.

--- 2. ServicesTab.svelte ---
Daten: GET /api/vms/{node}/{vmid}/services -> {relevant, hidden, system, counts}

Kopfzeile:
    "18 von 247 Diensten" + Umschalter:
    [ Relevant (18) ] [ Ausgeblendet (12) ] [ Bordmittel (217) ] [ Alle ]

Standardansicht ist "Relevant". Die anderen sind bewusst erreichbar, aber
nicht aufdringlich — wer etwas sucht, das die Automatik aussortiert hat,
muss es finden koennen, ohne dass die Liste im Normalfall unbrauchbar wird.

Tabelle je Dienst:
    | Dienst | Anzeigename | Status | Start | Konto | Aktion |

  - Status als farbiger Chip (Running gruen, Stopped grau, sonst gelb) —
    vm-chip-Muster aus SettingsTab.svelte wiederverwenden
  - "Konto" nur anzeigen, wenn es NICHT LocalSystem/NetworkService/
    LocalService ist; ein Domaenenkonto ist die interessante Ausnahme
  - Aktion: "Ausblenden" bzw. bei bereits ausgeblendeten "Einblenden"
  - Bei ausgeblendeten Zeilen die greifende Regel anzeigen
    ("global: Acme*") — sonst ist unklar, warum etwas fehlt

WICHTIG: Der Tab ist REIN LESEND, was die Dienste selbst angeht. Keine
Start/Stop/Restart-Buttons. Der Agent hat diese Faehigkeit bewusst nicht
(#215), und das UI darf sie nicht suggerieren.

--- 3. AUSBLENDEN-DIALOG ---
Beim Klick auf "Ausblenden" ein kleiner Dialog, KEINE Sofortaktion:

    Dienst "AcmeUpdaterSvc" ausblenden
    ( ) nur auf dieser VM
    (•) auf allen VMs            <- Vorauswahl
    [ ] Namensmuster verwenden:  [ Acme* ]
    Notiz (optional):            [ ______________ ]
    [Abbrechen] [Ausblenden]

Global ist die Vorauswahl, weil ein uninteressanter Dienst das auf allen
Guests ist — sonst trifft man dieselbe Entscheidung 79-mal.

Das Muster-Feld wird aus dem Dienstnamen vorbefuellt (bis zur ersten
Ziffer bzw. dem ersten Trennzeichen), ist aber editierbar. Live-Vorschau:
"trifft aktuell 6 Dienste auf 4 VMs" — vor dem Bestaetigen, nicht danach.

--- 4. ROLLEN-BLOCK ---
Ueber der Tabelle ein kompakter Block:

    Erkannte Rollen:  [Mail] [Datenbank]        Sicherheit: hoch
    Grundlage: Dienst MSExchangeIS, Dienst MSSQL$SQLEXPRESS
    [Rollen manuell festlegen]

Der Evidenz-Satz ist der Kern: eine Rolle, die man nicht nachvollziehen
kann, kann man auch nicht widerlegen.

"Rollen manuell festlegen" -> Multi-Select aus den bekannten Rollen +
Freitext, PATCH auf /api/vms/{node}/{vmid}/roles mit role_locked=true.
Danach Hinweis "manuell gesetzt — automatische Erkennung ist fuer diese VM
deaktiviert" mit "Zuruecksetzen"-Link.

--- 5. WINDOWS-ROLLEN ---
Wenn windows_roles[] nicht leer ist, eine eigene Sektion "Windows-Rollen"
UEBER den Diensten. Das sind wenige, autoritative Eintraege und die beste
Antwort auf "was ist diese Maschine" — sie duerfen nicht zwischen 18
Diensten untergehen.

--- 6. LEER- UND FEHLERZUSTAENDE ---
  - Kein Agent: "Kein VM-Agent installiert — keine Dienstdaten verfuegbar."
    plus Link/Button zur Agent-Installation, falls actions.installAgent
    vorhanden (Muster: VmModalShell.svelte:142)
  - Agent zu alt (services fehlt, aber Agent laeuft): "Agent-Update noetig
    fuer Dienstdaten" mit Version
  - scan_partial mit "services" in scan_failed_collectors (#214):
    "Dienst-Erfassung beim letzten Scan nicht durchgelaufen" — NICHT als
    "keine Dienste" darstellen
  - Alle Bordmittel, nichts relevant: "Keine Fremdsoftware-Dienste
    gefunden" statt einer leeren Tabelle

--- 7. SUCHE ---
Ein Filterfeld ueber der Tabelle (Name + Anzeigename, case-insensitiv,
clientseitig). Bei 247 Eintraegen in der "Alle"-Ansicht sonst unbenutzbar.
Kein Debounce-Overkill noetig, die Liste liegt bereits im Speicher.

--- 8. REGELVERWALTUNG ---
Die globalen Regeln zusaetzlich zentral pflegbar machen: im bestehenden
Settings-Bereich ein Abschnitt "Ausgeblendete Dienste" mit Liste
(Muster, Bereich, Notiz, Anzahl Treffer, Loeschen). Ohne das sammeln sich
Regeln an, die niemand mehr findet. Keine eigene Seite noetig, ein
Abschnitt reicht.

--- 9. TESTS/ABNAHME ---
  - Tab erscheint nicht ohne Dienstdaten
  - Umschalter zeigt die korrekten Zahlen, Summe = total
  - Ausblenden global wirkt sofort auf einer zweiten VM (ohne Reload)
  - Einblenden macht es sofort rueckgaengig
  - Musterverwendung: Vorschau-Zahl stimmt mit dem Ergebnis ueberein
  - role_locked -> Automatik-Hinweis verschwindet, manueller Wert bleibt
    nach Reload
  - Keine Start/Stop-Steuerung im gesamten Tab

Definition of Done

  • Tab "Dienste" im VM-Modal, nur bei vorhandenen Daten
  • Vier Ansichten (relevant / ausgeblendet / Bordmittel / alle) mit korrekten Zaehlern
  • Ausblenden global als Vorauswahl, mit Muster-Vorschau vor dem Bestaetigen
  • Ausgeblendete Dienste zeigen die greifende Regel
  • Rollen mit Evidenz sichtbar, manuell ueberschreibbar
  • Windows-Rollen als eigene Sektion
  • Keinerlei Steuerungsmoeglichkeit fuer Dienste
  • Globale Regeln zentral einsehbar und loeschbar
Frontend-Haelfte zu #215 / #216: ein eigener Tab im VM-Modal, der die laufenden Dienste zeigt und ueber den die Ausblendliste gepflegt wird. ## Warum ein eigener Tab Die Dienste sind die Grundlage der Rollen-Ableitung (#216). Damit die Ableitung ueberpruefbar und korrigierbar bleibt, muss man sehen koennen, worauf sie sich stuetzt — und direkt dort eingreifen, statt in einer separaten Einstellungsmaske. Der Kurationsschritt gehoert an die Stelle, an der man das Problem bemerkt. ## Bestand `frontend/src/lib/components/admin-vm-modal/` mit 16 Tabs. Registrierung an drei Stellen: - `types.ts:6` — Union-Typ `VmTabId` - `types.ts:29` — `VmTabDefinition` (id, label, …) - `VmModalShell.svelte` — Import + Pane im Scroll-Container `PortsTab.svelte` ist die naechstliegende Vorlage: gleiche Datenform (Liste mit Prozessbezug), gleiche Herkunft aus dem Guest-Agent. --- ## Prompt fuer Claude Code ``` Baue einen "Dienste"-Tab ins VM-Modal von theProx. SETZT #216 VORAUS (API + Klassifizierung liegen dort). Svelte 5 Runes ($state/$derived/$effect), keine neuen Stores erfinden, bestehende $lib/api.ts-Konventionen nutzen. --- 1. REGISTRIERUNG --- types.ts: VmTabId um "services" erweitern, Tab-Definition ergaenzen (Label "Dienste"). Position: direkt NACH "ports" — inhaltlich verwandt, und der Nutzer sucht beides am selben Ort. VmModalShell.svelte: Import + Pane analog zu PortsTab. Tab NUR anzeigen, wenn Daten vorliegen (vm.services_total > 0). Bei einer VM ohne Agent oder mit altem Agent waere ein leerer Tab nur verwirrend — Muster von DockerTab uebernehmen, der macht das bereits so. --- 2. ServicesTab.svelte --- Daten: GET /api/vms/{node}/{vmid}/services -> {relevant, hidden, system, counts} Kopfzeile: "18 von 247 Diensten" + Umschalter: [ Relevant (18) ] [ Ausgeblendet (12) ] [ Bordmittel (217) ] [ Alle ] Standardansicht ist "Relevant". Die anderen sind bewusst erreichbar, aber nicht aufdringlich — wer etwas sucht, das die Automatik aussortiert hat, muss es finden koennen, ohne dass die Liste im Normalfall unbrauchbar wird. Tabelle je Dienst: | Dienst | Anzeigename | Status | Start | Konto | Aktion | - Status als farbiger Chip (Running gruen, Stopped grau, sonst gelb) — vm-chip-Muster aus SettingsTab.svelte wiederverwenden - "Konto" nur anzeigen, wenn es NICHT LocalSystem/NetworkService/ LocalService ist; ein Domaenenkonto ist die interessante Ausnahme - Aktion: "Ausblenden" bzw. bei bereits ausgeblendeten "Einblenden" - Bei ausgeblendeten Zeilen die greifende Regel anzeigen ("global: Acme*") — sonst ist unklar, warum etwas fehlt WICHTIG: Der Tab ist REIN LESEND, was die Dienste selbst angeht. Keine Start/Stop/Restart-Buttons. Der Agent hat diese Faehigkeit bewusst nicht (#215), und das UI darf sie nicht suggerieren. --- 3. AUSBLENDEN-DIALOG --- Beim Klick auf "Ausblenden" ein kleiner Dialog, KEINE Sofortaktion: Dienst "AcmeUpdaterSvc" ausblenden ( ) nur auf dieser VM (•) auf allen VMs <- Vorauswahl [ ] Namensmuster verwenden: [ Acme* ] Notiz (optional): [ ______________ ] [Abbrechen] [Ausblenden] Global ist die Vorauswahl, weil ein uninteressanter Dienst das auf allen Guests ist — sonst trifft man dieselbe Entscheidung 79-mal. Das Muster-Feld wird aus dem Dienstnamen vorbefuellt (bis zur ersten Ziffer bzw. dem ersten Trennzeichen), ist aber editierbar. Live-Vorschau: "trifft aktuell 6 Dienste auf 4 VMs" — vor dem Bestaetigen, nicht danach. --- 4. ROLLEN-BLOCK --- Ueber der Tabelle ein kompakter Block: Erkannte Rollen: [Mail] [Datenbank] Sicherheit: hoch Grundlage: Dienst MSExchangeIS, Dienst MSSQL$SQLEXPRESS [Rollen manuell festlegen] Der Evidenz-Satz ist der Kern: eine Rolle, die man nicht nachvollziehen kann, kann man auch nicht widerlegen. "Rollen manuell festlegen" -> Multi-Select aus den bekannten Rollen + Freitext, PATCH auf /api/vms/{node}/{vmid}/roles mit role_locked=true. Danach Hinweis "manuell gesetzt — automatische Erkennung ist fuer diese VM deaktiviert" mit "Zuruecksetzen"-Link. --- 5. WINDOWS-ROLLEN --- Wenn windows_roles[] nicht leer ist, eine eigene Sektion "Windows-Rollen" UEBER den Diensten. Das sind wenige, autoritative Eintraege und die beste Antwort auf "was ist diese Maschine" — sie duerfen nicht zwischen 18 Diensten untergehen. --- 6. LEER- UND FEHLERZUSTAENDE --- - Kein Agent: "Kein VM-Agent installiert — keine Dienstdaten verfuegbar." plus Link/Button zur Agent-Installation, falls actions.installAgent vorhanden (Muster: VmModalShell.svelte:142) - Agent zu alt (services fehlt, aber Agent laeuft): "Agent-Update noetig fuer Dienstdaten" mit Version - scan_partial mit "services" in scan_failed_collectors (#214): "Dienst-Erfassung beim letzten Scan nicht durchgelaufen" — NICHT als "keine Dienste" darstellen - Alle Bordmittel, nichts relevant: "Keine Fremdsoftware-Dienste gefunden" statt einer leeren Tabelle --- 7. SUCHE --- Ein Filterfeld ueber der Tabelle (Name + Anzeigename, case-insensitiv, clientseitig). Bei 247 Eintraegen in der "Alle"-Ansicht sonst unbenutzbar. Kein Debounce-Overkill noetig, die Liste liegt bereits im Speicher. --- 8. REGELVERWALTUNG --- Die globalen Regeln zusaetzlich zentral pflegbar machen: im bestehenden Settings-Bereich ein Abschnitt "Ausgeblendete Dienste" mit Liste (Muster, Bereich, Notiz, Anzahl Treffer, Loeschen). Ohne das sammeln sich Regeln an, die niemand mehr findet. Keine eigene Seite noetig, ein Abschnitt reicht. --- 9. TESTS/ABNAHME --- - Tab erscheint nicht ohne Dienstdaten - Umschalter zeigt die korrekten Zahlen, Summe = total - Ausblenden global wirkt sofort auf einer zweiten VM (ohne Reload) - Einblenden macht es sofort rueckgaengig - Musterverwendung: Vorschau-Zahl stimmt mit dem Ergebnis ueberein - role_locked -> Automatik-Hinweis verschwindet, manueller Wert bleibt nach Reload - Keine Start/Stop-Steuerung im gesamten Tab ``` ## Definition of Done - [ ] Tab "Dienste" im VM-Modal, nur bei vorhandenen Daten - [ ] Vier Ansichten (relevant / ausgeblendet / Bordmittel / alle) mit korrekten Zaehlern - [ ] Ausblenden global als Vorauswahl, mit Muster-Vorschau vor dem Bestaetigen - [ ] Ausgeblendete Dienste zeigen die greifende Regel - [ ] Rollen mit Evidenz sichtbar, manuell ueberschreibbar - [ ] Windows-Rollen als eigene Sektion - [ ] Keinerlei Steuerungsmoeglichkeit fuer Dienste - [ ] Globale Regeln zentral einsehbar und loeschbar
Author
Owner

Setzt #216 voraus.

Setzt #216 voraus.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
chinux/theProx#217
No description provided.