🎉 Improved documentation and code organization in Backend 🌐

This commit is contained in:
2025-06-12 10:06:34 +02:00
parent c356111149
commit 2bf4e0e6c0
30 changed files with 1596 additions and 94 deletions

View File

@ -11,6 +11,7 @@ from utils.logging_config import get_logger
from models import Job, Printer, get_db_session
from utils.utilities_collection import TAPO_USERNAME, TAPO_PASSWORD
from utils.hardware_integration import tapo_controller
from utils.tapo_status_manager import tapo_status_manager
# Legacy function - use tapo_controller.test_connection instead
def test_tapo_connection(*args, **kwargs):
return tapo_controller.test_connection(*args, **kwargs)
@ -620,6 +621,92 @@ class BackgroundTaskScheduler:
pass
return False
def _check_and_start_jobs(self):
"""
Prüft anstehende Jobs und startet sie automatisch.
"""
try:
from models import get_db_session, Job
from utils.tapo_status_manager import tapo_status_manager
db_session = get_db_session()
now = datetime.now()
# Jobs die starten sollten
jobs_to_start = db_session.query(Job).filter(
Job.status == "scheduled",
Job.start_at <= now
).all()
for job in jobs_to_start:
try:
self.logger.info(f"Starte geplanten Job {job.id} für Drucker {job.printer_id}")
# Steckdose einschalten
success, msg = tapo_status_manager.control_plug(job.printer_id, "on")
if success:
job.status = "running"
job.actual_start_time = now
self.logger.info(f"✅ Job {job.id} gestartet, Steckdose eingeschaltet")
else:
self.logger.error(f"❌ Fehler beim Starten von Job {job.id}: {msg}")
# Job trotzdem starten, aber mit Warnung
job.status = "running"
job.notes = f"Warnung: Steckdose konnte nicht eingeschaltet werden: {msg}"
except Exception as e:
self.logger.error(f"Fehler beim Starten von Job {job.id}: {str(e)}")
job.status = "error"
job.notes = f"Fehler beim Start: {str(e)}"
# Jobs die enden sollten
jobs_to_end = db_session.query(Job).filter(
Job.status == "running",
Job.end_at <= now
).all()
for job in jobs_to_end:
try:
self.logger.info(f"Beende Job {job.id} für Drucker {job.printer_id}")
# Steckdose ausschalten
success, msg = tapo_status_manager.control_plug(job.printer_id, "off")
if success:
job.status = "finished"
job.actual_end_time = now
self.logger.info(f"✅ Job {job.id} beendet, Steckdose ausgeschaltet")
else:
self.logger.error(f"❌ Fehler beim Beenden von Job {job.id}: {msg}")
# Job trotzdem beenden, aber mit Warnung
job.status = "finished"
job.actual_end_time = now
if job.notes:
job.notes += f"\nWarnung: Steckdose konnte nicht ausgeschaltet werden: {msg}"
else:
job.notes = f"Warnung: Steckdose konnte nicht ausgeschaltet werden: {msg}"
except Exception as e:
self.logger.error(f"Fehler beim Beenden von Job {job.id}: {str(e)}")
job.status = "error"
if job.notes:
job.notes += f"\nFehler beim Beenden: {str(e)}"
else:
job.notes = f"Fehler beim Beenden: {str(e)}"
db_session.commit()
db_session.close()
# Statistiken aktualisieren
self.job_check_count += len(jobs_to_start) + len(jobs_to_end)
except Exception as e:
self.logger.error(f"Fehler bei der Job-Überprüfung: {str(e)}", exc_info=True)
if 'db_session' in locals():
db_session.rollback()
db_session.close()
# Scheduler-Instanz erzeugen
scheduler = BackgroundTaskScheduler()