🎉 Fix printer monitor complete issue & logs updates 📝

This commit is contained in:
2025-06-12 08:44:29 +02:00
parent 79f4682b20
commit 985bd32d95
30 changed files with 1895 additions and 60 deletions

View File

@@ -73,6 +73,90 @@ def get_live_printer_status():
"message": str(e)
}), 500
@printers_blueprint.route("/status", methods=["GET"])
@login_required
@measure_execution_time(logger=printers_logger, task_name="API-Drucker-Status-Abfrage")
def get_printer_status():
"""
Liefert den aktuellen Status aller Drucker.
Dieser Endpunkt ist kompatibel mit dem Frontend printer_monitor.js
Returns:
JSON mit Status aller Drucker
"""
printers_logger.info(f"🔄 Status-Abfrage von Benutzer {current_user.name} (ID: {current_user.id})")
try:
# Drucker aus Datenbank holen
db_session = get_db_session()
printers = db_session.query(Printer).all()
# Status-Daten für jeden Drucker sammeln
printer_data = []
status_summary = {
'total': len(printers),
'online': 0,
'offline': 0,
'standby': 0,
'unreachable': 0,
'unconfigured': 0
}
for printer in printers:
# Basis-Drucker-Daten
printer_info = {
'id': printer.id,
'name': printer.name,
'model': printer.model,
'location': printer.location,
'status': printer.status or 'offline',
'plug_ip': printer.plug_ip,
'has_plug': bool(printer.plug_ip and printer.plug_username and printer.plug_password),
'last_checked': printer.last_checked.isoformat() if printer.last_checked else None,
'created_at': printer.created_at.isoformat() if printer.created_at else None
}
# Status-Zusammenfassung aktualisieren
status = printer_info['status']
if status in status_summary:
status_summary[status] += 1
else:
status_summary['offline'] += 1
# Aktive Jobs zählen
active_jobs = db_session.query(Job).filter(
Job.printer_id == printer.id,
Job.status.in_(["running", "printing", "active", "scheduled"])
).count()
printer_info['active_jobs'] = active_jobs
printer_info['is_busy'] = active_jobs > 0
printer_data.append(printer_info)
db_session.close()
# Antwort mit Status und Zusammenfassung
response = {
"success": True,
"printers": printer_data,
"summary": status_summary,
"timestamp": datetime.now().isoformat()
}
printers_logger.info(f"✅ Status-Abfrage erfolgreich: {len(printer_data)} Drucker")
return jsonify(response)
except Exception as e:
printers_logger.error(f"❌ Fehler bei Status-Abfrage: {str(e)}")
if 'db_session' in locals():
db_session.close()
return jsonify({
"success": False,
"error": "Fehler bei Abfrage des Druckerstatus",
"message": str(e)
}), 500
@printers_blueprint.route("/control/<int:printer_id>/power", methods=["POST"])
@login_required
@require_permission(Permission.CONTROL_PRINTER) # Verwende die bereits vorhandene Berechtigung