diff --git a/backend/app.py b/backend/app.py index 907bb999..c96690ca 100644 --- a/backend/app.py +++ b/backend/app.py @@ -1881,50 +1881,7 @@ def admin_page(): @login_required @admin_required def admin(): - """Admin-Dashboard-Seite mit Live-Funktionen""" - # Daten für das Template sammeln (gleiche Logik wie admin-dashboard) - db_session = get_db_session() - try: - # Erfolgsrate berechnen - completed_jobs = db_session.query(Job).filter(Job.status == 'completed').count() if db_session else 0 - total_jobs = db_session.query(Job).count() if db_session else 0 - success_rate = round((completed_jobs / total_jobs * 100), 1) if total_jobs > 0 else 0 - - # Statistiken sammeln - stats = { - 'total_users': db_session.query(User).count(), - 'total_printers': db_session.query(Printer).count(), - 'online_printers': db_session.query(Printer).filter(Printer.status == 'online').count(), - 'active_jobs': db_session.query(Job).filter(Job.status.in_(['running', 'queued'])).count(), - 'queued_jobs': db_session.query(Job).filter(Job.status == 'queued').count(), - 'success_rate': success_rate - } - - # Tab-Parameter - active_tab = request.args.get('tab', 'users') - - # Benutzer laden (für users tab) - users = [] - if active_tab == 'users': - users = db_session.query(User).all() - - # Drucker laden (für printers tab) - printers = [] - if active_tab == 'printers': - printers = db_session.query(Printer).all() - - db_session.close() - - return render_template("admin.html", - stats=stats, - active_tab=active_tab, - users=users, - printers=printers) - except Exception as e: - app_logger.error(f"Fehler beim Laden der Admin-Daten: {str(e)}") - db_session.close() - flash("Fehler beim Laden des Admin-Bereichs.", "error") - return redirect(url_for("index")) + return render_template(url_for("admin_page")) @app.route("/socket-test") @login_required @@ -2170,58 +2127,155 @@ def create_user_api(): return jsonify({"error": "Nur Administratoren können Benutzer erstellen"}), 403 try: - data = request.json + # JSON-Daten sicher extrahieren + data = request.get_json() + if not data: + return jsonify({"error": "Keine JSON-Daten empfangen"}), 400 - # Pflichtfelder prüfen + # Pflichtfelder prüfen mit detaillierteren Meldungen required_fields = ["username", "email", "password"] + missing_fields = [] + for field in required_fields: - if field not in data or not data[field]: - return jsonify({"error": f"Feld '{field}' ist erforderlich"}), 400 + if field not in data: + missing_fields.append(f"'{field}' fehlt") + elif not data[field] or not str(data[field]).strip(): + missing_fields.append(f"'{field}' ist leer") + + if missing_fields: + return jsonify({ + "error": "Pflichtfelder fehlen oder sind leer", + "details": missing_fields + }), 400 + + # Daten extrahieren und bereinigen + username = str(data["username"]).strip() + email = str(data["email"]).strip().lower() + password = str(data["password"]) + name = str(data.get("name", "")).strip() + + # E-Mail-Validierung + import re + email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' + if not re.match(email_pattern, email): + return jsonify({"error": "Ungültige E-Mail-Adresse"}), 400 + + # Username-Validierung (nur alphanumerische Zeichen und Unterstriche) + username_pattern = r'^[a-zA-Z0-9_]{3,30}$' + if not re.match(username_pattern, username): + return jsonify({ + "error": "Ungültiger Benutzername", + "details": "Benutzername muss 3-30 Zeichen lang sein und darf nur Buchstaben, Zahlen und Unterstriche enthalten" + }), 400 + + # Passwort-Validierung + if len(password) < 6: + return jsonify({ + "error": "Passwort zu kurz", + "details": "Passwort muss mindestens 6 Zeichen lang sein" + }), 400 + + # Starke Passwort-Validierung (optional) + if len(password) < 8: + user_logger.warning(f"Schwaches Passwort für neuen Benutzer {username}") db_session = get_db_session() - # Prüfen, ob bereits ein Benutzer mit diesem Benutzernamen oder E-Mail existiert - existing_user = db_session.query(User).filter( - (User.username == data["username"]) | (User.email == data["email"]) - ).first() - - if existing_user: + try: + # Prüfen, ob bereits ein Benutzer mit diesem Benutzernamen existiert + existing_username = db_session.query(User).filter(User.username == username).first() + if existing_username: + db_session.close() + return jsonify({ + "error": "Benutzername bereits vergeben", + "details": f"Ein Benutzer mit dem Benutzernamen '{username}' existiert bereits" + }), 400 + + # Prüfen, ob bereits ein Benutzer mit dieser E-Mail existiert + existing_email = db_session.query(User).filter(User.email == email).first() + if existing_email: + db_session.close() + return jsonify({ + "error": "E-Mail-Adresse bereits vergeben", + "details": f"Ein Benutzer mit der E-Mail-Adresse '{email}' existiert bereits" + }), 400 + + # Rolle bestimmen + is_admin = bool(data.get("is_admin", False)) + role = "admin" if is_admin else "user" + + # Neuen Benutzer erstellen + new_user = User( + username=username, + email=email, + name=name if name else username, # Fallback auf username wenn name leer + role=role, + active=True, + created_at=datetime.now() + ) + + # Optionale Felder setzen + if "department" in data and data["department"]: + new_user.department = str(data["department"]).strip() + if "position" in data and data["position"]: + new_user.position = str(data["position"]).strip() + if "phone" in data and data["phone"]: + new_user.phone = str(data["phone"]).strip() + + # Passwort setzen + new_user.set_password(password) + + # Benutzer zur Datenbank hinzufügen + db_session.add(new_user) + db_session.commit() + + # Erfolgreiche Antwort mit Benutzerdaten + user_data = { + "id": new_user.id, + "username": new_user.username, + "email": new_user.email, + "name": new_user.name, + "role": new_user.role, + "is_admin": new_user.is_admin, + "active": new_user.active, + "department": new_user.department, + "position": new_user.position, + "phone": new_user.phone, + "created_at": new_user.created_at.isoformat() + } + db_session.close() - return jsonify({"error": "Ein Benutzer mit diesem Benutzernamen oder E-Mail existiert bereits"}), 400 + + user_logger.info(f"Neuer Benutzer '{new_user.username}' ({new_user.email}) erfolgreich erstellt von Admin {current_user.id}") + + return jsonify({ + "success": True, + "message": f"Benutzer '{new_user.username}' erfolgreich erstellt", + "user": user_data + }), 201 + + except Exception as db_error: + db_session.rollback() + db_session.close() + user_logger.error(f"Datenbankfehler beim Erstellen des Benutzers: {str(db_error)}") + return jsonify({ + "error": "Datenbankfehler beim Erstellen des Benutzers", + "details": "Bitte versuchen Sie es erneut" + }), 500 - # Neuen Benutzer erstellen - new_user = User( - username=data["username"], - email=data["email"], - name=data.get("name", ""), - role="admin" if data.get("is_admin", False) else "user", - created_at=datetime.now() - ) - - # Passwort setzen - new_user.set_password(data["password"]) - - db_session.add(new_user) - db_session.commit() - - user_data = { - "id": new_user.id, - "username": new_user.username, - "email": new_user.email, - "name": new_user.name, - "role": new_user.role, - "is_admin": new_user.is_admin, - "created_at": new_user.created_at.isoformat() - } - - db_session.close() - - user_logger.info(f"Neuer Benutzer '{new_user.username}' erstellt von Admin {current_user.id}") - return jsonify({"user": user_data}), 201 + except ValueError as ve: + user_logger.warning(f"Validierungsfehler beim Erstellen eines Benutzers: {str(ve)}") + return jsonify({ + "error": "Ungültige Eingabedaten", + "details": str(ve) + }), 400 except Exception as e: - user_logger.error(f"Fehler beim Erstellen eines Benutzers: {str(e)}") - return jsonify({"error": "Interner Serverfehler"}), 500 + user_logger.error(f"Unerwarteter Fehler beim Erstellen eines Benutzers: {str(e)}") + return jsonify({ + "error": "Interner Serverfehler", + "details": "Ein unerwarteter Fehler ist aufgetreten" + }), 500 @app.route("/api/admin/users/", methods=["GET"]) @login_required @@ -7171,6 +7225,12 @@ if __name__ == "__main__": # Cleanup bei Fehler if shutdown_manager: shutdown_manager.force_shutdown(1) + else: + try: + stop_queue_manager() + except: + pass + sys.exit(1) else: try: stop_queue_manager() diff --git a/backend/database/myp.db b/backend/database/myp.db index 00ce585e..4caa4e19 100644 Binary files a/backend/database/myp.db and b/backend/database/myp.db differ diff --git a/backend/database/myp.db-shm b/backend/database/myp.db-shm deleted file mode 100644 index afa41ce9..00000000 Binary files a/backend/database/myp.db-shm and /dev/null differ diff --git a/backend/database/myp.db-wal b/backend/database/myp.db-wal deleted file mode 100644 index af6e4805..00000000 Binary files a/backend/database/myp.db-wal and /dev/null differ diff --git a/backend/logs/analytics/analytics.log b/backend/logs/analytics/analytics.log index a4e76c7e..b4ec9cd1 100644 --- a/backend/logs/analytics/analytics.log +++ b/backend/logs/analytics/analytics.log @@ -42,3 +42,4 @@ 2025-06-01 13:19:37 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert 2025-06-01 13:19:50 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert 2025-06-01 13:21:18 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert +2025-06-01 13:22:49 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert diff --git a/backend/logs/app/app.log b/backend/logs/app/app.log index 8f9690a2..97ab5c78 100644 --- a/backend/logs/app/app.log +++ b/backend/logs/app/app.log @@ -994,3 +994,40 @@ WHERE users.id = ? 2025-06-01 13:21:20 - [app] app - [INFO] INFO - Starte Debug-Server auf 0.0.0.0:5000 (HTTP) 2025-06-01 13:21:20 - [app] app - [INFO] INFO - Windows-Debug-Modus: Auto-Reload deaktiviert 2025-06-01 13:21:20 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:49 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db +2025-06-01 13:22:50 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen) +2025-06-01 13:22:50 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen +2025-06-01 13:22:51 - [app] app - [INFO] INFO - ✅ Zentraler Shutdown-Manager initialisiert +2025-06-01 13:22:51 - [app] app - [INFO] INFO - 🔄 Starte Datenbank-Setup und Migrationen... +2025-06-01 13:22:51 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert +2025-06-01 13:22:51 - [app] app - [INFO] INFO - ✅ JobOrder-Tabelle bereits vorhanden +2025-06-01 13:22:51 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt. +2025-06-01 13:22:51 - [app] app - [INFO] INFO - ✅ Datenbank-Setup und Migrationen erfolgreich abgeschlossen +2025-06-01 13:22:51 - [app] app - [INFO] INFO - 🖨️ Starte automatische Steckdosen-Initialisierung... +2025-06-01 13:22:51 - [app] app - [INFO] INFO - ℹ️ Keine Drucker zur Initialisierung gefunden +2025-06-01 13:22:51 - [app] app - [INFO] INFO - 🔄 Debug-Modus: Queue Manager deaktiviert für Entwicklung +2025-06-01 13:22:51 - [app] app - [INFO] INFO - Job-Scheduler gestartet +2025-06-01 13:22:51 - [app] app - [INFO] INFO - Starte Debug-Server auf 0.0.0.0:5000 (HTTP) +2025-06-01 13:22:51 - [app] app - [INFO] INFO - Windows-Debug-Modus: Auto-Reload deaktiviert +2025-06-01 13:22:51 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:51 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:54 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:54 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:55 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:56 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:57 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:57 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:58 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:22:58 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:23:02 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_guest_requests: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:23:02 - [app] app - [INFO] INFO - Admin-Gastanfragen Seite aufgerufen von User 1 +2025-06-01 13:23:02 - [app] app - [INFO] INFO - Admin-Check für Funktion get_admin_guest_requests: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:23:02 - [app] app - [INFO] INFO - API-Aufruf /api/admin/guest-requests von User 1 +2025-06-01 13:23:02 - [app] app - [INFO] INFO - Admin-Gastaufträge geladen: 0 von 0 (Status: all) +2025-06-01 13:23:04 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:23:05 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:23:25 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:23:26 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:23:56 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:24:26 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True +2025-06-01 13:24:56 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True diff --git a/backend/logs/backup/backup.log b/backend/logs/backup/backup.log index a0fe0de0..9ff2852f 100644 --- a/backend/logs/backup/backup.log +++ b/backend/logs/backup/backup.log @@ -42,3 +42,4 @@ 2025-06-01 13:19:37 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) 2025-06-01 13:19:50 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) 2025-06-01 13:21:18 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) +2025-06-01 13:22:49 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) diff --git a/backend/logs/calendar/calendar.log b/backend/logs/calendar/calendar.log index eb73ecab..32cc742d 100644 --- a/backend/logs/calendar/calendar.log +++ b/backend/logs/calendar/calendar.log @@ -23,3 +23,5 @@ 2025-06-01 04:46:41 - [calendar] calendar - [INFO] INFO - 📅 Kalender-Events abgerufen: 0 Einträge für Zeitraum 2025-06-01 00:00:00 bis 2025-06-08 00:00:00 2025-06-01 04:54:34 - [calendar] calendar - [INFO] INFO - 📅 Kalender-Events abgerufen: 0 Einträge für Zeitraum 2025-06-01 00:00:00 bis 2025-06-08 00:00:00 2025-06-01 04:54:51 - [calendar] calendar - [INFO] INFO - 📅 Kalender-Events abgerufen: 0 Einträge für Zeitraum 2025-06-01 00:00:00 bis 2025-06-08 00:00:00 +2025-06-01 13:23:09 - [calendar] calendar - [INFO] INFO - 📅 Kalender-Events abgerufen: 0 Einträge für Zeitraum 2025-06-01 00:00:00 bis 2025-06-08 00:00:00 +2025-06-01 13:23:21 - [calendar] calendar - [INFO] INFO - 📅 Kalender-Events abgerufen: 0 Einträge für Zeitraum 2025-06-01 00:00:00 bis 2025-06-08 00:00:00 diff --git a/backend/logs/dashboard/dashboard.log b/backend/logs/dashboard/dashboard.log index 7e5b8ba4..861525cb 100644 --- a/backend/logs/dashboard/dashboard.log +++ b/backend/logs/dashboard/dashboard.log @@ -161,3 +161,7 @@ 2025-06-01 13:21:19 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet 2025-06-01 13:21:19 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback) 2025-06-01 13:21:19 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading) +2025-06-01 13:22:50 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet +2025-06-01 13:22:50 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet +2025-06-01 13:22:50 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback) +2025-06-01 13:22:50 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading) diff --git a/backend/logs/database/database.log b/backend/logs/database/database.log index 0ad29c2d..550547e3 100644 --- a/backend/logs/database/database.log +++ b/backend/logs/database/database.log @@ -42,3 +42,4 @@ 2025-06-01 13:19:37 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet 2025-06-01 13:19:50 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet 2025-06-01 13:21:18 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet +2025-06-01 13:22:49 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet diff --git a/backend/logs/email_notification/email_notification.log b/backend/logs/email_notification/email_notification.log index 6b2d1ba8..a102248b 100644 --- a/backend/logs/email_notification/email_notification.log +++ b/backend/logs/email_notification/email_notification.log @@ -40,3 +40,4 @@ 2025-06-01 13:19:37 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) 2025-06-01 13:19:51 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) 2025-06-01 13:21:19 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) +2025-06-01 13:22:50 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) diff --git a/backend/logs/jobs/jobs.log b/backend/logs/jobs/jobs.log index 7ee6e36c..be4ba7e4 100644 --- a/backend/logs/jobs/jobs.log +++ b/backend/logs/jobs/jobs.log @@ -57,3 +57,5 @@ 2025-06-01 04:46:41 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1) 2025-06-01 04:54:35 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1) 2025-06-01 04:54:44 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1) +2025-06-01 13:23:06 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1) +2025-06-01 13:23:19 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1) diff --git a/backend/logs/maintenance/maintenance.log b/backend/logs/maintenance/maintenance.log index 4feada4e..3b5bbf0b 100644 --- a/backend/logs/maintenance/maintenance.log +++ b/backend/logs/maintenance/maintenance.log @@ -80,3 +80,5 @@ 2025-06-01 13:19:51 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet 2025-06-01 13:21:19 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet 2025-06-01 13:21:19 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet +2025-06-01 13:22:50 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet +2025-06-01 13:22:50 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet diff --git a/backend/logs/multi_location/multi_location.log b/backend/logs/multi_location/multi_location.log index ffedad33..6172238f 100644 --- a/backend/logs/multi_location/multi_location.log +++ b/backend/logs/multi_location/multi_location.log @@ -80,3 +80,5 @@ 2025-06-01 13:19:51 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt 2025-06-01 13:21:19 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt 2025-06-01 13:21:19 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt +2025-06-01 13:22:50 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt +2025-06-01 13:22:50 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt diff --git a/backend/logs/permissions/permissions.log b/backend/logs/permissions/permissions.log index 421c4f10..06fc175f 100644 --- a/backend/logs/permissions/permissions.log +++ b/backend/logs/permissions/permissions.log @@ -38,3 +38,4 @@ 2025-06-01 13:19:38 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert 2025-06-01 13:19:51 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert 2025-06-01 13:21:19 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert +2025-06-01 13:22:50 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert diff --git a/backend/logs/printer_monitor/printer_monitor.log b/backend/logs/printer_monitor/printer_monitor.log index 42a2c4bb..65793e90 100644 --- a/backend/logs/printer_monitor/printer_monitor.log +++ b/backend/logs/printer_monitor/printer_monitor.log @@ -987,3 +987,68 @@ 2025-06-01 13:21:44 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102 2025-06-01 13:21:50 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105 2025-06-01 13:21:56 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.1s +2025-06-01 13:22:49 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert +2025-06-01 13:22:49 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet +2025-06-01 13:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart... +2025-06-01 13:22:51 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden +2025-06-01 13:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung... +2025-06-01 13:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration +2025-06-01 13:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103 +2025-06-01 13:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:22:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:56 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:22:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:56 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:22:57 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:57 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:22:57 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:57 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:22:57 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104 +2025-06-01 13:22:58 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:58 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:22:58 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:22:58 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:02 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:02 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:02 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:02 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:03 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100 +2025-06-01 13:23:05 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:05 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:05 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:05 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:10 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101 +2025-06-01 13:23:15 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:15 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:15 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:15 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:16 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102 +2025-06-01 13:23:17 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:17 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:17 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:17 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:22 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105 +2025-06-01 13:23:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:26 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:26 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:28 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.1s +2025-06-01 13:23:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:56 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:23:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:23:56 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:24:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:24:26 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:24:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:24:26 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:24:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:24:56 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden +2025-06-01 13:24:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-01 13:24:56 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden diff --git a/backend/logs/printers/printers.log b/backend/logs/printers/printers.log index 89306057..8d8a3dfd 100644 --- a/backend/logs/printers/printers.log +++ b/backend/logs/printers/printers.log @@ -3429,3 +3429,45 @@ 2025-06-01 04:54:49 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) 2025-06-01 04:54:49 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker 2025-06-01 04:54:49 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.22ms +2025-06-01 13:22:51 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:22:51 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:22:51 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 75.86ms +2025-06-01 13:22:54 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:22:54 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:22:54 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 10.86ms +2025-06-01 13:22:56 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:22:56 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:22:56 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 5.65ms +2025-06-01 13:22:57 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:22:57 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:22:57 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 9.64ms +2025-06-01 13:22:58 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:22:58 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:22:58 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.13ms +2025-06-01 13:23:02 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:23:02 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:23:02 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 8.34ms +2025-06-01 13:23:05 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:23:05 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:23:05 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 8.91ms +2025-06-01 13:23:06 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check) +2025-06-01 13:23:15 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:23:15 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:23:15 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.21ms +2025-06-01 13:23:17 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check) +2025-06-01 13:23:17 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:23:17 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:23:17 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 9.69ms +2025-06-01 13:23:19 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check) +2025-06-01 13:23:26 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:23:26 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:23:26 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.20ms +2025-06-01 13:23:56 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:23:56 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:23:56 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.32ms +2025-06-01 13:24:26 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:24:26 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:24:26 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.73ms +2025-06-01 13:24:56 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-01 13:24:56 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker +2025-06-01 13:24:56 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 5.43ms diff --git a/backend/logs/scheduler/scheduler.log b/backend/logs/scheduler/scheduler.log index e3132240..f38741ad 100644 --- a/backend/logs/scheduler/scheduler.log +++ b/backend/logs/scheduler/scheduler.log @@ -2928,3 +2928,6 @@ 2025-06-01 13:21:18 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True 2025-06-01 13:21:20 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet 2025-06-01 13:21:20 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-01 13:22:49 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-01 13:22:51 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-01 13:22:51 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet diff --git a/backend/logs/security/security.log b/backend/logs/security/security.log index f3d0cfd9..25f18b9f 100644 --- a/backend/logs/security/security.log +++ b/backend/logs/security/security.log @@ -38,3 +38,4 @@ 2025-06-01 13:19:38 - [security] security - [INFO] INFO - 🔒 Security System initialisiert 2025-06-01 13:19:51 - [security] security - [INFO] INFO - 🔒 Security System initialisiert 2025-06-01 13:21:19 - [security] security - [INFO] INFO - 🔒 Security System initialisiert +2025-06-01 13:22:50 - [security] security - [INFO] INFO - 🔒 Security System initialisiert diff --git a/backend/logs/shutdown_manager/shutdown_manager.log b/backend/logs/shutdown_manager/shutdown_manager.log index 7c29cfff..e3501645 100644 --- a/backend/logs/shutdown_manager/shutdown_manager.log +++ b/backend/logs/shutdown_manager/shutdown_manager.log @@ -103,3 +103,4 @@ 2025-06-01 13:19:38 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert 2025-06-01 13:19:51 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert 2025-06-01 13:21:19 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert +2025-06-01 13:22:50 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert diff --git a/backend/logs/startup/startup.log b/backend/logs/startup/startup.log index e563e640..6022bf63 100644 --- a/backend/logs/startup/startup.log +++ b/backend/logs/startup/startup.log @@ -354,3 +354,12 @@ 2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert 2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert 2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - ================================================== +2025-06-01 13:22:50 - [startup] startup - [INFO] INFO - ================================================== +2025-06-01 13:22:50 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet... +2025-06-01 13:22:50 - [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-01 13:22:50 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-01 13:22:50 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-01 13:22:50 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T13:22:50.781946 +2025-06-01 13:22:50 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-01 13:22:50 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-01 13:22:50 - [startup] startup - [INFO] INFO - ================================================== diff --git a/backend/logs/user/user.log b/backend/logs/user/user.log index 5d9b4a64..8a48ee64 100644 --- a/backend/logs/user/user.log +++ b/backend/logs/user/user.log @@ -1,3 +1,6 @@ 2025-06-01 04:07:12 - [user] user - [INFO] INFO - Benutzer admin hat seine Einstellungsseite aufgerufen 2025-06-01 04:32:24 - [user] user - [INFO] INFO - Benutzer admin hat seine Einstellungsseite aufgerufen 2025-06-01 04:33:16 - [user] user - [INFO] INFO - Benutzer admin hat seine Einstellungsseite aufgerufen +2025-06-01 13:23:42 - [user] user - [INFO] INFO - Neuer Benutzer 'core' erstellt von Admin 1 +2025-06-01 13:24:07 - [user] user - [INFO] INFO - Neuer Benutzer 'corewe' erstellt von Admin 1 +2025-06-01 13:24:37 - [user] user - [INFO] INFO - Neuer Benutzer 'corewedsd' erstellt von Admin 1 diff --git a/backend/logs/windows_fixes/windows_fixes.log b/backend/logs/windows_fixes/windows_fixes.log index 0b31612e..c2085780 100644 --- a/backend/logs/windows_fixes/windows_fixes.log +++ b/backend/logs/windows_fixes/windows_fixes.log @@ -166,3 +166,7 @@ 2025-06-01 13:21:18 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) 2025-06-01 13:21:18 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet 2025-06-01 13:21:18 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-01 13:22:49 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-01 13:22:49 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) +2025-06-01 13:22:49 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet +2025-06-01 13:22:49 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet