112 lines
3.7 KiB
Python
112 lines
3.7 KiB
Python
"""
|
|
Task Scheduler Package
|
|
Modular, pluggable scheduler for ALwrity tasks.
|
|
"""
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
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 .executors.website_analysis_executor import WebsiteAnalysisExecutor
|
|
from .executors.gsc_insights_executor import GSCInsightsExecutor
|
|
from .executors.bing_insights_executor import BingInsightsExecutor
|
|
from .utils.task_loader import load_due_monitoring_tasks
|
|
from .utils.oauth_token_task_loader import load_due_oauth_token_monitoring_tasks
|
|
from .utils.website_analysis_task_loader import load_due_website_analysis_tasks
|
|
from .utils.platform_insights_task_loader import load_due_platform_insights_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
|
|
)
|
|
|
|
# Register website analysis executor
|
|
website_analysis_executor = WebsiteAnalysisExecutor()
|
|
_scheduler_instance.register_executor(
|
|
'website_analysis',
|
|
website_analysis_executor,
|
|
load_due_website_analysis_tasks
|
|
)
|
|
|
|
# Register platform insights executors
|
|
# GSC insights executor
|
|
def load_due_gsc_insights_tasks(db: Session, user_id=None):
|
|
return load_due_platform_insights_tasks(db, user_id, platform='gsc')
|
|
|
|
gsc_insights_executor = GSCInsightsExecutor()
|
|
_scheduler_instance.register_executor(
|
|
'gsc_insights',
|
|
gsc_insights_executor,
|
|
load_due_gsc_insights_tasks
|
|
)
|
|
|
|
# Bing insights executor
|
|
def load_due_bing_insights_tasks(db: Session, user_id=None):
|
|
return load_due_platform_insights_tasks(db, user_id, platform='bing')
|
|
|
|
bing_insights_executor = BingInsightsExecutor()
|
|
_scheduler_instance.register_executor(
|
|
'bing_insights',
|
|
bing_insights_executor,
|
|
load_due_bing_insights_tasks
|
|
)
|
|
|
|
return _scheduler_instance
|
|
|
|
|
|
__all__ = [
|
|
'TaskScheduler',
|
|
'TaskExecutor',
|
|
'TaskExecutionResult',
|
|
'MonitoringTaskExecutor',
|
|
'OAuthTokenMonitoringExecutor',
|
|
'WebsiteAnalysisExecutor',
|
|
'GSCInsightsExecutor',
|
|
'BingInsightsExecutor',
|
|
'get_scheduler',
|
|
# Exception handling
|
|
'SchedulerExceptionHandler',
|
|
'SchedulerException',
|
|
'SchedulerErrorType',
|
|
'SchedulerErrorSeverity',
|
|
'TaskExecutionError',
|
|
'DatabaseError',
|
|
'TaskLoaderError',
|
|
'SchedulerConfigError'
|
|
]
|