File size: 2,069 Bytes
307cacc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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")