Spaces:
Sleeping
Sleeping
File size: 2,580 Bytes
361f517 7d9b88f a289111 7d9b88f 361f517 eb20f8e 361f517 d48cc9c 361f517 70547e8 361f517 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | import logging
import os
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from api import api_router
# from config import API_TITLE, API_VERSION
# from db import init_db
from services.erp_sync_job_service import trigger_sync
try:
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger
import pytz
APSCHEDULER_AVAILABLE = True
except ImportError:
APSCHEDULER_AVAILABLE = False
logger = logging.getLogger("main")
ENABLE_SCHEDULER = os.getenv("ENABLE_SCHEDULER", "true").lower() == "true"
DE_TIMEZONE = "Europe/Berlin"
SCHEDULE_HOUR = 0
SCHEDULE_MINUTE = 0
def _scheduled_sync_job():
result = trigger_sync()
if result.get("started"):
logger.info("[SCHEDULER] Nightly ERP-WC sync started.")
else:
logger.warning(
"[SCHEDULER] Nightly ERP-WC sync skipped (already running, started_at=%s).",
result.get("started_at"),
)
@asynccontextmanager
async def lifespan(app: FastAPI):
# init_db()
scheduler = None
if ENABLE_SCHEDULER and not APSCHEDULER_AVAILABLE:
logger.warning(
"[SCHEDULER] ENABLE_SCHEDULER=true but APScheduler/pytz is not installed. "
"Install with: pip install apscheduler pytz"
)
if ENABLE_SCHEDULER and APSCHEDULER_AVAILABLE:
de = pytz.timezone(DE_TIMEZONE)
scheduler = BackgroundScheduler(timezone=de)
scheduler.add_job(
_scheduled_sync_job,
trigger=CronTrigger(
hour=SCHEDULE_HOUR,
minute=SCHEDULE_MINUTE,
timezone=de,
),
id="nightly_erp_wc_sync",
replace_existing=True,
misfire_grace_time=600,
coalesce=True,
)
scheduler.start()
next_run = scheduler.get_job("nightly_erp_wc_sync").next_run_time
logger.info(
"[SCHEDULER] Nightly ERP-WC sync scheduled at %02d:%02d (%s). Next run: %s",
SCHEDULE_HOUR,
SCHEDULE_MINUTE,
DE_TIMEZONE,
next_run.strftime("%Y-%m-%d %H:%M:%S %Z"),
)
yield
if scheduler:
scheduler.shutdown(wait=False)
logger.info("[SCHEDULER] Shutdown.")
app = FastAPI(title="E3k", version="1.0", lifespan=lifespan)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(api_router)
|