feat: Implementierung einer Windows-kompatiblen Timeout-Logik für Datenbankabfragen in der Druckerabfrage. Verwendung von Threads zur Vermeidung von Blockierungen und Verbesserung der Fehlerprotokollierung. Aktualisierung des Kiosk-Installationsskripts zur Installation zusätzlicher Pakete und Konfiguration des Kiosk-Modus mit Openbox für eine verbesserte Benutzererfahrung.
This commit is contained in:
@@ -1684,19 +1684,28 @@ def get_printers():
|
||||
db_session = get_db_session()
|
||||
|
||||
try:
|
||||
# Set timeout for database query
|
||||
import signal
|
||||
# Windows-kompatible Timeout-Implementierung
|
||||
import threading
|
||||
import time
|
||||
|
||||
def timeout_handler(signum, frame):
|
||||
raise TimeoutError("Database query timeout")
|
||||
printers = None
|
||||
timeout_occurred = False
|
||||
|
||||
signal.signal(signal.SIGALRM, timeout_handler)
|
||||
signal.alarm(5) # 5 second timeout for basic printer loading (reduziert)
|
||||
def fetch_printers():
|
||||
nonlocal printers, timeout_occurred
|
||||
try:
|
||||
printers = db_session.query(Printer).all()
|
||||
except Exception as e:
|
||||
printers_logger.error(f"Datenbankfehler beim Laden der Drucker: {str(e)}")
|
||||
timeout_occurred = True
|
||||
|
||||
try:
|
||||
printers = db_session.query(Printer).all()
|
||||
signal.alarm(0) # Clear alarm
|
||||
except TimeoutError:
|
||||
# Starte Datenbankabfrage in separatem Thread
|
||||
thread = threading.Thread(target=fetch_printers)
|
||||
thread.daemon = True
|
||||
thread.start()
|
||||
thread.join(timeout=5) # 5 Sekunden Timeout
|
||||
|
||||
if thread.is_alive() or timeout_occurred or printers is None:
|
||||
printers_logger.warning("Database timeout when fetching printers for basic loading")
|
||||
return jsonify({
|
||||
'error': 'Database timeout beim Laden der Drucker',
|
||||
@@ -1734,7 +1743,6 @@ def get_printers():
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
signal.alarm(0) # Clear any remaining alarm
|
||||
db_session.rollback()
|
||||
db_session.close()
|
||||
printers_logger.error(f"Fehler beim Abrufen der Drucker: {str(e)}")
|
||||
@@ -1750,19 +1758,28 @@ def get_printers_with_status():
|
||||
db_session = get_db_session()
|
||||
|
||||
try:
|
||||
# Set timeout for database query
|
||||
import signal
|
||||
# Windows-kompatible Timeout-Implementierung
|
||||
import threading
|
||||
import time
|
||||
|
||||
def timeout_handler(signum, frame):
|
||||
raise TimeoutError("Database query timeout")
|
||||
printers = None
|
||||
timeout_occurred = False
|
||||
|
||||
signal.signal(signal.SIGALRM, timeout_handler)
|
||||
signal.alarm(8) # 8 second timeout for status check loading
|
||||
def fetch_printers():
|
||||
nonlocal printers, timeout_occurred
|
||||
try:
|
||||
printers = db_session.query(Printer).all()
|
||||
except Exception as e:
|
||||
printers_logger.error(f"Datenbankfehler beim Status-Check: {str(e)}")
|
||||
timeout_occurred = True
|
||||
|
||||
try:
|
||||
printers = db_session.query(Printer).all()
|
||||
signal.alarm(0) # Clear alarm
|
||||
except TimeoutError:
|
||||
# Starte Datenbankabfrage in separatem Thread
|
||||
thread = threading.Thread(target=fetch_printers)
|
||||
thread.daemon = True
|
||||
thread.start()
|
||||
thread.join(timeout=8) # 8 Sekunden Timeout für Status-Check
|
||||
|
||||
if thread.is_alive() or timeout_occurred or printers is None:
|
||||
printers_logger.warning("Database timeout when fetching printers for status check")
|
||||
return jsonify({
|
||||
'error': 'Database timeout beim Status-Check der Drucker',
|
||||
@@ -1852,7 +1869,6 @@ def get_printers_with_status():
|
||||
return jsonify(status_data)
|
||||
|
||||
except Exception as e:
|
||||
signal.alarm(0) # Clear any remaining alarm
|
||||
db_session.rollback()
|
||||
db_session.close()
|
||||
printers_logger.error(f"Fehler beim Status-Check der Drucker: {str(e)}")
|
||||
|
Reference in New Issue
Block a user