📚 Improved codebase structure & logging enhancements 🚀
This commit is contained in:
parent
1a3bfa4094
commit
19eeed46fb
Binary file not shown.
@ -2129,6 +2129,100 @@ def create_user_api():
|
|||||||
user_logger.error(f"Fehler beim Erstellen eines Benutzers: {str(e)}")
|
user_logger.error(f"Fehler beim Erstellen eines Benutzers: {str(e)}")
|
||||||
return jsonify({"error": "Interner Serverfehler"}), 500
|
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"])
|
@app.route("/api/admin/printers/<int:printer_id>/toggle", methods=["POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def toggle_printer_power(printer_id):
|
def toggle_printer_power(printer_id):
|
||||||
|
489
backend/blueprints/admin_api.py
Normal file
489
backend/blueprints/admin_api.py
Normal 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.
@ -15,3 +15,5 @@
|
|||||||
2025-06-01 04:01:30 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
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: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: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
|
||||||
|
@ -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: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: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: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
|
||||||
|
@ -15,3 +15,5 @@
|
|||||||
2025-06-01 04:01:29 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
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: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: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)
|
||||||
|
@ -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: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: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: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
|
||||||
|
@ -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-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 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: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)
|
||||||
|
@ -15,3 +15,5 @@
|
|||||||
2025-06-01 04:01:29 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
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: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: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
|
||||||
|
@ -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: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: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: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)
|
||||||
|
@ -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: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: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: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)
|
||||||
|
@ -26,3 +26,7 @@
|
|||||||
2025-06-01 04:05:29 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
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: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
|
||||||
|
@ -26,3 +26,7 @@
|
|||||||
2025-06-01 04:05:29 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
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: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
|
||||||
|
@ -11,3 +11,5 @@
|
|||||||
2025-06-01 04:01:31 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
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: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: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
|
||||||
|
@ -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 - ℹ️ 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 - 🔄 Aktualisiere Live-Druckerstatus...
|
||||||
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 - ℹ️ 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
|
||||||
|
@ -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 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 - ✅ 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: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
|
||||||
|
@ -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: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-Thread gestartet
|
||||||
2025-06-01 04:14:23 - [scheduler] scheduler - [INFO] INFO - Scheduler 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
|
||||||
|
@ -11,3 +11,5 @@
|
|||||||
2025-06-01 04:01:31 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
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: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: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
|
||||||
|
@ -44,3 +44,5 @@
|
|||||||
2025-06-01 04:01:31 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
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: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: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
|
||||||
|
@ -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-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 - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||||
2025-06-01 04:14:23 - [startup] startup - [INFO] INFO - ==================================================
|
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 - ==================================================
|
||||||
|
@ -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 - ✅ 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 - ✅ 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: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
|
||||||
|
@ -1676,3 +1676,26 @@ def get_engine():
|
|||||||
|
|
||||||
# Engine-Variable für direkten Import
|
# 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
|
2
backend/static/css/tailwind.min.css
vendored
2
backend/static/css/tailwind.min.css
vendored
File diff suppressed because one or more lines are too long
@ -422,20 +422,298 @@ class AdminDashboard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// User-Management
|
// User-Management
|
||||||
showUserModal() {
|
showUserModal(userId = null) {
|
||||||
console.log('👤 Benutzer-Modal wird angezeigt');
|
const isEdit = userId !== null;
|
||||||
this.showNotification('Benutzer-Funktionen werden geladen...', 'info');
|
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) {
|
editUser(userId) {
|
||||||
console.log(`✏️ Benutzer ${userId} wird bearbeitet`);
|
console.log(`✏️ Benutzer ${userId} wird bearbeitet`);
|
||||||
this.showNotification(`Benutzer ${userId} wird bearbeitet...`, 'info');
|
this.showUserModal(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
async deleteUser(userId, userName) {
|
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
|
// Printer-Management
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user