Files
ALwrity/backend/services/scheduler/__init__.py

173 lines
6.4 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.onboarding_full_website_analysis_executor import OnboardingFullWebsiteAnalysisExecutor
from .executors.deep_competitor_analysis_executor import DeepCompetitorAnalysisExecutor
from .executors.deep_website_crawl_executor import DeepWebsiteCrawlExecutor
from .executors.gsc_insights_executor import GSCInsightsExecutor
from .executors.bing_insights_executor import BingInsightsExecutor
from .executors.advertools_executor import AdvertoolsExecutor
from .executors.sif_indexing_executor import SIFIndexingExecutor
from .executors.market_trends_executor import MarketTrendsExecutor
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.onboarding_full_website_analysis_task_loader import load_due_onboarding_full_website_analysis_tasks
from .utils.deep_competitor_analysis_task_loader import load_due_deep_competitor_analysis_tasks
from .utils.deep_website_crawl_task_loader import load_due_deep_website_crawl_tasks
from .utils.platform_insights_task_loader import load_due_platform_insights_tasks
from .utils.advertools_task_loader import load_due_advertools_tasks
from .utils.sif_indexing_task_loader import load_due_sif_indexing_tasks
from .utils.market_trends_task_loader import load_due_market_trends_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
)
onboarding_full_site_executor = OnboardingFullWebsiteAnalysisExecutor()
_scheduler_instance.register_executor(
'onboarding_full_website_analysis',
onboarding_full_site_executor,
load_due_onboarding_full_website_analysis_tasks
)
deep_competitor_analysis_executor = DeepCompetitorAnalysisExecutor()
_scheduler_instance.register_executor(
'deep_competitor_analysis',
deep_competitor_analysis_executor,
load_due_deep_competitor_analysis_tasks
)
# Register deep website crawl executor
deep_website_crawl_executor = DeepWebsiteCrawlExecutor()
_scheduler_instance.register_executor(
'deep_website_crawl',
deep_website_crawl_executor,
load_due_deep_website_crawl_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
)
# Register Advertools executor
advertools_executor = AdvertoolsExecutor()
_scheduler_instance.register_executor(
'advertools_intelligence',
advertools_executor,
load_due_advertools_tasks
)
# Register SIF indexing executor
sif_indexing_executor = SIFIndexingExecutor()
_scheduler_instance.register_executor(
'sif_indexing',
sif_indexing_executor,
load_due_sif_indexing_tasks
)
# Register market trends executor
market_trends_executor = MarketTrendsExecutor()
_scheduler_instance.register_executor(
'market_trends',
market_trends_executor,
load_due_market_trends_tasks
)
return _scheduler_instance
__all__ = [
'TaskScheduler',
'TaskExecutor',
'TaskExecutionResult',
'MonitoringTaskExecutor',
'OAuthTokenMonitoringExecutor',
'WebsiteAnalysisExecutor',
'OnboardingFullWebsiteAnalysisExecutor',
'GSCInsightsExecutor',
'BingInsightsExecutor',
'SIFIndexingExecutor',
'MarketTrendsExecutor',
'get_scheduler',
# Exception handling
'SchedulerExceptionHandler',
'SchedulerException',
'SchedulerErrorType',
'SchedulerErrorSeverity',
'TaskExecutionError',
'DatabaseError',
'TaskLoaderError',
'SchedulerConfigError'
]