173 lines
6.4 KiB
Python
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'
|
|
]
|