""" Celery Application Configuration """ from celery import Celery from celery.schedules import crontab from app.core.config import settings # Create Celery app celery_app = Celery( "marketscanner", broker=settings.RABBITMQ_URL, backend=settings.REDIS_URL, include=[ "app.workers.tasks.news_tasks", "app.workers.tasks.stock_tasks", "app.workers.tasks.sentiment_tasks", "app.workers.tasks.pattern_tasks", "app.workers.tasks.alert_tasks", ], ) # Celery configuration celery_app.conf.update( task_serializer="json", accept_content=["json"], result_serializer="json", timezone="UTC", enable_utc=True, task_track_started=True, task_time_limit=300, # 5 minutes worker_prefetch_multiplier=1, worker_concurrency=4, ) # Beat schedule (periodic tasks) celery_app.conf.beat_schedule = { # Fetch news every 5 minutes "fetch-news-every-5-minutes": { "task": "app.workers.tasks.news_tasks.fetch_all_news", "schedule": settings.NEWS_SCAN_INTERVAL, }, # Update stock prices every minute "update-prices-every-minute": { "task": "app.workers.tasks.stock_tasks.update_stock_prices", "schedule": settings.STOCK_PRICE_INTERVAL, }, # Process unanalyzed news every 2 minutes "analyze-sentiment-every-2-minutes": { "task": "app.workers.tasks.sentiment_tasks.process_unanalyzed_news", "schedule": 120, }, # Detect panic events every 5 minutes "detect-panic-every-5-minutes": { "task": "app.workers.tasks.pattern_tasks.detect_panic_events", "schedule": 300, }, # Generate signals every 10 minutes "generate-signals-every-10-minutes": { "task": "app.workers.tasks.pattern_tasks.generate_buy_signals", "schedule": 600, }, # Clean old data daily at midnight "cleanup-daily": { "task": "app.workers.tasks.news_tasks.cleanup_old_news", "schedule": crontab(hour=0, minute=0), }, }