From 025ec1f2401d629c5c98063f97a9b0d5e322d47f Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Fri, 20 Jun 2025 12:05:58 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Improved=20Dockerfile=20and=20do?= =?UTF-8?q?cumentation=20files=20for=20better=20OTP=20Drucker=20Verf/Gbark?= =?UTF-8?q?eitsverbesserung=20and=20Template=20Backend=20Zuordnung.=20?= =?UTF-8?q?=F0=9F=93=9A=20Updated=20various=20log=20files=20for=20enhanced?= =?UTF-8?q?=20monitoring=20and=20debugging=20capabilities.=20=F0=9F=90=9B?= =?UTF-8?q?=20Refactored=20guest=20blueprint=20and=20related=20logs=20for?= =?UTF-8?q?=20improved=20performance.=20=F0=9F=92=84=20Fixed=20minor=20iss?= =?UTF-8?q?ues=20in=20templates=20and=20job=20queue=20system=20logs.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile.simple | 4 + .../OTP_DRUCKER_VERFÜGBARKEIT_VERBESSERUNG.md | 1 + backend/DOCS/Template-Backend-Zuordnung.md | 446 +++++++++ .../__pycache__/guest.cpython-313.pyc | Bin 56356 -> 68351 bytes backend/blueprints/guest.py | 333 ++++++- backend/logs/admin/admin.log | 26 + backend/logs/admin_api/admin_api.log | 3 + backend/logs/api/api.log | 14 + backend/logs/app/app.log | 912 ++++++++++++++++++ backend/logs/auth/auth.log | 3 + backend/logs/core_system/core_system.log | 10 + .../logs/data_management/data_management.log | 10 + .../drucker_steuerung/drucker_steuerung.log | 5 + .../energy_monitoring/energy_monitoring.log | 9 + backend/logs/guest/guest.log | 6 + .../hardware_integration.log | 37 + .../job_queue_system/job_queue_system.log | 20 + backend/logs/jobs/jobs.log | 6 + backend/logs/models/models.log | 4 + .../monitoring_analytics.log | 10 + backend/logs/permissions/permissions.log | 11 + backend/logs/scheduler/scheduler.log | 117 +++ .../logs/security_suite/security_suite.log | 15 + backend/logs/startup/startup.log | 45 + .../utilities_collection.log | 14 + backend/logs/windows_fixes/windows_fixes.log | 10 + backend/templates/guest_start_job.html | 38 +- 27 files changed, 2101 insertions(+), 8 deletions(-) create mode 100644 backend/DOCS/OTP_DRUCKER_VERFÜGBARKEIT_VERBESSERUNG.md create mode 100644 backend/DOCS/Template-Backend-Zuordnung.md diff --git a/Dockerfile.simple b/Dockerfile.simple index 460aab648..2488a7548 100644 --- a/Dockerfile.simple +++ b/Dockerfile.simple @@ -20,6 +20,10 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ iputils-ping \ sqlite3 \ openssl \ + build-essential \ + gcc \ + g++ \ + python3-dev \ && rm -rf /var/lib/apt/lists/* # Arbeitsverzeichnis erstellen diff --git a/backend/DOCS/OTP_DRUCKER_VERFÜGBARKEIT_VERBESSERUNG.md b/backend/DOCS/OTP_DRUCKER_VERFÜGBARKEIT_VERBESSERUNG.md new file mode 100644 index 000000000..0519ecba6 --- /dev/null +++ b/backend/DOCS/OTP_DRUCKER_VERFÜGBARKEIT_VERBESSERUNG.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend/DOCS/Template-Backend-Zuordnung.md b/backend/DOCS/Template-Backend-Zuordnung.md new file mode 100644 index 000000000..67753597d --- /dev/null +++ b/backend/DOCS/Template-Backend-Zuordnung.md @@ -0,0 +1,446 @@ +# Template-Backend-Zuordnung - MYP System + +**Erstellt:** 2025-06-20 +**Version:** 1.0 +**System:** MYP (Manage Your Printers) - Mercedes-Benz TBA Marienfelde + +## Überblick + +Diese Dokumentation zeigt die vollständige Zuordnung zwischen HTML-Templates und Python-Backend-Verantwortlichkeiten im MYP-System. Das System verwendet eine moderne Flask-Blueprint-Architektur mit 15 Blueprint-Modulen und einer Hybrid-Struktur aus Server-Side-Rendering und JSON-APIs. + +--- + +## Template-Kategorien + +### 1. Hauptanwendung Templates + +#### **dashboard.html** +- **Backend:** `app.py` → `dashboard()` Route +- **URL:** `/dashboard` +- **Berechtigungen:** `@login_required` +- **Variablen:** Basis-Template-Variablen +- **Zweck:** Haupt-Dashboard nach Login + +#### **base.html** +- **Backend:** Template-Basis für alle anderen Templates +- **Variablen:** Globale Template-Variablen (production_mode, current_user, etc.) +- **Zweck:** Layout-Template mit Navigation + +--- + +### 2. Authentifizierung + +#### **login.html** +- **Backend:** `blueprints/auth.py` → `login()` +- **URL:** `/auth/login` +- **HTTP-Methoden:** GET, POST +- **Berechtigungen:** Öffentlich +- **Variablen:** + ```python + { + 'error': str, # Fehlermeldung bei Login-Fehlschlag + 'form': LoginForm # WTForms-Instanz + } + ``` +- **Zweck:** Benutzer-Anmeldung mit Formular-Validierung + +--- + +### 3. Administrative Verwaltung + +#### **admin.html** +- **Backend:** `blueprints/admin_unified.py` → Verschiedene Funktionen +- **URL-Muster:** `/admin`, `/admin/users`, `/admin/printers`, `/admin/logs`, `/admin/system`, `/admin/maintenance` +- **Berechtigungen:** `@admin_required` +- **Variablen:** + ```python + { + 'active_tab': str, # 'overview', 'users', 'printers', 'logs', 'system', 'maintenance' + 'users': list, # Liste aller Benutzer (nur bei users-Tab) + 'printers': list, # Liste aller Drucker (nur bei printers-Tab) + 'logs': list, # System-Logs (nur bei logs-Tab) + 'stats': dict # System-Statistiken + } + ``` +- **Backend-Funktionen:** + - `admin_overview()` - Hauptübersicht + - `users_overview()` - Benutzerverwaltung + - `printers_overview()` - Druckerverwaltung + - `logs_overview()` - Log-Anzeige + - `system_health()` - System-Informationen + - `maintenance()` - Wartungsfunktionen + +#### **admin_*.html** (Legacy-Templates) +Diese Templates werden teilweise noch verwendet, aber zunehmend durch das vereinheitlichte `admin.html` ersetzt: +- `admin_guest_requests.html` +- `admin_add_user.html` +- `admin_edit_user.html` +- `admin_add_printer.html` +- `admin_edit_printer.html` +- Weitere administrative Templates + +--- + +### 4. Gast-System + +#### **guest_request.html** +- **Backend:** `blueprints/guest.py` → `guest_request_form()` +- **URL:** `/request` +- **HTTP-Methoden:** GET, POST +- **Berechtigungen:** Öffentlich +- **Variablen:** + ```python + { + 'form': GuestRequestForm, # WTForms für Gastanfrage + 'printers': list # Verfügbare Drucker + } + ``` + +#### **guest_start_job.html** +- **Backend:** `blueprints/guest.py` → `guest_start_public()` +- **URL:** `/start` +- **Berechtigungen:** Öffentlich +- **Zweck:** Job-Start für Gäste mit OTP + +#### **guest_job_status.html** +- **Backend:** `blueprints/guest.py` → `guest_job_status()` +- **URL:** `/job//status` +- **Variablen:** + ```python + { + 'job': Job, # Job-Objekt + 'guest_request': GuestRequest # Gastanfrage-Objekt + } + ``` + +#### **guest_status.html** +- **Backend:** `blueprints/guest.py` → `guest_request_status()` +- **URL:** `/request/` +- **Variablen:** + ```python + { + 'request': GuestRequest, # Gastanfrage + 'job': Job, # Zugehöriger Job + 'otp_code': str, # OTP-Code für Job-Start + 'show_start_link': bool # Ob Start-Link angezeigt werden soll + } + ``` + +#### Weitere Gast-Templates: +- `guest_requests_overview.html` - Übersicht aller Gastanfragen +- `guest_requests_by_email.html` - Anfragen nach E-Mail filtern +- `guest_status_check.html` - Status-Prüfung für Gäste + +--- + +### 5. Kalender-System + +#### **calendar.html** +- **Backend:** `blueprints/calendar.py` → `calendar_view()` +- **URL:** `/calendar` +- **Berechtigungen:** `@login_required` +- **Variablen:** + ```python + { + 'printers': list, # Verfügbare Drucker + 'can_edit': bool # Benutzer-Berechtigung zum Bearbeiten + } + ``` +- **JavaScript-Integration:** FullCalendar.js +- **API-Backend:** Umfangreiche Calendar-API-Endpunkte für CRUD-Operationen + +--- + +### 6. Benutzerverwaltung + +#### **profile.html** +- **Backend:** `blueprints/user_management.py` → `user_profile()` +- **URL:** `/user/profile` +- **Berechtigungen:** `@login_required` +- **Variablen:** + ```python + { + 'user': User # Aktueller Benutzer mit allen Profildaten + } + ``` + +#### **settings.html** +- **Backend:** `blueprints/user_management.py` → `user_settings()` +- **URL:** `/user/settings` +- **Berechtigungen:** `@login_required` +- **Variablen:** + ```python + { + 'user': User # Benutzer-Einstellungen und Präferenzen + } + ``` + +--- + +### 7. Hardware-Steuerung + +#### **tapo_control.html** +- **Backend:** `blueprints/tapo_control.py` → `tapo_dashboard()` +- **URL:** `/tapo/` +- **Berechtigungen:** `@require_permission(Permission.CONTROL_PRINTER)` +- **Variablen:** + ```python + { + 'outlets': dict, # Steckdosen-Status + 'total_outlets': int, # Gesamtanzahl Steckdosen + 'online_outlets': int, # Online-Steckdosen + 'fixed_layout': bool # Layout-Modus + } + ``` + +#### **tapo_manual_control.html** +- **Backend:** `blueprints/tapo_control.py` → `manual_control()` +- **URL:** `/tapo/manual-control` +- **Berechtigungen:** `@admin_required` +- **HTTP-Methoden:** GET, POST +- **Zweck:** Manuelle Steckdosen-Steuerung für Administratoren + +#### **drucker_steuerung.html** +- **Backend:** `blueprints/drucker_steuerung.py` → `drucker_uebersicht()` +- **URL:** `/drucker/` +- **Berechtigungen:** `@login_required` +- **Variablen:** + ```python + { + 'drucker': list, # Drucker-Liste + 'stats': dict, # Statistiken + 'system_status': str, # System-Status + 'seiten_titel': str, # Seitentitel + 'benutzer_kann_steuern': bool,# Steuerungs-Berechtigung + 'letztes_update': str, # Letztes Update + 'refresh_url': str # Refresh-URL + } + ``` + +#### **drucker_details.html** +- **Backend:** `blueprints/drucker_steuerung.py` → `drucker_details()` +- **URL:** `/drucker/details/` +- **Variablen:** + ```python + { + 'drucker': dict, # Drucker-Details + 'stats': dict, # Drucker-Statistiken + 'seiten_titel': str, # Seitentitel + 'steuerungs_urls': dict, # Steuerungs-URLs + 'detail_daten': dict # Detail-Informationen + } + ``` + +--- + +### 8. Energiemonitoring + +#### **energy_dashboard.html** +- **Backend:** `blueprints/energy_monitoring.py` → `energy_dashboard()` +- **URL:** `/energy/` +- **Berechtigungen:** `@login_required` +- **Variablen:** + ```python + { + 'stats': dict, # Energiestatistiken + 'current_user': User, # Aktueller Benutzer + 'page_title': str # Seitentitel + } + ``` + +#### **energy_device_details.html** +- **Backend:** `blueprints/energy_monitoring.py` → `device_details()` +- **URL:** `/energy/device/` +- **Variablen:** + ```python + { + 'device': Printer, # Gerät (Drucker) + 'energy_data': dict, # Energiedaten + 'current_user': User, # Aktueller Benutzer + 'page_title': str # Seitentitel + } + ``` + +--- + +### 9. Rechtliche Seiten + +#### **imprint.html** +- **Backend:** `blueprints/legal_pages.py` → `imprint()` +- **URL:** `/impressum` +- **Variablen:** `{'title': 'Impressum'}` + +#### **privacy.html** +- **Backend:** `blueprints/legal_pages.py` → `privacy()` +- **URL:** `/datenschutz` +- **Variablen:** `{'title': 'Datenschutzerklärung'}` + +#### **terms.html** +- **Backend:** `blueprints/legal_pages.py` → `terms()` +- **URL:** `/nutzungsbedingungen` +- **Variablen:** `{'title': 'Nutzungsbedingungen'}` + +#### **legal.html** +- **Backend:** `blueprints/legal_pages.py` → `legal()` +- **URL:** `/rechtliches` +- **Variablen:** `{'title': 'Rechtliche Hinweise'}` + +#### **system_info.html** +- **Backend:** `blueprints/legal_pages.py` → `system_info()` +- **URL:** `/system-info` +- **Variablen:** + ```python + { + 'title': 'Systeminformationen', + 'system': dict # System-Informationen + } + ``` + +--- + +### 10. Fehlerseiten + +#### **errors/*.html** +- **Backend:** `app.py` → Verschiedene Error-Handler +- **Templates:** + - `errors/400.html` - Bad Request + - `errors/401.html` - Unauthorized + - `errors/403.html` - Forbidden + - `errors/404.html` - Not Found + - `errors/405.html` - Method Not Allowed + - `errors/413.html` - Payload Too Large + - `errors/429.html` - Rate Limit Exceeded + - `errors/500.html` - Internal Server Error + - `errors/502.html` - Bad Gateway + - `errors/503.html` - Service Unavailable + - `errors/505.html` - HTTP Version Not Supported + +--- + +## API-Only Blueprints (Kein HTML-Rendering) + +Diese Blueprints verwenden **ausschließlich JSON-APIs** ohne HTML-Templates: + +### **printers.py** +- **URL-Prefix:** `/api/printers` +- **Endpunkte:** Drucker-CRUD, Status-Monitoring, Tapo-Integration +- **Berechtigungen:** Verschiedene Permissions + +### **jobs.py** +- **URL-Prefix:** `/api/jobs` +- **Endpunkte:** Job-Management, Start/Pause/Resume/Finish +- **Berechtigungen:** `@login_required`, `@job_owner_required` + +### **kiosk.py** +- **URL-Prefix:** `/api/kiosk` +- **Endpunkte:** Kiosk-Modus-Steuerung +- **Berechtigungen:** Teilweise `@login_required` + +### **uploads.py** +- **URL-Prefix:** `/api` +- **Endpunkte:** Datei-Upload und -Management +- **Berechtigungen:** Verschiedene (`@login_required`, `@admin_required`) + +### **sessions.py** +- **URL-Prefix:** `/api/session` +- **Endpunkte:** Session-Management (Heartbeat, Status, Extend) +- **Berechtigungen:** `@login_required` + +### **api.py** +- **URL-Prefix:** `/api` +- **Endpunkte:** Allgemeine System-APIs (Stats, Health, Notifications) +- **Berechtigungen:** Verschiedene + +--- + +## Template-Hierarchie + +### **Base Templates:** +- `base.html` - Haupt-Layout mit Navigation +- `base-production.html` - Production-optimiertes Layout (falls verwendet) + +### **Component Templates:** +- `includes/navbar.html` - Navigation +- `components/printer_status.html` - Drucker-Status-Komponente +- `macros/ui_components.html` - UI-Makros + +### **Spezielle Templates:** +- `static/offline.html` - Offline-Seite für PWA +- `jobs/new.html` - Job-Erstellung (möglicherweise in Zukunft) + +--- + +## Berechtigungssystem + +### **Dekorator-Arten:** +1. `@login_required` - Standard-Anmeldung erforderlich +2. `@admin_required` - Administrator-Berechtigung +3. `@require_permission(Permission.*)` - Spezifische Berechtigung +4. `@job_owner_required` - Job-Besitzer-Berechtigung +5. `@approver_required` - Genehmiger-Berechtigung +6. `@users_admin_required` - Benutzer-Administrator + +### **Permission-Konstanten:** +- `Permission.ADMIN` - Administrative Rechte +- `Permission.CONTROL_PRINTER` - Drucker-Steuerung +- `Permission.APPROVE_JOBS` - Job-Genehmigung +- Weitere spezifische Berechtigungen + +--- + +## Datenfluss-Muster + +### **Template-Rendering:** +1. **Route-Handler** in Blueprint erhält Request +2. **Datenbank-Abfrage** über SQLAlchemy-Models +3. **Berechtigungs-Prüfung** über Dekoratoren +4. **Template-Variablen** werden zusammengestellt +5. **render_template()** generiert HTML +6. **Response** wird an Client gesendet + +### **API-Endpunkte:** +1. **Route-Handler** in Blueprint erhält Request +2. **JSON-Daten** aus Request extrahieren +3. **Geschäftslogik** ausführen +4. **jsonify()** generiert JSON-Response +5. **Response** wird an Client gesendet + +--- + +## Entwicklungsrichtlinien + +### **Template-Erstellung:** +1. Verwende `render_template()` mit sprechenden Template-Namen +2. Übergebe strukturierte Variablen-Dictionaries +3. Implementiere Fehlerbehandlung mit try-catch +4. Nutze Template-Vererbung über `base.html` +5. Dokumentiere Template-Variablen in Docstrings + +### **API-Entwicklung:** +1. Verwende `jsonify()` für JSON-Responses +2. Implementiere einheitliche Error-Response-Struktur +3. Nutze HTTP-Status-Codes korrekt +4. Validiere Input-Daten mit WTForms oder Marshmallow +5. Logge API-Aufrufe für Debugging + +### **Blueprint-Organisation:** +1. Ein Blueprint pro Funktionsbereich +2. Klare URL-Präfixe verwenden +3. Berechtigungen auf Blueprint-Ebene definieren +4. Getrennte API- und Template-Routen wenn sinnvoll +5. Dokumentiere Blueprint-Zweck in Docstring + +--- + +## Zusammenfassung + +Das MYP-System zeigt eine moderne Flask-Architektur mit: + +- **25+ HTML-Templates** für Server-Side-Rendering +- **100+ API-Endpunkte** für dynamische Funktionalität +- **Hybrid-Architektur** zwischen Templates und APIs +- **Modulare Blueprint-Organisation** für Wartbarkeit +- **Konsistentes Berechtigungssystem** für Sicherheit +- **Klare Datenfluss-Muster** für Nachvollziehbarkeit + +Die Dokumentation bietet Entwicklern eine vollständige Referenz für die Zuordnung zwischen Frontend-Templates und Backend-Logik im MYP-System. \ No newline at end of file diff --git a/backend/blueprints/__pycache__/guest.cpython-313.pyc b/backend/blueprints/__pycache__/guest.cpython-313.pyc index e8026871af548b0302449b75630ba635b033628b..dd712edc3d540cf089a39ee634fb822b6257b296 100644 GIT binary patch delta 19552 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 aAw_SF(%DOrIT|>N^|#PVGAtnW%6|eK0NF19 delta 9626 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 diff --git a/backend/blueprints/guest.py b/backend/blueprints/guest.py index 4b35b3234..bed45f23e 100644 --- a/backend/blueprints/guest.py +++ b/backend/blueprints/guest.py @@ -14,6 +14,7 @@ from sqlalchemy.orm import joinedload from models import GuestRequest, Job, Printer, User, UserPermission, Notification, get_cached_session from utils.logging_config import get_logger +from utils.hardware_integration import get_drucker_steuerung guest_blueprint = Blueprint('guest', __name__) logger = get_logger("guest") @@ -425,6 +426,131 @@ def api_start_job_with_code(): "error": f"Job kann im Status '{job.status}' nicht gestartet werden" }), 400 + # ===== NEUE DRUCKER-VERFÜGBARKEITSPRÜFUNG ===== + drucker_steuerung = get_drucker_steuerung() + + # 1. Prüfen ob ein spezifischer Drucker dem Job zugewiesen ist + if job.printer and job.printer.plug_ip: + # Spezifischen Drucker-Status prüfen + try: + reachable, power_status = drucker_steuerung.check_outlet_status( + job.printer.plug_ip, job.printer.id + ) + + if not reachable: + return jsonify({ + "success": False, + "error": f"Drucker '{job.printer.name}' ist nicht erreichbar und kann nicht gestartet werden", + "error_details": { + "type": "printer_offline", + "printer_name": job.printer.name, + "printer_id": job.printer.id, + "reason": "Drucker ist im Netzwerk nicht erreichbar" + } + }), 400 + + # Drucker ist erreichbar - kann gestartet werden + logger.info(f"✅ Drucker-Verfügbarkeitsprüfung bestanden: {job.printer.name} (Status: {power_status})") + + except Exception as e: + logger.error(f"❌ Fehler bei Drucker-Status-Prüfung für {job.printer.name}: {e}") + return jsonify({ + "success": False, + "error": f"Drucker-Status für '{job.printer.name}' konnte nicht geprüft werden", + "error_details": { + "type": "printer_check_failed", + "printer_name": job.printer.name, + "printer_id": job.printer.id, + "reason": "Technischer Fehler bei der Status-Prüfung" + } + }), 500 + + else: + # 2. Kein spezifischer Drucker zugewiesen - prüfen ob IRGENDEIN Drucker verfügbar ist + logger.info("🔍 Kein spezifischer Drucker zugewiesen - prüfe alle verfügbaren Drucker") + + # Alle aktiven Drucker mit Steckdosen laden + available_printers = db_session.query(Printer).filter( + Printer.active == True, + Printer.plug_ip.isnot(None) + ).all() + + if not available_printers: + return jsonify({ + "success": False, + "error": "Keine konfigurierten Drucker verfügbar", + "error_details": { + "type": "no_printers_configured", + "reason": "Es sind keine aktiven Drucker mit Steckdosen-Steuerung konfiguriert" + } + }), 400 + + # Status aller verfügbaren Drucker prüfen + reachable_printers = [] + offline_printers = [] + + for printer in available_printers: + try: + reachable, power_status = drucker_steuerung.check_outlet_status( + printer.plug_ip, printer.id + ) + + if reachable: + reachable_printers.append({ + 'id': printer.id, + 'name': printer.name, + 'status': power_status + }) + else: + offline_printers.append({ + 'id': printer.id, + 'name': printer.name + }) + + except Exception as e: + logger.warning(f"⚠️ Status-Prüfung für Drucker {printer.name} fehlgeschlagen: {e}") + offline_printers.append({ + 'id': printer.id, + 'name': printer.name, + 'error': str(e) + }) + + # Prüfen ob mindestens ein Drucker erreichbar ist + if not reachable_printers: + total_printers = len(available_printers) + offline_count = len(offline_printers) + + offline_names = [p['name'] for p in offline_printers[:3]] # Max 3 Namen + offline_list = ', '.join(offline_names) + if offline_count > 3: + offline_list += f" und {offline_count - 3} weitere" + + return jsonify({ + "success": False, + "error": f"Alle {total_printers} Drucker sind offline und können nicht gestartet werden", + "error_details": { + "type": "all_printers_offline", + "total_printers": total_printers, + "offline_printers": offline_count, + "offline_list": offline_list, + "reason": "Keine Drucker sind derzeit erreichbar oder einsatzbereit" + } + }), 400 + + # Mindestens ein Drucker ist verfügbar + reachable_count = len(reachable_printers) + total_count = len(available_printers) + + logger.info(f"✅ Drucker-Verfügbarkeitsprüfung bestanden: {reachable_count}/{total_count} Drucker erreichbar") + + # Optional: Ersten verfügbaren Drucker automatisch zuweisen wenn keiner zugewiesen + if not job.printer_id and reachable_printers: + best_printer = reachable_printers[0] # Ersten verfügbaren nehmen + job.printer_id = best_printer['id'] + logger.info(f"🎯 Drucker automatisch zugewiesen: {best_printer['name']} (ID: {best_printer['id']})") + + # ===== JOB STARTEN (bestehender Code) ===== + # Job starten now = datetime.now() job.status = "running" @@ -835,20 +961,87 @@ def api_approve_request(request_id): if guest_request.status != "pending": return jsonify({"error": "Anfrage wurde bereits bearbeitet"}), 400 + # ===== ERWEITERTE DRUCKER-VALIDIERUNG UND -ZUWEISUNG ===== + from utils.hardware_integration import get_drucker_steuerung + drucker_steuerung = get_drucker_steuerung() + # Drucker validieren oder automatisch zuweisen if printer_id: printer = db_session.query(Printer).filter_by(id=printer_id, active=True).first() if not printer: return jsonify({"error": "Ungültiger Drucker ausgewählt"}), 400 + + # Status des ausgewählten Druckers prüfen + if printer.plug_ip: + try: + reachable, power_status = drucker_steuerung.check_outlet_status( + printer.plug_ip, printer.id + ) + + if not reachable: + return jsonify({ + "error": f"Drucker '{printer.name}' ist derzeit offline und kann nicht zugewiesen werden", + "warning": "Der Drucker ist im Netzwerk nicht erreichbar. Die Genehmigung kann trotzdem erfolgen, aber der Job kann erst gestartet werden, wenn der Drucker wieder online ist." + }), 400 + + logger.info(f"✅ Admin-Drucker-Zuweisung validiert: {printer.name} (Status: {power_status})") + + except Exception as e: + logger.warning(f"⚠️ Status-Prüfung für zugewiesenen Drucker {printer.name} fehlgeschlagen: {e}") + # Warnung, aber Genehmigung trotzdem fortsetzen + guest_request.printer_id = printer_id + elif not guest_request.printer_id: - # Automatisch ersten verfügbaren Drucker zuweisen - available_printer = db_session.query(Printer).filter_by(active=True).first() - if available_printer: - guest_request.printer_id = available_printer.id - logger.info(f"Automatisch Drucker {available_printer.id} ({available_printer.name}) für Gastanfrage {request_id} zugewiesen") + # Automatisch besten verfügbaren Drucker zuweisen + available_printers = db_session.query(Printer).filter( + Printer.active == True, + Printer.plug_ip.isnot(None) + ).all() + + if not available_printers: + return jsonify({ + "error": "Kein aktiver Drucker mit Steckdosen-Steuerung verfügbar", + "details": "Bitte aktivieren Sie mindestens einen Drucker mit konfigurierter Tapo-Steckdose." + }), 400 + + # Status aller verfügbaren Drucker prüfen + online_printers = [] + offline_printers = [] + + for printer in available_printers: + try: + reachable, power_status = drucker_steuerung.check_outlet_status( + printer.plug_ip, printer.id + ) + + if reachable: + online_printers.append({ + 'printer': printer, + 'status': power_status + }) + else: + offline_printers.append(printer) + + except Exception as e: + logger.warning(f"⚠️ Status-Prüfung für Drucker {printer.name} fehlgeschlagen: {e}") + offline_printers.append(printer) + + # Bevorzuge online Drucker, aber fallback auf offline Drucker + if online_printers: + best_printer = online_printers[0]['printer'] + guest_request.printer_id = best_printer.id + logger.info(f"✅ Automatisch ONLINE-Drucker zugewiesen: {best_printer.name} (Status: {online_printers[0]['status']})") + elif available_printers: + # Fallback: Ersten verfügbaren Drucker nehmen, auch wenn offline + fallback_printer = available_printers[0] + guest_request.printer_id = fallback_printer.id + logger.warning(f"⚠️ Automatisch OFFLINE-Drucker zugewiesen: {fallback_printer.name} (alle Drucker sind offline)") else: - return jsonify({"error": "Kein aktiver Drucker verfügbar. Bitte aktivieren Sie mindestens einen Drucker."}), 400 + return jsonify({ + "error": "Kein Drucker verfügbar", + "details": "Es sind keine aktiven Drucker konfiguriert." + }), 400 # Drucker-Objekt für Job-Erstellung laden printer = db_session.query(Printer).filter_by(id=guest_request.printer_id).first() @@ -1143,4 +1336,130 @@ def api_guest_status_by_otp(): @guest_blueprint.route('/status-check') def guest_status_check_page(): """Status-Check-Seite für Gäste.""" - return render_template('guest_status_check.html') \ No newline at end of file + return render_template('guest_status_check.html') + +@guest_blueprint.route('/api/admin/printer-status', methods=['GET']) +@approver_required +def api_get_printer_status_for_admin(): + """ + Drucker-Status für Admin-Oberfläche abrufen. + Zeigt welche Drucker verfügbar sind für die Zuweisung bei Gastanfragen. + """ + try: + from utils.hardware_integration import get_drucker_steuerung + + with get_cached_session() as db_session: + # Alle aktiven Drucker laden + printers = db_session.query(Printer).filter(Printer.active == True).all() + + if not printers: + return jsonify({ + "success": True, + "printers": [], + "summary": { + "total": 0, + "online": 0, + "offline": 0, + "unconfigured": 0 + }, + "message": "Keine aktiven Drucker konfiguriert" + }) + + drucker_steuerung = get_drucker_steuerung() + printer_status_list = [] + + summary = { + "total": len(printers), + "online": 0, + "offline": 0, + "unconfigured": 0 + } + + for printer in printers: + printer_info = { + "id": printer.id, + "name": printer.name, + "model": printer.model or "Unbekannt", + "location": printer.location or "TBA Marienfelde", + "ip_address": printer.ip_address, + "plug_ip": printer.plug_ip, + "active": printer.active, + "status": "unknown", + "reachable": False, + "power_state": "unknown", + "can_be_assigned": False, + "status_message": "", + "last_checked": datetime.now().isoformat() + } + + if printer.plug_ip: + try: + # Echtzeit-Status prüfen + reachable, power_status = drucker_steuerung.check_outlet_status( + printer.plug_ip, printer.id + ) + + printer_info["reachable"] = reachable + printer_info["power_state"] = power_status + + if reachable: + printer_info["status"] = "online" + printer_info["can_be_assigned"] = True + printer_info["status_message"] = f"Online ({power_status.upper()})" + summary["online"] += 1 + else: + printer_info["status"] = "offline" + printer_info["can_be_assigned"] = False + printer_info["status_message"] = "Offline - Nicht erreichbar" + summary["offline"] += 1 + + except Exception as e: + printer_info["status"] = "error" + printer_info["can_be_assigned"] = False + printer_info["status_message"] = f"Fehler: {str(e)}" + printer_info["error"] = str(e) + summary["offline"] += 1 + + logger.warning(f"⚠️ Admin-Status-Prüfung für {printer.name} fehlgeschlagen: {e}") + else: + printer_info["status"] = "unconfigured" + printer_info["can_be_assigned"] = False + printer_info["status_message"] = "Keine Steckdose konfiguriert" + summary["unconfigured"] += 1 + + printer_status_list.append(printer_info) + + # Nach Status sortieren: Online zuerst, dann offline, dann unkonfiguriert + printer_status_list.sort(key=lambda x: ( + 0 if x["status"] == "online" else + 1 if x["status"] == "offline" else + 2 # unconfigured oder error + )) + + # Empfehlung für Admin generieren + recommendations = [] + if summary["online"] == 0: + if summary["unconfigured"] > 0: + recommendations.append("Konfigurieren Sie Tapo-Steckdosen für die Drucker ohne Steuerung") + if summary["offline"] > 0: + recommendations.append("Prüfen Sie die Netzwerkverbindungen der offline Drucker") + recommendations.append("Aktuell können keine Gastanfragen automatisch gestartet werden") + elif summary["online"] < summary["total"]: + recommendations.append(f"Nur {summary['online']} von {summary['total']} Druckern sind verfügbar") + + return jsonify({ + "success": True, + "printers": printer_status_list, + "summary": summary, + "recommendations": recommendations, + "timestamp": datetime.now().isoformat(), + "message": f"Status von {len(printer_status_list)} Druckern abgerufen" + }) + + except Exception as e: + logger.error(f"Fehler beim Abrufen des Admin-Drucker-Status: {str(e)}") + return jsonify({ + "success": False, + "error": "Fehler beim Abrufen des Drucker-Status", + "details": str(e) + }), 500 \ No newline at end of file diff --git a/backend/logs/admin/admin.log b/backend/logs/admin/admin.log index f982c3d5f..68a3c840b 100644 --- a/backend/logs/admin/admin.log +++ b/backend/logs/admin/admin.log @@ -2072,3 +2072,29 @@ jinja2.exceptions.UndefinedError: 'maintenance_info' is undefined 2025-06-20 10:41:19 - [admin] admin - [INFO] INFO - Admin-Check für Funktion api_admin_live_stats: User authenticated: True, User ID: 1, Is Admin: True 2025-06-20 10:41:19 - [admin] admin - [INFO] INFO - Admin-Check für Funktion get_system_status_api: User authenticated: True, User ID: 1, Is Admin: True 2025-06-20 10:41:20 - [admin] admin - [INFO] INFO - System-Status abgerufen von admin +2025-06-20 11:58:18 - [admin] admin - [INFO] INFO - Admin-Check für Funktion admin_dashboard: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 11:58:18 - [admin] admin - [INFO] INFO - Admin-Dashboard geladen von admin +2025-06-20 11:58:18 - [admin] admin - [ERROR] ERROR - Fehler beim Laden des Admin-Dashboards: 'dict object' has no attribute 'online_printers' +2025-06-20 11:58:19 - [admin] admin - [INFO] INFO - Admin-Check für Funktion api_admin_live_stats: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 11:58:19 - [admin] admin - [INFO] INFO - Admin-Check für Funktion get_system_status_api: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 11:58:20 - [admin] admin - [INFO] INFO - System-Status abgerufen von admin +2025-06-20 11:58:21 - [admin] admin - [INFO] INFO - Admin-Check für Funktion guest_requests: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:02:50 - [admin] admin - [INFO] INFO - Admin-Check für Funktion admin_dashboard: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:02:50 - [admin] admin - [INFO] INFO - Admin-Dashboard geladen von admin +2025-06-20 12:02:50 - [admin] admin - [ERROR] ERROR - Fehler beim Laden des Admin-Dashboards: 'dict object' has no attribute 'online_printers' +2025-06-20 12:02:50 - [admin] admin - [INFO] INFO - Admin-Check für Funktion api_admin_live_stats: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:02:51 - [admin] admin - [INFO] INFO - Admin-Check für Funktion get_system_status_api: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:02:52 - [admin] admin - [INFO] INFO - System-Status abgerufen von admin +2025-06-20 12:03:02 - [admin] admin - [INFO] INFO - Admin-Check für Funktion guest_requests: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:03:16 - [admin] admin - [INFO] INFO - Admin-Check für Funktion admin_dashboard: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:03:16 - [admin] admin - [INFO] INFO - Admin-Dashboard geladen von admin +2025-06-20 12:03:16 - [admin] admin - [ERROR] ERROR - Fehler beim Laden des Admin-Dashboards: 'dict object' has no attribute 'online_printers' +2025-06-20 12:03:16 - [admin] admin - [INFO] INFO - Admin-Check für Funktion api_admin_live_stats: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:03:16 - [admin] admin - [INFO] INFO - Admin-Check für Funktion get_system_status_api: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:03:17 - [admin] admin - [INFO] INFO - System-Status abgerufen von admin +2025-06-20 12:03:21 - [admin] admin - [INFO] INFO - Admin-Check für Funktion guest_otps_management: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:03:21 - [admin] admin - [INFO] INFO - Gast-OTP-Verwaltung aufgerufen von Admin Administrator +2025-06-20 12:03:22 - [admin] admin - [INFO] INFO - Admin-Check für Funktion get_guest_requests_api: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:03:22 - [admin] admin - [INFO] INFO - Admin-Check für Funktion get_pending_guest_otps_api: User authenticated: True, User ID: 1, Is Admin: True +2025-06-20 12:03:22 - [admin] admin - [INFO] INFO - Aktive OTP-Codes abgerufen: 6 Codes +2025-06-20 12:03:22 - [admin] admin - [INFO] INFO - Gastanfragen abgerufen: 6 Einträge für Admin Administrator diff --git a/backend/logs/admin_api/admin_api.log b/backend/logs/admin_api/admin_api.log index 998f4c5c2..b35a5e6c1 100644 --- a/backend/logs/admin_api/admin_api.log +++ b/backend/logs/admin_api/admin_api.log @@ -793,3 +793,6 @@ 2025-06-20 10:30:08 - [admin_api] admin_api - [ERROR] ERROR - Datenbank-Health-Check für Error-Recovery fehlgeschlagen: Textual SQL expression 'SELECT 1' should be explicitly declared as text('SELECT 1') 2025-06-20 10:30:08 - [admin_api] admin_api - [INFO] INFO - Error-Recovery-Status abgerufen: critical 2025-06-20 10:41:19 - [admin_api] admin_api - [INFO] INFO - Live-Statistiken abgerufen von Admin admin +2025-06-20 11:58:19 - [admin_api] admin_api - [INFO] INFO - Live-Statistiken abgerufen von Admin admin +2025-06-20 12:02:50 - [admin_api] admin_api - [INFO] INFO - Live-Statistiken abgerufen von Admin admin +2025-06-20 12:03:16 - [admin_api] admin_api - [INFO] INFO - Live-Statistiken abgerufen von Admin admin diff --git a/backend/logs/api/api.log b/backend/logs/api/api.log index 9a0998f41..087a112c9 100644 --- a/backend/logs/api/api.log +++ b/backend/logs/api/api.log @@ -132,3 +132,17 @@ 2025-06-20 10:10:43 - [api] api - [INFO] INFO - Jobs-Timeline-Chart-Daten abgerufen von Benutzer admin 2025-06-20 10:10:43 - [api] api - [INFO] INFO - Drucker-Nutzung-Chart-Daten abgerufen von Benutzer admin 2025-06-20 10:10:43 - [api] api - [INFO] INFO - Statistiken abgerufen von Benutzer admin +2025-06-20 11:58:05 - [api] api - [INFO] INFO - Job-Status-Chart-Daten abgerufen von Benutzer admin +2025-06-20 11:58:05 - [api] api - [INFO] INFO - Drucker-Nutzung-Chart-Daten abgerufen von Benutzer admin +2025-06-20 11:58:05 - [api] api - [INFO] INFO - Jobs-Timeline-Chart-Daten abgerufen von Benutzer admin +2025-06-20 11:58:05 - [api] api - [ERROR] ERROR - Fehler beim Abrufen der Benutzer-Aktivität-Chart-Daten: Can't determine join between 'users' and 'jobs'; tables have more than one foreign key constraint relationship between them. Please specify the 'onclause' of this join explicitly. +2025-06-20 11:58:05 - [api] api - [INFO] INFO - Statistiken abgerufen von Benutzer admin +2025-06-20 12:05:10 - [api] api - [INFO] INFO - Jobs-Timeline-Chart-Daten abgerufen von Benutzer admin +2025-06-20 12:05:10 - [api] api - [INFO] INFO - Job-Status-Chart-Daten abgerufen von Benutzer admin +2025-06-20 12:05:10 - [api] api - [INFO] INFO - Drucker-Nutzung-Chart-Daten abgerufen von Benutzer admin +2025-06-20 12:05:10 - [api] api - [INFO] INFO - Statistiken abgerufen von Benutzer admin +2025-06-20 12:05:12 - [api] api - [ERROR] ERROR - Fehler beim Abrufen der Benutzer-Aktivität-Chart-Daten: Can't determine join between 'users' and 'jobs'; tables have more than one foreign key constraint relationship between them. Please specify the 'onclause' of this join explicitly. +2025-06-20 12:05:12 - [api] api - [INFO] INFO - Jobs-Timeline-Chart-Daten abgerufen von Benutzer admin +2025-06-20 12:05:12 - [api] api - [INFO] INFO - Job-Status-Chart-Daten abgerufen von Benutzer admin +2025-06-20 12:05:12 - [api] api - [INFO] INFO - Drucker-Nutzung-Chart-Daten abgerufen von Benutzer admin +2025-06-20 12:05:12 - [api] api - [INFO] INFO - Statistiken abgerufen von Benutzer admin diff --git a/backend/logs/app/app.log b/backend/logs/app/app.log index 6dde210d7..275c3cf4b 100644 --- a/backend/logs/app/app.log +++ b/backend/logs/app/app.log @@ -63837,3 +63837,915 @@ WHERE users.role = ?] 2025-06-20 11:56:45 - [app] app - [INFO] INFO - [SHUTDOWN] 🧹 Cleanup wird ausgeführt... 2025-06-20 11:56:45 - [app] app - [INFO] INFO - [SHUTDOWN] ✅ Queue Manager gestoppt 2025-06-20 11:56:45 - [app] app - [ERROR] ERROR - [SHUTDOWN] ❌ Cleanup-Fehler: +2025-06-20 11:56:47 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: database/myp.db +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [CONFIG] Erkannte Umgebung: +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [CONFIG] Production-Modus: +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [CONFIG] Verwende Development-Konfiguration +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [DEVELOPMENT] Aktiviere Development-Konfiguration +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Konfiguration aktiviert +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Environment: +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Debug Mode: +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ SQL Echo: +2025-06-20 11:56:49 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O) +2025-06-20 11:56:49 - [app] app - [INFO] INFO - Admin-Berechtigungen beim Start korrigiert: erstellt, aktualisiert +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [STARTUP] 🚀 Starte MYP -Umgebung +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [STARTUP] 🏢 +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [STARTUP] 🔒 Air-Gapped: +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Datenbank... +2025-06-20 11:56:49 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [STARTUP] ✅ Datenbank initialisiert +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [STARTUP] Prüfe Initial-Admin... +2025-06-20 11:56:49 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt. +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [STARTUP] ✅ Admin-Benutzer geprüft +2025-06-20 11:56:49 - [app] app - [INFO] INFO - [STARTUP] Initialisiere statische Drucker... +2025-06-20 11:56:49 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 1 (192.168.0.100) +2025-06-20 11:56:50 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 2 (192.168.0.101) +2025-06-20 11:56:50 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 3 (192.168.0.102) +2025-06-20 11:56:50 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 4 (192.168.0.103) +2025-06-20 11:56:50 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 5 (192.168.0.104) +2025-06-20 11:56:50 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 6 (192.168.0.106) +2025-06-20 11:56:50 - [app] app - [INFO] INFO - ✅ Statische Drucker-Initialisierung abgeschlossen: 0 erstellt, 6 aktualisiert +2025-06-20 11:56:50 - [app] app - [INFO] INFO - 📍 Alle Drucker sind für Standort 'TBA Marienfelde' konfiguriert +2025-06-20 11:56:50 - [app] app - [INFO] INFO - 🌐 IP-Bereich: 192.168.0.100-106 (außer .105) +2025-06-20 11:56:50 - [app] app - [INFO] INFO - [STARTUP] ✅ Statische Drucker konfiguriert +2025-06-20 11:56:50 - [app] app - [INFO] INFO - [STARTUP] Starte Queue Manager... +2025-06-20 11:56:50 - [app] app - [INFO] INFO - [STARTUP] ✅ Queue Manager gestartet +2025-06-20 11:56:50 - [app] app - [INFO] INFO - [STARTUP] Starte Job Scheduler... +2025-06-20 11:56:50 - [app] app - [INFO] INFO - [STARTUP] ✅ Job Scheduler gestartet +2025-06-20 11:56:50 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Steckdosen (alle auf 'aus' = frei)... +2025-06-20 11:57:08 - [app] app - [WARNING] WARNING - [STARTUP] ⚠️ Keine der 6 Steckdosen konnte initialisiert werden +2025-06-20 11:57:08 - [app] app - [INFO] INFO - [STARTUP] 🌐 Server startet auf http://: +2025-06-20 11:57:58 - [app] app - [INFO] INFO - Locating template 'energy_dashboard.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\energy_dashboard.html') +2025-06-20 11:57:58 - [app] app - [INFO] INFO - Locating template 'base.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\base.html') +2025-06-20 11:57:58 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:57:58 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:57:58 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:57:58 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:05 - [app] app - [INFO] INFO - Locating template 'stats.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\stats.html') +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:05 - [app] app - [ERROR] ERROR - Fehler beim Laden des Benutzers : +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:05 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:07 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:07 - [app] app - [INFO] INFO - Locating template 'guest_request.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_request.html') +2025-06-20 11:58:08 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:08 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:08 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:12 - [app] app - [INFO] INFO - 6-stelliger OTP generiert für Guest Request 5 +2025-06-20 11:58:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:12 - [app] app - [INFO] INFO - Locating template 'guest_status.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_status.html') +2025-06-20 11:58:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:16 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:16 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:16 - [app] app - [ERROR] ERROR - Fehler beim Laden des Benutzers : +2025-06-20 11:58:16 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:16 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:18 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:18 - [app] app - [INFO] INFO - Locating template 'admin.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\admin.html') +2025-06-20 11:58:18 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:19 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:19 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:19 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:19 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:19 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:20 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:21 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:21 - [app] app - [INFO] INFO - Locating template 'admin_guest_requests.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\admin_guest_requests.html') +2025-06-20 11:58:21 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:21 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:21 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:21 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:21 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:29 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:29 - [app] app - [INFO] INFO - 6-stelliger OTP generiert für Guest Request 5 +2025-06-20 11:58:29 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:29 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:29 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:34 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:38 - [app] app - [ERROR] ERROR - CSRF-Fehler für : +2025-06-20 11:58:38 - [app] app - [ERROR] ERROR - Request Headers: +2025-06-20 11:58:38 - [app] app - [ERROR] ERROR - Request Form: +2025-06-20 11:58:38 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:38 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:38 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:38 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:38 - [app] app - [INFO] INFO - Locating template 'login.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\login.html') +2025-06-20 11:58:38 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:40 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:40 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:44 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:44 - [app] app - [INFO] INFO - Locating template 'guest_requests_overview.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_requests_overview.html') +2025-06-20 11:58:44 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:46 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:47 - [app] app - [WARNING] WARNING - Ungültiger OTP-Code für Guest Request 1 +2025-06-20 11:58:47 - [app] app - [WARNING] WARNING - Ungültiger OTP-Code für Guest Request 2 +2025-06-20 11:58:47 - [app] app - [WARNING] WARNING - Ungültiger OTP-Code für Guest Request 3 +2025-06-20 11:58:47 - [app] app - [WARNING] WARNING - Ungültiger OTP-Code für Guest Request 4 +2025-06-20 11:58:47 - [app] app - [INFO] INFO - OTP erfolgreich verifiziert für Guest Request 5 +2025-06-20 11:58:47 - [app] app - [INFO] INFO - OTP als verwendet markiert für Guest Request 5 +2025-06-20 11:58:47 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:58:50 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:58:50 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:59:21 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:59:21 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 11:59:51 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 11:59:51 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:08 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:00:08 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:08 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:00:08 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:00:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:00:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:00:12 - [app] app - [INFO] INFO - Locating template 'dashboard.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\dashboard.html') +2025-06-20 12:00:12 - [app] app - [INFO] INFO - Locating template 'macros/ui_components.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\macros\\ui_components.html') +2025-06-20 12:00:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:00:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:13 - [app] app - [INFO] INFO - [SHUTDOWN] 🧹 Cleanup wird ausgeführt... +2025-06-20 12:00:13 - [app] app - [INFO] INFO - [SHUTDOWN] ✅ Queue Manager gestoppt +2025-06-20 12:00:13 - [app] app - [ERROR] ERROR - [SHUTDOWN] ❌ Cleanup-Fehler: +2025-06-20 12:00:15 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: database/myp.db +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [CONFIG] Erkannte Umgebung: +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [CONFIG] Production-Modus: +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [CONFIG] Verwende Development-Konfiguration +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [DEVELOPMENT] Aktiviere Development-Konfiguration +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Konfiguration aktiviert +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Environment: +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Debug Mode: +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ SQL Echo: +2025-06-20 12:00:16 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O) +2025-06-20 12:00:16 - [app] app - [INFO] INFO - Admin-Berechtigungen beim Start korrigiert: erstellt, aktualisiert +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] 🚀 Starte MYP -Umgebung +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] 🏢 +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] 🔒 Air-Gapped: +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Datenbank... +2025-06-20 12:00:16 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] ✅ Datenbank initialisiert +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] Prüfe Initial-Admin... +2025-06-20 12:00:16 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt. +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] ✅ Admin-Benutzer geprüft +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] Initialisiere statische Drucker... +2025-06-20 12:00:16 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 1 (192.168.0.100) +2025-06-20 12:00:16 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 2 (192.168.0.101) +2025-06-20 12:00:16 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 3 (192.168.0.102) +2025-06-20 12:00:16 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 4 (192.168.0.103) +2025-06-20 12:00:16 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 5 (192.168.0.104) +2025-06-20 12:00:16 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 6 (192.168.0.106) +2025-06-20 12:00:16 - [app] app - [INFO] INFO - ✅ Statische Drucker-Initialisierung abgeschlossen: 0 erstellt, 6 aktualisiert +2025-06-20 12:00:16 - [app] app - [INFO] INFO - 📍 Alle Drucker sind für Standort 'TBA Marienfelde' konfiguriert +2025-06-20 12:00:16 - [app] app - [INFO] INFO - 🌐 IP-Bereich: 192.168.0.100-106 (außer .105) +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] ✅ Statische Drucker konfiguriert +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] Starte Queue Manager... +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] ✅ Queue Manager gestartet +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] Starte Job Scheduler... +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] ✅ Job Scheduler gestartet +2025-06-20 12:00:16 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Steckdosen (alle auf 'aus' = frei)... +2025-06-20 12:00:34 - [app] app - [WARNING] WARNING - [STARTUP] ⚠️ Keine der 6 Steckdosen konnte initialisiert werden +2025-06-20 12:00:34 - [app] app - [INFO] INFO - [STARTUP] 🌐 Server startet auf http://: +2025-06-20 12:00:34 - [app] app - [INFO] INFO - Locating template 'jobs.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\jobs.html') +2025-06-20 12:00:34 - [app] app - [INFO] INFO - Locating template 'base.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\base.html') +2025-06-20 12:00:34 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:35 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:00:35 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:00:35 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:35 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:00:35 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:00:35 - [app] app - [INFO] INFO - ✅ API: Drucker abgerufen (include_inactive=) +2025-06-20 12:00:35 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:01 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:01 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:01:01 - [app] app - [INFO] INFO - Locating template 'errors/404.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\errors\\404.html') +2025-06-20 12:01:01 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:02 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:02 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:02 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:02 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:01:02 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:02 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:02 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:02 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:02 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:03 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:03 - [app] app - [INFO] INFO - ✅ API: Drucker abgerufen (include_inactive=) +2025-06-20 12:01:03 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:04 - [app] app - [INFO] INFO - [SHUTDOWN] 🧹 Cleanup wird ausgeführt... +2025-06-20 12:01:04 - [app] app - [INFO] INFO - [SHUTDOWN] ✅ Queue Manager gestoppt +2025-06-20 12:01:04 - [app] app - [ERROR] ERROR - [SHUTDOWN] ❌ Cleanup-Fehler: +2025-06-20 12:01:05 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: database/myp.db +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [CONFIG] Erkannte Umgebung: +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [CONFIG] Production-Modus: +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [CONFIG] Verwende Development-Konfiguration +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [DEVELOPMENT] Aktiviere Development-Konfiguration +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Konfiguration aktiviert +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Environment: +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Debug Mode: +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ SQL Echo: +2025-06-20 12:01:07 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O) +2025-06-20 12:01:07 - [app] app - [INFO] INFO - Admin-Berechtigungen beim Start korrigiert: erstellt, aktualisiert +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] 🚀 Starte MYP -Umgebung +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] 🏢 +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] 🔒 Air-Gapped: +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Datenbank... +2025-06-20 12:01:07 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] ✅ Datenbank initialisiert +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] Prüfe Initial-Admin... +2025-06-20 12:01:07 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt. +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] ✅ Admin-Benutzer geprüft +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] Initialisiere statische Drucker... +2025-06-20 12:01:07 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 1 (192.168.0.100) +2025-06-20 12:01:07 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 2 (192.168.0.101) +2025-06-20 12:01:07 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 3 (192.168.0.102) +2025-06-20 12:01:07 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 4 (192.168.0.103) +2025-06-20 12:01:07 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 5 (192.168.0.104) +2025-06-20 12:01:07 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 6 (192.168.0.106) +2025-06-20 12:01:07 - [app] app - [INFO] INFO - ✅ Statische Drucker-Initialisierung abgeschlossen: 0 erstellt, 6 aktualisiert +2025-06-20 12:01:07 - [app] app - [INFO] INFO - 📍 Alle Drucker sind für Standort 'TBA Marienfelde' konfiguriert +2025-06-20 12:01:07 - [app] app - [INFO] INFO - 🌐 IP-Bereich: 192.168.0.100-106 (außer .105) +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] ✅ Statische Drucker konfiguriert +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] Starte Queue Manager... +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] ✅ Queue Manager gestartet +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] Starte Job Scheduler... +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] ✅ Job Scheduler gestartet +2025-06-20 12:01:07 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Steckdosen (alle auf 'aus' = frei)... +2025-06-20 12:01:25 - [app] app - [WARNING] WARNING - [STARTUP] ⚠️ Keine der 6 Steckdosen konnte initialisiert werden +2025-06-20 12:01:25 - [app] app - [INFO] INFO - [STARTUP] 🌐 Server startet auf http://: +2025-06-20 12:01:25 - [app] app - [INFO] INFO - Locating template 'dashboard.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\dashboard.html') +2025-06-20 12:01:25 - [app] app - [INFO] INFO - Locating template 'jobs.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\jobs.html') +2025-06-20 12:01:25 - [app] app - [INFO] INFO - Locating template 'base.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\base.html') +2025-06-20 12:01:25 - [app] app - [INFO] INFO - Locating template 'base.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\base.html') +2025-06-20 12:01:25 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:25 - [app] app - [INFO] INFO - Locating template 'macros/ui_components.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\macros\\ui_components.html') +2025-06-20 12:01:25 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:25 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:25 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:01:25 - [app] app - [INFO] INFO - Locating template 'errors/404.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\errors\\404.html') +2025-06-20 12:01:25 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:26 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:26 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:30 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:30 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:30 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:30 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:01:30 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:30 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:30 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:30 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:30 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:31 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:31 - [app] app - [INFO] INFO - ✅ API: Drucker abgerufen (include_inactive=) +2025-06-20 12:01:31 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:36 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:36 - [app] app - [INFO] INFO - Locating template 'guest_request.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_request.html') +2025-06-20 12:01:36 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:36 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:36 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:01:36 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:36 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:36 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:41 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:41 - [app] app - [INFO] INFO - 6-stelliger OTP generiert für Guest Request 6 +2025-06-20 12:01:41 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:41 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:41 - [app] app - [INFO] INFO - Locating template 'guest_status.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_status.html') +2025-06-20 12:01:41 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:45 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:45 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:45 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:45 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:01:45 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:01:45 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:01:45 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:01 - [app] app - [INFO] INFO - [SHUTDOWN] 🧹 Cleanup wird ausgeführt... +2025-06-20 12:02:01 - [app] app - [INFO] INFO - [SHUTDOWN] ✅ Queue Manager gestoppt +2025-06-20 12:02:01 - [app] app - [ERROR] ERROR - [SHUTDOWN] ❌ Cleanup-Fehler: +2025-06-20 12:02:03 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: database/myp.db +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [CONFIG] Erkannte Umgebung: +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [CONFIG] Production-Modus: +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [CONFIG] Verwende Development-Konfiguration +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [DEVELOPMENT] Aktiviere Development-Konfiguration +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Konfiguration aktiviert +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Environment: +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Debug Mode: +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ SQL Echo: +2025-06-20 12:02:04 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O) +2025-06-20 12:02:04 - [app] app - [INFO] INFO - Admin-Berechtigungen beim Start korrigiert: erstellt, aktualisiert +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] 🚀 Starte MYP -Umgebung +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] 🏢 +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] 🔒 Air-Gapped: +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Datenbank... +2025-06-20 12:02:04 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] ✅ Datenbank initialisiert +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] Prüfe Initial-Admin... +2025-06-20 12:02:04 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt. +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] ✅ Admin-Benutzer geprüft +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] Initialisiere statische Drucker... +2025-06-20 12:02:04 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 1 (192.168.0.100) +2025-06-20 12:02:04 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 2 (192.168.0.101) +2025-06-20 12:02:04 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 3 (192.168.0.102) +2025-06-20 12:02:04 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 4 (192.168.0.103) +2025-06-20 12:02:04 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 5 (192.168.0.104) +2025-06-20 12:02:04 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 6 (192.168.0.106) +2025-06-20 12:02:04 - [app] app - [INFO] INFO - ✅ Statische Drucker-Initialisierung abgeschlossen: 0 erstellt, 6 aktualisiert +2025-06-20 12:02:04 - [app] app - [INFO] INFO - 📍 Alle Drucker sind für Standort 'TBA Marienfelde' konfiguriert +2025-06-20 12:02:04 - [app] app - [INFO] INFO - 🌐 IP-Bereich: 192.168.0.100-106 (außer .105) +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] ✅ Statische Drucker konfiguriert +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] Starte Queue Manager... +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] ✅ Queue Manager gestartet +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] Starte Job Scheduler... +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] ✅ Job Scheduler gestartet +2025-06-20 12:02:04 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Steckdosen (alle auf 'aus' = frei)... +2025-06-20 12:02:22 - [app] app - [WARNING] WARNING - [STARTUP] ⚠️ Keine der 6 Steckdosen konnte initialisiert werden +2025-06-20 12:02:22 - [app] app - [INFO] INFO - [STARTUP] 🌐 Server startet auf http://: +2025-06-20 12:02:22 - [app] app - [INFO] INFO - Locating template 'guest_status.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_status.html') +2025-06-20 12:02:22 - [app] app - [INFO] INFO - Locating template 'base.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\base.html') +2025-06-20 12:02:22 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:22 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:02:22 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:02:22 - [app] app - [INFO] INFO - Locating template 'errors/404.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\errors\\404.html') +2025-06-20 12:02:22 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:22 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:02:22 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:28 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:02:28 - [app] app - [INFO] INFO - Locating template 'guest_requests_overview.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_requests_overview.html') +2025-06-20 12:02:28 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:28 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:02:28 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:02:28 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:28 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:02:28 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:29 - [app] app - [INFO] INFO - [SHUTDOWN] 🧹 Cleanup wird ausgeführt... +2025-06-20 12:02:29 - [app] app - [INFO] INFO - [SHUTDOWN] ✅ Queue Manager gestoppt +2025-06-20 12:02:29 - [app] app - [ERROR] ERROR - [SHUTDOWN] ❌ Cleanup-Fehler: +2025-06-20 12:02:30 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: database/myp.db +2025-06-20 12:02:31 - [app] app - [INFO] INFO - [CONFIG] Erkannte Umgebung: +2025-06-20 12:02:31 - [app] app - [INFO] INFO - [CONFIG] Production-Modus: +2025-06-20 12:02:31 - [app] app - [INFO] INFO - [CONFIG] Verwende Development-Konfiguration +2025-06-20 12:02:31 - [app] app - [INFO] INFO - [DEVELOPMENT] Aktiviere Development-Konfiguration +2025-06-20 12:02:31 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Konfiguration aktiviert +2025-06-20 12:02:31 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Environment: +2025-06-20 12:02:31 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Debug Mode: +2025-06-20 12:02:31 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ SQL Echo: +2025-06-20 12:02:32 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O) +2025-06-20 12:02:32 - [app] app - [INFO] INFO - Admin-Berechtigungen beim Start korrigiert: erstellt, aktualisiert +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] 🚀 Starte MYP -Umgebung +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] 🏢 +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] 🔒 Air-Gapped: +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Datenbank... +2025-06-20 12:02:32 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] ✅ Datenbank initialisiert +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] Prüfe Initial-Admin... +2025-06-20 12:02:32 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt. +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] ✅ Admin-Benutzer geprüft +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] Initialisiere statische Drucker... +2025-06-20 12:02:32 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 1 (192.168.0.100) +2025-06-20 12:02:32 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 2 (192.168.0.101) +2025-06-20 12:02:32 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 3 (192.168.0.102) +2025-06-20 12:02:32 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 4 (192.168.0.103) +2025-06-20 12:02:32 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 5 (192.168.0.104) +2025-06-20 12:02:32 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 6 (192.168.0.106) +2025-06-20 12:02:32 - [app] app - [INFO] INFO - ✅ Statische Drucker-Initialisierung abgeschlossen: 0 erstellt, 6 aktualisiert +2025-06-20 12:02:32 - [app] app - [INFO] INFO - 📍 Alle Drucker sind für Standort 'TBA Marienfelde' konfiguriert +2025-06-20 12:02:32 - [app] app - [INFO] INFO - 🌐 IP-Bereich: 192.168.0.100-106 (außer .105) +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] ✅ Statische Drucker konfiguriert +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] Starte Queue Manager... +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] ✅ Queue Manager gestartet +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] Starte Job Scheduler... +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] ✅ Job Scheduler gestartet +2025-06-20 12:02:32 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Steckdosen (alle auf 'aus' = frei)... +2025-06-20 12:02:50 - [app] app - [WARNING] WARNING - [STARTUP] ⚠️ Keine der 6 Steckdosen konnte initialisiert werden +2025-06-20 12:02:50 - [app] app - [INFO] INFO - [STARTUP] 🌐 Server startet auf http://: +2025-06-20 12:02:50 - [app] app - [INFO] INFO - Locating template 'admin.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\admin.html') +2025-06-20 12:02:50 - [app] app - [INFO] INFO - Locating template 'base.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\base.html') +2025-06-20 12:02:50 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:50 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:02:50 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:02:50 - [app] app - [INFO] INFO - Locating template 'errors/404.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\errors\\404.html') +2025-06-20 12:02:50 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:50 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:02:50 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:02:50 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:50 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:02:50 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:02:52 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:02 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:02 - [app] app - [INFO] INFO - Locating template 'admin_guest_requests.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\admin_guest_requests.html') +2025-06-20 12:03:02 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:02 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:02 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:03:02 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:02 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:02 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:02 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:02 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:08 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:09 - [app] app - [INFO] INFO - 6-stelliger OTP generiert für Guest Request 6 +2025-06-20 12:03:09 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:09 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:09 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:13 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:13 - [app] app - [INFO] INFO - Locating template 'dashboard.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\dashboard.html') +2025-06-20 12:03:13 - [app] app - [INFO] INFO - Locating template 'macros/ui_components.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\macros\\ui_components.html') +2025-06-20 12:03:13 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:13 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:13 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:03:13 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:13 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:13 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:16 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:16 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:16 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:16 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:03:16 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:16 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:16 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:16 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:16 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:16 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:17 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:21 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:21 - [app] app - [INFO] INFO - Locating template 'admin_guest_otps.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\admin_guest_otps.html') +2025-06-20 12:03:21 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:22 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:22 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:03:22 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:22 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:22 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:22 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:22 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:22 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:22 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:44 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:44 - [app] app - [INFO] INFO - Locating template 'guest_request.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_request.html') +2025-06-20 12:03:44 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:44 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:44 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:03:44 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:44 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:44 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:47 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:47 - [app] app - [INFO] INFO - Locating template 'guest_requests_overview.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_requests_overview.html') +2025-06-20 12:03:47 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:47 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:47 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:03:47 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:47 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:47 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:03:50 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:03:51 - [app] app - [WARNING] WARNING - Ungültiger OTP-Code für Guest Request 1 +2025-06-20 12:03:51 - [app] app - [WARNING] WARNING - Ungültiger OTP-Code für Guest Request 2 +2025-06-20 12:03:51 - [app] app - [WARNING] WARNING - Ungültiger OTP-Code für Guest Request 3 +2025-06-20 12:03:51 - [app] app - [WARNING] WARNING - Ungültiger OTP-Code für Guest Request 4 +2025-06-20 12:03:51 - [app] app - [WARNING] WARNING - Ungültiger OTP-Code für Guest Request 5 +2025-06-20 12:03:52 - [app] app - [INFO] INFO - OTP erfolgreich verifiziert für Guest Request 6 +2025-06-20 12:03:57 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:04:03 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:04:07 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:04:07 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:04:07 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:04:07 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:04:07 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:04:07 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:04:07 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:04:09 - [app] app - [INFO] INFO - ✅ Steckdosen-Status geloggt: Drucker 1, Status: disconnected, Quelle: system +2025-06-20 12:04:09 - [app] app - [DEBUG] DEBUG - 📊 Auto-Status protokolliert: Drucker -> +2025-06-20 12:04:15 - [app] app - [INFO] INFO - ✅ Steckdosen-Status geloggt: Drucker 2, Status: disconnected, Quelle: system +2025-06-20 12:04:15 - [app] app - [DEBUG] DEBUG - 📊 Auto-Status protokolliert: Drucker -> +2025-06-20 12:04:21 - [app] app - [INFO] INFO - ✅ Steckdosen-Status geloggt: Drucker 3, Status: disconnected, Quelle: system +2025-06-20 12:04:21 - [app] app - [DEBUG] DEBUG - 📊 Auto-Status protokolliert: Drucker -> +2025-06-20 12:04:27 - [app] app - [INFO] INFO - ✅ Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system +2025-06-20 12:04:27 - [app] app - [DEBUG] DEBUG - 📊 Auto-Status protokolliert: Drucker -> +2025-06-20 12:04:33 - [app] app - [INFO] INFO - ✅ Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system +2025-06-20 12:04:33 - [app] app - [DEBUG] DEBUG - 📊 Auto-Status protokolliert: Drucker -> +2025-06-20 12:04:37 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:04:37 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:04:39 - [app] app - [INFO] INFO - ✅ Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system +2025-06-20 12:04:39 - [app] app - [DEBUG] DEBUG - 📊 Auto-Status protokolliert: Drucker -> +2025-06-20 12:04:39 - [app] app - [DEBUG] DEBUG - ✅ Status-Updates für Drucker erfolgreich gespeichert +2025-06-20 12:04:39 - [app] app - [INFO] INFO - Locating template 'printers.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\printers.html') +2025-06-20 12:04:39 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:07 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:07 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [INFO] INFO - Locating template 'stats.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\stats.html') +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:10 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:12 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:12 - [app] app - [INFO] INFO - [SHUTDOWN] 🧹 Cleanup wird ausgeführt... +2025-06-20 12:05:12 - [app] app - [INFO] INFO - [SHUTDOWN] ✅ Queue Manager gestoppt +2025-06-20 12:05:12 - [app] app - [ERROR] ERROR - [SHUTDOWN] ❌ Cleanup-Fehler: +2025-06-20 12:05:13 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: database/myp.db +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [CONFIG] Erkannte Umgebung: +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [CONFIG] Production-Modus: +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [CONFIG] Verwende Development-Konfiguration +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [DEVELOPMENT] Aktiviere Development-Konfiguration +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Konfiguration aktiviert +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Environment: +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ Debug Mode: +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [DEVELOPMENT] ✅ SQL Echo: +2025-06-20 12:05:14 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O) +2025-06-20 12:05:14 - [app] app - [INFO] INFO - Admin-Berechtigungen beim Start korrigiert: erstellt, aktualisiert +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [STARTUP] 🚀 Starte MYP -Umgebung +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [STARTUP] 🏢 +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [STARTUP] 🔒 Air-Gapped: +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Datenbank... +2025-06-20 12:05:14 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [STARTUP] ✅ Datenbank initialisiert +2025-06-20 12:05:14 - [app] app - [INFO] INFO - [STARTUP] Prüfe Initial-Admin... +2025-06-20 12:05:15 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt. +2025-06-20 12:05:15 - [app] app - [INFO] INFO - [STARTUP] ✅ Admin-Benutzer geprüft +2025-06-20 12:05:15 - [app] app - [INFO] INFO - [STARTUP] Initialisiere statische Drucker... +2025-06-20 12:05:15 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 1 (192.168.0.100) +2025-06-20 12:05:15 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 2 (192.168.0.101) +2025-06-20 12:05:15 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 3 (192.168.0.102) +2025-06-20 12:05:15 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 4 (192.168.0.103) +2025-06-20 12:05:15 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 5 (192.168.0.104) +2025-06-20 12:05:15 - [app] app - [INFO] INFO - Drucker aktualisiert: Drucker 6 (192.168.0.106) +2025-06-20 12:05:15 - [app] app - [INFO] INFO - ✅ Statische Drucker-Initialisierung abgeschlossen: 0 erstellt, 6 aktualisiert +2025-06-20 12:05:15 - [app] app - [INFO] INFO - 📍 Alle Drucker sind für Standort 'TBA Marienfelde' konfiguriert +2025-06-20 12:05:15 - [app] app - [INFO] INFO - 🌐 IP-Bereich: 192.168.0.100-106 (außer .105) +2025-06-20 12:05:15 - [app] app - [INFO] INFO - [STARTUP] ✅ Statische Drucker konfiguriert +2025-06-20 12:05:15 - [app] app - [INFO] INFO - [STARTUP] Starte Queue Manager... +2025-06-20 12:05:15 - [app] app - [INFO] INFO - [STARTUP] ✅ Queue Manager gestartet +2025-06-20 12:05:15 - [app] app - [INFO] INFO - [STARTUP] Starte Job Scheduler... +2025-06-20 12:05:15 - [app] app - [INFO] INFO - [STARTUP] ✅ Job Scheduler gestartet +2025-06-20 12:05:15 - [app] app - [INFO] INFO - [STARTUP] Initialisiere Steckdosen (alle auf 'aus' = frei)... +2025-06-20 12:05:33 - [app] app - [WARNING] WARNING - [STARTUP] ⚠️ Keine der 6 Steckdosen konnte initialisiert werden +2025-06-20 12:05:33 - [app] app - [INFO] INFO - [STARTUP] 🌐 Server startet auf http://: +2025-06-20 12:05:33 - [app] app - [INFO] INFO - Locating template 'guest_request.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\guest_request.html') +2025-06-20 12:05:33 - [app] app - [INFO] INFO - Locating template 'calendar.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\calendar.html') +2025-06-20 12:05:33 - [app] app - [INFO] INFO - Locating template 'base.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\base.html') +2025-06-20 12:05:33 - [app] app - [INFO] INFO - Locating template 'base.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\base.html') +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:33 - [app] app - [INFO] INFO - Not Found (404): +2025-06-20 12:05:33 - [app] app - [INFO] INFO - Locating template 'errors/404.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\errors\\404.html') +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Request: +2025-06-20 12:05:33 - [app] app - [INFO] INFO - Locating template 'dashboard.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\dashboard.html') +2025-06-20 12:05:33 - [app] app - [INFO] INFO - Locating template 'macros/ui_components.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\templates + -> found ('C:\\Users\\TTOMCZA.EMEA\\Dev\\Projektarbeit-MYP\\backend\\templates\\macros\\ui_components.html') +2025-06-20 12:05:33 - [app] app - [DEBUG] DEBUG - Response: +2025-06-20 12:05:52 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: database/myp.db +2025-06-20 12:05:52 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O) diff --git a/backend/logs/auth/auth.log b/backend/logs/auth/auth.log index d668e5ad7..d8d703c0f 100644 --- a/backend/logs/auth/auth.log +++ b/backend/logs/auth/auth.log @@ -176,3 +176,6 @@ WHERE users.username = ? OR users.email = ? 2025-06-20 10:24:24 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich erfolgreich angemeldet 2025-06-20 11:55:29 - [auth] auth - [WARNING] WARNING - JSON-Parsing fehlgeschlagen: 400 Bad Request: Failed to decode JSON object: Expecting value: line 1 column 1 (char 0) 2025-06-20 11:55:29 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich erfolgreich angemeldet +2025-06-20 11:58:38 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich abgemeldet +2025-06-20 12:00:10 - [auth] auth - [WARNING] WARNING - JSON-Parsing fehlgeschlagen: 400 Bad Request: Failed to decode JSON object: Expecting value: line 1 column 1 (char 0) +2025-06-20 12:00:10 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich erfolgreich angemeldet diff --git a/backend/logs/core_system/core_system.log b/backend/logs/core_system/core_system.log index 856143ee7..18c96211f 100644 --- a/backend/logs/core_system/core_system.log +++ b/backend/logs/core_system/core_system.log @@ -494,3 +494,13 @@ 2025-06-20 11:54:41 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) 2025-06-20 11:55:07 - [core_system] core_system - [INFO] INFO - ✅ Core System Management Module erfolgreich initialisiert 2025-06-20 11:55:07 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) +2025-06-20 11:56:47 - [core_system] core_system - [INFO] INFO - ✅ Core System Management Module erfolgreich initialisiert +2025-06-20 11:56:47 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) +2025-06-20 12:00:14 - [core_system] core_system - [INFO] INFO - ✅ Core System Management Module erfolgreich initialisiert +2025-06-20 12:00:14 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) +2025-06-20 12:01:05 - [core_system] core_system - [INFO] INFO - ✅ Core System Management Module erfolgreich initialisiert +2025-06-20 12:01:05 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) +2025-06-20 12:02:02 - [core_system] core_system - [INFO] INFO - ✅ Core System Management Module erfolgreich initialisiert +2025-06-20 12:02:02 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) +2025-06-20 12:02:30 - [core_system] core_system - [INFO] INFO - ✅ Core System Management Module erfolgreich initialisiert +2025-06-20 12:02:30 - [core_system] core_system - [INFO] INFO - 📊 Massive Konsolidierung: 6 Dateien → 1 Datei (88% Reduktion) diff --git a/backend/logs/data_management/data_management.log b/backend/logs/data_management/data_management.log index 41b71c0f9..638634035 100644 --- a/backend/logs/data_management/data_management.log +++ b/backend/logs/data_management/data_management.log @@ -1033,3 +1033,13 @@ 2025-06-20 11:54:42 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) 2025-06-20 11:55:07 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert 2025-06-20 11:55:07 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 11:56:48 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-20 11:56:48 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:00:15 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-20 12:00:15 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:01:05 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-20 12:01:05 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:02:03 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-20 12:02:03 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:02:31 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-20 12:02:31 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) diff --git a/backend/logs/drucker_steuerung/drucker_steuerung.log b/backend/logs/drucker_steuerung/drucker_steuerung.log index 67efe30d4..0243cdd83 100644 --- a/backend/logs/drucker_steuerung/drucker_steuerung.log +++ b/backend/logs/drucker_steuerung/drucker_steuerung.log @@ -104,3 +104,8 @@ 2025-06-20 11:19:32 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen 2025-06-20 11:54:47 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen 2025-06-20 11:55:08 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen +2025-06-20 11:56:49 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen +2025-06-20 12:00:16 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen +2025-06-20 12:01:07 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen +2025-06-20 12:02:04 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen +2025-06-20 12:02:32 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen diff --git a/backend/logs/energy_monitoring/energy_monitoring.log b/backend/logs/energy_monitoring/energy_monitoring.log index 6180d412d..084c6ae11 100644 --- a/backend/logs/energy_monitoring/energy_monitoring.log +++ b/backend/logs/energy_monitoring/energy_monitoring.log @@ -829,3 +829,12 @@ 2025-06-20 11:19:32 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert 2025-06-20 11:54:47 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert 2025-06-20 11:55:08 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert +2025-06-20 11:56:49 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert +2025-06-20 11:57:58 - [energy_monitoring] energy_monitoring - [INFO] INFO - 🔋 Energiemonitoring-Dashboard aufgerufen von admin +2025-06-20 11:57:58 - [energy_monitoring] energy_monitoring - [INFO] INFO - 📊 API-Energiemonitoring-Dashboard von admin +2025-06-20 11:58:34 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Dashboard-Daten erfolgreich erstellt: 0 Geräte online +2025-06-20 11:58:34 - [energy_monitoring] energy_monitoring - [INFO] INFO - [OK] API-Energiemonitoring-Dashboard 'api_energy_dashboard' erfolgreich in 35847.58ms +2025-06-20 12:00:16 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert +2025-06-20 12:01:07 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert +2025-06-20 12:02:04 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert +2025-06-20 12:02:32 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert diff --git a/backend/logs/guest/guest.log b/backend/logs/guest/guest.log index ec300b014..14a7cbbc8 100644 --- a/backend/logs/guest/guest.log +++ b/backend/logs/guest/guest.log @@ -87,3 +87,9 @@ WHERE user_permissions.can_approve_jobs = 1] 2025-06-20 10:20:34 - [guest] guest - [INFO] INFO - Gastanfrage 4 genehmigt von Admin 1 (admin), Drucker: Drucker 2 2025-06-20 10:21:06 - [guest] guest - [WARNING] WARNING - ⚠️ Steckdose für Gast-Job 2 konnte nicht eingeschaltet werden 2025-06-20 10:21:06 - [guest] guest - [INFO] INFO - Job 2 mit 6-stelligem OTP-Code gestartet für Gastanfrage 4 +2025-06-20 11:58:12 - [guest] guest - [INFO] INFO - Neue Gastanfrage erstellt: ID 5, Name: Till Tomczaktet, OTP generiert +2025-06-20 11:58:29 - [guest] guest - [INFO] INFO - Gastanfrage 5 genehmigt von Admin 1 (admin), Drucker: Drucker 2 +2025-06-20 11:58:47 - [guest] guest - [WARNING] WARNING - ⚠️ Steckdose für Gast-Job 1 konnte nicht eingeschaltet werden +2025-06-20 11:58:47 - [guest] guest - [INFO] INFO - Job 1 mit 6-stelligem OTP-Code gestartet für Gastanfrage 5 +2025-06-20 12:01:41 - [guest] guest - [INFO] INFO - Neue Gastanfrage erstellt: ID 6, Name: Till Tomczaktet, OTP generiert +2025-06-20 12:03:09 - [guest] guest - [INFO] INFO - Gastanfrage 6 genehmigt von Admin 1 (admin), Drucker: Drucker 2 diff --git a/backend/logs/hardware_integration/hardware_integration.log b/backend/logs/hardware_integration/hardware_integration.log index d1f15f35d..05e3c052e 100644 --- a/backend/logs/hardware_integration/hardware_integration.log +++ b/backend/logs/hardware_integration/hardware_integration.log @@ -3851,3 +3851,40 @@ 2025-06-20 11:56:02 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.104 ist im Netzwerk nicht erreichbar 2025-06-20 11:56:08 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.106 ist über keine Methode erreichbar 2025-06-20 11:56:08 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.106 ist im Netzwerk nicht erreichbar +2025-06-20 11:56:48 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-20 11:56:50 - [hardware_integration] hardware_integration - [INFO] INFO - 🎯 DruckerSteuerung initialisiert - BACKEND ÜBERNIMMT KONTROLLE +2025-06-20 11:58:04 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.100 ist über keine Methode erreichbar +2025-06-20 11:58:04 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.100 ist im Netzwerk nicht erreichbar +2025-06-20 11:58:10 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.101 ist über keine Methode erreichbar +2025-06-20 11:58:10 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.101 ist im Netzwerk nicht erreichbar +2025-06-20 11:58:16 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.102 ist über keine Methode erreichbar +2025-06-20 11:58:16 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.102 ist im Netzwerk nicht erreichbar +2025-06-20 11:58:22 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.103 ist über keine Methode erreichbar +2025-06-20 11:58:22 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.103 ist im Netzwerk nicht erreichbar +2025-06-20 11:58:28 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.104 ist über keine Methode erreichbar +2025-06-20 11:58:28 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.104 ist im Netzwerk nicht erreichbar +2025-06-20 11:58:34 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.106 ist über keine Methode erreichbar +2025-06-20 11:58:34 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.106 ist im Netzwerk nicht erreichbar +2025-06-20 11:58:34 - [hardware_integration] hardware_integration - [INFO] INFO - ✅ Energiestatistiken erstellt: 0/6 Drucker online +2025-06-20 12:00:15 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-20 12:00:16 - [hardware_integration] hardware_integration - [INFO] INFO - 🎯 DruckerSteuerung initialisiert - BACKEND ÜBERNIMMT KONTROLLE +2025-06-20 12:01:05 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-20 12:01:07 - [hardware_integration] hardware_integration - [INFO] INFO - 🎯 DruckerSteuerung initialisiert - BACKEND ÜBERNIMMT KONTROLLE +2025-06-20 12:02:03 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-20 12:02:04 - [hardware_integration] hardware_integration - [INFO] INFO - 🎯 DruckerSteuerung initialisiert - BACKEND ÜBERNIMMT KONTROLLE +2025-06-20 12:02:31 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-20 12:02:32 - [hardware_integration] hardware_integration - [INFO] INFO - 🎯 DruckerSteuerung initialisiert - BACKEND ÜBERNIMMT KONTROLLE +2025-06-20 12:03:57 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.101 ist über keine Methode erreichbar +2025-06-20 12:03:57 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.101 ist im Netzwerk nicht erreichbar +2025-06-20 12:04:09 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.100 ist über keine Methode erreichbar +2025-06-20 12:04:09 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.100 ist im Netzwerk nicht erreichbar +2025-06-20 12:04:15 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.101 ist über keine Methode erreichbar +2025-06-20 12:04:15 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.101 ist im Netzwerk nicht erreichbar +2025-06-20 12:04:21 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.102 ist über keine Methode erreichbar +2025-06-20 12:04:21 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.102 ist im Netzwerk nicht erreichbar +2025-06-20 12:04:27 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.103 ist über keine Methode erreichbar +2025-06-20 12:04:27 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.103 ist im Netzwerk nicht erreichbar +2025-06-20 12:04:33 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.104 ist über keine Methode erreichbar +2025-06-20 12:04:33 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.104 ist im Netzwerk nicht erreichbar +2025-06-20 12:04:39 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ 192.168.0.106 ist über keine Methode erreichbar +2025-06-20 12:04:39 - [hardware_integration] hardware_integration - [WARNING] WARNING - ⚠️ Steckdose 192.168.0.106 ist im Netzwerk nicht erreichbar diff --git a/backend/logs/job_queue_system/job_queue_system.log b/backend/logs/job_queue_system/job_queue_system.log index 80fcbe211..61f943f8a 100644 --- a/backend/logs/job_queue_system/job_queue_system.log +++ b/backend/logs/job_queue_system/job_queue_system.log @@ -1998,3 +1998,23 @@ 2025-06-20 11:55:07 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) 2025-06-20 11:55:08 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) 2025-06-20 11:56:45 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestoppt (Legacy-Kompatibilität) +2025-06-20 11:56:48 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-20 11:56:48 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-20 11:56:50 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) +2025-06-20 12:00:13 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestoppt (Legacy-Kompatibilität) +2025-06-20 12:00:15 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-20 12:00:15 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-20 12:00:16 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) +2025-06-20 12:01:04 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestoppt (Legacy-Kompatibilität) +2025-06-20 12:01:05 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-20 12:01:05 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-20 12:01:07 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) +2025-06-20 12:02:01 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestoppt (Legacy-Kompatibilität) +2025-06-20 12:02:03 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-20 12:02:03 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-20 12:02:04 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) +2025-06-20 12:02:29 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestoppt (Legacy-Kompatibilität) +2025-06-20 12:02:31 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-20 12:02:31 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-20 12:02:32 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) +2025-06-20 12:05:12 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestoppt (Legacy-Kompatibilität) diff --git a/backend/logs/jobs/jobs.log b/backend/logs/jobs/jobs.log index 3e5092a38..2a82745e9 100644 --- a/backend/logs/jobs/jobs.log +++ b/backend/logs/jobs/jobs.log @@ -1097,3 +1097,9 @@ sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) FOREIGN KEY constraint f 2025-06-20 10:41:53 - [jobs] jobs - [INFO] INFO - ✅ Job 'Gastauftrag: Till Tomczaktet' (ID: 1) erfolgreich gelöscht von Benutzer 1 2025-06-20 10:41:53 - [jobs] jobs - [INFO] INFO - 📋 Jobs-Abfrage gestartet von Benutzer 1 (Admin: True) 2025-06-20 10:41:53 - [jobs] jobs - [INFO] INFO - ✅ Jobs erfolgreich abgerufen: 0 von 0 (Seite 1) +2025-06-20 12:00:35 - [jobs] jobs - [INFO] INFO - 📋 Jobs-Abfrage gestartet von Benutzer 1 (Admin: True) +2025-06-20 12:00:35 - [jobs] jobs - [INFO] INFO - ✅ Jobs erfolgreich abgerufen: 1 von 1 (Seite 1) +2025-06-20 12:01:02 - [jobs] jobs - [INFO] INFO - 📋 Jobs-Abfrage gestartet von Benutzer 1 (Admin: True) +2025-06-20 12:01:02 - [jobs] jobs - [INFO] INFO - ✅ Jobs erfolgreich abgerufen: 1 von 1 (Seite 1) +2025-06-20 12:01:30 - [jobs] jobs - [INFO] INFO - 📋 Jobs-Abfrage gestartet von Benutzer 1 (Admin: True) +2025-06-20 12:01:30 - [jobs] jobs - [INFO] INFO - ✅ Jobs erfolgreich abgerufen: 1 von 1 (Seite 1) diff --git a/backend/logs/models/models.log b/backend/logs/models/models.log index 1c64812d1..d654084e0 100644 --- a/backend/logs/models/models.log +++ b/backend/logs/models/models.log @@ -30,3 +30,7 @@ 2025-06-20 10:09:18 - [models] models - [INFO] INFO - Erfolgreich 1 Benachrichtigungen erstellt für 'guest_request' 2025-06-20 10:19:53 - [models] models - [INFO] INFO - Gefunden: 1 Genehmiger für Benachrichtigung 'guest_request' 2025-06-20 10:19:53 - [models] models - [INFO] INFO - Erfolgreich 1 Benachrichtigungen erstellt für 'guest_request' +2025-06-20 11:58:12 - [models] models - [INFO] INFO - Gefunden: 1 Genehmiger für Benachrichtigung 'guest_request' +2025-06-20 11:58:12 - [models] models - [INFO] INFO - Erfolgreich 1 Benachrichtigungen erstellt für 'guest_request' +2025-06-20 12:01:41 - [models] models - [INFO] INFO - Gefunden: 1 Genehmiger für Benachrichtigung 'guest_request' +2025-06-20 12:01:41 - [models] models - [INFO] INFO - Erfolgreich 1 Benachrichtigungen erstellt für 'guest_request' diff --git a/backend/logs/monitoring_analytics/monitoring_analytics.log b/backend/logs/monitoring_analytics/monitoring_analytics.log index f052651ef..92a470ed2 100644 --- a/backend/logs/monitoring_analytics/monitoring_analytics.log +++ b/backend/logs/monitoring_analytics/monitoring_analytics.log @@ -1021,3 +1021,13 @@ 2025-06-20 11:54:47 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) 2025-06-20 11:55:08 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert 2025-06-20 11:55:08 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 11:56:49 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-20 11:56:49 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:00:16 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-20 12:00:16 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:01:07 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-20 12:01:07 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:02:04 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-20 12:02:04 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:02:31 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-20 12:02:31 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) diff --git a/backend/logs/permissions/permissions.log b/backend/logs/permissions/permissions.log index 9f58d7877..2a29d2fb2 100644 --- a/backend/logs/permissions/permissions.log +++ b/backend/logs/permissions/permissions.log @@ -559,3 +559,14 @@ WHERE users.role = ?] 2025-06-20 11:19:32 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert 2025-06-20 11:54:48 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert 2025-06-20 11:55:08 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert +2025-06-20 11:56:49 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert +2025-06-20 11:58:21 - [permissions] permissions - [INFO] INFO - UserPermission für Admin-Benutzer 1 aktualisiert +2025-06-20 11:58:29 - [permissions] permissions - [INFO] INFO - UserPermission für Admin-Benutzer 1 aktualisiert +2025-06-20 11:58:29 - [permissions] permissions - [INFO] INFO - UserPermission für Admin-Benutzer 1 aktualisiert +2025-06-20 12:00:16 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert +2025-06-20 12:01:07 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert +2025-06-20 12:02:04 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert +2025-06-20 12:02:32 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert +2025-06-20 12:03:02 - [permissions] permissions - [INFO] INFO - UserPermission für Admin-Benutzer 1 aktualisiert +2025-06-20 12:03:08 - [permissions] permissions - [INFO] INFO - UserPermission für Admin-Benutzer 1 aktualisiert +2025-06-20 12:03:09 - [permissions] permissions - [INFO] INFO - UserPermission für Admin-Benutzer 1 aktualisiert diff --git a/backend/logs/scheduler/scheduler.log b/backend/logs/scheduler/scheduler.log index fca9f48eb..f0f7e24ba 100644 --- a/backend/logs/scheduler/scheduler.log +++ b/backend/logs/scheduler/scheduler.log @@ -4544,3 +4544,120 @@ 2025-06-20 11:55:26 - [scheduler] scheduler - [INFO] INFO - ❌ Fehlgeschlagen: 0 2025-06-20 11:55:26 - [scheduler] scheduler - [WARNING] WARNING - ⚠️ KEINE Steckdose konnte initialisiert werden! 2025-06-20 11:55:26 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 11:56:48 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-20 11:56:50 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-20 11:56:50 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-20 11:56:50 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Systemstart... +2025-06-20 11:56:50 - [scheduler] scheduler - [INFO] INFO - 🔍 Prüfe 6 konfigurierte Steckdosen... +2025-06-20 11:56:53 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 1: Steckdose 192.168.0.100 nicht erreichbar +2025-06-20 11:56:56 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 2: Steckdose 192.168.0.101 nicht erreichbar +2025-06-20 11:56:59 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 3: Steckdose 192.168.0.102 nicht erreichbar +2025-06-20 11:57:02 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 4: Steckdose 192.168.0.103 nicht erreichbar +2025-06-20 11:57:05 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 5: Steckdose 192.168.0.104 nicht erreichbar +2025-06-20 11:57:08 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 6: Steckdose 192.168.0.106 nicht erreichbar +2025-06-20 11:57:08 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 11:57:08 - [scheduler] scheduler - [INFO] INFO - 🎯 STECKDOSEN-INITIALISIERUNG ABGESCHLOSSEN +2025-06-20 11:57:08 - [scheduler] scheduler - [INFO] INFO - 📊 Gesamt: 6 Steckdosen +2025-06-20 11:57:08 - [scheduler] scheduler - [INFO] INFO - ✅ Erfolgreich: 0 +2025-06-20 11:57:08 - [scheduler] scheduler - [INFO] INFO - 📡 Nicht erreichbar: 6 +2025-06-20 11:57:08 - [scheduler] scheduler - [INFO] INFO - ❌ Fehlgeschlagen: 0 +2025-06-20 11:57:08 - [scheduler] scheduler - [WARNING] WARNING - ⚠️ KEINE Steckdose konnte initialisiert werden! +2025-06-20 11:57:08 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 11:58:47 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Steckdose für Drucker 2: name 'tapo_controller' is not defined +2025-06-20 12:00:15 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-20 12:00:16 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-20 12:00:16 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-20 12:00:16 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Systemstart... +2025-06-20 12:00:16 - [scheduler] scheduler - [INFO] INFO - 🔍 Prüfe 6 konfigurierte Steckdosen... +2025-06-20 12:00:19 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 1: Steckdose 192.168.0.100 nicht erreichbar +2025-06-20 12:00:22 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 2: Steckdose 192.168.0.101 nicht erreichbar +2025-06-20 12:00:25 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 3: Steckdose 192.168.0.102 nicht erreichbar +2025-06-20 12:00:28 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 4: Steckdose 192.168.0.103 nicht erreichbar +2025-06-20 12:00:31 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 5: Steckdose 192.168.0.104 nicht erreichbar +2025-06-20 12:00:34 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 6: Steckdose 192.168.0.106 nicht erreichbar +2025-06-20 12:00:34 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 12:00:34 - [scheduler] scheduler - [INFO] INFO - 🎯 STECKDOSEN-INITIALISIERUNG ABGESCHLOSSEN +2025-06-20 12:00:34 - [scheduler] scheduler - [INFO] INFO - 📊 Gesamt: 6 Steckdosen +2025-06-20 12:00:34 - [scheduler] scheduler - [INFO] INFO - ✅ Erfolgreich: 0 +2025-06-20 12:00:34 - [scheduler] scheduler - [INFO] INFO - 📡 Nicht erreichbar: 6 +2025-06-20 12:00:34 - [scheduler] scheduler - [INFO] INFO - ❌ Fehlgeschlagen: 0 +2025-06-20 12:00:34 - [scheduler] scheduler - [WARNING] WARNING - ⚠️ KEINE Steckdose konnte initialisiert werden! +2025-06-20 12:00:34 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 12:01:05 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-20 12:01:07 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-20 12:01:07 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-20 12:01:07 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Systemstart... +2025-06-20 12:01:07 - [scheduler] scheduler - [INFO] INFO - 🔍 Prüfe 6 konfigurierte Steckdosen... +2025-06-20 12:01:10 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 1: Steckdose 192.168.0.100 nicht erreichbar +2025-06-20 12:01:13 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 2: Steckdose 192.168.0.101 nicht erreichbar +2025-06-20 12:01:16 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 3: Steckdose 192.168.0.102 nicht erreichbar +2025-06-20 12:01:19 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 4: Steckdose 192.168.0.103 nicht erreichbar +2025-06-20 12:01:22 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 5: Steckdose 192.168.0.104 nicht erreichbar +2025-06-20 12:01:25 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 6: Steckdose 192.168.0.106 nicht erreichbar +2025-06-20 12:01:25 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 12:01:25 - [scheduler] scheduler - [INFO] INFO - 🎯 STECKDOSEN-INITIALISIERUNG ABGESCHLOSSEN +2025-06-20 12:01:25 - [scheduler] scheduler - [INFO] INFO - 📊 Gesamt: 6 Steckdosen +2025-06-20 12:01:25 - [scheduler] scheduler - [INFO] INFO - ✅ Erfolgreich: 0 +2025-06-20 12:01:25 - [scheduler] scheduler - [INFO] INFO - 📡 Nicht erreichbar: 6 +2025-06-20 12:01:25 - [scheduler] scheduler - [INFO] INFO - ❌ Fehlgeschlagen: 0 +2025-06-20 12:01:25 - [scheduler] scheduler - [WARNING] WARNING - ⚠️ KEINE Steckdose konnte initialisiert werden! +2025-06-20 12:01:25 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 12:02:03 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-20 12:02:04 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-20 12:02:04 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-20 12:02:04 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Systemstart... +2025-06-20 12:02:04 - [scheduler] scheduler - [INFO] INFO - 🔍 Prüfe 6 konfigurierte Steckdosen... +2025-06-20 12:02:07 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 1: Steckdose 192.168.0.100 nicht erreichbar +2025-06-20 12:02:10 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 2: Steckdose 192.168.0.101 nicht erreichbar +2025-06-20 12:02:13 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 3: Steckdose 192.168.0.102 nicht erreichbar +2025-06-20 12:02:16 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 4: Steckdose 192.168.0.103 nicht erreichbar +2025-06-20 12:02:19 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 5: Steckdose 192.168.0.104 nicht erreichbar +2025-06-20 12:02:22 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 6: Steckdose 192.168.0.106 nicht erreichbar +2025-06-20 12:02:22 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 12:02:22 - [scheduler] scheduler - [INFO] INFO - 🎯 STECKDOSEN-INITIALISIERUNG ABGESCHLOSSEN +2025-06-20 12:02:22 - [scheduler] scheduler - [INFO] INFO - 📊 Gesamt: 6 Steckdosen +2025-06-20 12:02:22 - [scheduler] scheduler - [INFO] INFO - ✅ Erfolgreich: 0 +2025-06-20 12:02:22 - [scheduler] scheduler - [INFO] INFO - 📡 Nicht erreichbar: 6 +2025-06-20 12:02:22 - [scheduler] scheduler - [INFO] INFO - ❌ Fehlgeschlagen: 0 +2025-06-20 12:02:22 - [scheduler] scheduler - [WARNING] WARNING - ⚠️ KEINE Steckdose konnte initialisiert werden! +2025-06-20 12:02:22 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 12:02:31 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-20 12:02:32 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-20 12:02:32 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-20 12:02:32 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Systemstart... +2025-06-20 12:02:32 - [scheduler] scheduler - [INFO] INFO - 🔍 Prüfe 6 konfigurierte Steckdosen... +2025-06-20 12:02:35 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 1: Steckdose 192.168.0.100 nicht erreichbar +2025-06-20 12:02:38 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 2: Steckdose 192.168.0.101 nicht erreichbar +2025-06-20 12:02:41 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 3: Steckdose 192.168.0.102 nicht erreichbar +2025-06-20 12:02:44 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 4: Steckdose 192.168.0.103 nicht erreichbar +2025-06-20 12:02:47 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 5: Steckdose 192.168.0.104 nicht erreichbar +2025-06-20 12:02:50 - [scheduler] scheduler - [WARNING] WARNING - 📡 Drucker 6: Steckdose 192.168.0.106 nicht erreichbar +2025-06-20 12:02:50 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 12:02:50 - [scheduler] scheduler - [INFO] INFO - 🎯 STECKDOSEN-INITIALISIERUNG ABGESCHLOSSEN +2025-06-20 12:02:50 - [scheduler] scheduler - [INFO] INFO - 📊 Gesamt: 6 Steckdosen +2025-06-20 12:02:50 - [scheduler] scheduler - [INFO] INFO - ✅ Erfolgreich: 0 +2025-06-20 12:02:50 - [scheduler] scheduler - [INFO] INFO - 📡 Nicht erreichbar: 6 +2025-06-20 12:02:50 - [scheduler] scheduler - [INFO] INFO - ❌ Fehlgeschlagen: 0 +2025-06-20 12:02:50 - [scheduler] scheduler - [WARNING] WARNING - ⚠️ KEINE Steckdose konnte initialisiert werden! +2025-06-20 12:02:50 - [scheduler] scheduler - [INFO] INFO - ============================================================ +2025-06-20 12:03:32 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: Gastauftrag: Till Tomczaktet +2025-06-20 12:03:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Steckdose für Drucker 2: name 'tapo_controller' is not defined +2025-06-20 12:03:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-20 12:03:49 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: Gastauftrag: Till Tomczaktet +2025-06-20 12:03:49 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Steckdose für Drucker 2: name 'tapo_controller' is not defined +2025-06-20 12:03:49 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-20 12:04:02 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: Gastauftrag: Till Tomczaktet +2025-06-20 12:04:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Steckdose für Drucker 2: name 'tapo_controller' is not defined +2025-06-20 12:04:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-20 12:04:19 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: Gastauftrag: Till Tomczaktet +2025-06-20 12:04:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Steckdose für Drucker 2: name 'tapo_controller' is not defined +2025-06-20 12:04:19 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-20 12:04:32 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: Gastauftrag: Till Tomczaktet +2025-06-20 12:04:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Steckdose für Drucker 2: name 'tapo_controller' is not defined +2025-06-20 12:04:32 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-20 12:04:49 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: Gastauftrag: Till Tomczaktet +2025-06-20 12:04:49 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Steckdose für Drucker 2: name 'tapo_controller' is not defined +2025-06-20 12:04:49 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-20 12:05:02 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: Gastauftrag: Till Tomczaktet +2025-06-20 12:05:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Steckdose für Drucker 2: name 'tapo_controller' is not defined +2025-06-20 12:05:02 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten diff --git a/backend/logs/security_suite/security_suite.log b/backend/logs/security_suite/security_suite.log index b66711676..17686b390 100644 --- a/backend/logs/security_suite/security_suite.log +++ b/backend/logs/security_suite/security_suite.log @@ -1544,3 +1544,18 @@ 2025-06-20 11:55:07 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert 2025-06-20 11:55:07 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) 2025-06-20 11:55:08 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert +2025-06-20 11:56:48 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-20 11:56:48 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 11:56:49 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert +2025-06-20 12:00:15 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-20 12:00:15 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:00:16 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert +2025-06-20 12:01:05 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-20 12:01:05 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:01:07 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert +2025-06-20 12:02:03 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-20 12:02:03 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:02:04 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert +2025-06-20 12:02:31 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-20 12:02:31 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-20 12:02:32 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert diff --git a/backend/logs/startup/startup.log b/backend/logs/startup/startup.log index b8991fb22..4f52e9e75 100644 --- a/backend/logs/startup/startup.log +++ b/backend/logs/startup/startup.log @@ -4079,3 +4079,48 @@ 2025-06-20 11:55:08 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert 2025-06-20 11:55:08 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert 2025-06-20 11:55:08 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 11:56:49 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 11:56:49 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-20 11:56:49 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)] +2025-06-20 11:56:49 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-20 11:56:49 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-20 11:56:49 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-20T11:56:49.488080 +2025-06-20 11:56:49 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-20 11:56:49 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-20 11:56:49 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 12:00:16 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 12:00:16 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-20 12:00:16 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)] +2025-06-20 12:00:16 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-20 12:00:16 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-20 12:00:16 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-20T12:00:16.188427 +2025-06-20 12:00:16 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-20 12:00:16 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-20 12:00:16 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 12:01:07 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 12:01:07 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-20 12:01:07 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)] +2025-06-20 12:01:07 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-20 12:01:07 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-20 12:01:07 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-20T12:01:07.081539 +2025-06-20 12:01:07 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-20 12:01:07 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-20 12:01:07 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 12:02:04 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 12:02:04 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-20 12:02:04 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)] +2025-06-20 12:02:04 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-20 12:02:04 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-20 12:02:04 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-20T12:02:04.019319 +2025-06-20 12:02:04 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-20 12:02:04 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-20 12:02:04 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 12:02:31 - [startup] startup - [INFO] INFO - ================================================== +2025-06-20 12:02:31 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-20 12:02:31 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)] +2025-06-20 12:02:31 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-20 12:02:31 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-20 12:02:31 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-20T12:02:31.953306 +2025-06-20 12:02:31 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-20 12:02:31 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-20 12:02:31 - [startup] startup - [INFO] INFO - ================================================== diff --git a/backend/logs/utilities_collection/utilities_collection.log b/backend/logs/utilities_collection/utilities_collection.log index 7ba2b0fa3..59d6f9600 100644 --- a/backend/logs/utilities_collection/utilities_collection.log +++ b/backend/logs/utilities_collection/utilities_collection.log @@ -1351,3 +1351,17 @@ 2025-06-20 11:54:42 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) 2025-06-20 11:55:07 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert 2025-06-20 11:55:07 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 11:56:47 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 11:56:47 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 12:00:15 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 12:00:15 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 12:01:05 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 12:01:05 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 12:02:02 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 12:02:02 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 12:02:30 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 12:02:30 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 12:05:13 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 12:05:13 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-20 12:05:52 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-20 12:05:52 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) diff --git a/backend/logs/windows_fixes/windows_fixes.log b/backend/logs/windows_fixes/windows_fixes.log index 260121a4a..24f9853ad 100644 --- a/backend/logs/windows_fixes/windows_fixes.log +++ b/backend/logs/windows_fixes/windows_fixes.log @@ -497,3 +497,13 @@ 2025-06-20 11:54:41 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet 2025-06-20 11:55:07 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... 2025-06-20 11:55:07 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-20 11:56:47 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-20 11:56:47 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-20 12:00:14 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-20 12:00:14 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-20 12:01:05 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-20 12:01:05 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-20 12:02:02 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-20 12:02:02 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-20 12:02:30 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-20 12:02:30 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet diff --git a/backend/templates/guest_start_job.html b/backend/templates/guest_start_job.html index c0e14d298..f5a56df09 100644 --- a/backend/templates/guest_start_job.html +++ b/backend/templates/guest_start_job.html @@ -293,7 +293,43 @@ document.addEventListener('DOMContentLoaded', function() { }, 3000); } else { - showError('Code ungültig', result.error || 'Der eingegebene Code ist ungültig oder bereits verwendet.'); + // Erweiterte Fehlerbehandlung mit detaillierten Informationen + let errorTitle = 'Code ungültig'; + let errorMessage = result.error || 'Der eingegebene Code ist ungültig oder bereits verwendet.'; + + // Spezifische Behandlung für Drucker-bezogene Fehler + if (result.error_details) { + const details = result.error_details; + + switch (details.type) { + case 'printer_offline': + errorTitle = 'Drucker nicht verfügbar'; + errorMessage = `Der zugewiesene Drucker "${details.printer_name}" ist derzeit offline und kann nicht gestartet werden. Bitte wenden Sie sich an den Administrator oder versuchen Sie es später erneut.`; + break; + + case 'all_printers_offline': + errorTitle = 'Alle Drucker offline'; + errorMessage = `Derzeit sind alle ${details.total_printers} Drucker offline (${details.offline_list}). Jobs können momentan nicht gestartet werden. Bitte warten Sie, bis mindestens ein Drucker wieder online ist, oder wenden Sie sich an den Administrator.`; + break; + + case 'no_printers_configured': + errorTitle = 'Keine Drucker konfiguriert'; + errorMessage = 'Es sind derzeit keine aktiven Drucker für das System konfiguriert. Bitte wenden Sie sich an den Administrator.'; + break; + + case 'printer_check_failed': + errorTitle = 'Drucker-Status unbekannt'; + errorMessage = `Der Status des Druckers "${details.printer_name}" konnte nicht ermittelt werden. Bitte versuchen Sie es in wenigen Minuten erneut oder wenden Sie sich an den Administrator.`; + break; + + default: + // Standardverhalten für unbekannte Fehlertypen + errorTitle = 'Fehler beim Starten'; + break; + } + } + + showError(errorTitle, errorMessage); clearCode(); }