🎉 Fix printer monitor complete issue & logs updates 📝
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user