Files
proxdeploy/docs/issues/006-auftraege-sse.md
T
florian.wildeandClaude Opus 5.5 76bc0e4269 feat(auftraege): worker, Phasen und Live-Fortschritt per SSE
Aufträge laufen als pg-boss-Jobs im worker. Der Phasen-Runner der Engine
kennt weder Proxmox noch Datenbank; eine Senke schreibt Phasen und Log
in die DB und meldet per NOTIFY, die app streamt per SSE an Web und CLI
(Last-Event-ID, Herzschlag, Polling-Fallback im Browser).

VMIDs vergibt eine Advisory-Sperre je Server zusammen mit einer
Reservierungstabelle; zehn parallele Reservierungen im Test bekommen
zehn verschiedene IDs. Der Proxmox-Client hat einen Trockenmodus für
den Dry-Run: Lesendes echt, Schreibendes nur aufgezeichnet.

Live-Ansicht im Aufbau der CLI-Ausgabe. Im echten Betrieb aufgefallen:
ssh2 und pg sind CommonJS und brauchen im worker Default-Importe.

Closes #006

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 10:54:41 +02:00

1.8 KiB
Raw Blame History

#006 Aufträge, Phasen, worker und Live-Fortschritt

Status: erledigt Meilenstein: v0.2.0 Labels: feature, engine Geschätzt: 8 h Tatsächlich: 0 h 15 min

Ziel

Hintergrund-Jobs mit Phasen in der DB, live per SSE in der Web-GUI.

Aufgaben

  • pg-boss im worker, Modelle Auftrag, Phase, Logeintrag, VmidReservierung
  • Phasen-Runner (frameworkfrei) mit Ereignis-Senke (DB + NOTIFY), Fehler mit Ursache + Hinweis, Abbruch zwischen Phasen
  • SSE-Endpunkt mit Last-Event-ID, Herzschlag, X-Accel-Buffering: no; Polling-Fallback im Client
  • VMID-Vergabe mit Advisory-Lock, Test mit zehn parallelen Reservierungen
  • Live-Ansicht als Terminal-Karte (Aufbau der CLI-Ausgabe), Detail-Log, Ergebnis-Box; Verlaufsseite
  • Verwaiste Aufträge nach worker-Neustart als fehlgeschlagen markieren; doppelt gelieferte Jobs laufen nur einmal

Akzeptanzkriterien

  • Zwei parallele Aufträge bekommen nie dieselbe VMID (Test)
  • Neuladen der Seite mitten im Auftrag zeigt den vollständigen Stand (Stand kommt immer ganz, Log ab Last-Event-ID)
  • Live geprüft mit einem echten Template-Bau auf pve-demo (#007)

Abhängigkeiten

#003

Notizen / Entscheidungen

  • ssh2 und pg sind CommonJS: benannte Importe gehen im Next-Bundle, aber nicht im worker unter reinem Node-ESM – jetzt Default-Importe.
  • Der worker lädt .env selbst (process.loadEnvFile, falls vorhanden); im Container kommt die Umgebung von außen.
  • Kein automatisches Wiederholen (retryLimit: 0): halb angelegte Gäste soll ein Mensch ansehen.
  • Abfrageschleifen (Task-Status, VM-Status) erscheinen im Detail-Log nur bei Fehlern.
  • Kopfzeile (Auftrag.kopf) setzt die Engine – Web und CLI zeigen denselben Text.
  • Client-Komponenten importieren nichts aus src/server (struktureller Test in tests/zugang.test.ts).