🔧 Fix: Admin Advanced Settings 500 Error behoben

- Debug-Logging für erweiterte Einstellungen hinzugefügt
- active_tab Parameter in Exception-Handler ergänzt
- Traceback-Import für bessere Fehlerdiagnose
- Ausführliches Logging für Datenbankoperationen
- Konsistente Template-Parameter in allen Code-Pfaden

Fixes HTTP 500 Error bei GET /admin/advanced-settings

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-06-19 23:26:14 +02:00
parent 1908f203d1
commit db88620d0c

View File

@ -22,6 +22,7 @@ import zipfile
import sqlite3 import sqlite3
import glob import glob
import time import time
import traceback
from datetime import datetime, timedelta from datetime import datetime, timedelta
from flask import Blueprint, render_template, request, jsonify, redirect, url_for, flash, current_app from flask import Blueprint, render_template, request, jsonify, redirect, url_for, flash, current_app
from flask_login import login_required, current_user from flask_login import login_required, current_user
@ -288,21 +289,30 @@ def guest_requests():
def advanced_settings(): def advanced_settings():
"""Erweiterte Systemeinstellungen""" """Erweiterte Systemeinstellungen"""
try: try:
admin_logger.info(f"Erweiterte Einstellungen werden geladen von {current_user.username}")
with get_cached_session() as db_session: with get_cached_session() as db_session:
# Grundlegende Statistiken sammeln für das Template # Grundlegende Statistiken sammeln für das Template
total_users = db_session.query(User).count() total_users = db_session.query(User).count()
admin_logger.debug(f"Benutzer gezählt: {total_users}")
total_printers = db_session.query(Printer).count() total_printers = db_session.query(Printer).count()
admin_logger.debug(f"Drucker gezählt: {total_printers}")
total_jobs = db_session.query(Job).count() total_jobs = db_session.query(Job).count()
admin_logger.debug(f"Jobs gezählt: {total_jobs}")
# Aktive Drucker zählen (online/verfügbar) # Aktive Drucker zählen (online/verfügbar)
active_printers = db_session.query(Printer).filter( active_printers = db_session.query(Printer).filter(
Printer.status.in_(['online', 'available', 'idle']) Printer.status.in_(['online', 'available', 'idle'])
).count() ).count()
admin_logger.debug(f"Aktive Drucker gezählt: {active_printers}")
# Wartende Jobs zählen # Wartende Jobs zählen
pending_jobs = db_session.query(Job).filter( pending_jobs = db_session.query(Job).filter(
Job.status.in_(['pending', 'scheduled', 'queued']) Job.status.in_(['pending', 'scheduled', 'queued'])
).count() ).count()
admin_logger.debug(f"Wartende Jobs gezählt: {pending_jobs}")
stats = { stats = {
'total_users': total_users, 'total_users': total_users,
@ -322,11 +332,15 @@ def advanced_settings():
'time_window': 24 'time_window': 24
} }
admin_logger.info(f"Erweiterte Einstellungen geladen von {current_user.username}") admin_logger.info(f"Template wird gerendert mit stats: {stats}")
return render_template('admin_advanced_settings.html', stats=stats, optimization_settings=optimization_settings) return render_template('admin_advanced_settings.html',
stats=stats,
optimization_settings=optimization_settings,
active_tab='system')
except Exception as e: except Exception as e:
admin_logger.error(f"Fehler beim Laden der erweiterten Einstellungen: {str(e)}") admin_logger.error(f"Fehler beim Laden der erweiterten Einstellungen: {str(e)}")
admin_logger.error(f"Traceback: {traceback.format_exc()}")
flash("Fehler beim Laden der Systemdaten", "error") flash("Fehler beim Laden der Systemdaten", "error")
# Fallback mit leeren Statistiken # Fallback mit leeren Statistiken
stats = { stats = {
@ -347,7 +361,10 @@ def advanced_settings():
'time_window': 24 'time_window': 24
} }
return render_template('admin_advanced_settings.html', stats=stats, optimization_settings=optimization_settings) return render_template('admin_advanced_settings.html',
stats=stats,
optimization_settings=optimization_settings,
active_tab='system')
@admin_blueprint.route("/system-health") @admin_blueprint.route("/system-health")
@admin_required @admin_required
@ -1503,7 +1520,7 @@ def approve_guest_request_api(request_id):
# Genehmigung durchführen # Genehmigung durchführen
guest_request.status = 'approved' guest_request.status = 'approved'
guest_request.processed_at = datetime.now() guest_request.processed_at = datetime.now()
guest_request.processed_by = current_user.username guest_request.processed_by = current_user.id # User-ID statt Username
guest_request.approval_notes = approval_notes guest_request.approval_notes = approval_notes
# OTP-Code automatisch generieren # OTP-Code automatisch generieren
@ -1546,7 +1563,7 @@ def reject_guest_request_api(request_id):
# Ablehnung durchführen # Ablehnung durchführen
guest_request.status = 'rejected' guest_request.status = 'rejected'
guest_request.processed_at = datetime.now() guest_request.processed_at = datetime.now()
guest_request.processed_by = current_user.username guest_request.processed_by = current_user.id # User-ID statt Username
guest_request.rejection_reason = rejection_reason guest_request.rejection_reason = rejection_reason
db_session.commit() db_session.commit()