🎉 Improved backend structure & cleaned up files (#123) - Added start scripts for development & production environments. 🛠️ Removed unnecessary database files. 📚 Refactored logging system for better performance & organization. 💄 Fixed minor typo in app.log file.

This commit is contained in:
2025-06-11 10:26:39 +02:00
parent 50d4c62725
commit 24cd99a1f6
18 changed files with 274 additions and 83 deletions

View File

@ -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

Binary file not shown.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 - ==================================================

View File

@ -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

View File

@ -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

View File

@ -0,0 +1 @@

View File

@ -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