update
This commit is contained in:
41
app/scheduler.py
Normal file
41
app/scheduler.py
Normal file
@@ -0,0 +1,41 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user