"""APScheduler setup for periodic checks.""" from apscheduler.schedulers.background import BackgroundScheduler from app.checker import run_check from app.models import get_all_services_for_scheduler def _run_all_checks(): """Run checks for all registered services.""" services = get_all_services_for_scheduler() for svc in services: run_check(svc["id"], svc["target"], svc["protocol"]) def start_scheduler(): """Start the background scheduler. Uses interval jobs per service.""" scheduler = BackgroundScheduler() def add_jobs(): services = get_all_services_for_scheduler() for svc in services: job_id = f"service_{svc['id']}" if scheduler.get_job(job_id): scheduler.remove_job(job_id) interval = max(10, svc["interval_seconds"]) scheduler.add_job( run_check, "interval", seconds=interval, id=job_id, args=[svc["id"], svc["target"], svc["protocol"]], ) # Run checks immediately on startup, then schedule _run_all_checks() add_jobs() # Refresh job list every 60 seconds in case services were added scheduler.add_job(add_jobs, "interval", seconds=60, id="refresh_jobs") scheduler.start()