42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
"""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()
|