🎉 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:
Binary file not shown.
177
backend/app.py
177
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
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 - ==================================================
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
1
backend/start_development.py
Normal file
1
backend/start_development.py
Normal file
@ -0,0 +1 @@
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user