🎉 Improved documentation and code organization in Backend 🌐
This commit is contained in:
@ -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()
|
||||
|
Reference in New Issue
Block a user