# 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`) ```python 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 starten - `stop_queue_manager()` - Globalen Manager stoppen - `get_queue_manager()` - Manager-Instanz abrufen #### 2. **Erweiterte API-Endpunkte** (`app.py`) ```python /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` oder `waiting_for_printer` - Drucker-Status-Check vor Job-Erstellung ### Frontend-Komponenten #### 1. **Verbesserte Drucker-Auswahl** ```javascript loadPrinters() # Lädt ALLE Drucker mit Live-Status populatePrinterSelect() # Zeigt alle Drucker mit Status-Indikatoren setupPrinterStatusWarning() # Konfiguriert Offline-Drucker-Warnungen ``` #### 2. **Queue-Status-Management** ```javascript 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** 1. Benutzer wählt **Online-Drucker** (✅ grün markiert) 2. Job wird mit Status `scheduled` erstellt 3. Job startet **sofort** zur geplanten Zeit ### 2. **Job für Offline-Drucker erstellen** 1. Benutzer wählt **Offline-Drucker** (🔄 orange markiert) 2. **Ausführliche Warnung** wird angezeigt mit Details zum Warteschlangen-Modus 3. Benutzer bestätigt **bewusst** die Warteschlangen-Erstellung 4. Job wird mit Status `waiting_for_printer` erstellt 5. **Automatische Überwachung** startet ### 3. **Automatische Job-Aktivierung** 1. **Queue-Manager** überwacht Drucker-Status alle 2 Minuten 2. Sobald Drucker **online** geht: - Job-Status wechselt zu `scheduled` - **Benachrichtigung** wird an Benutzer gesendet - Job startet zur **geplanten Zeit** ## 🔧 Technische Details ### Datenbank-Schema ```sql -- 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 ```python 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 ```javascript 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 ```python 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 ```json { "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: ```python # In app.py - Startup-Sequenz queue_manager = start_queue_manager() atexit.register(cleanup_queue_manager) ``` ### 2. **Konfiguration** ```python # 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** ```bash # 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** ```bash # Drucker-Status-Check: GET /api/printers/status/live # Netzwerk-Konnektivität prüfen: ping [drucker-ip] ``` #### 3. **Jobs bleiben in Warteschlange** ```bash # Queue-Status prüfen: GET /api/queue/status # Manueller Check: POST /api/queue/check-now ``` ### Performance-Tuning ```python # 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+