Dateien nach "app" hochladen
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
"""Hintergrund-Scheduler: führt den Sync automatisch nach Zeitplan aus."""
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
|
||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||
from apscheduler.triggers.cron import CronTrigger
|
||||
|
||||
from .config import settings
|
||||
from .sync import run_sync
|
||||
|
||||
logger = logging.getLogger("phpipam_outline_sync.scheduler")
|
||||
|
||||
scheduler = AsyncIOScheduler()
|
||||
JOB_ID = "phpipam-outline-sync"
|
||||
|
||||
|
||||
def _run_scheduled_sync() -> None:
|
||||
"""Wird vom Scheduler aufgerufen (läuft in einem Thread, blockiert den
|
||||
Event-Loop also nicht)."""
|
||||
try:
|
||||
results = run_sync()
|
||||
created = sum(1 for r in results if r.get("action") == "created")
|
||||
updated = sum(1 for r in results if r.get("action") == "updated")
|
||||
logger.info(
|
||||
"Geplanter Sync abgeschlossen: %d Subnetze (%d neu, %d aktualisiert)",
|
||||
len(results),
|
||||
created,
|
||||
updated,
|
||||
)
|
||||
except Exception: # noqa: BLE001
|
||||
logger.exception("Geplanter Sync fehlgeschlagen")
|
||||
|
||||
|
||||
def start_scheduler() -> None:
|
||||
if not settings.sync_schedule_enabled:
|
||||
logger.info("Scheduler deaktiviert (SYNC_SCHEDULE_ENABLED=false)")
|
||||
return
|
||||
trigger = CronTrigger.from_crontab(settings.sync_schedule_cron)
|
||||
scheduler.add_job(
|
||||
_run_scheduled_sync,
|
||||
trigger=trigger,
|
||||
id=JOB_ID,
|
||||
replace_existing=True,
|
||||
max_instances=1,
|
||||
coalesce=True,
|
||||
)
|
||||
scheduler.start()
|
||||
logger.info("Scheduler gestartet, Zeitplan: '%s'", settings.sync_schedule_cron)
|
||||
|
||||
|
||||
def stop_scheduler() -> None:
|
||||
if scheduler.running:
|
||||
scheduler.shutdown(wait=False)
|
||||
Reference in New Issue
Block a user