📚 Improved logging structure & efficiency across backend logs 🌐 #123

This commit is contained in:
2025-06-01 03:42:40 +02:00
parent 941ee21c76
commit 99ba574223
21 changed files with 235 additions and 13 deletions

View File

@@ -151,7 +151,19 @@ from utils.multi_location_system import (
# Drucker-Monitor importieren
from utils.printer_monitor import printer_monitor
# Timeout Force-Quit Manager importieren
# Logging initialisieren (früh, damit andere Module es verwenden können)
setup_logging()
log_startup_info()
# app_logger für verschiedene Komponenten (früh definieren)
app_logger = get_logger("app")
auth_logger = get_logger("auth")
jobs_logger = get_logger("jobs")
printers_logger = get_logger("printers")
user_logger = get_logger("user")
kiosk_logger = get_logger("kiosk")
# Timeout Force-Quit Manager importieren (nach Logger-Definition)
try:
from utils.timeout_force_quit_manager import (
get_timeout_manager, start_force_quit_timeout, cancel_force_quit_timeout,
@@ -164,6 +176,108 @@ except ImportError as e:
TIMEOUT_FORCE_QUIT_AVAILABLE = False
app_logger.warning(f"⚠️ Timeout Force-Quit Manager nicht verfügbar: {e}")
# ===== AGGRESSIVE SOFORT-SHUTDOWN HANDLER FÜR STRG+C =====
import atexit
def aggressive_shutdown_handler(sig, frame):
"""
Aggressiver Signal-Handler für sofortiges Herunterfahren bei Strg+C.
Schließt sofort alle Datenbankverbindungen und beendet das Programm um jeden Preis.
"""
print("\n🚨 STRG+C ERKANNT - SOFORTIGES SHUTDOWN!")
print("🔥 Schließe Datenbank sofort und beende Programm um jeden Preis!")
try:
# 1. Sofort alle Datenbank-Sessions und Engine schließen
try:
from models import _engine, _scoped_session, _session_factory
if _scoped_session:
try:
_scoped_session.remove()
print("✅ Scoped Sessions geschlossen")
except Exception as e:
print(f"⚠️ Fehler beim Schließen der Scoped Sessions: {e}")
if _engine:
try:
_engine.dispose()
print("✅ Datenbank-Engine geschlossen")
except Exception as e:
print(f"⚠️ Fehler beim Schließen der Engine: {e}")
except ImportError:
print("⚠️ Models nicht verfügbar für Database-Cleanup")
# 2. Alle offenen DB-Sessions forciert schließen
try:
import gc
# Garbage Collection für nicht geschlossene Sessions
gc.collect()
print("✅ Garbage Collection ausgeführt")
except Exception as e:
print(f"⚠️ Garbage Collection fehlgeschlagen: {e}")
# 3. SQLite WAL-Dateien forciert synchronisieren
try:
import sqlite3
from config.settings import DATABASE_PATH
conn = sqlite3.connect(DATABASE_PATH, timeout=1.0)
conn.execute("PRAGMA wal_checkpoint(TRUNCATE)")
conn.close()
print("✅ SQLite WAL-Checkpoint ausgeführt")
except Exception as e:
print(f"⚠️ WAL-Checkpoint fehlgeschlagen: {e}")
# 4. Queue Manager stoppen falls verfügbar
try:
from utils.queue_manager import stop_queue_manager
stop_queue_manager()
print("✅ Queue Manager gestoppt")
except Exception as e:
print(f"⚠️ Queue Manager Stop fehlgeschlagen: {e}")
except Exception as e:
print(f"❌ Fehler beim Database-Cleanup: {e}")
print("🛑 SOFORTIGES PROGRAMM-ENDE - EXIT CODE 0")
# Sofortiger Exit ohne weitere Cleanup-Routinen
os._exit(0)
def register_aggressive_shutdown():
"""
Registriert den aggressiven Shutdown-Handler für alle relevanten Signale.
Muss VOR allen anderen Signal-Handlern registriert werden.
"""
# Signal-Handler für alle Plattformen registrieren
signal.signal(signal.SIGINT, aggressive_shutdown_handler) # Strg+C
signal.signal(signal.SIGTERM, aggressive_shutdown_handler) # Terminate Signal
# Windows-spezifische Signale
if os.name == 'nt':
try:
signal.signal(signal.SIGBREAK, aggressive_shutdown_handler) # Strg+Break
print("✅ Windows SIGBREAK Handler registriert")
except AttributeError:
pass # SIGBREAK nicht auf allen Windows-Versionen verfügbar
else:
# Unix/Linux-spezifische Signale
try:
signal.signal(signal.SIGHUP, aggressive_shutdown_handler) # Hangup Signal
print("✅ Unix SIGHUP Handler registriert")
except AttributeError:
pass
# Atexit-Handler als Backup registrieren
atexit.register(lambda: print("🔄 Atexit-Handler ausgeführt - Programm beendet"))
print("🚨 AGGRESSIVER STRG+C SHUTDOWN-HANDLER AKTIVIERT")
print("📋 Bei Strg+C wird die Datenbank sofort geschlossen und das Programm beendet!")
# Aggressive Shutdown-Handler sofort registrieren
register_aggressive_shutdown()
# ===== ENDE AGGRESSIVE SHUTDOWN HANDLER =====
# Flask-App initialisieren
app = Flask(__name__)
app.secret_key = SECRET_KEY
@@ -380,18 +494,6 @@ def format_datetime_filter(value, format='%d.%m.%Y %H:%M'):
return value
return value.strftime(format)
# Logging initialisieren
setup_logging()
log_startup_info()
# app_logger für verschiedene Komponenten
app_logger = get_logger("app")
auth_logger = get_logger("auth")
jobs_logger = get_logger("jobs")
printers_logger = get_logger("printers")
user_logger = get_logger("user")
kiosk_logger = get_logger("kiosk")
# HTTP-Request/Response-Middleware für automatisches Debug-Logging
@app.before_request
def log_request_info():