From 9ce6b0b5e8391851298cb61aae9916581c68b4de Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Thu, 29 May 2025 23:22:06 +0200 Subject: [PATCH] "feat: Implement database backup for myp.db using wal" --- backend/app/database/myp.db | Bin 106496 -> 106496 bytes backend/app/database/myp.db-wal | Bin 57712 -> 0 bytes .../database/myp.db.backup_20250529_231800 | Bin 0 -> 106496 bytes backend/app/utils/printer_monitor.py | 36 ++++++++++++++---- 4 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 backend/app/database/myp.db.backup_20250529_231800 diff --git a/backend/app/database/myp.db b/backend/app/database/myp.db index a747a80e5655cbb04734934f7847b413055c1518..7a498da4b5a5275876c7f84f12066a38b4b2af10 100644 GIT binary patch delta 774 zcma)3&ubGw6rRbfflagf5=tx>(p|yQL(O()ck@$}ZWIqDHjRiDJ;a(F?3S9uY*LFC z8xLN3?4h3h14LZZQ?=mPlX$TRo)k|->dE%tB(0VP1ZSA{;C&zSzW2SA&EU#r@Oec^ zX=bt0s$D1*%IxyJ$)!TkzJI;J3UqpMwo)>@YkJX|UA$6j<;piMK5#BAJ6fgUu02++ zhN+pisFpTzhMx1kDyh>ztvod~)1s!XcU8Q0t9;y_D%ArA0M&DutkqRXANVj$PX;lp zB3SjKY8M`QID$q-L~Pqgu@OQdZZogV`av*sBbC%sNh7BkW}c?=x~}Q{Gk|0d5wAAS zoX#S11}Nz~)iooN){SgH;*C(G7yMB3*JOxDE&^2^ms~#@xhaiy&yWNfqg{fL9p@~C zKe0#eDMV}M-p*&a94ntnX@-@vGMOf;J8u0BH8L7ksL_Gmf0X${pB1u)!Vh z;e6qkV%y@sW&g*_FTMyj@Bd0)Z)-T#+x;GbJwMvqhA8)v5K#>AjA0kS?w_(iuqf=8cM$CG z@^_HJL^*Wn)eIIQAp%c1XpE?7-0-yS3K>=yL&FcH^3T|d; z_{+bU@d2}g7$@IB2L4<8>-ZP(H}R+P+wzO^edId`RJxpxNsn{7iyoskqtW*FdW@oq z%UK#21<(i%CjRFP{LlHnY!)=Q%`eHrEX$Z!P*9X#mYTxE%`D4Vl$w>AT#}js03DW3 AbpQYW diff --git a/backend/app/database/myp.db-wal b/backend/app/database/myp.db-wal index 1f4f98d6ba98a272bd0c76fc00c56a2184e485e9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 57712 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 LZr{0MnJ4}qPzCDy literal 0 HcmV?d00001 diff --git a/backend/app/utils/printer_monitor.py b/backend/app/utils/printer_monitor.py index 7b6b33b3..52dcb007 100644 --- a/backend/app/utils/printer_monitor.py +++ b/backend/app/utils/printer_monitor.py @@ -300,7 +300,10 @@ class PrinterMonitor: def _check_single_printer_status(self, printer: Printer, timeout: int = 7) -> Dict: """ - Überprüft den Status eines einzelnen Druckers. + Überprüft den Status eines einzelnen Druckers basierend auf der Steckdosen-Logik: + - Steckdose erreichbar aber AUS = Drucker ONLINE (bereit zum Drucken) + - Steckdose erreichbar und AN = Drucker PRINTING (druckt gerade) + - Steckdose nicht erreichbar = Drucker OFFLINE (kritischer Fehler) Args: printer: Printer-Objekt aus der Datenbank @@ -341,25 +344,44 @@ class PrinterMonitor: status_info["outlet_reachable"] = outlet_reachable status_info["outlet_state"] = outlet_state - if outlet_reachable and outlet_state == "on": - status_info["status"] = "online" - status_info["active"] = True - elif outlet_reachable and outlet_state == "off": - status_info["status"] = "standby" - status_info["active"] = False + # 🎯 KORREKTE LOGIK: Steckdose erreichbar = Drucker funktionsfähig + if outlet_reachable: + if outlet_state == "off": + # Steckdose aus = Drucker ONLINE (bereit zum Drucken) + status_info["status"] = "online" + status_info["active"] = True + monitor_logger.debug(f"✅ {printer.name}: ONLINE (Steckdose aus - bereit zum Drucken)") + elif outlet_state == "on": + # Steckdose an = Drucker PRINTING (druckt gerade) + status_info["status"] = "printing" + status_info["active"] = True + monitor_logger.debug(f"🖨️ {printer.name}: PRINTING (Steckdose an - druckt gerade)") + else: + # Unbekannter Steckdosen-Status + status_info["status"] = "error" + status_info["active"] = False + monitor_logger.warning(f"⚠️ {printer.name}: Unbekannter Steckdosen-Status '{outlet_state}'") else: + # Steckdose nicht erreichbar = kritischer Fehler status_info["status"] = "offline" status_info["active"] = False + monitor_logger.warning(f"❌ {printer.name}: OFFLINE (Steckdose nicht erreichbar)") else: + # Ping fehlgeschlagen = Netzwerkproblem status_info["status"] = "unreachable" status_info["active"] = False + monitor_logger.warning(f"🔌 {printer.name}: UNREACHABLE (Ping fehlgeschlagen)") else: + # Keine Steckdosen-IP konfiguriert status_info["status"] = "unconfigured" status_info["active"] = False + monitor_logger.info(f"⚙️ {printer.name}: UNCONFIGURED (keine Steckdosen-IP)") except Exception as e: monitor_logger.error(f"❌ Fehler bei Status-Check für {printer.name}: {str(e)}") status_info["error"] = str(e) + status_info["status"] = "error" + status_info["active"] = False return status_info