""" 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' ]