"Add database backup schedule for 2025-05-29 18:58:34"
This commit is contained in:
@@ -4361,6 +4361,87 @@ def export_admin_logs():
|
||||
"message": f"Fehler beim Exportieren: {str(e)}"
|
||||
}), 500
|
||||
|
||||
@app.route('/api/logs', methods=['GET'])
|
||||
@login_required
|
||||
def get_system_logs():
|
||||
"""API-Endpunkt zum Laden der System-Logs für das Dashboard."""
|
||||
if not current_user.is_admin:
|
||||
return jsonify({"success": False, "error": "Berechtigung verweigert"}), 403
|
||||
|
||||
try:
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
log_level = request.args.get('log_level', 'all')
|
||||
log_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')
|
||||
|
||||
# Logeinträge sammeln
|
||||
app_logs = []
|
||||
for category in ['app', 'auth', 'jobs', 'printers', 'scheduler', 'errors']:
|
||||
log_file = os.path.join(log_dir, category, f'{category}.log')
|
||||
if os.path.exists(log_file):
|
||||
try:
|
||||
with open(log_file, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
# Nur die letzten 100 Zeilen pro Datei
|
||||
for line in lines[-100:]:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
|
||||
# Log-Level-Filter anwenden
|
||||
if log_level != 'all':
|
||||
if log_level.upper() not in line:
|
||||
continue
|
||||
|
||||
# Log-Eintrag parsen
|
||||
parts = line.split(' - ')
|
||||
if len(parts) >= 3:
|
||||
timestamp = parts[0]
|
||||
level = parts[1]
|
||||
message = ' - '.join(parts[2:])
|
||||
else:
|
||||
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
level = 'INFO'
|
||||
message = line
|
||||
|
||||
app_logs.append({
|
||||
'timestamp': timestamp,
|
||||
'level': level,
|
||||
'category': category,
|
||||
'module': category,
|
||||
'message': message,
|
||||
'source': category
|
||||
})
|
||||
except Exception as file_error:
|
||||
app_logger.warning(f"Fehler beim Lesen der Log-Datei {log_file}: {str(file_error)}")
|
||||
continue
|
||||
|
||||
# Nach Zeitstempel sortieren (neueste zuerst)
|
||||
try:
|
||||
logs = sorted(app_logs, key=lambda x: x['timestamp'] if x['timestamp'] else '', reverse=True)[:100]
|
||||
except:
|
||||
# Falls Sortierung fehlschlägt, einfach die letzten 100 nehmen
|
||||
logs = app_logs[-100:]
|
||||
|
||||
app_logger.info(f"Logs erfolgreich geladen: {len(logs)} Einträge")
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"logs": logs,
|
||||
"count": len(logs),
|
||||
"message": f"{len(logs)} Log-Einträge geladen"
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler beim Laden der Logs: {str(e)}")
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": "Fehler beim Laden der Logs",
|
||||
"message": str(e),
|
||||
"logs": []
|
||||
}), 500
|
||||
|
||||
# ===== ENDE FEHLENDE ADMIN-API-ENDPUNKTE =====
|
||||
|
||||
# ===== BENACHRICHTIGUNGS-API-ENDPUNKTE =====
|
||||
|
Reference in New Issue
Block a user