manage-your-printer/utils/update_printers.py
2025-06-04 10:03:22 +02:00

110 lines
3.5 KiB
Python

#!/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()