Files
ALwrity/backend/services/scheduler/__init__.py
2025-11-05 08:51:00 +05:30

71 lines
2.1 KiB
Python

"""
Task Scheduler Package
Modular, pluggable scheduler for ALwrity tasks.
"""
from .core.scheduler import TaskScheduler
from .core.executor_interface import TaskExecutor, TaskExecutionResult
from .core.exception_handler import (
SchedulerExceptionHandler, SchedulerException, SchedulerErrorType, SchedulerErrorSeverity,
TaskExecutionError, DatabaseError, TaskLoaderError, SchedulerConfigError
)
from .executors.monitoring_task_executor import MonitoringTaskExecutor
from .executors.oauth_token_monitoring_executor import OAuthTokenMonitoringExecutor
from .utils.task_loader import load_due_monitoring_tasks
from .utils.oauth_token_task_loader import load_due_oauth_token_monitoring_tasks
# Global scheduler instance (initialized on first access)
_scheduler_instance: TaskScheduler = None
def get_scheduler() -> TaskScheduler:
"""
Get global scheduler instance (singleton pattern).
Returns:
TaskScheduler instance
"""
global _scheduler_instance
if _scheduler_instance is None:
_scheduler_instance = TaskScheduler(
check_interval_minutes=15,
max_concurrent_executions=10
)
# Register monitoring task executor
monitoring_executor = MonitoringTaskExecutor()
_scheduler_instance.register_executor(
'monitoring_task',
monitoring_executor,
load_due_monitoring_tasks
)
# Register OAuth token monitoring executor
oauth_token_executor = OAuthTokenMonitoringExecutor()
_scheduler_instance.register_executor(
'oauth_token_monitoring',
oauth_token_executor,
load_due_oauth_token_monitoring_tasks
)
return _scheduler_instance
__all__ = [
'TaskScheduler',
'TaskExecutor',
'TaskExecutionResult',
'MonitoringTaskExecutor',
'OAuthTokenMonitoringExecutor',
'get_scheduler',
# Exception handling
'SchedulerExceptionHandler',
'SchedulerException',
'SchedulerErrorType',
'SchedulerErrorSeverity',
'TaskExecutionError',
'DatabaseError',
'TaskLoaderError',
'SchedulerConfigError'
]