diff --git a/backend/__pycache__/app.cpython-313.pyc b/backend/__pycache__/app.cpython-313.pyc index 1272feffd..569bda09b 100644 Binary files a/backend/__pycache__/app.cpython-313.pyc and b/backend/__pycache__/app.cpython-313.pyc differ diff --git a/backend/app.py b/backend/app.py index 7b0fefab6..a70d4596f 100644 --- a/backend/app.py +++ b/backend/app.py @@ -19,46 +19,26 @@ from sqlalchemy import event from contextlib import contextmanager import threading -# ===== OPTIMIERTE KONFIGURATION FÜR RASPBERRY PI ===== -class OptimizedConfig: - """Konfiguration für performance-optimierte Bereitstellung auf Raspberry Pi""" - - # Performance-Optimierungs-Flags - OPTIMIZED_MODE = True - USE_MINIFIED_ASSETS = True - DISABLE_ANIMATIONS = True - LIMIT_GLASSMORPHISM = True - - # Flask-Performance-Einstellungen - DEBUG = False - TESTING = False - SEND_FILE_MAX_AGE_DEFAULT = 31536000 # 1 Jahr Cache für statische Dateien - - # Template-Einstellungen - TEMPLATES_AUTO_RELOAD = False - EXPLAIN_TEMPLATE_LOADING = False - - # Session-Konfiguration - SESSION_COOKIE_SECURE = True - SESSION_COOKIE_HTTPONLY = True - SESSION_COOKIE_SAMESITE = 'Lax' - - # Performance-Optimierungen - MAX_CONTENT_LENGTH = 16 * 1024 * 1024 # 16MB max Upload - JSON_SORT_KEYS = False - JSONIFY_PRETTYPRINT_REGULAR = False - # ===== PRODUCTION-KONFIGURATION ===== class ProductionConfig: - """Production-Konfiguration für Mercedes-Benz TBA Marienfelde Air-Gapped Environment""" + """Production-Konfiguration für Mercedes-Benz TBA Marienfelde Air-Gapped Environment + + Enthält alle Performance-Optimierungen, die vorher in OptimizedConfig waren, + plus Production-spezifische Sicherheits- und Compliance-Einstellungen. + """ # Umgebung ENV = 'production' DEBUG = False TESTING = False - # Sicherheit - SECRET_KEY = os.environ.get('SECRET_KEY') or SECRET_KEY + # Performance-Optimierungen (ehemals OptimizedConfig) + OPTIMIZED_MODE = True + USE_MINIFIED_ASSETS = True + DISABLE_ANIMATIONS = True + LIMIT_GLASSMORPHISM = True + + # Sicherheit (SECRET_KEY wird später gesetzt) WTF_CSRF_ENABLED = True WTF_CSRF_TIME_LIMIT = 3600 # 1 Stunde @@ -66,10 +46,10 @@ class ProductionConfig: SESSION_COOKIE_SECURE = True # HTTPS erforderlich SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_SAMESITE = 'Strict' - PERMANENT_SESSION_LIFETIME = SESSION_LIFETIME + # PERMANENT_SESSION_LIFETIME wird später gesetzt # Performance-Optimierungen - SEND_FILE_MAX_AGE_DEFAULT = 2592000 # 30 Tage Cache + SEND_FILE_MAX_AGE_DEFAULT = 31536000 # 1 Jahr Cache für statische Dateien TEMPLATES_AUTO_RELOAD = False EXPLAIN_TEMPLATE_LOADING = False @@ -120,6 +100,76 @@ class ProductionConfig: ENABLE_HEALTH_CHECKS = True ENABLE_PERFORMANCE_MONITORING = True +# ===== DEVELOPMENT-KONFIGURATION ===== +class DevelopmentConfig: + """Development-Konfiguration für lokale Entwicklung + + Konsolidiert alle Nicht-Production-Modi (development, default, fallback). + Optimiert für Entwicklerfreundlichkeit und Debugging. + """ + + # Umgebung + ENV = 'development' + DEBUG = True + TESTING = False + + # Performance (moderat optimiert für bessere Entwicklererfahrung) + OPTIMIZED_MODE = False + USE_MINIFIED_ASSETS = False + DISABLE_ANIMATIONS = False + LIMIT_GLASSMORPHISM = False + + # Sicherheit (relaxed für Development) + WTF_CSRF_ENABLED = True + WTF_CSRF_TIME_LIMIT = 7200 # 2 Stunden für längere Dev-Sessions + + # Session-Sicherheit (relaxed) + SESSION_COOKIE_SECURE = False # HTTP OK für Development + SESSION_COOKIE_HTTPONLY = True + SESSION_COOKIE_SAMESITE = 'Lax' + + # Performance (Developer-freundlich) + SEND_FILE_MAX_AGE_DEFAULT = 1 # Keine Cache für Development + TEMPLATES_AUTO_RELOAD = True + EXPLAIN_TEMPLATE_LOADING = True + + # Upload-Beschränkungen (generous für Testing) + MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50MB für Development + + # JSON (Pretty für Debugging) + JSON_SORT_KEYS = True + JSONIFY_PRETTYPRINT_REGULAR = True + JSONIFY_MIMETYPE = 'application/json' + + # Logging-Level + LOG_LEVEL = 'DEBUG' + + # Entwicklungs-Einstellungen + OFFLINE_MODE = False + DISABLE_EXTERNAL_APIS = False + USE_LOCAL_ASSETS_ONLY = False + + # Datenbank (Developer-freundlich) + SQLALCHEMY_TRACK_MODIFICATIONS = True # Für Debugging + SQLALCHEMY_POOL_RECYCLE = 1800 # 30 Minuten + SQLALCHEMY_POOL_TIMEOUT = 30 + SQLALCHEMY_ENGINE_OPTIONS = { + 'pool_pre_ping': True, + 'pool_recycle': 1800, + 'echo': True # SQL-Logging für Development + } + + # Development-spezifische Einstellungen + COMPANY_NAME = "MYP Development Environment" + ENVIRONMENT_NAME = "Development/Testing" + COMPLIANCE_MODE = False + AUDIT_LOGGING = False + + # Monitoring (minimal für Development) + ENABLE_METRICS = False + ENABLE_HEALTH_CHECKS = False + ENABLE_PERFORMANCE_MONITORING = False + def detect_raspberry_pi(): """Erkennt ob das System auf einem Raspberry Pi läuft""" try: @@ -172,40 +222,27 @@ def detect_production_environment(): except: pass - return False - -def get_environment_type(): - """Bestimmt den Umgebungstyp""" - if detect_production_environment(): - return 'production' - elif should_use_optimized_config(): - return 'optimized' - elif os.getenv('FLASK_ENV', '').lower() in ['development', 'dev']: - return 'development' - else: - return 'default' - -def should_use_optimized_config(): - """Bestimmt ob die optimierte Konfiguration verwendet werden soll""" - if '--optimized' in sys.argv: - return True - + # Automatische Production-Erkennung für Raspberry Pi oder Low-Memory-Systeme if detect_raspberry_pi(): return True - if os.getenv('USE_OPTIMIZED_CONFIG', '').lower() in ['true', '1', 'yes']: - return True - try: import psutil memory_gb = psutil.virtual_memory().total / (1024**3) - if memory_gb < 2.0: + if memory_gb < 2.0: # Unter 2GB RAM = wahrscheinlich Production-Umgebung return True except: pass return False +def get_environment_type(): + """Bestimmt den Umgebungstyp - nur noch production oder development""" + if detect_production_environment(): + return 'production' + else: + return 'development' + # Windows-spezifische Fixes if os.name == 'nt': try: @@ -224,9 +261,6 @@ from utils.job_scheduler import JobScheduler, get_job_scheduler from utils.queue_manager import start_queue_manager, stop_queue_manager from utils.settings import SECRET_KEY, SESSION_LIFETIME -# ===== OFFLINE-MODUS KONFIGURATION ===== -OFFLINE_MODE = True # Produktionseinstellung für Offline-Betrieb - # Blueprints importieren from blueprints.auth import auth_blueprint # from blueprints.user import user_blueprint # Konsolidiert in user_management @@ -340,33 +374,21 @@ app.secret_key = SECRET_KEY # ===== KONFIGURATION ANWENDEN ===== ENVIRONMENT_TYPE = get_environment_type() USE_PRODUCTION_CONFIG = detect_production_environment() -USE_OPTIMIZED_CONFIG = should_use_optimized_config() app_logger.info(f"[CONFIG] Erkannte Umgebung: {ENVIRONMENT_TYPE}") app_logger.info(f"[CONFIG] Production-Modus: {USE_PRODUCTION_CONFIG}") -app_logger.info(f"[CONFIG] Optimiert-Modus: {USE_OPTIMIZED_CONFIG}") if USE_PRODUCTION_CONFIG: apply_production_config(app) -elif USE_OPTIMIZED_CONFIG: - apply_optimized_config(app) - else: - # Standard-Entwicklungskonfiguration - app_logger.info("[CONFIG] Verwende Standard-Entwicklungskonfiguration") - app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False - app.jinja_env.globals.update({ - 'optimized_mode': False, - 'production_mode': False, - 'use_minified_assets': False, - 'disable_animations': False, - 'limit_glassmorphism': False, - 'base_template': 'base.html' - }) + # Development-Konfiguration (konsolidiert default/fallback) + app_logger.info("[CONFIG] Verwende Development-Konfiguration") + apply_development_config(app) # Umgebungs-spezifische Einstellungen -if OFFLINE_MODE or getattr(ProductionConfig, 'OFFLINE_MODE', False): +OFFLINE_MODE = getattr(ProductionConfig, 'OFFLINE_MODE', False) if USE_PRODUCTION_CONFIG else getattr(DevelopmentConfig, 'OFFLINE_MODE', False) +if OFFLINE_MODE: app_logger.info("[CONFIG] ✅ Air-Gapped/Offline-Modus aktiviert") app.config['DISABLE_EXTERNAL_REQUESTS'] = True @@ -404,7 +426,6 @@ def load_user(user_id): # ===== BLUEPRINTS REGISTRIEREN ===== app.register_blueprint(auth_blueprint) -# app.register_blueprint(user_blueprint) # Konsolidiert in users_blueprint # Vereinheitlichte Admin-Blueprints registrieren app.register_blueprint(admin_blueprint) app.register_blueprint(admin_api_blueprint) @@ -444,7 +465,7 @@ def format_datetime_filter(value, format='%d.%m.%Y %H:%M'): @app.template_global() def is_optimized_mode(): """Prüft ob der optimierte Modus aktiv ist""" - return USE_OPTIMIZED_CONFIG + return USE_PRODUCTION_CONFIG # ===== REQUEST HOOKS ===== @app.before_request diff --git a/backend/blueprints/__pycache__/admin_unified.cpython-313.pyc b/backend/blueprints/__pycache__/admin_unified.cpython-313.pyc index 25fdadf95..2ebacc25f 100644 Binary files a/backend/blueprints/__pycache__/admin_unified.cpython-313.pyc and b/backend/blueprints/__pycache__/admin_unified.cpython-313.pyc differ diff --git a/backend/blueprints/__pycache__/calendar.cpython-313.pyc b/backend/blueprints/__pycache__/calendar.cpython-313.pyc index 46764161d..d85e8894e 100644 Binary files a/backend/blueprints/__pycache__/calendar.cpython-313.pyc and b/backend/blueprints/__pycache__/calendar.cpython-313.pyc differ diff --git a/backend/blueprints/__pycache__/guest.cpython-313.pyc b/backend/blueprints/__pycache__/guest.cpython-313.pyc index 55688f986..f46918c72 100644 Binary files a/backend/blueprints/__pycache__/guest.cpython-313.pyc and b/backend/blueprints/__pycache__/guest.cpython-313.pyc differ diff --git a/backend/instance/printer_manager.db b/backend/instance/printer_manager.db index 29d2bb2e1..5d050f452 100644 Binary files a/backend/instance/printer_manager.db and b/backend/instance/printer_manager.db differ diff --git a/backend/instance/printer_manager.db-shm b/backend/instance/printer_manager.db-shm deleted file mode 100644 index cff03c4ec..000000000 Binary files a/backend/instance/printer_manager.db-shm and /dev/null differ diff --git a/backend/instance/printer_manager.db-wal b/backend/instance/printer_manager.db-wal deleted file mode 100644 index 9894f88ed..000000000 Binary files a/backend/instance/printer_manager.db-wal and /dev/null differ diff --git a/backend/logs/app/app.log b/backend/logs/app/app.log index f58ba66ec..555e1c1d3 100644 --- a/backend/logs/app/app.log +++ b/backend/logs/app/app.log @@ -4347,3 +4347,49 @@ WHERE users.id = ? 2025-06-11 10:12:42 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health 2025-06-11 10:12:42 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/error-recovery/status 2025-06-11 10:12:42 - [app] app - [INFO] INFO - ✅ API: Statistiken abgerufen +2025-06-11 10:13:42 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health +2025-06-11 10:13:42 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/error-recovery/status +2025-06-11 10:13:42 - [app] app - [INFO] INFO - ✅ API: Statistiken abgerufen +2025-06-11 10:14:42 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/error-recovery/status +2025-06-11 10:14:42 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health +2025-06-11 10:14:42 - [app] app - [INFO] INFO - ✅ API: Statistiken abgerufen +2025-06-11 10:15:04 - [app] app - [ERROR] ERROR - Fehler beim Laden des Benutzers 1: (sqlite3.InterfaceError) bad parameter or other API misuse +[SQL: SELECT users.id AS users_id, users.email AS users_email, users.username AS users_username, users.password_hash AS users_password_hash, users.name AS users_name, users.role AS users_role, users.active AS users_active, users.created_at AS users_created_at, users.last_login AS users_last_login, users.updated_at AS users_updated_at, users.settings AS users_settings, users.last_activity AS users_last_activity, users.department AS users_department, users.position AS users_position, users.phone AS users_phone, users.bio AS users_bio, users.theme_preference AS users_theme_preference, users.language_preference AS users_language_preference, users.email_notifications AS users_email_notifications, users.browser_notifications AS users_browser_notifications, users.dashboard_layout AS users_dashboard_layout, users.compact_mode AS users_compact_mode, users.show_completed_jobs AS users_show_completed_jobs, users.auto_refresh_interval AS users_auto_refresh_interval, users.auto_logout_timeout AS users_auto_logout_timeout +FROM users +WHERE users.id = ? + LIMIT ? OFFSET ?] +[parameters: (1, 1, 0)] +(Background on this error at: https://sqlalche.me/e/20/rvf5) +2025-06-11 10:15:04 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health +2025-06-11 10:15:04 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/error-recovery/status +2025-06-11 10:15:04 - [app] app - [INFO] INFO - ✅ API: Statistiken abgerufen +2025-06-11 10:15:34 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health +2025-06-11 10:15:34 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/error-recovery/status +2025-06-11 10:15:34 - [app] app - [INFO] INFO - ✅ API: Statistiken abgerufen +2025-06-11 10:16:04 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/error-recovery/status +2025-06-11 10:16:04 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health +2025-06-11 10:16:04 - [app] app - [INFO] INFO - ✅ API: Statistiken abgerufen +2025-06-11 10:16:34 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health +2025-06-11 10:16:34 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/error-recovery/status +2025-06-11 10:16:34 - [app] app - [INFO] INFO - ✅ API: Statistiken abgerufen +2025-06-11 10:17:04 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/error-recovery/status +2025-06-11 10:17:04 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health +2025-06-11 10:17:04 - [app] app - [INFO] INFO - ✅ API: Statistiken abgerufen +2025-06-11 10:17:34 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/error-recovery/status +2025-06-11 10:17:34 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health +2025-06-11 10:17:34 - [app] app - [INFO] INFO - ✅ API: Statistiken abgerufen +2025-06-11 10:22:20 - [app] app - [WARNING] WARNING - DatabaseCleanupManager nicht verfügbar - Fallback auf Legacy-Cleanup +2025-06-11 10:22:20 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\instance\printer_manager.db +2025-06-11 10:22:21 - [app] app - [INFO] INFO - [CONFIG] Erkannte Umgebung: development +2025-06-11 10:22:21 - [app] app - [INFO] INFO - [CONFIG] Production-Modus: False +2025-06-11 10:22:21 - [app] app - [INFO] INFO - [CONFIG] Verwende Development-Konfiguration +2025-06-11 10:24:10 - [app] app - [WARNING] WARNING - DatabaseCleanupManager nicht verfügbar - Fallback auf Legacy-Cleanup +2025-06-11 10:24:10 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\instance\printer_manager.db +2025-06-11 10:24:10 - [app] app - [INFO] INFO - [CONFIG] Erkannte Umgebung: development +2025-06-11 10:24:10 - [app] app - [INFO] INFO - [CONFIG] Production-Modus: False +2025-06-11 10:24:10 - [app] app - [INFO] INFO - [CONFIG] Verwende Development-Konfiguration +2025-06-11 10:25:53 - [app] app - [WARNING] WARNING - DatabaseCleanupManager nicht verfügbar - Fallback auf Legacy-Cleanup +2025-06-11 10:25:53 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\instance\printer_manager.db +2025-06-11 10:25:53 - [app] app - [INFO] INFO - [CONFIG] Erkannte Umgebung: development +2025-06-11 10:25:53 - [app] app - [INFO] INFO - [CONFIG] Production-Modus: False +2025-06-11 10:25:53 - [app] app - [INFO] INFO - [CONFIG] Verwende Development-Konfiguration diff --git a/backend/logs/printer_monitor/printer_monitor.log b/backend/logs/printer_monitor/printer_monitor.log index 4ef55751f..dd3eea6fb 100644 --- a/backend/logs/printer_monitor/printer_monitor.log +++ b/backend/logs/printer_monitor/printer_monitor.log @@ -608,3 +608,27 @@ 2025-06-11 10:06:38 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.104): UNREACHABLE (Ping fehlgeschlagen) 2025-06-11 10:06:38 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.106): UNREACHABLE (Ping fehlgeschlagen) 2025-06-11 10:06:38 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Status-Update abgeschlossen für 6 Drucker +2025-06-11 10:12:10 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-11 10:12:10 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Prüfe Status von 6 aktiven Druckern... +2025-06-11 10:12:19 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.102): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:12:19 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.100): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:12:19 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.106): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:12:19 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.101): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:12:19 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.103): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:12:19 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.104): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:12:19 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Status-Update abgeschlossen für 6 Drucker +2025-06-11 10:17:14 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... +2025-06-11 10:17:14 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Prüfe Status von 6 aktiven Druckern... +2025-06-11 10:17:24 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.102): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:17:24 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.104): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:17:24 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.103): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:17:24 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.100): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:17:24 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.106): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:17:24 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.101): UNREACHABLE (Ping fehlgeschlagen) +2025-06-11 10:17:24 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Status-Update abgeschlossen für 6 Drucker +2025-06-11 10:22:21 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert +2025-06-11 10:22:21 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet +2025-06-11 10:24:10 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert +2025-06-11 10:24:10 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet +2025-06-11 10:25:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert +2025-06-11 10:25:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet diff --git a/backend/logs/printers/printers.log b/backend/logs/printers/printers.log index ed3855ce7..fc645b0f6 100644 --- a/backend/logs/printers/printers.log +++ b/backend/logs/printers/printers.log @@ -384,3 +384,27 @@ 2025-06-11 10:13:10 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) 2025-06-11 10:13:10 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker 2025-06-11 10:13:10 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.57ms +2025-06-11 10:14:10 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-11 10:14:10 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker +2025-06-11 10:14:10 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.33ms +2025-06-11 10:14:44 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-11 10:14:44 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker +2025-06-11 10:14:44 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.41ms +2025-06-11 10:15:14 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-11 10:15:14 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker +2025-06-11 10:15:14 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.32ms +2025-06-11 10:15:44 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-11 10:15:44 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker +2025-06-11 10:15:44 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.37ms +2025-06-11 10:16:14 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-11 10:16:14 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker +2025-06-11 10:16:14 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.43ms +2025-06-11 10:16:44 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-11 10:16:44 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker +2025-06-11 10:16:44 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.41ms +2025-06-11 10:17:14 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-11 10:17:24 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker +2025-06-11 10:17:24 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 9031.78ms +2025-06-11 10:17:45 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1) +2025-06-11 10:17:45 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker +2025-06-11 10:17:45 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.64ms diff --git a/backend/logs/queue_manager/queue_manager.log b/backend/logs/queue_manager/queue_manager.log index cd2ac006f..68c6bdf7e 100644 --- a/backend/logs/queue_manager/queue_manager.log +++ b/backend/logs/queue_manager/queue_manager.log @@ -345,3 +345,8 @@ 2025-06-11 10:04:46 - [queue_manager] queue_manager - [INFO] INFO - 🛑 Shutdown-Signal empfangen - beende Monitor-Loop 2025-06-11 10:04:46 - [queue_manager] queue_manager - [INFO] INFO - 🔚 Monitor-Loop beendet 2025-06-11 10:04:46 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestoppt +2025-06-11 10:17:53 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Stoppe Queue-Manager... +2025-06-11 10:17:53 - [queue_manager] queue_manager - [INFO] INFO - ⏳ Warte auf Monitor-Thread... +2025-06-11 10:17:53 - [queue_manager] queue_manager - [INFO] INFO - 🛑 Shutdown-Signal empfangen - beende Monitor-Loop +2025-06-11 10:17:53 - [queue_manager] queue_manager - [INFO] INFO - 🔚 Monitor-Loop beendet +2025-06-11 10:17:53 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestoppt diff --git a/backend/logs/scheduler/scheduler.log b/backend/logs/scheduler/scheduler.log index e6ffa24a0..a7f664b26 100644 --- a/backend/logs/scheduler/scheduler.log +++ b/backend/logs/scheduler/scheduler.log @@ -142,3 +142,6 @@ 2025-06-11 09:39:31 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True 2025-06-11 09:39:32 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet 2025-06-11 09:39:32 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-11 10:22:20 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-11 10:24:10 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-11 10:25:53 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True diff --git a/backend/logs/startup/startup.log b/backend/logs/startup/startup.log index 8c7c55cba..d98293ade 100644 --- a/backend/logs/startup/startup.log +++ b/backend/logs/startup/startup.log @@ -501,3 +501,30 @@ 2025-06-11 09:39:31 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert 2025-06-11 09:39:31 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert 2025-06-11 09:39:31 - [startup] startup - [INFO] INFO - ================================================== +2025-06-11 10:22:21 - [startup] startup - [INFO] INFO - ================================================== +2025-06-11 10:22:21 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-11 10:22:21 - [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-11 10:22:21 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-11 10:22:21 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-11 10:22:21 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-11T10:22:21.104248 +2025-06-11 10:22:21 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-11 10:22:21 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-11 10:22:21 - [startup] startup - [INFO] INFO - ================================================== +2025-06-11 10:24:10 - [startup] startup - [INFO] INFO - ================================================== +2025-06-11 10:24:10 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-11 10:24:10 - [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-11 10:24:10 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-11 10:24:10 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-11 10:24:10 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-11T10:24:10.647220 +2025-06-11 10:24:10 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-11 10:24:10 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-11 10:24:10 - [startup] startup - [INFO] INFO - ================================================== +2025-06-11 10:25:53 - [startup] startup - [INFO] INFO - ================================================== +2025-06-11 10:25:53 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-11 10:25:53 - [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-11 10:25:53 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-11 10:25:53 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-11 10:25:53 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-11T10:25:53.849256 +2025-06-11 10:25:53 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-11 10:25:53 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-11 10:25:53 - [startup] startup - [INFO] INFO - ================================================== diff --git a/backend/logs/tapo_controller/tapo_controller.log b/backend/logs/tapo_controller/tapo_controller.log index 9a87bdd4f..572501b70 100644 --- a/backend/logs/tapo_controller/tapo_controller.log +++ b/backend/logs/tapo_controller/tapo_controller.log @@ -362,3 +362,6 @@ 2025-06-11 09:39:57 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 5/6: 192.168.0.102 2025-06-11 09:40:03 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 6/6: 192.168.0.105 2025-06-11 09:40:09 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ steckdosen-erkennung abgeschlossen: 0/6 steckdosen gefunden in 36.1s +2025-06-11 10:22:20 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert +2025-06-11 10:24:10 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert +2025-06-11 10:25:53 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert diff --git a/backend/logs/windows_fixes/windows_fixes.log b/backend/logs/windows_fixes/windows_fixes.log index 83c9825c7..32fd58407 100644 --- a/backend/logs/windows_fixes/windows_fixes.log +++ b/backend/logs/windows_fixes/windows_fixes.log @@ -102,3 +102,15 @@ 2025-06-11 09:39:31 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) 2025-06-11 09:39:31 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet 2025-06-11 09:39:31 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-11 10:22:20 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-11 10:22:20 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) +2025-06-11 10:22:20 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet +2025-06-11 10:22:20 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-11 10:24:10 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-11 10:24:10 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) +2025-06-11 10:24:10 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet +2025-06-11 10:24:10 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-11 10:25:53 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-11 10:25:53 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) +2025-06-11 10:25:53 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet +2025-06-11 10:25:53 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet diff --git a/backend/start_development.py b/backend/start_development.py new file mode 100644 index 000000000..0519ecba6 --- /dev/null +++ b/backend/start_development.py @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend/start_production.py b/backend/start_production.py index 6552b68bc..b8a4bfc45 100644 --- a/backend/start_production.py +++ b/backend/start_production.py @@ -6,6 +6,10 @@ MYP (Mercedes-Benz Your Printer) System - Air-Gapped Production Environment Dieses Skript startet das System im Production-Modus mit allen erforderlichen Sicherheits- und Performance-Optimierungen. +Verfügbare Modi: + - production: Mercedes-Benz TBA Air-Gapped (optimiert + sicher) + - development: Lokale Entwicklung (debug + flexibel) + Verwendung: python start_production.py @@ -45,11 +49,12 @@ def print_production_banner(): {'='*80} 🚀 Environment: Production Air-Gapped -🔒 Security: Maximum (SSL + Security Headers) +🔒 Security: Maximum (SSL + Security Headers + CSRF) 🌐 Network: Air-Gapped (Offline-Mode) -⚡ Performance: Optimized for Industrial Environment -📊 Monitoring: Enabled -🔍 Audit-Logging: Enabled +⚡ Performance: Fully Optimized (Cache + Minified Assets) +📊 Monitoring: Production-Grade Health Checks +🔍 Audit-Logging: Mercedes-Benz Compliance Mode +🎯 Modi: Nur Production + Development (konsolidiert) 📅 Start-Zeit: {datetime.now().strftime('%d.%m.%Y %H:%M:%S')} {'='*80} @@ -82,6 +87,15 @@ def check_production_requirements(): else: requirements.append(f"❌ {file} fehlt") + # Konsolidierte Modi-Konfiguration prüfen + try: + from app import ProductionConfig, DevelopmentConfig + requirements.append("✅ Konsolidierte Modi-Konfiguration verfügbar") + requirements.append(f" • ProductionConfig: Optimiert + Sicher") + requirements.append(f" • DevelopmentConfig: Debug + Flexibel") + except ImportError as e: + requirements.append(f"❌ Modi-Konfiguration fehlt: {e}") + # SSL-Zertifikate prüfen (optional) ssl_files = [ 'ssl/server.crt', @@ -131,9 +145,15 @@ def set_production_optimizations(): os.environ['SQLITE_SYNCHRONOUS'] = 'NORMAL' os.environ['SQLITE_CACHE_SIZE'] = '10000' + # Asset-Optimierungen (konsolidiert) + os.environ['USE_MINIFIED_ASSETS'] = 'true' + os.environ['DISABLE_ANIMATIONS'] = 'true' + os.environ['LIMIT_GLASSMORPHISM'] = 'true' + print(" ✅ Memory-Optimierungen aktiviert") print(" ✅ Flask-Optimierungen aktiviert") print(" ✅ Datenbank-Optimierungen aktiviert") + print(" ✅ Asset-Optimierungen aktiviert (konsolidiert)") print() def setup_security(): @@ -152,14 +172,19 @@ def setup_security(): # CSRF-Schutz os.environ['CSRF_TIME_LIMIT'] = '3600' + # Mercedes-Benz Compliance + os.environ['COMPLIANCE_MODE'] = 'true' + os.environ['AUDIT_LOGGING'] = 'true' + print(" ✅ Security Headers konfiguriert") print(" ✅ Session-Sicherheit aktiviert") print(" ✅ CSRF-Schutz aktiviert") + print(" ✅ Mercedes-Benz Compliance aktiviert") print() def start_application(): """Startet die Hauptanwendung""" - print("🚀 Starte MYP Production System...\n") + print("🚀 Starte MYP Production System (Konsolidierte Modi)...\n") try: # app.py importieren und starten