This commit is contained in:
pacnpal
2025-08-28 23:20:09 -04:00
parent 02ac587216
commit ac745cc541
30 changed files with 2835 additions and 4689 deletions

80
backend/config/celery.py Normal file
View File

@@ -0,0 +1,80 @@
"""
Celery configuration for ThrillWiki.
This module sets up Celery for background task processing including:
- Trending calculations
- Cache warming
- Analytics processing
- Email notifications
"""
import os
from celery import Celery
# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.django.local')
app = Celery('thrillwiki')
# Get Redis URL from environment variable with fallback
REDIS_URL = os.environ.get('REDIS_URL', 'redis://localhost:6379/1')
# Celery Configuration - set directly without loading from Django settings first
app.conf.update(
# Broker settings
broker_url=REDIS_URL,
result_backend=REDIS_URL,
# Task settings
task_serializer='json',
accept_content=['json'],
result_serializer='json',
timezone='America/New_York',
enable_utc=True,
# Worker settings
worker_prefetch_multiplier=1,
task_acks_late=True,
worker_max_tasks_per_child=1000,
# Task routing
task_routes={
'apps.core.tasks.trending.*': {'queue': 'trending'},
'apps.core.tasks.analytics.*': {'queue': 'analytics'},
'apps.core.tasks.cache.*': {'queue': 'cache'},
},
# Beat schedule for periodic tasks
beat_schedule={
'calculate-trending-content': {
'task': 'apps.core.tasks.trending.calculate_trending_content',
'schedule': 300.0, # Every 5 minutes
},
'warm-trending-cache': {
'task': 'apps.core.tasks.trending.warm_trending_cache',
'schedule': 900.0, # Every 15 minutes
},
'cleanup-old-analytics': {
'task': 'apps.core.tasks.analytics.cleanup_old_analytics',
'schedule': 86400.0, # Daily
},
},
# Task result settings
result_expires=3600, # 1 hour
task_ignore_result=False,
# Error handling
task_reject_on_worker_lost=True,
task_soft_time_limit=300, # 5 minutes
task_time_limit=600, # 10 minutes
)
# Load task modules from all registered Django apps.
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
"""Debug task for testing Celery setup."""
print(f'Request: {self.request!r}')

View File

@@ -86,6 +86,8 @@ THIRD_PARTY_APPS = [
"health_check.storage",
"health_check.contrib.migrations",
"health_check.contrib.redis",
"django_celery_beat", # Celery beat scheduler
"django_celery_results", # Celery result backend
]
LOCAL_APPS = [
@@ -283,6 +285,9 @@ ROADTRIP_REQUEST_TIMEOUT = 10 # seconds
ROADTRIP_MAX_RETRIES = 3
ROADTRIP_BACKOFF_FACTOR = 2
# Frontend URL Configuration
FRONTEND_DOMAIN = config("FRONTEND_DOMAIN", default="https://thrillwiki.com")
# Django REST Framework Settings
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [