File size: 1,981 Bytes
307cacc
 
ce323cf
 
307cacc
 
ce323cf
307cacc
9fd6e20
307cacc
ce323cf
 
307cacc
 
 
 
 
 
ce323cf
 
 
307cacc
ce323cf
307cacc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ce323cf
307cacc
 
ce323cf
 
 
 
307cacc
 
 
 
ce323cf
307cacc
 
 
 
 
 
ce323cf
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
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from apscheduler.triggers.cron import CronTrigger
from datetime import datetime
from dependency_injector.wiring import inject, Provide
from loguru import logger
from pytz import timezone
from typing import Optional

from ctp_slack_bot.containers import Container

@inject
def start_scheduler(container: Container) -> AsyncIOScheduler:
    """
    Start and configure the APScheduler instance.
    
    Returns:
        AsyncIOScheduler: Configured scheduler instance
    """
    settings = container.settings() if container else Provide[Container.settings]
    zone = settings.SCHEDULER_TIMEZONE
    scheduler = AsyncIOScheduler(timezone=timezone(zone))
    
    # Add jobs to the scheduler.
    # scheduler.add_job(
    #     send_error_report,
    #     CronTrigger(hour=7, minute=0),
    #     id="daily_error_report",
    #     name="Daily Error Report",
    #     replace_existing=True,
    # )
    # 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: AsyncIOScheduler) -> None:
    """
    Shutdown the scheduler gracefully.
    
    Args:
        scheduler: The scheduler instance to shut down
    """
    if scheduler.running:
        logger.info("Shutting down scheduler")
        scheduler.shutdown(wait=False)
        logger.info("Scheduler shutdown complete")