""" scheduler.py — APScheduler configuration. The scheduler is started in main.py's lifespan event. """ import asyncio import logging from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.interval import IntervalTrigger from app.config import settings logger = logging.getLogger(__name__) scheduler = AsyncIOScheduler() def start_scheduler(): from app.services.position_monitor import monitor_all_positions scheduler.add_job( monitor_all_positions, trigger=IntervalTrigger(seconds=settings.monitor_interval_seconds), id="position_monitor", name="Position Monitor", replace_existing=True, misfire_grace_time=60, ) scheduler.start() logger.info(f"Scheduler started — monitor interval: {settings.monitor_interval_seconds}s") def stop_scheduler(): if scheduler.running: scheduler.shutdown(wait=False) logger.info("Scheduler stopped")