8.9 KiB
8.9 KiB
Warteschlangen-System für Offline-Drucker - Dokumentation
Übersicht
Das Warteschlangen-System ermöglicht es Benutzern, Druckjobs auch für offline Drucker zu erstellen. Diese Jobs werden automatisch aktiviert, sobald die entsprechenden Drucker wieder online sind.
🔧 Funktionalitäten
1. Universelle Drucker-Anzeige
- Alle Drucker werden in Dropdown-Menüs angezeigt (online und offline)
- Visuelle Unterscheidung:
- ✅ Online-Drucker: Grüner Hintergrund, "ONLINE - Sofortiger Start"
- 🔄 Offline-Drucker: Oranger Hintergrund, "OFFLINE - Warteschlange"
- Status-Informationen: Letzte Überprüfungszeit wird angezeigt
2. Intelligente Job-Erstellung
- Automatische Status-Erkennung: System erkennt automatisch, ob Drucker online/offline ist
- Adaptive Job-Status:
scheduled
- für online Drucker (sofortiger Start)waiting_for_printer
- für offline Drucker (Warteschlange)
3. Background-Überwachung (Queue-Manager)
- Automatische Überwachung alle 2 Minuten
- Status-Checks für alle Drucker mit wartenden Jobs
- Automatische Aktivierung von Jobs bei Online-Statuswechsel
- Thread-sichere Implementierung mit Daemon-Thread
4. Benachrichtigungssystem
- Sofortige Benachrichtigungen wenn Drucker online gehen
- Anti-Spam-Schutz mit 5-Minuten-Cooldown
- Strukturierte Nachrichten mit Job- und Drucker-Details
5. Frontend-Integration
- Live-Status-Anzeige der Warteschlangen
- Manuelle Queue-Checks per Button
- Automatische Updates alle 30 Sekunden
- Benutzerfreundliche Warnungen für offline Drucker
🚀 Implementierte Komponenten
Backend-Komponenten
1. Queue-Manager (utils/queue_manager.py
)
class PrinterQueueManager:
- start() / stop() # Queue-Manager steuern
- _monitor_loop() # Hauptüberwachungsschleife
- _check_waiting_jobs() # Job-Status prüfen und aktualisieren
- _send_job_activation_notification() # Benachrichtigungen senden
- get_queue_status() # Aktueller Warteschlangen-Status
Funktionen:
start_queue_manager()
- Globalen Manager startenstop_queue_manager()
- Globalen Manager stoppenget_queue_manager()
- Manager-Instanz abrufen
2. Erweiterte API-Endpunkte (app.py
)
/api/queue/status # GET - Queue-Status abrufen
/api/queue/check-now # POST - Manuelle Queue-Überprüfung
/api/jobs/check-waiting # POST - Wartende Jobs prüfen (bestehend, erweitert)
3. Job-Erstellung mit Queue-Support
- Automatische Status-Erkennung bei Job-Erstellung
- Intelligente Zuordnung zu
scheduled
oderwaiting_for_printer
- Drucker-Status-Check vor Job-Erstellung
Frontend-Komponenten
1. Verbesserte Drucker-Auswahl
loadPrinters() # Lädt ALLE Drucker mit Live-Status
populatePrinterSelect() # Zeigt alle Drucker mit Status-Indikatoren
setupPrinterStatusWarning() # Konfiguriert Offline-Drucker-Warnungen
2. Queue-Status-Management
loadQueueStatus() # Lädt aktuellen Warteschlangen-Status
updateQueueStatusDisplay() # Aktualisiert Status-Anzeige im UI
triggerQueueCheck() # Manuelle Queue-Überprüfung
3. Automatische Updates
- 30-Sekunden-Intervall für Job-Updates und Queue-Status
- Live-Status-Checks für Drucker
- Reaktive UI-Updates basierend auf Queue-Status
📋 Benutzer-Workflow
1. Job für Online-Drucker erstellen
- Benutzer wählt Online-Drucker (✅ grün markiert)
- Job wird mit Status
scheduled
erstellt - Job startet sofort zur geplanten Zeit
2. Job für Offline-Drucker erstellen
- Benutzer wählt Offline-Drucker (🔄 orange markiert)
- Ausführliche Warnung wird angezeigt mit Details zum Warteschlangen-Modus
- Benutzer bestätigt bewusst die Warteschlangen-Erstellung
- Job wird mit Status
waiting_for_printer
erstellt - Automatische Überwachung startet
3. Automatische Job-Aktivierung
- Queue-Manager überwacht Drucker-Status alle 2 Minuten
- Sobald Drucker online geht:
- Job-Status wechselt zu
scheduled
- Benachrichtigung wird an Benutzer gesendet
- Job startet zur geplanten Zeit
- Job-Status wechselt zu
🔧 Technische Details
Datenbank-Schema
-- Bestehende Job-Status erweitert:
Job.status = 'waiting_for_printer' -- Neuer Status für wartende Jobs
Job.status = 'scheduled' -- Bestehender Status für geplante Jobs
-- Drucker-Status:
Printer.status = 'available'/'offline'
Printer.last_checked = DATETIME -- Letzter Status-Check
Queue-Manager-Konfiguration
check_interval = 120 # 2 Minuten zwischen Status-Checks
timeout = 5 # 5 Sekunden Timeout für Drucker-Ping
notification_cooldown = 300 # 5 Minuten Anti-Spam für Benachrichtigungen
Frontend-Update-Intervalle
Auto-Updates: 30 Sekunden # Jobs, Queue-Status, Drucker-Status
Manual-Check: Sofort # Benutzer-getriggerte Überprüfung
🛡️ Sicherheit & Stabilität
1. Thread-Sicherheit
- Daemon-Thread für Queue-Manager (stoppt automatisch bei App-Shutdown)
- Thread-sichere Datenbank-Sessions
- Exception-Handling in allen Überwachungsschleifen
2. Fehler-Behandlung
- Graceful Degradation bei API-Fehlern
- Fallback-Mechanismen für Status-Checks
- Detaillierte Logging für Debugging
3. Performance-Optimierung
- Status-Caching verhindert redundante Checks
- Batch-Processing für mehrere Jobs
- Optimierte Datenbankabfragen
4. Anti-Spam-Schutz
- Cooldown-Mechanismus für Benachrichtigungen
- Rate-Limiting für manuelle Queue-Checks
📊 Monitoring & Logging
Log-Kategorien
queue_logger.info("✅ Printer Queue Manager erfolgreich gestartet")
queue_logger.info("🟢 Drucker {name} ist ONLINE geworden")
queue_logger.info("📧 Benachrichtigung für User {user} gesendet")
queue_logger.error("❌ Fehler beim Überprüfen wartender Jobs")
Queue-Status-API
{
"waiting_jobs": 3,
"offline_printers_with_queue": 2,
"online_printers": 4,
"total_printers": 6,
"queue_manager_running": true,
"last_check": "2024-01-15T10:30:00Z",
"check_interval_seconds": 120
}
🎯 Vorteile des Systems
1. Benutzerfreundlichkeit
- ✅ Alle Drucker sichtbar - keine versteckten Optionen
- ✅ Klare Status-Indikatoren - sofort erkennbar welcher Drucker verfügbar ist
- ✅ Transparente Warteschlangen - Benutzer wissen immer, was passiert
- ✅ Automatische Benachrichtigungen - keine manuelle Überwachung nötig
2. Technische Robustheit
- ✅ Automatische Überwachung - läuft im Hintergrund ohne Benutzerinteraktion
- ✅ Fehlerresistenz - System funktioniert auch bei temporären Netzwerkproblemen
- ✅ Skalierbarkeit - unterstützt beliebig viele Drucker und Jobs
- ✅ Thread-Sicherheit - keine Konflikte bei parallelen Zugriffen
3. Produktivitätssteigerung
- ✅ Keine verlorenen Jobs - Jobs warten automatisch auf verfügbare Drucker
- ✅ Optimale Ressourcennutzung - Drucker werden sofort bei Verfügbarkeit genutzt
- ✅ Reduzierte Administrationsaufwände - automatisches Management
- ✅ Verbesserte Planbarkeit - transparente Warteschlangen-Informationen
🚀 Deployment & Konfiguration
1. Automatischer Start
Der Queue-Manager startet automatisch beim App-Start:
# In app.py - Startup-Sequenz
queue_manager = start_queue_manager()
atexit.register(cleanup_queue_manager)
2. Konfiguration
# In utils/queue_manager.py
check_interval = 120 # Überwachungsintervall (Sekunden)
notification_cooldown = 300 # Benachrichtigungs-Cooldown (Sekunden)
timeout = 5 # Drucker-Ping-Timeout (Sekunden)
3. Dependencies
- Keine zusätzlichen Python-Packages erforderlich
- Nutzt bestehende
threading
,time
,datetime
Module - Integriert sich nahtlos in vorhandene Datenbank-Struktur
📝 Wartung & Troubleshooting
Häufige Probleme & Lösungen
1. Queue-Manager läuft nicht
# Log prüfen:
tail -f logs/queue_manager/queue_manager.log
# Manueller Neustart über API:
POST /api/queue/check-now
2. Drucker werden nicht erkannt
# Drucker-Status-Check:
GET /api/printers/status/live
# Netzwerk-Konnektivität prüfen:
ping [drucker-ip]
3. Jobs bleiben in Warteschlange
# Queue-Status prüfen:
GET /api/queue/status
# Manueller Check:
POST /api/queue/check-now
Performance-Tuning
# Für viele Drucker (>20):
check_interval = 300 # 5 Minuten statt 2 Minuten
# Für kritische Umgebungen:
check_interval = 60 # 1 Minute für schnellere Reaktion
Implementiert am: [Aktuelles Datum]
Version: 1.0
Kompatibilität: MYP 3D-Druck Platform v2.0+