"Refactor app logic using Conventional Commits format (feat)"
This commit is contained in:
parent
9d51580d6e
commit
0e5ac61135
@ -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'])
|
||||
|
Loading…
x
Reference in New Issue
Block a user