from celery import Celery
from celery.schedules import crontab

from app.config import get_settings

from common_logging import get_logger

logger = get_logger(__name__)

settings = get_settings()
celery_app = Celery('data_center', broker=settings.celery_broker_url, backend=settings.celery_result_backend, include=['app.tasks.processor_tasks', 'app.tasks.ocr_tasks', 'app.tasks.asr_tasks'])
logger.info("celery app initialized")
celery_app.conf.update(task_serializer='json', accept_content=['json'], result_serializer='json', timezone='Asia/Shanghai', enable_utc=True, task_track_started=True, task_time_limit=3600 * 6, task_soft_time_limit=3600 * 5, worker_prefetch_multiplier=1, worker_max_tasks_per_child=100, task_acks_late=True, task_reject_on_worker_lost=True, task_default_queue=settings.celery_task_queue, task_routes={'app.tasks.processor_tasks.*': {'queue': settings.celery_task_queue}})
celery_app.conf.beat_schedule = {'incremental-daily-high-freq': {'task': 'app.tasks.processor_tasks.incremental_update_task', 'schedule': crontab(hour=2, minute=7), 'kwargs': {'category_ids': [6, 8], 'window_days': 7}, 'options': {'queue': settings.celery_task_queue}}, 'incremental-weekly-low-freq': {'task': 'app.tasks.processor_tasks.incremental_update_task', 'schedule': crontab(hour=3, minute=11, day_of_week=1), 'kwargs': {'category_ids': [1, 2, 3, 4, 5, 7], 'window_days': 30}, 'options': {'queue': settings.celery_task_queue}}, 'incremental-monthly-full-check': {'task': 'app.tasks.processor_tasks.incremental_update_task', 'schedule': crontab(hour=1, minute=23, day_of_month=1), 'kwargs': {'category_ids': None, 'window_days': 0}, 'options': {'queue': settings.celery_task_queue}}}
if __name__ == '__main__':
    celery_app.start()
