48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
# 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)
|