🐛 Backend Optimization: Removed error monitoring configuration files and utilities, refactored logging configuration for improved performance. 🎉
This commit is contained in:
@@ -222,13 +222,6 @@ def format_datetime_filter(value, format='%d.%m.%Y %H:%M'):
|
||||
setup_logging()
|
||||
log_startup_info()
|
||||
|
||||
# Error-Monitoring-System starten
|
||||
try:
|
||||
from utils.logging_config import setup_error_monitoring
|
||||
setup_error_monitoring()
|
||||
except Exception as e:
|
||||
print(f"⚠️ Error-Monitoring konnte nicht gestartet werden: {str(e)}")
|
||||
|
||||
# Logger für verschiedene Komponenten
|
||||
app_logger = get_logger("app")
|
||||
auth_logger = get_logger("auth")
|
||||
@@ -331,23 +324,23 @@ def login():
|
||||
remember_me = False
|
||||
|
||||
try:
|
||||
if is_json_request:
|
||||
if is_json_request:
|
||||
# JSON-Request verarbeiten
|
||||
try:
|
||||
data = request.get_json(force=True) or {}
|
||||
username = data.get("username") or data.get("email")
|
||||
password = data.get("password")
|
||||
remember_me = data.get("remember_me", False)
|
||||
password = data.get("password")
|
||||
remember_me = data.get("remember_me", False)
|
||||
except Exception as json_error:
|
||||
auth_logger.warning(f"JSON-Parsing fehlgeschlagen: {str(json_error)}")
|
||||
# Fallback zu Form-Daten
|
||||
username = request.form.get("email")
|
||||
password = request.form.get("password")
|
||||
remember_me = request.form.get("remember_me") == "on"
|
||||
else:
|
||||
else:
|
||||
# Form-Request verarbeiten
|
||||
username = request.form.get("email")
|
||||
password = request.form.get("password")
|
||||
password = request.form.get("password")
|
||||
remember_me = request.form.get("remember_me") == "on"
|
||||
|
||||
# Zusätzlicher Fallback für verschiedene Feldnamen
|
||||
@@ -2306,16 +2299,16 @@ def finish_job(job_id):
|
||||
def cancel_job(job_id):
|
||||
"""Bricht einen Job ab."""
|
||||
try:
|
||||
db_session = get_db_session()
|
||||
db_session = get_db_session()
|
||||
job = db_session.query(Job).get(job_id)
|
||||
|
||||
if not job:
|
||||
db_session.close()
|
||||
db_session.close()
|
||||
return jsonify({"error": "Job nicht gefunden"}), 404
|
||||
|
||||
# Prüfen, ob der Job abgebrochen werden kann
|
||||
if job.status not in ["scheduled", "running"]:
|
||||
db_session.close()
|
||||
db_session.close()
|
||||
return jsonify({"error": f"Job kann im Status '{job.status}' nicht abgebrochen werden"}), 400
|
||||
|
||||
# Job als abgebrochen markieren
|
||||
@@ -2327,7 +2320,7 @@ def cancel_job(job_id):
|
||||
from utils.job_scheduler import toggle_plug
|
||||
toggle_plug(job.printer_id, False)
|
||||
|
||||
db_session.commit()
|
||||
db_session.commit()
|
||||
|
||||
job_dict = job.to_dict()
|
||||
db_session.close()
|
||||
@@ -2345,16 +2338,16 @@ def cancel_job(job_id):
|
||||
def start_job(job_id):
|
||||
"""Startet einen Job manuell."""
|
||||
try:
|
||||
db_session = get_db_session()
|
||||
db_session = get_db_session()
|
||||
job = db_session.query(Job).options(joinedload(Job.printer)).get(job_id)
|
||||
|
||||
|
||||
if not job:
|
||||
db_session.close()
|
||||
return jsonify({"error": "Job nicht gefunden"}), 404
|
||||
|
||||
# Prüfen, ob der Job gestartet werden kann
|
||||
if job.status not in ["scheduled", "queued", "waiting_for_printer"]:
|
||||
db_session.close()
|
||||
db_session.close()
|
||||
return jsonify({"error": f"Job kann im Status '{job.status}' nicht gestartet werden"}), 400
|
||||
|
||||
# Drucker einschalten falls verfügbar
|
||||
@@ -2365,7 +2358,7 @@ def start_job(job_id):
|
||||
jobs_logger.info(f"Drucker {job.printer.name} für Job {job_id} eingeschaltet")
|
||||
else:
|
||||
jobs_logger.warning(f"Konnte Drucker {job.printer.name} für Job {job_id} nicht einschalten")
|
||||
except Exception as e:
|
||||
except Exception as e:
|
||||
jobs_logger.warning(f"Fehler beim Einschalten des Druckers für Job {job_id}: {str(e)}")
|
||||
|
||||
# Job als laufend markieren
|
||||
@@ -2405,7 +2398,7 @@ def pause_job(job_id):
|
||||
|
||||
# Prüfen, ob der Job pausiert werden kann
|
||||
if job.status != "running":
|
||||
db_session.close()
|
||||
db_session.close()
|
||||
return jsonify({"error": f"Job kann im Status '{job.status}' nicht pausiert werden"}), 400
|
||||
|
||||
# Drucker ausschalten
|
||||
@@ -2416,7 +2409,7 @@ def pause_job(job_id):
|
||||
jobs_logger.info(f"Drucker {job.printer.name} für Job {job_id} ausgeschaltet (Pause)")
|
||||
else:
|
||||
jobs_logger.warning(f"Konnte Drucker {job.printer.name} für Job {job_id} nicht ausschalten")
|
||||
except Exception as e:
|
||||
except Exception as e:
|
||||
jobs_logger.warning(f"Fehler beim Ausschalten des Druckers für Job {job_id}: {str(e)}")
|
||||
|
||||
# Job als pausiert markieren
|
||||
@@ -2426,7 +2419,7 @@ def pause_job(job_id):
|
||||
db_session.commit()
|
||||
|
||||
job_dict = job.to_dict()
|
||||
db_session.close()
|
||||
db_session.close()
|
||||
|
||||
jobs_logger.info(f"Job {job_id} pausiert von Benutzer {current_user.id}")
|
||||
return jsonify({
|
||||
@@ -2465,7 +2458,7 @@ def resume_job(job_id):
|
||||
jobs_logger.info(f"Drucker {job.printer.name} für Job {job_id} eingeschaltet (Resume)")
|
||||
else:
|
||||
jobs_logger.warning(f"Konnte Drucker {job.printer.name} für Job {job_id} nicht einschalten")
|
||||
except Exception as e:
|
||||
except Exception as e:
|
||||
jobs_logger.warning(f"Fehler beim Einschalten des Druckers für Job {job_id}: {str(e)}")
|
||||
|
||||
# Job als laufend markieren
|
||||
@@ -4526,7 +4519,7 @@ if __name__ == "__main__":
|
||||
os.environ['FLASK_ENV'] = 'development'
|
||||
os.environ['PYTHONIOENCODING'] = 'utf-8'
|
||||
os.environ['PYTHONUTF8'] = '1'
|
||||
|
||||
|
||||
# Windows-spezifisches Signal-Handling für ordnungsgemäßes Shutdown
|
||||
def signal_handler(sig, frame):
|
||||
"""Signal-Handler für ordnungsgemäßes Shutdown."""
|
||||
@@ -4534,7 +4527,7 @@ if __name__ == "__main__":
|
||||
try:
|
||||
# Queue Manager stoppen
|
||||
app_logger.info("🔄 Beende Queue Manager...")
|
||||
stop_queue_manager()
|
||||
stop_queue_manager()
|
||||
|
||||
# Scheduler stoppen falls aktiviert
|
||||
if SCHEDULER_ENABLED and scheduler:
|
||||
@@ -4590,15 +4583,15 @@ if __name__ == "__main__":
|
||||
|
||||
|
||||
# Signal-Handler registrieren (Windows-kompatibel)
|
||||
if os.name == 'nt': # Windows
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
if os.name == 'nt': # Windows
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
# Zusätzlich für Flask-Development-Server
|
||||
signal.signal(signal.SIGBREAK, signal_handler)
|
||||
else: # Unix/Linux
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
signal.signal(signal.SIGHUP, signal_handler)
|
||||
signal.signal(signal.SIGBREAK, signal_handler)
|
||||
else: # Unix/Linux
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
signal.signal(signal.SIGHUP, signal_handler)
|
||||
|
||||
try:
|
||||
# Datenbank initialisieren
|
||||
@@ -4606,24 +4599,24 @@ if __name__ == "__main__":
|
||||
create_initial_admin()
|
||||
|
||||
# Template-Hilfsfunktionen registrieren
|
||||
register_template_helpers(app)
|
||||
register_template_helpers(app)
|
||||
|
||||
# Drucker-Monitor Steckdosen-Initialisierung beim Start
|
||||
try:
|
||||
app_logger.info("🖨️ Starte automatische Steckdosen-Initialisierung...")
|
||||
initialization_results = printer_monitor.initialize_all_outlets_on_startup()
|
||||
|
||||
if initialization_results:
|
||||
success_count = sum(1 for success in initialization_results.values() if success)
|
||||
total_count = len(initialization_results)
|
||||
initialization_results = printer_monitor.initialize_all_outlets_on_startup()
|
||||
|
||||
if initialization_results:
|
||||
success_count = sum(1 for success in initialization_results.values() if success)
|
||||
total_count = len(initialization_results)
|
||||
app_logger.info(f"✅ Steckdosen-Initialisierung: {success_count}/{total_count} Drucker erfolgreich")
|
||||
|
||||
if success_count < total_count:
|
||||
app_logger.warning(f"⚠️ {total_count - success_count} Drucker konnten nicht initialisiert werden")
|
||||
else:
|
||||
|
||||
if success_count < total_count:
|
||||
app_logger.warning(f"⚠️ {total_count - success_count} Drucker konnten nicht initialisiert werden")
|
||||
else:
|
||||
app_logger.info("ℹ️ Keine Drucker zur Initialisierung gefunden")
|
||||
|
||||
except Exception as e:
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ Fehler bei automatischer Steckdosen-Initialisierung: {str(e)}")
|
||||
|
||||
# Queue-Manager für automatische Drucker-Überwachung starten
|
||||
@@ -4666,15 +4659,15 @@ if __name__ == "__main__":
|
||||
# Connection-Pool ordnungsgemäß schließen
|
||||
engine.dispose()
|
||||
app_logger.info("✅ Finales Datenbank-Cleanup abgeschlossen")
|
||||
|
||||
except Exception as e:
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ Fehler beim finalen Datenbank-Cleanup: {str(e)}")
|
||||
|
||||
atexit.register(cleanup_database)
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"❌ Fehler beim Starten des Queue-Managers: {str(e)}")
|
||||
else:
|
||||
else:
|
||||
app_logger.info("🔄 Debug-Modus: Queue Manager deaktiviert für Entwicklung")
|
||||
|
||||
# Scheduler starten (falls aktiviert)
|
||||
@@ -4682,7 +4675,7 @@ if __name__ == "__main__":
|
||||
try:
|
||||
scheduler.start()
|
||||
app_logger.info("Job-Scheduler gestartet")
|
||||
except Exception as e:
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler beim Starten des Schedulers: {str(e)}")
|
||||
|
||||
if debug_mode:
|
||||
@@ -4703,28 +4696,28 @@ if __name__ == "__main__":
|
||||
run_kwargs["passthrough_errors"] = False
|
||||
app_logger.info("Windows-Debug-Modus: Auto-Reload deaktiviert")
|
||||
|
||||
app.run(**run_kwargs)
|
||||
app.run(**run_kwargs)
|
||||
else:
|
||||
# Produktions-Modus: HTTPS auf Port 443
|
||||
ssl_context = get_ssl_context()
|
||||
|
||||
if ssl_context:
|
||||
app_logger.info("Starte HTTPS-Server auf 0.0.0.0:443")
|
||||
app.run(
|
||||
app.run(
|
||||
host="0.0.0.0",
|
||||
port=443,
|
||||
debug=False,
|
||||
ssl_context=ssl_context,
|
||||
threaded=True
|
||||
)
|
||||
port=443,
|
||||
debug=False,
|
||||
ssl_context=ssl_context,
|
||||
threaded=True
|
||||
)
|
||||
else:
|
||||
app_logger.info("Starte HTTP-Server auf 0.0.0.0:8080")
|
||||
app.run(
|
||||
app.run(
|
||||
host="0.0.0.0",
|
||||
port=8080,
|
||||
debug=False,
|
||||
threaded=True
|
||||
)
|
||||
port=8080,
|
||||
debug=False,
|
||||
threaded=True
|
||||
)
|
||||
except KeyboardInterrupt:
|
||||
app_logger.info("🔄 Tastatur-Unterbrechung empfangen - beende Anwendung...")
|
||||
signal_handler(signal.SIGINT, None)
|
||||
@@ -4866,54 +4859,4 @@ def get_printers():
|
||||
return jsonify({
|
||||
"error": f"Fehler beim Laden der Drucker: {str(e)}",
|
||||
"printers": []
|
||||
}), 500
|
||||
|
||||
@app.route('/api/admin/error-monitor/stats', methods=['GET'])
|
||||
@admin_required
|
||||
def get_error_monitor_stats():
|
||||
"""Gibt Statistiken des Error-Monitoring-Systems zurück."""
|
||||
try:
|
||||
from utils.error_monitor import get_error_monitor
|
||||
|
||||
monitor = get_error_monitor()
|
||||
stats = monitor.get_stats()
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"stats": stats
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler beim Abrufen der Error-Monitor-Statistiken: {str(e)}")
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": str(e)
|
||||
}), 500
|
||||
|
||||
@app.route('/api/admin/error-monitor/force-report', methods=['POST'])
|
||||
@admin_required
|
||||
def force_error_report():
|
||||
"""Erzwingt das sofortige Senden eines Error-Reports (für Tests)."""
|
||||
try:
|
||||
from utils.error_monitor import get_error_monitor
|
||||
|
||||
monitor = get_error_monitor()
|
||||
success = monitor.force_report()
|
||||
|
||||
if success:
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "Error Report erfolgreich versendet"
|
||||
})
|
||||
else:
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": "Report konnte nicht versendet werden"
|
||||
}), 500
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler beim Erzwingen des Error-Reports: {str(e)}")
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"error": str(e)
|
||||
}), 500
|
Reference in New Issue
Block a user