#!/usr/bin/env python3 """ Skript zur Synchronisation der Drucker in der Datenbank mit den hardkodierten Druckern. Setzt den Status basierend auf der Konfiguration. """ import sys import os sys.path.append('.') from config.settings import PRINTERS from database.db_manager import DatabaseManager from models import Printer from datetime import datetime def update_printer_status(): """Aktualisiert den Status aller Drucker basierend auf der hardkodierten Konfiguration.""" print("=== Drucker-Status-Update ===") print(f"Hardkodierte Drucker: {len(PRINTERS)}") try: db = DatabaseManager() session = db.get_session() # Alle Drucker aus der Datenbank abrufen printers = session.query(Printer).all() print(f"Drucker in Datenbank: {len(printers)}") updated_count = 0 for printer in printers: # Prüfen, ob Drucker in der hardkodierten Konfiguration existiert if printer.name in PRINTERS: # Drucker ist konfiguriert -> online/verfügbar old_status = printer.status printer.status = "available" printer.active = True # IP-Adresse aus Konfiguration aktualisieren config_ip = PRINTERS[printer.name]["ip"] if printer.ip_address != config_ip: printer.ip_address = config_ip print(f"✅ {printer.name}: {old_status} -> available (IP: {config_ip})") updated_count += 1 else: # Drucker nicht konfiguriert -> offline old_status = printer.status printer.status = "offline" printer.active = False print(f"❌ {printer.name}: {old_status} -> offline") updated_count += 1 # Änderungen speichern session.commit() session.close() print(f"\n✅ {updated_count} Drucker aktualisiert") print("Status-Update abgeschlossen!") except Exception as e: print(f"❌ Fehler beim Update: {e}") if 'session' in locals(): session.rollback() session.close() def list_printer_status(): """Zeigt den aktuellen Status aller Drucker an.""" print("\n=== Aktueller Drucker-Status ===") try: db = DatabaseManager() session = db.get_session() printers = session.query(Printer).all() if not printers: print("Keine Drucker in der Datenbank gefunden.") return print(f"{'Name':<15} {'Status':<12} {'Aktiv':<8} {'IP-Adresse':<15} {'Konfiguriert':<12}") print("-" * 70) for printer in printers: configured = "✅" if printer.name in PRINTERS else "❌" active_str = "✅" if printer.active else "❌" print(f"{printer.name:<15} {printer.status:<12} {active_str:<8} {printer.ip_address or 'N/A':<15} {configured:<12}") session.close() except Exception as e: print(f"❌ Fehler beim Abrufen: {e}") if 'session' in locals(): session.close() if __name__ == "__main__": print("Drucker-Status-Management") print("=" * 30) # Aktuellen Status anzeigen list_printer_status() # Status aktualisieren update_printer_status() # Neuen Status anzeigen list_printer_status()