From 78a9f9545ff168cf7dc779a216917502eb6d5468 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Thu, 19 Jun 2025 22:34:54 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Feat:=20Enhanced=20Printer=20Man?= =?UTF-8?q?agement=20System?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit introduces a comprehensive overhaul of the printer management system, enhancing its functionality and user experience. The following changes have been implemented: - backend/blueprints/__pycache__/admin_unified.cpython-311.pyc: Updated for improved admin interface integration. - backend/blueprints/__pycache__/drucker_steuerung.cpython-311.pyc --- .../__pycache__/admin_unified.cpython-311.pyc | Bin 158865 -> 159041 bytes .../drucker_steuerung.cpython-311.pyc | Bin 0 -> 17542 bytes .../__pycache__/printers.cpython-311.pyc | Bin 83223 -> 83477 bytes .../__pycache__/tapo_control.cpython-311.pyc | Bin 26166 -> 26711 bytes backend/blueprints/admin_unified.py | 12 +- backend/blueprints/drucker_steuerung.py | 6 +- backend/blueprints/printers.py | 25 ++-- backend/blueprints/tapo_control.py | 30 ++-- backend/database/myp.db | Bin 237568 -> 237568 bytes backend/logs/app/app.log | 140 ++++++++++++++++++ .../logs/data_management/data_management.log | 12 ++ .../drucker_steuerung/drucker_steuerung.log | 3 + .../energy_monitoring/energy_monitoring.log | 4 + .../hardware_integration.log | 7 + .../job_queue_system/job_queue_system.log | 18 +++ .../monitoring_analytics.log | 8 + backend/logs/permissions/permissions.log | 3 + backend/logs/scheduler/scheduler.log | 13 ++ .../logs/security_suite/security_suite.log | 15 ++ backend/logs/startup/startup.log | 28 ++++ .../utilities_collection.log | 14 ++ .../job_queue_system.cpython-311.pyc | Bin 28554 -> 28904 bytes .../__pycache__/job_scheduler.cpython-311.pyc | Bin 36534 -> 37019 bytes backend/utils/job_queue_system.py | 18 ++- backend/utils/job_scheduler.py | 14 +- 25 files changed, 332 insertions(+), 38 deletions(-) create mode 100644 backend/blueprints/__pycache__/drucker_steuerung.cpython-311.pyc create mode 100644 backend/logs/drucker_steuerung/drucker_steuerung.log diff --git a/backend/blueprints/__pycache__/admin_unified.cpython-311.pyc b/backend/blueprints/__pycache__/admin_unified.cpython-311.pyc index f574dbea36a291419ddfcf3e162fb9a832f4115a..6c38485e88433bb8af77ff37ebd32f79d95baf4e 100644 GIT binary patch delta 4570 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 diff --git a/backend/blueprints/__pycache__/drucker_steuerung.cpython-311.pyc b/backend/blueprints/__pycache__/drucker_steuerung.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb44f6868ddf81e6a3d37598d2232883655fe7d7 GIT binary patch literal 17542 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 delta 5360 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 UE|*T%K!$Z1nId5umSgXK0d{t97XSbN diff --git a/backend/blueprints/__pycache__/tapo_control.cpython-311.pyc b/backend/blueprints/__pycache__/tapo_control.cpython-311.pyc index 01563bf68777ad1e8837204c58c848a58cac3f8c..b75935b8c63f05fa51b9ad9751462eb584d0f739 100644 GIT binary patch delta 5986 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 delta 5655 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 z zi=x?15k<4zks@Sn6d4Apgd4W7Fi}1G%TrLh&!Ou6>i}y4bV4WYuLM&Pv<%t=;hb?H8ZY&_*sE~6H)wt)&1B1Qs?l6VlXAg79I$ud z7N9wgqIXrXsuI(p(vJ-nFPC7mWzA?)QsF^3$i-<6HxC=8&81!^e7SE0)4~t?T0CU$ zLi^GO?5XK8^p6{LDevMeu(HUhkv(ahy3zbqe;H=uT>prqo7Q1YRAg|3)dSl?FW@bw zN>d{z62tM4$*GZv;X=RDd?Xd0SZte=qiCo!!G!_0HI8IZP!c3LL9i13exPiH&gi<-{`wHs0MOl?H;OTKF{j=xCe#|fS% z7(qzt5f-AD1z_hkyWxG5y+U#Ok1)BdhBZRPqc`Bt_Vq?zDCdh_irn(`@zBb`{h#_;mP3-H0AMC8<4{4x&Xj3-0>-((v7^R$gQRDYOzzNvd4`B52 zvH=4~%4i@o=wKQ(!1fQWK&oO-IecTV%A;AfaoW=w3`GY8ByN~b?Y6;z!D9HI!BV`# zwdXXR3GNR11v&vx*Z<2sCX{@-XG9XGMT|0c21nSpcZ((8%;VeL52Nqyb?>7vQYHx= zBX}SpD3BCtner}KK@`QuDalvAC85NpCPtLtXM%;So`kAL*4x$~xjkrAaOdKb?-Kms z82W>8qlSzcJZju%m&DD(qJ@fPK3eh>&$j&RFg%t}>~ZA-wECFh=UJ=>RQGDK6_08^ zduZ7BIfZT6(#>6Nu}8GrjL49l(Y8mrg_$mu-oS|NZbkW()@U&f*SZb8jlyhExU{!U zn5$yQ%+-m#jqo4)n%OV2bwj(DcWIzJ*frsKf$eg^$NRs`^3>D;t84kW!l+g!6E?MP z9oUb()4c=3On{+-HHc>phOnP?z}17>3jM5I?PtpmMex`+e5lHzE@+m#p?d!~ymaUp z_7`9uUX9&T-*BVtb<}MS+WsiFQOEPpbXT`F)otqYRNoa2AJjq37h$bPD8upO_`{AM z_6Pd2g4;gCJAX%Rt0=h5i;3@ofzQ8UT-IV`fB*S$7Tt_~v)IEm+~oixx~4ti6=pm{ z&r~p?y-^=BA9Wjg8ii}e)!Q5Q4A{!t(H z{pr!N(h^cx5$3h=gdCel=6eP^yf^A)VfgWA`A(Tk=)|g?q14Vh-z>gMviAun8Ws9B z^{k=P5*0wWr|-g9rzT<>l#h_b59gA2@{!-NwEvV__JdF5w+%f!Yq`S_!rhn+-iv9q zs%STSKNiwp%wr+=WXvP2$+7l3+H#b2fjs8Zy2;QDFN~FmM7G1X z$C|Ys5_<4%ht!^9ZFf{bC;azVvwj;R-8M$b;=EE79fCdM0c{IgdxvX*>2Z%pc}CdCDCs9?f6Q)kCX`NM{GEvv)&h|QgwCy4=G$Tb^rhX diff --git a/backend/blueprints/admin_unified.py b/backend/blueprints/admin_unified.py index d36be1dce..f23c0b579 100644 --- a/backend/blueprints/admin_unified.py +++ b/backend/blueprints/admin_unified.py @@ -2620,7 +2620,8 @@ def tapo_monitoring(): # Aktueller Status aller Tapo-Steckdosen abrufen try: - from utils.hardware_integration import tapo_controller + from utils.hardware_integration import get_tapo_controller + tapo_controller = get_tapo_controller() tapo_available = True # Status für jeden Drucker mit Tapo-Steckdose abrufen @@ -2749,7 +2750,8 @@ def api_admin_bulk_tapo_control(): # Tapo-Controller laden try: - from utils.hardware_integration import tapo_controller + from utils.hardware_integration import get_tapo_controller + tapo_controller = get_tapo_controller() except Exception as e: return jsonify({ 'success': False, @@ -2870,7 +2872,8 @@ def api_admin_tapo_health_check(): try: # Tapo-Controller laden try: - from utils.hardware_integration import tapo_controller + from utils.hardware_integration import get_tapo_controller + tapo_controller = get_tapo_controller() tapo_available = True except Exception as e: return jsonify({ @@ -3060,7 +3063,8 @@ def api_admin_configure_printer_tapo(): test_result = None if test_connection and printer.plug_ip: try: - from utils.hardware_integration import tapo_controller + from utils.hardware_integration import get_tapo_controller + tapo_controller = get_tapo_controller() test_result = tapo_controller.test_connection( printer.plug_ip, username=printer.plug_username, diff --git a/backend/blueprints/drucker_steuerung.py b/backend/blueprints/drucker_steuerung.py index 1c3079cac..6910d9b6f 100644 --- a/backend/blueprints/drucker_steuerung.py +++ b/backend/blueprints/drucker_steuerung.py @@ -131,7 +131,7 @@ def drucker_details(drucker_id): @drucker_blueprint.route("/einschalten/", methods=["POST"]) @login_required -@require_permission(Permission.CAN_CONTROL_PRINTERS) +@require_permission(Permission.CONTROL_PRINTER) def drucker_einschalten(drucker_id): """ Schaltet einen Drucker über seine Tapo-Steckdose EIN. @@ -163,7 +163,7 @@ def drucker_einschalten(drucker_id): @drucker_blueprint.route("/ausschalten/", methods=["POST"]) @login_required -@require_permission(Permission.CAN_CONTROL_PRINTERS) +@require_permission(Permission.CONTROL_PRINTER) def drucker_ausschalten(drucker_id): """ Schaltet einen Drucker über seine Tapo-Steckdose AUS. @@ -195,7 +195,7 @@ def drucker_ausschalten(drucker_id): @drucker_blueprint.route("/toggle/", methods=["POST"]) @login_required -@require_permission(Permission.CAN_CONTROL_PRINTERS) +@require_permission(Permission.CONTROL_PRINTER) def drucker_toggle(drucker_id): """ Wechselt den Status eines Druckers (Ein <-> Aus). diff --git a/backend/blueprints/printers.py b/backend/blueprints/printers.py index 2b6843bb5..a37606abe 100644 --- a/backend/blueprints/printers.py +++ b/backend/blueprints/printers.py @@ -182,10 +182,12 @@ def get_live_printer_status(): try: # Live-Status über den PrinterMonitor abrufen - status_data = printer_monitor.get_live_printer_status(use_session_cache=use_cache) + monitor = get_printer_monitor() + status_data = monitor.get_live_printer_status(use_session_cache=use_cache) # Zusammenfassung der Druckerstatus erstellen - summary = printer_monitor.get_printer_summary() + monitor = get_printer_monitor() + summary = monitor.get_printer_summary() # Antwort mit Status und Zusammenfassung response = { @@ -448,7 +450,8 @@ def control_printer_power(printer_id): db_session.commit() # Cache leeren, damit neue Status-Abfragen aktuell sind - printer_monitor.clear_all_caches() + monitor = get_printer_monitor() + monitor.clear_all_caches() printers_logger.info(f"✅ {action.upper()}: Drucker {printer.name} erfolgreich {message}") @@ -494,10 +497,10 @@ def force_refresh_all_printer_status(): try: # Hardware Integration Monitor für Force-Refresh verwenden - from utils.hardware_integration import printer_monitor # Force-Network-Refresh durchführen - refresh_results = printer_monitor.force_network_refresh() + monitor = get_printer_monitor() + refresh_results = monitor.force_network_refresh() if refresh_results.get("success", False): printers_logger.info(f"✅ Force-Refresh erfolgreich: {refresh_results.get('printers_refreshed', 0)} Drucker aktualisiert") @@ -792,7 +795,8 @@ def test_socket_control(printer_id): db_session.commit() # Cache leeren, damit neue Status-Abfragen aktuell sind - printer_monitor.clear_all_caches() + monitor = get_printer_monitor() + monitor.clear_all_caches() # Test-Eintrag für Audit-Log printers_logger.info(f"🧪 TEST DURCHGEFÜHRT: {action.upper()} für {printer.name} | " @@ -1335,7 +1339,8 @@ def mass_tapo_status_check(): # Tapo-Controller laden try: - from utils.hardware_integration import tapo_controller + from utils.hardware_integration import get_tapo_controller + tapo_controller = get_tapo_controller() tapo_available = True except Exception as e: db_session.close() @@ -1512,7 +1517,8 @@ def tapo_configuration_wizard(): # Tapo-Controller laden try: - from utils.hardware_integration import tapo_controller + from utils.hardware_integration import get_tapo_controller + tapo_controller = get_tapo_controller() except Exception as e: return jsonify({ "success": False, @@ -1700,7 +1706,8 @@ def validate_tapo_configuration(printer_id): # Tapo-Controller laden try: - from utils.hardware_integration import tapo_controller + from utils.hardware_integration import get_tapo_controller + tapo_controller = get_tapo_controller() except Exception as e: db_session.close() return jsonify({ diff --git a/backend/blueprints/tapo_control.py b/backend/blueprints/tapo_control.py index b47f9c41d..d22d0aeed 100644 --- a/backend/blueprints/tapo_control.py +++ b/backend/blueprints/tapo_control.py @@ -74,7 +74,8 @@ def tapo_dashboard(): # Status der Steckdose prüfen try: - reachable, status = tapo_controller.check_outlet_status( + controller = get_tapo_controller() + reachable, status = controller.check_outlet_status( tapo_ip, printer_id=printer_id ) @@ -195,7 +196,8 @@ def control_outlet(): # Steckdose schalten state = action == 'on' - success = tapo_controller.toggle_plug(ip, state) + controller = get_tapo_controller() + success = controller.toggle_plug(ip, state) if success: action_text = "eingeschaltet" if state else "ausgeschaltet" @@ -241,7 +243,8 @@ def get_outlet_status(ip): }), 400 # Status prüfen - reachable, status = tapo_controller.check_outlet_status(ip) + controller = get_tapo_controller() + reachable, status = controller.check_outlet_status(ip) return jsonify({ 'success': True, @@ -267,7 +270,8 @@ def discover_outlets(): tapo_logger.info(f"🔍 Starte Tapo-Steckdosen-Erkennung auf Anfrage von {current_user.name}") # Discovery starten - results = tapo_controller.auto_discover_outlets() + controller = get_tapo_controller() + results = controller.auto_discover_outlets() success_count = sum(1 for success in results.values() if success) total_count = len(results) @@ -304,7 +308,8 @@ def test_connection(ip): }), 400 # Verbindung testen - test_result = tapo_controller.test_connection(ip) + controller = get_tapo_controller() + test_result = controller.test_connection(ip) return jsonify({ 'success': True, @@ -342,7 +347,8 @@ def get_all_status(): for printer in printers_with_tapo: try: tapo_logger.debug(f"Prüfe Status für {printer.plug_ip} ({printer.name})") - reachable, status = tapo_controller.check_outlet_status( + controller = get_tapo_controller() + reachable, status = controller.check_outlet_status( printer.plug_ip, printer_id=printer.id ) @@ -431,7 +437,8 @@ def manual_control(): if action == 'status': # Status abfragen - reachable, status = tapo_controller.check_outlet_status(ip) + controller = get_tapo_controller() + reachable, status = controller.check_outlet_status(ip) if reachable: flash(f'Steckdose {ip} ist {status.upper()}', 'success') else: @@ -439,7 +446,8 @@ def manual_control(): else: # Ein/Ausschalten state = action == 'on' - success = tapo_controller.toggle_plug(ip, state) + controller = get_tapo_controller() + success = controller.toggle_plug(ip, state) if success: action_text = "eingeschaltet" if state else "ausgeschaltet" @@ -482,7 +490,8 @@ def control_outlet_form(): # Steckdose schalten state = action == 'on' - success = tapo_controller.toggle_plug(ip, state) + controller = get_tapo_controller() + success = controller.toggle_plug(ip, state) if success: action_text = "eingeschaltet" if state else "ausgeschaltet" @@ -520,7 +529,8 @@ def test_connection_form(): return redirect(url_for('tapo.tapo_dashboard')) # Verbindung testen - test_result = tapo_controller.test_connection(ip) + controller = get_tapo_controller() + test_result = controller.test_connection(ip) if test_result.get('success', False): flash(f'✅ Verbindung zu {ip} erfolgreich!', 'success') diff --git a/backend/database/myp.db b/backend/database/myp.db index 917484a6150f045161257e39f98b5c358562a562..0e5bb742605d08735189179723b90261dd7eb592 100644 GIT binary patch delta 233 zcmZoTz}IkqZ-O-AhKVxHj2kv4JeD&xH!TXy2rNnVD9UoGs)(rY%FN8l)bsF7Gc9$F z^i4J}3(9je()WtAjLb0(bjkNgv?%Zio?Iax!eeY~Wo)5mWMO1(X14i;ypt|JRK(KM z)ZDm{pLKGfzxZSa-yFEOv89Q5BR>mR{1TG5k%@&#BR?}(JjD;8-oV1bvXP$&EdI?e h2X3RKv9amoJpVShfVqL8c~d}J0ApJK)3N~O008sAL*M`a delta 233 zcmZoTz}IkqZ-O-A?1?hYjI%c;JeD)HbhfNCDlf`3GjTN0_jb2%);B5l)^p1#H#hPN zG;lQau<(q`%#TX*@$gA?vy3S5)i=!bo?Iax!ed}*Wn`{rZft61X1Mu=ypt|JRK(Q4 z$kd{dpLKGfzxZSa-yE2@iG_iMWg|ZeSo{)_xS5dwP(3qPJjD;8-o(tvu#uk$EdI?e i2WF#*v7w>i found ('/cbin/C0S1-cernel/C02L2/Dateiverwaltung/nextcloud/core/files/3_Beruf_Ausbildung_und_Schule/IHK-Abschlussprüfung/Projektarbeit-MYP/backend/templates/login.html') +2025-06-19 22:33:49 - [app] app - [INFO] INFO - Locating template 'base.html': + 1: trying loader of application '__main__' + class: jinja2.loaders.FileSystemLoader + encoding: 'utf-8' + followlinks: False + searchpath: + - /cbin/C0S1-cernel/C02L2/Dateiverwaltung/nextcloud/core/files/3_Beruf_Ausbildung_und_Schule/IHK-Abschlussprüfung/Projektarbeit-MYP/backend/templates + -> found ('/cbin/C0S1-cernel/C02L2/Dateiverwaltung/nextcloud/core/files/3_Beruf_Ausbildung_und_Schule/IHK-Abschlussprüfung/Projektarbeit-MYP/backend/templates/base.html') +2025-06-19 22:33:49 - [app] app - [DEBUG] DEBUG - Response: 200 diff --git a/backend/logs/data_management/data_management.log b/backend/logs/data_management/data_management.log index e6955cb52..960d3daf8 100644 --- a/backend/logs/data_management/data_management.log +++ b/backend/logs/data_management/data_management.log @@ -809,3 +809,15 @@ 2025-06-19 22:10:29 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) 2025-06-19 22:26:56 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert 2025-06-19 22:26:56 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:32:29 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-19 22:32:29 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:32:51 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-19 22:32:51 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:11 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-19 22:33:11 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:35 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-19 22:33:35 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:37 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-19 22:33:37 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:37 - [data_management] data_management - [INFO] INFO - ✅ Data Management Module initialisiert +2025-06-19 22:33:37 - [data_management] data_management - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) diff --git a/backend/logs/drucker_steuerung/drucker_steuerung.log b/backend/logs/drucker_steuerung/drucker_steuerung.log new file mode 100644 index 000000000..591f9ef4b --- /dev/null +++ b/backend/logs/drucker_steuerung/drucker_steuerung.log @@ -0,0 +1,3 @@ +2025-06-19 22:33:36 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen +2025-06-19 22:33:37 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen +2025-06-19 22:33:37 - [drucker_steuerung] drucker_steuerung - [INFO] INFO - 🖨️ Drucker-Steuerungs-Blueprint (Backend-Kontrolle) geladen diff --git a/backend/logs/energy_monitoring/energy_monitoring.log b/backend/logs/energy_monitoring/energy_monitoring.log index 180be033a..e99c1c836 100644 --- a/backend/logs/energy_monitoring/energy_monitoring.log +++ b/backend/logs/energy_monitoring/energy_monitoring.log @@ -690,3 +690,7 @@ 2025-06-19 22:08:33 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert 2025-06-19 22:09:27 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert 2025-06-19 22:10:30 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert +2025-06-19 22:33:11 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert +2025-06-19 22:33:36 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert +2025-06-19 22:33:37 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert +2025-06-19 22:33:37 - [energy_monitoring] energy_monitoring - [INFO] INFO - ✅ Energiemonitoring-Blueprint initialisiert diff --git a/backend/logs/hardware_integration/hardware_integration.log b/backend/logs/hardware_integration/hardware_integration.log index bd5525a0e..aa75b90fd 100644 --- a/backend/logs/hardware_integration/hardware_integration.log +++ b/backend/logs/hardware_integration/hardware_integration.log @@ -3306,3 +3306,10 @@ 2025-06-19 22:26:56 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen 2025-06-19 22:27:21 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen 2025-06-19 22:27:21 - [hardware_integration] hardware_integration - [INFO] INFO - 🎯 DruckerSteuerung initialisiert - BACKEND ÜBERNIMMT KONTROLLE +2025-06-19 22:32:09 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-19 22:32:29 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-19 22:32:51 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-19 22:33:11 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-19 22:33:35 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-19 22:33:37 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen +2025-06-19 22:33:37 - [hardware_integration] hardware_integration - [INFO] INFO - 🚀 Hardware Integration (Backend-Kontrolle) erfolgreich geladen diff --git a/backend/logs/job_queue_system/job_queue_system.log b/backend/logs/job_queue_system/job_queue_system.log index 9f2efaf93..8b2da64d3 100644 --- a/backend/logs/job_queue_system/job_queue_system.log +++ b/backend/logs/job_queue_system/job_queue_system.log @@ -1568,3 +1568,21 @@ 2025-06-19 22:26:33 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) 2025-06-19 22:26:56 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert 2025-06-19 22:26:56 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-19 22:32:09 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-19 22:32:09 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-19 22:32:29 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-19 22:32:29 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-19 22:32:51 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-19 22:32:51 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-19 22:33:11 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-19 22:33:11 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-19 22:33:35 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-19 22:33:35 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-19 22:33:36 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) +2025-06-19 22:33:37 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-19 22:33:37 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-19 22:33:37 - [job_queue_system] job_queue_system - [INFO] INFO - ✅ Job & Queue System Module initialisiert +2025-06-19 22:33:37 - [job_queue_system] job_queue_system - [INFO] INFO - 📊 MASSIVE Konsolidierung: 4 Dateien → 1 Datei (75% Reduktion) +2025-06-19 22:33:38 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) +2025-06-19 22:33:38 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestartet (Legacy-Kompatibilität) +2025-06-19 22:33:38 - [job_queue_system] job_queue_system - [INFO] INFO - Queue Manager gestoppt (Legacy-Kompatibilität) diff --git a/backend/logs/monitoring_analytics/monitoring_analytics.log b/backend/logs/monitoring_analytics/monitoring_analytics.log index a66ca998b..158117ed7 100644 --- a/backend/logs/monitoring_analytics/monitoring_analytics.log +++ b/backend/logs/monitoring_analytics/monitoring_analytics.log @@ -805,3 +805,11 @@ 2025-06-19 22:09:27 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) 2025-06-19 22:10:30 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert 2025-06-19 22:10:30 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:11 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-19 22:33:11 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:36 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-19 22:33:36 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:37 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-19 22:33:37 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:37 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - ✅ Monitoring & Analytics Module initialisiert +2025-06-19 22:33:37 - [monitoring_analytics] monitoring_analytics - [INFO] INFO - 📊 MASSIVE Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) diff --git a/backend/logs/permissions/permissions.log b/backend/logs/permissions/permissions.log index aaaaddbc1..d8d9365e0 100644 --- a/backend/logs/permissions/permissions.log +++ b/backend/logs/permissions/permissions.log @@ -403,3 +403,6 @@ WHERE users.role = ?] 2025-06-19 22:08:33 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert 2025-06-19 22:09:27 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert 2025-06-19 22:10:30 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert +2025-06-19 22:33:36 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert +2025-06-19 22:33:37 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert +2025-06-19 22:33:38 - [permissions] permissions - [INFO] INFO - Admin-Berechtigungen korrigiert: 0 erstellt, 0 aktualisiert diff --git a/backend/logs/scheduler/scheduler.log b/backend/logs/scheduler/scheduler.log index dc1a94dd4..ada6b7f4a 100644 --- a/backend/logs/scheduler/scheduler.log +++ b/backend/logs/scheduler/scheduler.log @@ -2399,3 +2399,16 @@ 2025-06-19 22:25:48 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True 2025-06-19 22:26:33 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True 2025-06-19 22:26:56 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-19 22:32:09 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-19 22:32:29 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-19 22:32:51 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-19 22:33:11 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-19 22:33:35 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-19 22:33:36 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-19 22:33:36 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-19 22:33:37 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-19 22:33:37 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-19 22:33:38 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-19 22:33:38 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-19 22:33:38 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-19 22:33:38 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet diff --git a/backend/logs/security_suite/security_suite.log b/backend/logs/security_suite/security_suite.log index 52a99edd6..8657d3335 100644 --- a/backend/logs/security_suite/security_suite.log +++ b/backend/logs/security_suite/security_suite.log @@ -1213,3 +1213,18 @@ 2025-06-19 22:26:33 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) 2025-06-19 22:26:56 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert 2025-06-19 22:26:56 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:32:29 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-19 22:32:29 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:32:51 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-19 22:32:51 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:11 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-19 22:33:11 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:35 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-19 22:33:35 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:36 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert +2025-06-19 22:33:37 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-19 22:33:37 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:37 - [security_suite] security_suite - [INFO] INFO - ✅ Security Suite Module initialisiert +2025-06-19 22:33:37 - [security_suite] security_suite - [INFO] INFO - 📊 Massive Konsolidierung: 3 Dateien → 1 Datei (67% Reduktion) +2025-06-19 22:33:37 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert +2025-06-19 22:33:37 - [security_suite] security_suite - [INFO] INFO - 🔒 Security Suite initialisiert diff --git a/backend/logs/startup/startup.log b/backend/logs/startup/startup.log index 361faf011..9cb3680db 100644 --- a/backend/logs/startup/startup.log +++ b/backend/logs/startup/startup.log @@ -3233,3 +3233,31 @@ 2025-06-19 22:10:30 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: /cbin/C0S1-cernel/C02L2/Dateiverwaltung/nextcloud/core/files/3_Beruf_Ausbildung_und_Schule/IHK-Abschlussprüfung/Projektarbeit-MYP/backend 2025-06-19 22:10:30 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-19T22:10:30.365260 2025-06-19 22:10:30 - [startup] startup - [INFO] INFO - ================================================== +2025-06-19 22:33:11 - [startup] startup - [INFO] INFO - ================================================== +2025-06-19 22:33:11 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-19 22:33:11 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.11.2 (main, Mar 05 2023, 19:08:04) [GCC] +2025-06-19 22:33:11 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: posix (linux) +2025-06-19 22:33:11 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: /cbin/C0S1-cernel/C02L2/Dateiverwaltung/nextcloud/core/files/3_Beruf_Ausbildung_und_Schule/IHK-Abschlussprüfung/Projektarbeit-MYP/backend +2025-06-19 22:33:11 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-19T22:33:11.712253 +2025-06-19 22:33:11 - [startup] startup - [INFO] INFO - ================================================== +2025-06-19 22:33:36 - [startup] startup - [INFO] INFO - ================================================== +2025-06-19 22:33:36 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-19 22:33:36 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.11.2 (main, Mar 05 2023, 19:08:04) [GCC] +2025-06-19 22:33:36 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: posix (linux) +2025-06-19 22:33:36 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: /cbin/C0S1-cernel/C02L2/Dateiverwaltung/nextcloud/core/files/3_Beruf_Ausbildung_und_Schule/IHK-Abschlussprüfung/Projektarbeit-MYP/backend +2025-06-19 22:33:36 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-19T22:33:36.031603 +2025-06-19 22:33:36 - [startup] startup - [INFO] INFO - ================================================== +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - ================================================== +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.11.2 (main, Mar 05 2023, 19:08:04) [GCC] +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: posix (linux) +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: /cbin/C0S1-cernel/C02L2/Dateiverwaltung/nextcloud/core/files/3_Beruf_Ausbildung_und_Schule/IHK-Abschlussprüfung/Projektarbeit-MYP/backend +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-19T22:33:37.665748 +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - ================================================== +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - ================================================== +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet... +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.11.2 (main, Mar 05 2023, 19:08:04) [GCC] +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: posix (linux) +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: /cbin/C0S1-cernel/C02L2/Dateiverwaltung/nextcloud/core/files/3_Beruf_Ausbildung_und_Schule/IHK-Abschlussprüfung/Projektarbeit-MYP/backend +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-19T22:33:37.933650 +2025-06-19 22:33:37 - [startup] startup - [INFO] INFO - ================================================== diff --git a/backend/logs/utilities_collection/utilities_collection.log b/backend/logs/utilities_collection/utilities_collection.log index d06b5cbc4..88a263c33 100644 --- a/backend/logs/utilities_collection/utilities_collection.log +++ b/backend/logs/utilities_collection/utilities_collection.log @@ -1023,3 +1023,17 @@ 2025-06-19 22:26:55 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) 2025-06-19 22:27:21 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert 2025-06-19 22:27:21 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-19 22:32:09 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-19 22:32:09 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-19 22:32:29 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-19 22:32:29 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-19 22:32:51 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-19 22:32:51 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-19 22:33:10 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-19 22:33:10 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-19 22:33:35 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-19 22:33:35 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-19 22:33:36 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-19 22:33:36 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) +2025-06-19 22:33:37 - [utilities_collection] utilities_collection - [INFO] INFO - ✅ Utilities Collection initialisiert +2025-06-19 22:33:37 - [utilities_collection] utilities_collection - [INFO] INFO - 🚨 ALLERLETZTE MEGA-Konsolidierung: 12+ Dateien → 1 Datei (90%+ Reduktion) diff --git a/backend/utils/__pycache__/job_queue_system.cpython-311.pyc b/backend/utils/__pycache__/job_queue_system.cpython-311.pyc index 746d9fb7800d8a014443f133581eceef6be0f816..b12b6cbbd469da196990f3f649f794de4fed3c54 100644 GIT binary patch delta 1845 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 GrQlzZOTcmf delta 1499 zcmZuwQA|@;7(VCTUTN>`y|gK%1q5ksrz zVc=XeL9G6XSw_s5OXOiQ%rw~&pV&h1fnbo4EJLGjJZ>fN!Ne@?T&^wcZBKH~J^z3H z??3d235~g{cMP%%iJ1^Xo9}5c#b;1lUl>cxoG+*6ucVLf6rKfCgY+!f& zX$qmFIcZVNvR^W*Wjz)RsSTAOmL1*?G}LB!8Y{RTQ;;@WK0tt6ma}`IW{^jLO2y zmtt*se(93U5D`?JJ94LH0R{T5E;+EEIB5z#n=Hwhcq20U3JJblhhz2X*wIaW`4PIR(d36$AJvyhA z#-4RfM@pp9j?)G~?^4~5H zGO9n+j+7R75~&uHmaKzt#{o`O?aYNp_T#9CgZ`qsxlh_!Sm8rVE&=)Uq1|_>_UF37 ztAUZUO=*SDAveq<%gCGDtkc_&ZAvR3e{F2gR}Z^}Z<|)BcnsbS&oFY390}7SBC|@z z&!11f8aaS*9e78h!m7159#iD_rJgI7`XlgYv&}tXp>L0;w|?D@%WL=pcpYi8hO377^`>H6*K@IZMeNpb@bC2* z{5JjlHxKYgxB>lv+WhSSYR->|F&AJDx|z98L$-qsW}e?dT=NcwxaQpt!$&{c8}fE|=_M~i44+B%lkUUe zPM;|p4#Vt?S^P3Rdecl-bz(-$pc3#Ied{~C3~dvw_)kzL+VL9vK2eMR bNxzl^+z`Mce)FLmaBW|394 diff --git a/backend/utils/job_queue_system.py b/backend/utils/job_queue_system.py index 06533b31e..aa9591137 100644 --- a/backend/utils/job_queue_system.py +++ b/backend/utils/job_queue_system.py @@ -367,12 +367,13 @@ class JobScheduler: printer = db_session.query(Printer).filter(Printer.id == job.printer_id).first() # Smart-Plug einschalten - if printer and printer.tapo_ip: - plug_success = tapo_controller.turn_on_plug(printer.tapo_ip) - if plug_success: + if printer and printer.plug_ip: + drucker_steuerung = get_drucker_steuerung() + ergebnis = drucker_steuerung.drucker_einschalten(printer.id, "Job-Start über Queue-System") + if ergebnis['success']: job_logger.info(f"Smart-Plug für Drucker {printer.name} eingeschaltet") else: - job_logger.warning(f"Smart-Plug für Drucker {printer.name} konnte nicht eingeschaltet werden") + job_logger.warning(f"Smart-Plug für Drucker {printer.name} konnte nicht eingeschaltet werden: {ergebnis.get('error', 'Unbekannter Fehler')}") # Job-Status aktualisieren job.status = 'printing' @@ -411,10 +412,11 @@ class JobScheduler: printer = db_session.query(Printer).filter(Printer.id == job.printer_id).first() - # Smart-Plug ausschalten - if printer and printer.tapo_ip: - plug_success = tapo_controller.turn_off_plug(printer.tapo_ip) - if plug_success: + # Smart-Plug ausschalten über neue Hardware-Integration + if printer and printer.plug_ip: + drucker_steuerung = get_drucker_steuerung() + ergebnis = drucker_steuerung.drucker_ausschalten(printer.id, "Job-Ende über Queue-System") + if ergebnis['success']: job_logger.info(f"Smart-Plug für Drucker {printer.name} ausgeschaltet") # Job-Status aktualisieren diff --git a/backend/utils/job_scheduler.py b/backend/utils/job_scheduler.py index b08a654e2..68258e71f 100644 --- a/backend/utils/job_scheduler.py +++ b/backend/utils/job_scheduler.py @@ -642,8 +642,11 @@ class BackgroundTaskScheduler: try: self.logger.info(f"Starte geplanten Job {job.id} für Drucker {job.printer_id}") - # Steckdose einschalten - success, msg = printer_monitor.control_plug(job.printer_id, "on") + # Steckdose einschalten über neue Hardware-Integration + drucker_steuerung = get_drucker_steuerung() + ergebnis = drucker_steuerung.drucker_einschalten(job.printer_id, "Geplanter Job-Start") + success = ergebnis['success'] + msg = ergebnis.get('message', ergebnis.get('error', 'Unbekannter Fehler')) if success: job.status = "running" @@ -670,8 +673,11 @@ class BackgroundTaskScheduler: try: self.logger.info(f"Beende Job {job.id} für Drucker {job.printer_id}") - # Steckdose ausschalten - success, msg = printer_monitor.control_plug(job.printer_id, "off") + # Steckdose ausschalten über neue Hardware-Integration + drucker_steuerung = get_drucker_steuerung() + ergebnis = drucker_steuerung.drucker_ausschalten(job.printer_id, "Geplanter Job-Ende") + success = ergebnis['success'] + msg = ergebnis.get('message', ergebnis.get('error', 'Unbekannter Fehler')) if success: job.status = "finished"