"Refactor app logic using Conventional Commits format (feat)"
This commit is contained in:
@@ -18,6 +18,7 @@ import time
|
|||||||
import subprocess
|
import subprocess
|
||||||
import json
|
import json
|
||||||
import signal
|
import signal
|
||||||
|
from contextlib import contextmanager
|
||||||
|
|
||||||
# Windows-spezifische Fixes früh importieren (sichere Version)
|
# Windows-spezifische Fixes früh importieren (sichere Version)
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
@@ -4110,33 +4111,159 @@ def get_printer_status_summary():
|
|||||||
@app.route("/api/printers/cache/clear", methods=["POST"])
|
@app.route("/api/printers/cache/clear", methods=["POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def clear_printer_cache():
|
def clear_printer_cache():
|
||||||
"""Löscht den Drucker-Cache für den aktuellen Benutzer."""
|
"""
|
||||||
|
Löscht den Drucker-Cache für eine Aktualisierung.
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
cache_keys = [
|
# Invalidate model cache for printers
|
||||||
f"online_printers_{current_user.id}",
|
from models import invalidate_model_cache
|
||||||
f"live_printer_status_{current_user.id}",
|
invalidate_model_cache("Printer")
|
||||||
f"printer_summary_{current_user.id}"
|
|
||||||
]
|
|
||||||
|
|
||||||
cleared_count = 0
|
# Clear any additional printer-specific caches
|
||||||
for key in cache_keys:
|
# Hier können Sie weitere Cache-Löschungen hinzufügen
|
||||||
if key in session:
|
|
||||||
del session[key]
|
printers_logger.info(f"Drucker-Cache geleert von Benutzer {current_user.name}")
|
||||||
cleared_count += 1
|
|
||||||
timestamp_key = f"{key}_timestamp"
|
|
||||||
if timestamp_key in session:
|
|
||||||
del session[timestamp_key]
|
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"message": f"Cache erfolgreich geleert ({cleared_count} Einträge)",
|
"success": True,
|
||||||
"cleared_keys": cleared_count
|
"message": "Drucker-Cache erfolgreich geleert"
|
||||||
})
|
})
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
printers_logger.error(f"Fehler beim Leeren des Drucker-Caches: {str(e)}")
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"error": f"Fehler beim Löschen des Cache: {str(e)}"
|
"success": False,
|
||||||
|
"error": "Fehler beim Leeren des Caches",
|
||||||
|
"details": str(e)
|
||||||
}), 500
|
}), 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 =====
|
# ===== FEHLENDE ADMIN-API-ENDPUNKTE =====
|
||||||
|
|
||||||
@app.route('/api/admin/cache/clear', methods=['POST'])
|
@app.route('/api/admin/cache/clear', methods=['POST'])
|
||||||
|
Reference in New Issue
Block a user