Initial project structure: MarketScanner - Fear-to-Fortune Trading Intelligence
Features: - FastAPI backend with stocks, news, signals, watchlist, analytics endpoints - React frontend with TailwindCSS dark mode trading dashboard - Celery workers for news fetching, sentiment analysis, pattern detection - TimescaleDB schema for time-series stock data - Docker Compose setup for all services - OpenAI integration for sentiment analysis
This commit is contained in:
69
backend/app/workers/celery_app.py
Normal file
69
backend/app/workers/celery_app.py
Normal file
@@ -0,0 +1,69 @@
|
||||
"""
|
||||
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),
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user