📚 Improved codebase structure & logging enhancements 🚀

This commit is contained in:
Till Tomczak 2025-06-01 04:26:09 +02:00
parent 1a3bfa4094
commit 19eeed46fb
29 changed files with 1918 additions and 494 deletions

View File

@ -2129,6 +2129,100 @@ def create_user_api():
user_logger.error(f"Fehler beim Erstellen eines Benutzers: {str(e)}")
return jsonify({"error": "Interner Serverfehler"}), 500
@app.route("/api/admin/users/<int:user_id>", methods=["GET"])
@login_required
@admin_required
def get_user_api(user_id):
"""Gibt einen einzelnen Benutzer zurück (nur für Admins)."""
try:
db_session = get_db_session()
user = db_session.get(User, user_id)
if not user:
db_session.close()
return jsonify({"error": "Benutzer nicht gefunden"}), 404
user_data = {
"id": user.id,
"username": user.username,
"email": user.email,
"name": user.name or "",
"role": user.role,
"is_admin": user.is_admin,
"is_active": user.is_active,
"created_at": user.created_at.isoformat() if user.created_at else None,
"last_login": user.last_login.isoformat() if hasattr(user, 'last_login') and user.last_login else None
}
db_session.close()
return jsonify({"success": True, "user": user_data})
except Exception as e:
user_logger.error(f"Fehler beim Abrufen des Benutzers {user_id}: {str(e)}")
return jsonify({"error": "Interner Serverfehler"}), 500
@app.route("/api/admin/users/<int:user_id>", methods=["PUT"])
@login_required
@admin_required
def update_user_api(user_id):
"""Aktualisiert einen Benutzer (nur für Admins)."""
try:
data = request.json
db_session = get_db_session()
user = db_session.get(User, user_id)
if not user:
db_session.close()
return jsonify({"error": "Benutzer nicht gefunden"}), 404
# Prüfen, ob bereits ein anderer Benutzer mit dieser E-Mail existiert
if "email" in data and data["email"] != user.email:
existing_user = db_session.query(User).filter(
User.email == data["email"],
User.id != user_id
).first()
if existing_user:
db_session.close()
return jsonify({"error": "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits"}), 400
# Aktualisierbare Felder
if "email" in data:
user.email = data["email"]
if "username" in data:
user.username = data["username"]
if "name" in data:
user.name = data["name"]
if "is_admin" in data:
user.role = "admin" if data["is_admin"] else "user"
if "is_active" in data:
user.is_active = data["is_active"]
# Passwort separat behandeln
if "password" in data and data["password"]:
user.set_password(data["password"])
db_session.commit()
user_data = {
"id": user.id,
"username": user.username,
"email": user.email,
"name": user.name,
"role": user.role,
"is_admin": user.is_admin,
"is_active": user.is_active,
"created_at": user.created_at.isoformat() if user.created_at else None
}
db_session.close()
user_logger.info(f"Benutzer {user_id} aktualisiert von Admin {current_user.id}")
return jsonify({"success": True, "user": user_data})
except Exception as e:
user_logger.error(f"Fehler beim Aktualisieren des Benutzers {user_id}: {str(e)}")
return jsonify({"error": "Interner Serverfehler"}), 500
@app.route("/api/admin/printers/<int:printer_id>/toggle", methods=["POST"])
@login_required
def toggle_printer_power(printer_id):

View File

@ -0,0 +1,489 @@
"""
Admin-API Blueprint für erweiterte Verwaltungsfunktionen
Dieses Blueprint stellt zusätzliche Admin-API-Endpunkte bereit für:
- System-Backups
- Datenbank-Optimierung
- Cache-Verwaltung
Autor: MYP Team
Datum: 2025-06-01
"""
import os
import shutil
import zipfile
import sqlite3
import glob
from datetime import datetime, timedelta
from flask import Blueprint, request, jsonify, current_app
from flask_login import login_required, current_user
from functools import wraps
from utils.logging_config import get_logger
# Blueprint erstellen
admin_api_blueprint = Blueprint('admin_api', __name__, url_prefix='/api/admin')
# Logger initialisieren
admin_logger = get_logger("admin_api")
def admin_required(f):
"""Decorator um sicherzustellen, dass nur Admins auf Endpunkte zugreifen können."""
@wraps(f)
@login_required
def decorated_function(*args, **kwargs):
if not current_user.is_authenticated or current_user.role != 'admin':
admin_logger.warning(f"Unauthorized admin access attempt by user {getattr(current_user, 'id', 'anonymous')}")
return jsonify({'error': 'Admin-Berechtigung erforderlich'}), 403
return f(*args, **kwargs)
return decorated_function
@admin_api_blueprint.route('/backup/create', methods=['POST'])
@admin_required
def create_backup():
"""
Erstellt ein manuelles System-Backup.
Erstellt eine Sicherung aller wichtigen Systemdaten einschließlich
Datenbank, Konfigurationsdateien und Benutzer-Uploads.
Returns:
JSON: Erfolgs-Status und Backup-Informationen
"""
try:
admin_logger.info(f"Backup-Erstellung angefordert von Admin {current_user.username}")
# Backup-Verzeichnis sicherstellen
backup_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'database', 'backups')
os.makedirs(backup_dir, exist_ok=True)
# Eindeutigen Backup-Namen erstellen
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
backup_name = f"system_backup_{timestamp}.zip"
backup_path = os.path.join(backup_dir, backup_name)
created_files = []
backup_size = 0
with zipfile.ZipFile(backup_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
# 1. Datenbank-Datei hinzufügen
try:
from config.settings import DATABASE_PATH
if os.path.exists(DATABASE_PATH):
zipf.write(DATABASE_PATH, 'database/main.db')
created_files.append('database/main.db')
admin_logger.debug("✅ Hauptdatenbank zur Sicherung hinzugefügt")
# WAL- und SHM-Dateien falls vorhanden
wal_path = DATABASE_PATH + '-wal'
shm_path = DATABASE_PATH + '-shm'
if os.path.exists(wal_path):
zipf.write(wal_path, 'database/main.db-wal')
created_files.append('database/main.db-wal')
if os.path.exists(shm_path):
zipf.write(shm_path, 'database/main.db-shm')
created_files.append('database/main.db-shm')
except Exception as db_error:
admin_logger.warning(f"Fehler beim Hinzufügen der Datenbank: {str(db_error)}")
# 2. Konfigurationsdateien
try:
config_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'config')
if os.path.exists(config_dir):
for root, dirs, files in os.walk(config_dir):
for file in files:
if file.endswith(('.py', '.json', '.yaml', '.yml', '.toml')):
file_path = os.path.join(root, file)
arc_path = os.path.relpath(file_path, os.path.dirname(os.path.dirname(__file__)))
zipf.write(file_path, arc_path)
created_files.append(arc_path)
admin_logger.debug("✅ Konfigurationsdateien zur Sicherung hinzugefügt")
except Exception as config_error:
admin_logger.warning(f"Fehler beim Hinzufügen der Konfiguration: {str(config_error)}")
# 3. Wichtige User-Uploads (limitiert auf die letzten 1000 Dateien)
try:
uploads_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'uploads')
if os.path.exists(uploads_dir):
file_count = 0
max_files = 1000 # Limit für Performance
for root, dirs, files in os.walk(uploads_dir):
for file in files[:max_files - file_count]:
if file_count >= max_files:
break
file_path = os.path.join(root, file)
file_size = os.path.getsize(file_path)
# Nur Dateien unter 50MB hinzufügen
if file_size < 50 * 1024 * 1024:
arc_path = os.path.relpath(file_path, os.path.dirname(os.path.dirname(__file__)))
zipf.write(file_path, arc_path)
created_files.append(arc_path)
file_count += 1
if file_count >= max_files:
break
admin_logger.debug(f"{file_count} Upload-Dateien zur Sicherung hinzugefügt")
except Exception as uploads_error:
admin_logger.warning(f"Fehler beim Hinzufügen der Uploads: {str(uploads_error)}")
# 4. System-Logs (nur die letzten 100 Log-Dateien)
try:
logs_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'logs')
if os.path.exists(logs_dir):
log_files = []
for root, dirs, files in os.walk(logs_dir):
for file in files:
if file.endswith(('.log', '.txt')):
file_path = os.path.join(root, file)
log_files.append((file_path, os.path.getmtime(file_path)))
# Sortiere nach Datum (neueste zuerst) und nimm nur die letzten 100
log_files.sort(key=lambda x: x[1], reverse=True)
for file_path, _ in log_files[:100]:
arc_path = os.path.relpath(file_path, os.path.dirname(os.path.dirname(__file__)))
zipf.write(file_path, arc_path)
created_files.append(arc_path)
admin_logger.debug(f"{len(log_files[:100])} Log-Dateien zur Sicherung hinzugefügt")
except Exception as logs_error:
admin_logger.warning(f"Fehler beim Hinzufügen der Logs: {str(logs_error)}")
# Backup-Größe bestimmen
if os.path.exists(backup_path):
backup_size = os.path.getsize(backup_path)
admin_logger.info(f"✅ System-Backup erfolgreich erstellt: {backup_name} ({backup_size / 1024 / 1024:.2f} MB)")
return jsonify({
'success': True,
'message': f'Backup erfolgreich erstellt: {backup_name}',
'backup_info': {
'filename': backup_name,
'size_bytes': backup_size,
'size_mb': round(backup_size / 1024 / 1024, 2),
'files_count': len(created_files),
'created_at': datetime.now().isoformat(),
'path': backup_path
}
})
except Exception as e:
admin_logger.error(f"❌ Fehler beim Erstellen des Backups: {str(e)}")
return jsonify({
'success': False,
'message': f'Fehler beim Erstellen des Backups: {str(e)}'
}), 500
@admin_api_blueprint.route('/database/optimize', methods=['POST'])
@admin_required
def optimize_database():
"""
Führt Datenbank-Optimierung durch.
Optimiert die SQLite-Datenbank durch VACUUM, ANALYZE und weitere
Wartungsoperationen für bessere Performance.
Returns:
JSON: Erfolgs-Status und Optimierungs-Statistiken
"""
try:
admin_logger.info(f"Datenbank-Optimierung angefordert von Admin {current_user.username}")
from config.settings import DATABASE_PATH
optimization_results = {
'vacuum_completed': False,
'analyze_completed': False,
'integrity_check': False,
'wal_checkpoint': False,
'size_before': 0,
'size_after': 0,
'space_saved': 0
}
# Datenbankgröße vor Optimierung
if os.path.exists(DATABASE_PATH):
optimization_results['size_before'] = os.path.getsize(DATABASE_PATH)
# Verbindung zur Datenbank herstellen
conn = sqlite3.connect(DATABASE_PATH, timeout=30.0)
cursor = conn.cursor()
try:
# 1. Integritätsprüfung
admin_logger.debug("🔍 Führe Integritätsprüfung durch...")
cursor.execute("PRAGMA integrity_check")
integrity_result = cursor.fetchone()
optimization_results['integrity_check'] = integrity_result[0] == 'ok'
if not optimization_results['integrity_check']:
admin_logger.warning(f"⚠️ Integritätsprüfung ergab: {integrity_result[0]}")
else:
admin_logger.debug("✅ Integritätsprüfung erfolgreich")
# 2. WAL-Checkpoint (falls WAL-Modus aktiv)
try:
admin_logger.debug("🔄 Führe WAL-Checkpoint durch...")
cursor.execute("PRAGMA wal_checkpoint(TRUNCATE)")
optimization_results['wal_checkpoint'] = True
admin_logger.debug("✅ WAL-Checkpoint erfolgreich")
except Exception as wal_error:
admin_logger.debug(f" WAL-Checkpoint nicht möglich: {str(wal_error)}")
# 3. ANALYZE - Statistiken aktualisieren
admin_logger.debug("📊 Aktualisiere Datenbank-Statistiken...")
cursor.execute("ANALYZE")
optimization_results['analyze_completed'] = True
admin_logger.debug("✅ ANALYZE erfolgreich")
# 4. VACUUM - Datenbank komprimieren und reorganisieren
admin_logger.debug("🗜️ Komprimiere und reorganisiere Datenbank...")
cursor.execute("VACUUM")
optimization_results['vacuum_completed'] = True
admin_logger.debug("✅ VACUUM erfolgreich")
# 5. Performance-Optimierungen
try:
# Cache-Größe optimieren
cursor.execute("PRAGMA cache_size = 10000") # 10MB Cache
# Journal-Modus auf WAL setzen für bessere Concurrent-Performance
cursor.execute("PRAGMA journal_mode = WAL")
# Synchronous auf NORMAL für Balance zwischen Performance und Sicherheit
cursor.execute("PRAGMA synchronous = NORMAL")
# Page-Größe optimieren (falls noch nicht gesetzt)
cursor.execute("PRAGMA page_size = 4096")
admin_logger.debug("✅ Performance-Optimierungen angewendet")
except Exception as perf_error:
admin_logger.warning(f"⚠️ Performance-Optimierungen teilweise fehlgeschlagen: {str(perf_error)}")
finally:
cursor.close()
conn.close()
# Datenbankgröße nach Optimierung
if os.path.exists(DATABASE_PATH):
optimization_results['size_after'] = os.path.getsize(DATABASE_PATH)
optimization_results['space_saved'] = optimization_results['size_before'] - optimization_results['size_after']
# Ergebnisse loggen
space_saved_mb = optimization_results['space_saved'] / 1024 / 1024
admin_logger.info(f"✅ Datenbank-Optimierung abgeschlossen - {space_saved_mb:.2f} MB Speicher gespart")
return jsonify({
'success': True,
'message': 'Datenbank erfolgreich optimiert',
'results': {
'vacuum_completed': optimization_results['vacuum_completed'],
'analyze_completed': optimization_results['analyze_completed'],
'integrity_check_passed': optimization_results['integrity_check'],
'wal_checkpoint_completed': optimization_results['wal_checkpoint'],
'size_before_mb': round(optimization_results['size_before'] / 1024 / 1024, 2),
'size_after_mb': round(optimization_results['size_after'] / 1024 / 1024, 2),
'space_saved_mb': round(space_saved_mb, 2),
'optimization_timestamp': datetime.now().isoformat()
}
})
except Exception as e:
admin_logger.error(f"❌ Fehler bei Datenbank-Optimierung: {str(e)}")
return jsonify({
'success': False,
'message': f'Fehler bei Datenbank-Optimierung: {str(e)}'
}), 500
@admin_api_blueprint.route('/cache/clear', methods=['POST'])
@admin_required
def clear_cache():
"""
Leert den System-Cache.
Entfernt alle temporären Dateien, Cache-Verzeichnisse und
Python-Bytecode um Speicher freizugeben und Performance zu verbessern.
Returns:
JSON: Erfolgs-Status und Lösch-Statistiken
"""
try:
admin_logger.info(f"Cache-Leerung angefordert von Admin {current_user.username}")
cleared_stats = {
'files_deleted': 0,
'dirs_deleted': 0,
'space_freed': 0,
'categories': {}
}
app_root = os.path.dirname(os.path.dirname(__file__))
# 1. Python-Bytecode-Cache leeren (__pycache__)
try:
pycache_count = 0
pycache_size = 0
for root, dirs, files in os.walk(app_root):
if '__pycache__' in root:
for file in files:
file_path = os.path.join(root, file)
try:
pycache_size += os.path.getsize(file_path)
os.remove(file_path)
pycache_count += 1
except Exception:
pass
# Versuche das __pycache__-Verzeichnis zu löschen
try:
os.rmdir(root)
cleared_stats['dirs_deleted'] += 1
except Exception:
pass
cleared_stats['categories']['python_bytecode'] = {
'files': pycache_count,
'size_mb': round(pycache_size / 1024 / 1024, 2)
}
cleared_stats['files_deleted'] += pycache_count
cleared_stats['space_freed'] += pycache_size
admin_logger.debug(f"✅ Python-Bytecode-Cache: {pycache_count} Dateien, {pycache_size / 1024 / 1024:.2f} MB")
except Exception as pycache_error:
admin_logger.warning(f"⚠️ Fehler beim Leeren des Python-Cache: {str(pycache_error)}")
# 2. Temporäre Dateien im uploads/temp Verzeichnis
try:
temp_count = 0
temp_size = 0
temp_dir = os.path.join(app_root, 'uploads', 'temp')
if os.path.exists(temp_dir):
for root, dirs, files in os.walk(temp_dir):
for file in files:
file_path = os.path.join(root, file)
try:
temp_size += os.path.getsize(file_path)
os.remove(file_path)
temp_count += 1
except Exception:
pass
cleared_stats['categories']['temp_uploads'] = {
'files': temp_count,
'size_mb': round(temp_size / 1024 / 1024, 2)
}
cleared_stats['files_deleted'] += temp_count
cleared_stats['space_freed'] += temp_size
admin_logger.debug(f"✅ Temporäre Upload-Dateien: {temp_count} Dateien, {temp_size / 1024 / 1024:.2f} MB")
except Exception as temp_error:
admin_logger.warning(f"⚠️ Fehler beim Leeren des Temp-Verzeichnisses: {str(temp_error)}")
# 3. System-Cache-Verzeichnisse (falls vorhanden)
try:
cache_count = 0
cache_size = 0
cache_dirs = [
os.path.join(app_root, 'static', 'cache'),
os.path.join(app_root, 'cache'),
os.path.join(app_root, '.cache')
]
for cache_dir in cache_dirs:
if os.path.exists(cache_dir):
for root, dirs, files in os.walk(cache_dir):
for file in files:
file_path = os.path.join(root, file)
try:
cache_size += os.path.getsize(file_path)
os.remove(file_path)
cache_count += 1
except Exception:
pass
cleared_stats['categories']['system_cache'] = {
'files': cache_count,
'size_mb': round(cache_size / 1024 / 1024, 2)
}
cleared_stats['files_deleted'] += cache_count
cleared_stats['space_freed'] += cache_size
admin_logger.debug(f"✅ System-Cache: {cache_count} Dateien, {cache_size / 1024 / 1024:.2f} MB")
except Exception as cache_error:
admin_logger.warning(f"⚠️ Fehler beim Leeren des System-Cache: {str(cache_error)}")
# 4. Alte Log-Dateien (älter als 30 Tage)
try:
logs_count = 0
logs_size = 0
logs_dir = os.path.join(app_root, 'logs')
cutoff_date = datetime.now().timestamp() - (30 * 24 * 60 * 60) # 30 Tage
if os.path.exists(logs_dir):
for root, dirs, files in os.walk(logs_dir):
for file in files:
if file.endswith(('.log', '.log.1', '.log.2', '.log.3')):
file_path = os.path.join(root, file)
try:
if os.path.getmtime(file_path) < cutoff_date:
logs_size += os.path.getsize(file_path)
os.remove(file_path)
logs_count += 1
except Exception:
pass
cleared_stats['categories']['old_logs'] = {
'files': logs_count,
'size_mb': round(logs_size / 1024 / 1024, 2)
}
cleared_stats['files_deleted'] += logs_count
cleared_stats['space_freed'] += logs_size
admin_logger.debug(f"✅ Alte Log-Dateien: {logs_count} Dateien, {logs_size / 1024 / 1024:.2f} MB")
except Exception as logs_error:
admin_logger.warning(f"⚠️ Fehler beim Leeren alter Log-Dateien: {str(logs_error)}")
# 5. Application-Level Cache leeren (falls Models-Cache existiert)
try:
from models import clear_model_cache
clear_model_cache()
admin_logger.debug("✅ Application-Level Cache geleert")
except (ImportError, AttributeError):
admin_logger.debug(" Kein Application-Level Cache verfügbar")
# Ergebnisse zusammenfassen
total_space_mb = cleared_stats['space_freed'] / 1024 / 1024
admin_logger.info(f"✅ Cache-Leerung abgeschlossen: {cleared_stats['files_deleted']} Dateien, {total_space_mb:.2f} MB freigegeben")
return jsonify({
'success': True,
'message': f'Cache erfolgreich geleert - {total_space_mb:.2f} MB freigegeben',
'statistics': {
'total_files_deleted': cleared_stats['files_deleted'],
'total_dirs_deleted': cleared_stats['dirs_deleted'],
'total_space_freed_mb': round(total_space_mb, 2),
'categories': cleared_stats['categories'],
'cleanup_timestamp': datetime.now().isoformat()
}
})
except Exception as e:
admin_logger.error(f"❌ Fehler beim Leeren des Cache: {str(e)}")
return jsonify({
'success': False,
'message': f'Fehler beim Leeren des Cache: {str(e)}'
}), 500

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -15,3 +15,5 @@
2025-06-01 04:01:30 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
2025-06-01 04:05:28 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
2025-06-01 04:14:22 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
2025-06-01 04:16:09 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
2025-06-01 04:22:49 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert

View File

@ -548,3 +548,71 @@ WHERE users.id = ?
2025-06-01 04:14:34 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:14:37 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:15:07 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:15:37 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:16:09 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db
2025-06-01 04:16:10 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen)
2025-06-01 04:16:10 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen
2025-06-01 04:16:10 - [app] app - [INFO] INFO - ✅ Zentraler Shutdown-Manager initialisiert
2025-06-01 04:16:10 - [app] app - [INFO] INFO - 🔄 Starte Datenbank-Setup und Migrationen...
2025-06-01 04:16:10 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert
2025-06-01 04:16:10 - [app] app - [INFO] INFO - ✅ JobOrder-Tabelle bereits vorhanden
2025-06-01 04:16:11 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt.
2025-06-01 04:16:11 - [app] app - [INFO] INFO - ✅ Datenbank-Setup und Migrationen erfolgreich abgeschlossen
2025-06-01 04:16:11 - [app] app - [INFO] INFO - 🖨️ Starte automatische Steckdosen-Initialisierung...
2025-06-01 04:16:11 - [app] app - [INFO] INFO - Keine Drucker zur Initialisierung gefunden
2025-06-01 04:16:11 - [app] app - [INFO] INFO - 🔄 Debug-Modus: Queue Manager deaktiviert für Entwicklung
2025-06-01 04:16:11 - [app] app - [INFO] INFO - Job-Scheduler gestartet
2025-06-01 04:16:11 - [app] app - [INFO] INFO - Starte Debug-Server auf 0.0.0.0:5000 (HTTP)
2025-06-01 04:16:11 - [app] app - [INFO] INFO - Windows-Debug-Modus: Auto-Reload deaktiviert
2025-06-01 04:16:29 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:16:39 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:16:42 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:16:45 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:16:47 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:16:52 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_guest_requests: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:16:52 - [app] app - [INFO] INFO - Admin-Gastanfragen Seite aufgerufen von User 1
2025-06-01 04:16:52 - [app] app - [INFO] INFO - Admin-Check für Funktion get_admin_guest_requests: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:16:52 - [app] app - [INFO] INFO - API-Aufruf /api/admin/guest-requests von User 1
2025-06-01 04:16:52 - [app] app - [INFO] INFO - Admin-Gastaufträge geladen: 0 von 0 (Status: all)
2025-06-01 04:16:55 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:17:48 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:18:24 - [app] app - [INFO] INFO - Dashboard-Refresh angefordert von User 1
2025-06-01 04:18:24 - [app] app - [INFO] INFO - Dashboard-Refresh angefordert von User 1
2025-06-01 04:18:24 - [app] app - [INFO] INFO - Dashboard-Refresh erfolgreich: {'active_jobs': 0, 'available_printers': 0, 'total_jobs': 0, 'pending_jobs': 0, 'success_rate': 0, 'completed_jobs': 0, 'failed_jobs': 0, 'cancelled_jobs': 0, 'total_users': 1, 'online_printers': 0, 'offline_printers': 0}
2025-06-01 04:18:24 - [app] app - [INFO] INFO - Dashboard-Refresh erfolgreich: {'active_jobs': 0, 'available_printers': 0, 'total_jobs': 0, 'pending_jobs': 0, 'success_rate': 0, 'completed_jobs': 0, 'failed_jobs': 0, 'cancelled_jobs': 0, 'total_users': 1, 'online_printers': 0, 'offline_printers': 0}
2025-06-01 04:22:49 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db
2025-06-01 04:22:50 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen)
2025-06-01 04:22:50 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen
2025-06-01 04:22:50 - [app] app - [INFO] INFO - ✅ Zentraler Shutdown-Manager initialisiert
2025-06-01 04:22:50 - [app] app - [INFO] INFO - 🔄 Starte Datenbank-Setup und Migrationen...
2025-06-01 04:22:50 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert
2025-06-01 04:22:50 - [app] app - [INFO] INFO - ✅ JobOrder-Tabelle bereits vorhanden
2025-06-01 04:22:50 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt.
2025-06-01 04:22:50 - [app] app - [INFO] INFO - ✅ Datenbank-Setup und Migrationen erfolgreich abgeschlossen
2025-06-01 04:22:50 - [app] app - [INFO] INFO - 🖨️ Starte automatische Steckdosen-Initialisierung...
2025-06-01 04:22:50 - [app] app - [INFO] INFO - Keine Drucker zur Initialisierung gefunden
2025-06-01 04:22:50 - [app] app - [INFO] INFO - 🔄 Debug-Modus: Queue Manager deaktiviert für Entwicklung
2025-06-01 04:22:50 - [app] app - [INFO] INFO - Job-Scheduler gestartet
2025-06-01 04:22:50 - [app] app - [INFO] INFO - Starte Debug-Server auf 0.0.0.0:5000 (HTTP)
2025-06-01 04:22:50 - [app] app - [INFO] INFO - Windows-Debug-Modus: Auto-Reload deaktiviert
2025-06-01 04:22:56 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:04 - [app] app - [INFO] INFO - Admin-Check für Funktion get_user_api: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:07 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:09 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:11 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:12 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:14 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:15 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:16 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:17 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:18 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_guest_requests: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:18 - [app] app - [INFO] INFO - Admin-Gastanfragen Seite aufgerufen von User 1
2025-06-01 04:23:19 - [app] app - [INFO] INFO - Admin-Check für Funktion get_admin_guest_requests: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:19 - [app] app - [INFO] INFO - API-Aufruf /api/admin/guest-requests von User 1
2025-06-01 04:23:19 - [app] app - [INFO] INFO - Admin-Gastaufträge geladen: 0 von 0 (Status: all)
2025-06-01 04:23:22 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:23:52 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:24:22 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:24:52 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:25:22 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True
2025-06-01 04:25:52 - [app] app - [INFO] INFO - Admin-Check für Funktion api_admin_system_health: User authenticated: True, User ID: 1, Is Admin: True

View File

@ -15,3 +15,5 @@
2025-06-01 04:01:29 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
2025-06-01 04:05:28 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
2025-06-01 04:14:22 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
2025-06-01 04:16:09 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
2025-06-01 04:22:49 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)

View File

@ -9,3 +9,4 @@
2025-06-01 04:06:37 - [calendar] calendar - [INFO] INFO - 📅 Kalender-Events abgerufen: 0 Einträge für Zeitraum 2025-06-01 00:00:00 bis 2025-06-08 00:00:00
2025-06-01 04:08:27 - [calendar] calendar - [INFO] INFO - 📅 Kalender-Events abgerufen: 0 Einträge für Zeitraum 2025-06-01 00:00:00 bis 2025-06-08 00:00:00
2025-06-01 04:08:48 - [calendar] calendar - [INFO] INFO - 📅 Kalender-Events abgerufen: 0 Einträge für Zeitraum 2025-06-01 00:00:00 bis 2025-06-08 00:00:00
2025-06-01 04:16:18 - [calendar] calendar - [INFO] INFO - 📅 Kalender-Events abgerufen: 0 Einträge für Zeitraum 2025-06-01 00:00:00 bis 2025-06-08 00:00:00

View File

@ -53,3 +53,11 @@
2025-06-01 04:14:23 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
2025-06-01 04:14:23 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
2025-06-01 04:14:23 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
2025-06-01 04:16:10 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
2025-06-01 04:16:10 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
2025-06-01 04:16:10 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
2025-06-01 04:16:10 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
2025-06-01 04:22:50 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
2025-06-01 04:22:50 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
2025-06-01 04:22:50 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
2025-06-01 04:22:50 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)

View File

@ -15,3 +15,5 @@
2025-06-01 04:01:29 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
2025-06-01 04:05:28 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
2025-06-01 04:14:22 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
2025-06-01 04:16:09 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
2025-06-01 04:22:49 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet

View File

@ -13,3 +13,5 @@
2025-06-01 04:01:31 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
2025-06-01 04:05:29 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
2025-06-01 04:14:23 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
2025-06-01 04:16:10 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
2025-06-01 04:22:50 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)

View File

@ -44,3 +44,6 @@
2025-06-01 04:06:36 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1)
2025-06-01 04:08:18 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1)
2025-06-01 04:08:50 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1)
2025-06-01 04:16:16 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1)
2025-06-01 04:16:58 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1)
2025-06-01 04:17:52 - [jobs] jobs - [INFO] INFO - Jobs abgerufen: 0 von 0 (Seite 1)

View File

@ -26,3 +26,7 @@
2025-06-01 04:05:29 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
2025-06-01 04:14:23 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
2025-06-01 04:14:23 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
2025-06-01 04:16:10 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
2025-06-01 04:16:10 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
2025-06-01 04:22:50 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
2025-06-01 04:22:50 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet

View File

@ -26,3 +26,7 @@
2025-06-01 04:05:29 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
2025-06-01 04:14:23 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
2025-06-01 04:14:23 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
2025-06-01 04:16:10 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
2025-06-01 04:16:10 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
2025-06-01 04:22:50 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
2025-06-01 04:22:50 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt

View File

@ -11,3 +11,5 @@
2025-06-01 04:01:31 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
2025-06-01 04:05:29 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
2025-06-01 04:14:23 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
2025-06-01 04:16:10 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
2025-06-01 04:22:50 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert

View File

@ -456,3 +456,185 @@
2025-06-01 04:15:07 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:15:07 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:15:07 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:09 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
2025-06-01 04:16:09 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
2025-06-01 04:16:11 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart...
2025-06-01 04:16:11 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden
2025-06-01 04:16:11 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:11 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:11 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:11 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:11 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung...
2025-06-01 04:16:11 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration
2025-06-01 04:16:11 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103
2025-06-01 04:16:13 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:13 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:13 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:13 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:17 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:17 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:17 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:17 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:17 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104
2025-06-01 04:16:23 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100
2025-06-01 04:16:29 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:29 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:29 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:29 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:29 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101
2025-06-01 04:16:35 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102
2025-06-01 04:16:39 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:39 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:39 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:39 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:41 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105
2025-06-01 04:16:42 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:42 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:42 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:42 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:45 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:45 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:45 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:45 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:47 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:47 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:47 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:47 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:47 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.0s
2025-06-01 04:16:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:52 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:52 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:55 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:55 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:55 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:55 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:59 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:59 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:16:59 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:16:59 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:00 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:00 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:00 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:00 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:02 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:02 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:02 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:02 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:07 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:07 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:07 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:07 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:42 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:42 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:42 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:42 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:48 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:48 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:48 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:48 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:53 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:53 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:53 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:17:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:17:53 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:18:24 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:18:24 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:18:24 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:18:24 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:18:25 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:18:25 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:18:25 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:18:25 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:18:27 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:18:27 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:18:27 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:18:27 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:49 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
2025-06-01 04:22:49 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
2025-06-01 04:22:50 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart...
2025-06-01 04:22:50 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung...
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:51 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:53 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:53 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:53 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:54 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:56 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:56 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:22:56 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:22:57 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104
2025-06-01 04:23:03 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100
2025-06-01 04:23:07 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:07 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:07 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:07 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:09 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101
2025-06-01 04:23:09 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:09 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:09 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:09 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:11 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:11 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:11 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:11 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:12 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:12 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:12 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:12 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:14 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:14 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:14 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:14 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:15 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102
2025-06-01 04:23:15 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:15 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:15 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:15 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:16 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:16 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:16 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:16 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:17 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:17 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:17 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:17 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:19 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:19 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:19 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:19 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:21 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105
2025-06-01 04:23:22 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:22 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:22 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:22 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:27 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.0s
2025-06-01 04:23:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:52 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:23:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:23:52 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:24:57 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:24:57 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:24:57 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:24:57 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:25:57 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:25:57 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden
2025-06-01 04:25:57 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
2025-06-01 04:25:57 - [printer_monitor] printer_monitor - [INFO] INFO - Keine aktiven Drucker gefunden

View File

@ -3143,3 +3143,172 @@
2025-06-01 04:15:07 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:15:07 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:15:07 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 7.78ms
2025-06-01 04:16:11 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:11 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:11 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 2.16ms
2025-06-01 04:16:13 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:13 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:13 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.72ms
2025-06-01 04:16:16 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:16:17 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:16:17 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:17 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:17 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.21ms
2025-06-01 04:16:17 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:16:29 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:29 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:29 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 13.34ms
2025-06-01 04:16:39 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:39 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:39 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 12.89ms
2025-06-01 04:16:42 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:42 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:42 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 11.48ms
2025-06-01 04:16:45 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:45 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:45 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 11.73ms
2025-06-01 04:16:47 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:47 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:47 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 9.25ms
2025-06-01 04:16:52 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:52 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:52 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 20.20ms
2025-06-01 04:16:55 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:55 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:55 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 9.77ms
2025-06-01 04:16:58 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:16:59 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:16:59 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:16:59 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:16:59 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.27ms
2025-06-01 04:16:59 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:17:00 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:17:00 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:17:00 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 7.39ms
2025-06-01 04:17:02 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:17:02 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:17:02 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:17:02 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 9.08ms
2025-06-01 04:17:02 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:17:07 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:17:07 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:17:07 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 7.42ms
2025-06-01 04:17:42 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:17:42 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:17:42 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 10.18ms
2025-06-01 04:17:48 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:17:48 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:17:48 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 10.13ms
2025-06-01 04:17:52 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:17:53 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:17:53 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:17:53 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:17:53 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 8.47ms
2025-06-01 04:17:53 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:17:53 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:17:53 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:17:53 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.51ms
2025-06-01 04:18:24 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:18:24 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:18:24 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 1.82ms
2025-06-01 04:18:25 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:18:25 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:18:25 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 4.61ms
2025-06-01 04:18:27 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:18:27 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:18:27 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:18:27 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 1.56ms
2025-06-01 04:18:27 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:50 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:50 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:50 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:50 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 3.27ms
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 2.60ms
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:51 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:53 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:53 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:22:53 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:22:53 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.78ms
2025-06-01 04:22:53 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:54 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:22:54 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:22:54 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 5.08ms
2025-06-01 04:22:55 - [printers] printers - [INFO] INFO - Schnelles Laden abgeschlossen: 6 Drucker geladen (ohne Status-Check)
2025-06-01 04:22:56 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:22:56 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:22:56 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 13.66ms
2025-06-01 04:23:07 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:07 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:07 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 8.34ms
2025-06-01 04:23:09 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:09 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:09 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 7.35ms
2025-06-01 04:23:11 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:11 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:11 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 10.46ms
2025-06-01 04:23:12 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:12 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:12 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 10.18ms
2025-06-01 04:23:14 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:14 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:14 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 7.64ms
2025-06-01 04:23:15 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:15 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:15 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.34ms
2025-06-01 04:23:16 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:16 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:16 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 13.67ms
2025-06-01 04:23:17 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:17 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:17 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 6.56ms
2025-06-01 04:23:19 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:19 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:19 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 12.51ms
2025-06-01 04:23:22 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:22 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:22 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 8.16ms
2025-06-01 04:23:52 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:23:52 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:23:52 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 4.98ms
2025-06-01 04:24:57 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:24:57 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:24:57 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 1.29ms
2025-06-01 04:25:57 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
2025-06-01 04:25:57 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 0 Drucker
2025-06-01 04:25:57 - [printers] printers - [INFO] INFO - ✅ API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 1.68ms

View File

@ -2863,3 +2863,9 @@
2025-06-01 04:14:22 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
2025-06-01 04:14:23 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
2025-06-01 04:14:23 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
2025-06-01 04:16:09 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
2025-06-01 04:16:11 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
2025-06-01 04:16:11 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
2025-06-01 04:22:49 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
2025-06-01 04:22:50 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
2025-06-01 04:22:50 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet

View File

@ -11,3 +11,5 @@
2025-06-01 04:01:31 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
2025-06-01 04:05:29 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
2025-06-01 04:14:23 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
2025-06-01 04:16:10 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
2025-06-01 04:22:50 - [security] security - [INFO] INFO - 🔒 Security System initialisiert

View File

@ -44,3 +44,5 @@
2025-06-01 04:01:31 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
2025-06-01 04:05:29 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
2025-06-01 04:14:23 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
2025-06-01 04:16:10 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
2025-06-01 04:22:50 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert

View File

@ -111,3 +111,21 @@
2025-06-01 04:14:23 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
2025-06-01 04:14:23 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
2025-06-01 04:14:23 - [startup] startup - [INFO] INFO - ==================================================
2025-06-01 04:16:10 - [startup] startup - [INFO] INFO - ==================================================
2025-06-01 04:16:10 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet...
2025-06-01 04:16: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-01 04:16:10 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
2025-06-01 04:16:10 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
2025-06-01 04:16:10 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T04:16:10.629310
2025-06-01 04:16:10 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
2025-06-01 04:16:10 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
2025-06-01 04:16:10 - [startup] startup - [INFO] INFO - ==================================================
2025-06-01 04:22:50 - [startup] startup - [INFO] INFO - ==================================================
2025-06-01 04:22:50 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet...
2025-06-01 04:22:50 - [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-01 04:22:50 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
2025-06-01 04:22:50 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
2025-06-01 04:22:50 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T04:22:50.210131
2025-06-01 04:22:50 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
2025-06-01 04:22:50 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
2025-06-01 04:22:50 - [startup] startup - [INFO] INFO - ==================================================

View File

@ -58,3 +58,11 @@
2025-06-01 04:14:21 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
2025-06-01 04:14:21 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
2025-06-01 04:14:21 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
2025-06-01 04:16:09 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
2025-06-01 04:16:09 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
2025-06-01 04:16:09 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
2025-06-01 04:16:09 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
2025-06-01 04:22:49 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
2025-06-01 04:22:49 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
2025-06-01 04:22:49 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
2025-06-01 04:22:49 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet

View File

@ -1675,4 +1675,27 @@ def get_engine():
return create_optimized_engine()
# Engine-Variable für direkten Import
engine = get_engine()
engine = get_engine()
# ===== CACHE-VERWALTUNG =====
def clear_model_cache():
"""
Leert den Application-Level Cache für Modelle.
Diese Funktion kann erweitert werden, um verschiedene Cache-Mechanismen
zu unterstützen, wie z.B. SQLAlchemy Session Cache, Redis Cache, etc.
"""
try:
# SQLAlchemy Session Cache leeren
from sqlalchemy.orm import scoped_session
if _scoped_session:
_scoped_session.remove()
# Weitere Cache-Clearing-Operationen hier hinzufügen
# z.B. Redis Cache, Memcached, etc.
return True
except Exception as e:
print(f"Fehler beim Leeren des Model-Cache: {str(e)}")
return False

View File

@ -1079,7 +1079,7 @@
inset 0 1px 0 rgba(255, 255, 255, 0.2),
0 0 0 1px rgba(255, 255, 255, 0.05);
}
.notification.show {
@apply translate-x-0 opacity-100;
}
@ -1100,7 +1100,7 @@
inset 0 1px 0 rgba(255, 255, 255, 0.3),
0 0 0 1px rgba(255, 255, 255, 0.1);
}
.notification-success {
@apply text-green-100;
background: linear-gradient(135deg,
@ -1114,7 +1114,7 @@
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(34, 197, 94, 0.3);
}
.notification-error {
@apply text-red-100;
background: linear-gradient(135deg,
@ -1128,7 +1128,7 @@
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(239, 68, 68, 0.3);
}
.notification-warning {
@apply text-yellow-100;
background: linear-gradient(135deg,
@ -1142,7 +1142,7 @@
inset 0 1px 0 rgba(255, 255, 255, 0.4),
0 0 0 1px rgba(245, 158, 11, 0.3);
}
.notification-info {
@apply text-blue-100;
background: linear-gradient(135deg,
@ -1209,7 +1209,7 @@
inset 0 1px 0 rgba(255, 255, 255, 0.15),
0 0 0 1px rgba(255, 255, 255, 0.05);
}
.alert-success {
@apply text-green-900 dark:text-green-100;
background: linear-gradient(135deg,
@ -1218,7 +1218,7 @@
rgba(34, 197, 94, 0.08) 100%);
border: 1px solid rgba(34, 197, 94, 0.3);
}
.alert-error {
@apply text-red-900 dark:text-red-100;
background: linear-gradient(135deg,
@ -1227,7 +1227,7 @@
rgba(239, 68, 68, 0.08) 100%);
border: 1px solid rgba(239, 68, 68, 0.3);
}
.alert-warning {
@apply text-yellow-900 dark:text-yellow-100;
background: linear-gradient(135deg,
@ -1236,7 +1236,7 @@
rgba(245, 158, 11, 0.08) 100%);
border: 1px solid rgba(245, 158, 11, 0.3);
}
.alert-info {
@apply text-blue-900 dark:text-blue-100;
background: linear-gradient(135deg,

File diff suppressed because one or more lines are too long

View File

@ -422,20 +422,298 @@ class AdminDashboard {
}
// User-Management
showUserModal() {
console.log('👤 Benutzer-Modal wird angezeigt');
this.showNotification('Benutzer-Funktionen werden geladen...', 'info');
showUserModal(userId = null) {
const isEdit = userId !== null;
const title = isEdit ? 'Benutzer bearbeiten' : 'Neuer Benutzer';
// Modal HTML erstellen
const modalHtml = `
<div id="user-modal" class="fixed inset-0 bg-black/60 backdrop-blur-sm z-50 flex items-center justify-center p-4">
<div class="bg-white dark:bg-slate-800 rounded-2xl p-8 max-w-md w-full shadow-2xl transform scale-100 transition-all duration-300">
<div class="flex justify-between items-center mb-6">
<h3 class="text-2xl font-bold text-slate-900 dark:text-white">${title}</h3>
<button onclick="this.closest('#user-modal').remove()" class="p-2 hover:bg-gray-100 dark:hover:bg-slate-700 rounded-lg transition-colors">
<svg class="w-6 h-6 text-slate-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
</svg>
</button>
</div>
<form id="user-form" class="space-y-4">
<div>
<label class="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-2">E-Mail-Adresse *</label>
<input type="email" name="email" id="user-email" required
class="w-full px-4 py-3 border border-slate-300 dark:border-slate-600 rounded-xl
focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all
dark:bg-slate-700 dark:text-white bg-slate-50">
</div>
<div>
<label class="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-2">Benutzername</label>
<input type="text" name="username" id="user-username"
class="w-full px-4 py-3 border border-slate-300 dark:border-slate-600 rounded-xl
focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all
dark:bg-slate-700 dark:text-white bg-slate-50">
</div>
<div>
<label class="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-2">Name</label>
<input type="text" name="name" id="user-name"
class="w-full px-4 py-3 border border-slate-300 dark:border-slate-600 rounded-xl
focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all
dark:bg-slate-700 dark:text-white bg-slate-50">
</div>
<div>
<label class="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-2">Passwort ${isEdit ? '(leer lassen für keine Änderung)' : '*'}</label>
<input type="password" name="password" id="user-password" ${!isEdit ? 'required' : ''}
class="w-full px-4 py-3 border border-slate-300 dark:border-slate-600 rounded-xl
focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all
dark:bg-slate-700 dark:text-white bg-slate-50">
</div>
<div>
<label class="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-2">Rolle</label>
<select name="role" id="user-role"
class="w-full px-4 py-3 border border-slate-300 dark:border-slate-600 rounded-xl
focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all
dark:bg-slate-700 dark:text-white bg-slate-50">
<option value="user">Benutzer</option>
<option value="admin">Administrator</option>
</select>
</div>
${isEdit ? `
<div class="flex items-center space-x-2">
<input type="checkbox" name="is_active" id="user-active"
class="w-4 h-4 text-blue-600 bg-slate-100 border-slate-300 rounded focus:ring-blue-500">
<label for="user-active" class="text-sm font-medium text-slate-700 dark:text-slate-300">Aktiv</label>
</div>
` : ''}
<div class="flex justify-end space-x-3 mt-8 pt-6 border-t border-slate-200 dark:border-slate-600">
<button type="button" onclick="this.closest('#user-modal').remove()"
class="px-6 py-3 bg-slate-200 dark:bg-slate-600 text-slate-700 dark:text-slate-300
rounded-xl hover:bg-slate-300 dark:hover:bg-slate-500 transition-colors font-medium">
Abbrechen
</button>
<button type="submit" id="user-submit-btn"
class="px-6 py-3 bg-gradient-to-r from-blue-500 to-blue-600 text-white
rounded-xl hover:from-blue-600 hover:to-blue-700 transition-all duration-300
shadow-lg hover:shadow-xl font-medium">
${isEdit ? 'Aktualisieren' : 'Erstellen'}
</button>
</div>
</form>
</div>
</div>
`;
// Modal zum DOM hinzufügen
document.body.insertAdjacentHTML('beforeend', modalHtml);
// Event-Listener für das Formular
const form = document.getElementById('user-form');
form.addEventListener('submit', (e) => {
e.preventDefault();
e.stopPropagation();
if (isEdit) {
this.updateUser(userId, new FormData(form));
} else {
this.createUser(new FormData(form));
}
});
// Bei Bearbeitung: Benutzer-Daten laden
if (isEdit) {
this.loadUserData(userId);
}
// Fokus auf erstes Eingabefeld
setTimeout(() => {
document.getElementById('user-email').focus();
}, 100);
}
async loadUserData(userId) {
try {
const response = await fetch(`${this.apiBaseUrl}/api/admin/users/${userId}`);
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
const data = await response.json();
if (data.success) {
const user = data.user;
// Formular mit Benutzerdaten füllen
document.getElementById('user-email').value = user.email || '';
document.getElementById('user-username').value = user.username || '';
document.getElementById('user-name').value = user.name || '';
document.getElementById('user-role').value = user.is_admin ? 'admin' : 'user';
const activeCheckbox = document.getElementById('user-active');
if (activeCheckbox) {
activeCheckbox.checked = user.is_active !== false;
}
} else {
this.showNotification('❌ Fehler beim Laden der Benutzerdaten', 'error');
}
} catch (error) {
console.error('Fehler beim Laden der Benutzerdaten:', error);
this.showNotification('❌ Fehler beim Laden der Benutzerdaten', 'error');
}
}
async createUser(formData) {
const submitBtn = document.getElementById('user-submit-btn');
const originalText = submitBtn.innerHTML;
try {
// Loading-Zustand
submitBtn.innerHTML = '<div class="animate-spin rounded-full h-5 w-5 border-b-2 border-white mx-auto"></div>';
submitBtn.disabled = true;
// FormData zu JSON konvertieren
const userData = {
email: formData.get('email'),
username: formData.get('username') || formData.get('email').split('@')[0],
name: formData.get('name'),
password: formData.get('password'),
is_admin: formData.get('role') === 'admin'
};
const response = await fetch(`${this.apiBaseUrl}/api/admin/users`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': this.csrfToken
},
body: JSON.stringify(userData)
});
const data = await response.json();
if (data.success) {
this.showNotification('✅ Benutzer erfolgreich erstellt!', 'success');
document.getElementById('user-modal').remove();
// Seite nach 1 Sekunde neu laden um neue Benutzerliste zu zeigen
setTimeout(() => {
window.location.reload();
}, 1000);
} else {
this.showNotification(`❌ Fehler: ${data.error}`, 'error');
}
} catch (error) {
console.error('Fehler beim Erstellen des Benutzers:', error);
this.showNotification('❌ Fehler beim Erstellen des Benutzers', 'error');
} finally {
// Button zurücksetzen
submitBtn.innerHTML = originalText;
submitBtn.disabled = false;
}
}
async updateUser(userId, formData) {
const submitBtn = document.getElementById('user-submit-btn');
const originalText = submitBtn.innerHTML;
try {
// Loading-Zustand
submitBtn.innerHTML = '<div class="animate-spin rounded-full h-5 w-5 border-b-2 border-white mx-auto"></div>';
submitBtn.disabled = true;
// FormData zu JSON konvertieren
const userData = {
email: formData.get('email'),
username: formData.get('username'),
name: formData.get('name'),
is_admin: formData.get('role') === 'admin',
is_active: formData.get('is_active') === 'on'
};
// Passwort nur hinzufügen wenn es gesetzt wurde
const password = formData.get('password');
if (password && password.trim()) {
userData.password = password;
}
const response = await fetch(`${this.apiBaseUrl}/api/admin/users/${userId}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': this.csrfToken
},
body: JSON.stringify(userData)
});
const data = await response.json();
if (data.success) {
this.showNotification('✅ Benutzer erfolgreich aktualisiert!', 'success');
document.getElementById('user-modal').remove();
// Seite nach 1 Sekunde neu laden um aktualisierte Benutzerliste zu zeigen
setTimeout(() => {
window.location.reload();
}, 1000);
} else {
this.showNotification(`❌ Fehler: ${data.error}`, 'error');
}
} catch (error) {
console.error('Fehler beim Aktualisieren des Benutzers:', error);
this.showNotification('❌ Fehler beim Aktualisieren des Benutzers', 'error');
} finally {
// Button zurücksetzen
submitBtn.innerHTML = originalText;
submitBtn.disabled = false;
}
}
editUser(userId) {
console.log(`✏️ Benutzer ${userId} wird bearbeitet`);
this.showNotification(`Benutzer ${userId} wird bearbeitet...`, 'info');
this.showUserModal(userId);
}
async deleteUser(userId, userName) {
if (!confirm(`🗑️ Möchten Sie den Benutzer "${userName}" wirklich löschen?`)) return;
if (!confirm(`🗑️ Möchten Sie den Benutzer "${userName}" wirklich löschen?\n\nDiese Aktion kann nicht rückgängig gemacht werden!`)) {
return;
}
this.showNotification(`🔄 Benutzer "${userName}" wird gelöscht...`, 'info');
try {
this.showNotification(`🔄 Benutzer "${userName}" wird gelöscht...`, 'info');
const response = await fetch(`${this.apiBaseUrl}/api/admin/users/${userId}`, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': this.csrfToken
}
});
const data = await response.json();
if (data.success) {
this.showNotification(`✅ Benutzer "${userName}" erfolgreich gelöscht!`, 'success');
// Seite nach 1 Sekunde neu laden um aktualisierte Benutzerliste zu zeigen
setTimeout(() => {
window.location.reload();
}, 1000);
} else {
this.showNotification(`❌ Fehler beim Löschen: ${data.error}`, 'error');
}
} catch (error) {
console.error('Fehler beim Löschen des Benutzers:', error);
this.showNotification('❌ Fehler beim Löschen des Benutzers', 'error');
}
}
// Printer-Management

File diff suppressed because it is too large Load Diff