# run_scheduler.py import asyncio import logging import time import schedule from datetime import datetime, timedelta, timezone from database.manager import get_session from database.ai_models import DecisionTracker from services.decision_tracker import DecisionTracker as DTService logger = logging.getLogger(__name__) decision_tracker_service = DTService() # simulate ICAIM completion callback: schedule follow_up def on_icaim_task_complete(plan_id: int, sku: str): """Triggered by ICAIM scheduler to schedule follow_up via DecisionTracker.""" asyncio.create_task(decision_tracker_service.schedule_follow_up(plan_id, sku)) # schedule settings (keep original schedule logic) def run_icaim_task(): """Simulate ICAIM task execution.""" logger.info("[Scheduler] [ICAIM] executing ICAIM analysis task...") # ... execute ICAIM analysis ... plan_id = 123 sku = "sample_sku" # after task completes, trigger follow_up schedule on_icaim_task_complete(plan_id, sku) logger.info("[Scheduler] [ICAIM] task completed, triggered follow_up schedule") # keep original schedule configuration schedule.every(6).hours.do(run_icaim_task) logger.info("📅 scheduled: ICAIM analysis task every 6 hours") # start schedule loop (keep original main loop) if __name__ == "__main__": logger.info("Scheduler started.") while True: try: schedule.run_pending() time.sleep(1) except KeyboardInterrupt: logger.info("Scheduler stopped.") break except Exception as e: logger.error(f"Scheduler error: {e}") time.sleep(5)