🔧 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:
@ -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()
|
||||||
|
Reference in New Issue
Block a user