Dateien nach "app" hochladen

This commit is contained in:
2026-07-24 08:38:28 +00:00
parent a4e7bf0ce2
commit 8444296198
7 changed files with 459 additions and 0 deletions
+54
View File
@@ -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)