from datetime import datetime from typing import Optional from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.cron import CronTrigger from loguru import logger from pytz import timezone from ctp_slack_bot.core.config import settings #from ctp_slack_bot.tasks.error_report import send_error_report #from ctp_slack_bot.tasks.transcript_cleanup import cleanup_old_transcripts def start_scheduler() -> AsyncIOScheduler: """ Start and configure the APScheduler instance. Returns: AsyncIOScheduler: Configured scheduler instance """ scheduler = AsyncIOScheduler(timezone=timezone(settings.SCHEDULER_TIMEZONE)) # Add jobs to the scheduler # Daily error report at 7 AM # scheduler.add_job( # send_error_report, # CronTrigger(hour=7, minute=0), # id="daily_error_report", # name="Daily Error Report", # replace_existing=True, # ) # Weekly transcript cleanup on Sundays at 1 AM # scheduler.add_job( # cleanup_old_transcripts, # CronTrigger(day_of_week="sun", hour=1, minute=0), # id="weekly_transcript_cleanup", # name="Weekly Transcript Cleanup", # replace_existing=True, # ) # Start the scheduler scheduler.start() logger.info("Scheduler started with timezone: {}", settings.SCHEDULER_TIMEZONE) logger.info("Next run for error report: {}", scheduler.get_job("daily_error_report").next_run_time) logger.info("Next run for transcript cleanup: {}", scheduler.get_job("weekly_transcript_cleanup").next_run_time) return scheduler def stop_scheduler(scheduler: Optional[AsyncIOScheduler] = None) -> None: """ Shutdown the scheduler gracefully. Args: scheduler: The scheduler instance to shut down """ if scheduler is not None and scheduler.running: logger.info("Shutting down scheduler") scheduler.shutdown(wait=False) logger.info("Scheduler shutdown complete")