This commit is contained in:
2026-03-07 03:43:50 +00:00
parent 365cb6692e
commit 17d9033152
17 changed files with 1349 additions and 88 deletions

41
app/scheduler.py Normal file
View 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()