"Refactor app logic using Conventional Commits format (feat)"

This commit is contained in:
Till Tomczak 2025-05-29 20:32:19 +02:00
parent 9d51580d6e
commit 0e5ac61135

View File

@ -18,6 +18,7 @@ import time
import subprocess
import json
import signal
from contextlib import contextmanager
# Windows-spezifische Fixes früh importieren (sichere Version)
if os.name == 'nt':
@ -4110,33 +4111,159 @@ def get_printer_status_summary():
@app.route("/api/printers/cache/clear", methods=["POST"])
@login_required
def clear_printer_cache():
"""Löscht den Drucker-Cache für den aktuellen Benutzer."""
"""
Löscht den Drucker-Cache für eine Aktualisierung.
"""
try:
cache_keys = [
f"online_printers_{current_user.id}",
f"live_printer_status_{current_user.id}",
f"printer_summary_{current_user.id}"
]
# Invalidate model cache for printers
from models import invalidate_model_cache
invalidate_model_cache("Printer")
cleared_count = 0
for key in cache_keys:
if key in session:
del session[key]
cleared_count += 1
timestamp_key = f"{key}_timestamp"
if timestamp_key in session:
del session[timestamp_key]
# Clear any additional printer-specific caches
# Hier können Sie weitere Cache-Löschungen hinzufügen
printers_logger.info(f"Drucker-Cache geleert von Benutzer {current_user.name}")
return jsonify({
"message": f"Cache erfolgreich geleert ({cleared_count} Einträge)",
"cleared_keys": cleared_count
"success": True,
"message": "Drucker-Cache erfolgreich geleert"
})
except Exception as e:
printers_logger.error(f"Fehler beim Leeren des Drucker-Caches: {str(e)}")
return jsonify({
"error": f"Fehler beim Löschen des Cache: {str(e)}"
"success": False,
"error": "Fehler beim Leeren des Caches",
"details": str(e)
}), 500
@app.route("/api/printers/monitor/live-status", methods=["GET"])
@login_required
@limit_requests("printer_monitor_live", 60, 5) # 5 Anfragen pro Minute
def get_live_printer_monitor_status():
"""
Live-Druckerstatus über den neuen PrinterMonitor mit Session-Caching.
"""
try:
use_cache = request.args.get('use_cache', 'true').lower() == 'true'
printers_logger.info(f"Live-Druckerstatus angefordert von {current_user.name} (Cache: {use_cache})")
# Drucker-Status über Monitor abrufen
status_dict = printer_monitor.get_live_printer_status(use_session_cache=use_cache)
# Zusätzliche Statistiken hinzufügen
summary = printer_monitor.get_printer_summary()
response_data = {
"success": True,
"printers": status_dict,
"summary": summary,
"cache_used": use_cache,
"timestamp": datetime.now().isoformat(),
"total_printers": len(status_dict)
}
printers_logger.info(f"Live-Status für {len(status_dict)} Drucker zurückgegeben")
return jsonify(response_data)
except Exception as e:
printers_logger.error(f"Fehler beim Abrufen des Live-Druckerstatus: {str(e)}")
return jsonify({
"success": False,
"error": "Fehler beim Abrufen des Live-Status",
"details": str(e),
"printers": {},
"summary": {"total": 0, "online": 0, "offline": 0}
}), 500
@app.route("/api/printers/monitor/summary", methods=["GET"])
@login_required
@limit_requests("printer_monitor_summary", 30, 10) # 10 Anfragen pro 30 Sekunden
def get_printer_monitor_summary():
"""
Schnelle Zusammenfassung des Druckerstatus ohne vollständige Details.
"""
try:
summary = printer_monitor.get_printer_summary()
return jsonify({
"success": True,
"summary": summary,
"timestamp": datetime.now().isoformat()
})
except Exception as e:
printers_logger.error(f"Fehler beim Abrufen der Drucker-Zusammenfassung: {str(e)}")
return jsonify({
"success": False,
"error": "Fehler beim Abrufen der Zusammenfassung",
"summary": {"total": 0, "online": 0, "offline": 0}
}), 500
@app.route("/api/printers/monitor/clear-cache", methods=["POST"])
@login_required
@limit_requests("printer_monitor_cache", 120, 3) # 3 Anfragen pro 2 Minuten
def clear_printer_monitor_cache():
"""
Löscht alle Caches des Drucker-Monitors.
"""
try:
printer_monitor.clear_all_caches()
printers_logger.info(f"Drucker-Monitor-Cache geleert von Benutzer {current_user.name}")
return jsonify({
"success": True,
"message": "Drucker-Monitor-Cache erfolgreich geleert"
})
except Exception as e:
printers_logger.error(f"Fehler beim Leeren des Drucker-Monitor-Caches: {str(e)}")
return jsonify({
"success": False,
"error": "Fehler beim Leeren des Monitor-Caches",
"details": str(e)
}), 500
@app.route("/api/printers/monitor/initialize-outlets", methods=["POST"])
@login_required
@admin_required
@limit_requests("printer_monitor_init", 300, 2) # 2 Anfragen pro 5 Minuten
def initialize_printer_outlets():
"""
Initialisiert alle Drucker-Steckdosen (schaltet sie aus für einheitlichen Zustand).
Nur für Administratoren.
"""
try:
printers_logger.info(f"Steckdosen-Initialisierung gestartet von Admin {current_user.name}")
# Steckdosen initialisieren
results = printer_monitor.initialize_all_outlets_on_startup()
success_count = sum(1 for success in results.values() if success)
total_count = len(results)
return jsonify({
"success": True,
"message": f"Steckdosen-Initialisierung abgeschlossen: {success_count}/{total_count} erfolgreich",
"results": results,
"statistics": {
"total": total_count,
"successful": success_count,
"failed": total_count - success_count
}
})
except Exception as e:
printers_logger.error(f"Fehler bei Steckdosen-Initialisierung: {str(e)}")
return jsonify({
"success": False,
"error": "Fehler bei der Steckdosen-Initialisierung",
"details": str(e)
}), 500
# ===== FEHLENDE ADMIN-API-ENDPUNKTE =====
@app.route('/api/admin/cache/clear', methods=['POST'])