"feat: Implement new notification system in frontend

This commit is contained in:
2025-05-29 10:04:55 +02:00
parent 08c922d8f5
commit c256848d59
6 changed files with 478 additions and 19 deletions

View File

@@ -64,7 +64,19 @@ EMOJI_FALLBACK = {
'🔧': '[PRINT]',
'💥': '[ERR]',
'👤': '[USER]',
'📺': '[KIOSK]'
'📺': '[KIOSK]',
'🐞': '[BUG]',
'🚀': '[START]',
'📂': '[FOLDER]',
'📊': '[CHART]',
'💻': '[PC]',
'🌐': '[WEB]',
'📅': '[TIME]',
'📡': '[SIGNAL]',
'🧩': '[CONTENT]',
'📋': '[HEADER]',
'': '[OK]',
'📦': '[SIZE]'
}
def safe_emoji(emoji: str) -> str:
@@ -86,12 +98,22 @@ def supports_color() -> bool:
# Aktiviere VT100-Unterstützung unter Windows
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
# Setze Console-Output auf UTF-8 für bessere Emoji-Unterstützung
try:
kernel32.SetConsoleOutputCP(65001) # UTF-8
except:
pass
# Versuche UTF-8-Encoding für Emojis zu setzen
try:
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
except:
pass
try:
# Fallback für deutsche Lokalisierung
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
except:
pass
return True
except:
@@ -219,7 +241,8 @@ def setup_logging(debug_mode: bool = False):
# Wenn Debug-Modus aktiv, Konfiguration loggen
if debug_mode:
root_logger.debug(f"🐞 Debug-Modus aktiviert - Ausführliche Logs werden generiert")
bug_emoji = safe_emoji("🐞")
root_logger.debug(f"{bug_emoji} Debug-Modus aktiviert - Ausführliche Logs werden generiert")
def get_logger(category: str) -> logging.Logger:
"""
@@ -280,13 +303,20 @@ def get_logger(category: str) -> logging.Logger:
def log_startup_info():
"""Loggt Startup-Informationen."""
app_logger = get_logger("app")
rocket_emoji = safe_emoji("🚀")
folder_emoji = safe_emoji("📂")
chart_emoji = safe_emoji("📊")
computer_emoji = safe_emoji("💻")
globe_emoji = safe_emoji("🌐")
calendar_emoji = safe_emoji("📅")
app_logger.info("=" * 50)
app_logger.info("🚀 MYP (Manage Your Printers) wird gestartet...")
app_logger.info(f"📂 Log-Verzeichnis: {LOG_DIR}")
app_logger.info(f"📊 Log-Level: {LOG_LEVEL}")
app_logger.info(f"💻 Betriebssystem: {platform.system()} {platform.release()}")
app_logger.info(f"🌐 Hostname: {socket.gethostname()}")
app_logger.info(f"📅 Startzeit: {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}")
app_logger.info(f"{rocket_emoji} MYP (Manage Your Printers) wird gestartet...")
app_logger.info(f"{folder_emoji} Log-Verzeichnis: {LOG_DIR}")
app_logger.info(f"{chart_emoji} Log-Level: {LOG_LEVEL}")
app_logger.info(f"{computer_emoji} Betriebssystem: {platform.system()} {platform.release()}")
app_logger.info(f"{globe_emoji} Hostname: {socket.gethostname()}")
app_logger.info(f"{calendar_emoji} Startzeit: {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}")
app_logger.info("=" * 50)
# Hilfsfunktionen für das Debugging
@@ -302,22 +332,28 @@ def debug_request(logger: logging.Logger, request):
if logger.level > logging.DEBUG:
return
logger.debug(f"🌐 HTTP-Anfrage: {request.method} {request.path}")
logger.debug(f"📡 Remote-Adresse: {request.remote_addr}")
logger.debug(f"🧩 Inhaltstyp: {request.content_type}")
web_emoji = safe_emoji("🌐")
signal_emoji = safe_emoji("📡")
puzzle_emoji = safe_emoji("🧩")
clipboard_emoji = safe_emoji("📋")
search_emoji = safe_emoji("🔍")
logger.debug(f"{web_emoji} HTTP-Anfrage: {request.method} {request.path}")
logger.debug(f"{signal_emoji} Remote-Adresse: {request.remote_addr}")
logger.debug(f"{puzzle_emoji} Inhaltstyp: {request.content_type}")
# Nur relevante Headers ausgeben
important_headers = ['User-Agent', 'Referer', 'X-Forwarded-For', 'Authorization']
headers = {k: v for k, v in request.headers.items() if k in important_headers}
if headers:
logger.debug(f"📋 Wichtige Headers: {headers}")
logger.debug(f"{clipboard_emoji} Wichtige Headers: {headers}")
# Request-Parameter (max. 1000 Zeichen)
if request.args:
args_str = str(request.args)
if len(args_str) > 1000:
args_str = args_str[:997] + "..."
logger.debug(f"🔍 URL-Parameter: {args_str}")
logger.debug(f"{search_emoji} URL-Parameter: {args_str}")
def debug_response(logger: logging.Logger, response, duration_ms: float = None):
"""
@@ -331,16 +367,18 @@ def debug_response(logger: logging.Logger, response, duration_ms: float = None):
if logger.level > logging.DEBUG:
return
status_emoji = "" if response.status_code < 400 else ""
status_emoji = safe_emoji("") if response.status_code < 400 else safe_emoji("")
logger.debug(f"{status_emoji} HTTP-Antwort: {response.status_code}")
if duration_ms is not None:
logger.debug(f"⏱️ Verarbeitungsdauer: {duration_ms:.2f} ms")
timer_emoji = safe_emoji("⏱️")
logger.debug(f"{timer_emoji} Verarbeitungsdauer: {duration_ms:.2f} ms")
content_length = response.content_length or 0
if content_length > 0:
size_str = f"{content_length / 1024:.1f} KB" if content_length > 1024 else f"{content_length} Bytes"
logger.debug(f"📦 Antwortgröße: {size_str}")
package_emoji = safe_emoji("📦")
logger.debug(f"{package_emoji} Antwortgröße: {size_str}")
def measure_execution_time(func=None, logger=None, task_name=None):
"""
@@ -367,10 +405,11 @@ def measure_execution_time(func=None, logger=None, task_name=None):
name = task_name or f.__name__
if logger:
timer_emoji = safe_emoji('⏱️')
if duration_ms > 1000: # Länger als 1 Sekunde
logger.warning(f"⏱️ Langsame Ausführung: {name} - {duration_ms:.2f} ms")
logger.warning(f"{timer_emoji} Langsame Ausführung: {name} - {duration_ms:.2f} ms")
else:
logger.debug(f"⏱️ Ausführungszeit: {name} - {duration_ms:.2f} ms")
logger.debug(f"{timer_emoji} Ausführungszeit: {name} - {duration_ms:.2f} ms")
return result
return wrapper