Initial commit
This commit is contained in:
129
workers/app/celery.py
Normal file
129
workers/app/celery.py
Normal file
@@ -0,0 +1,129 @@
|
||||
"""
|
||||
Celery Application - ServiceManagerWeb Workers
|
||||
|
||||
Configuración principal de Celery para tareas asíncronas
|
||||
"""
|
||||
|
||||
from celery import Celery
|
||||
from celery.schedules import crontab
|
||||
import os
|
||||
from app.core.config import get_settings
|
||||
from app.core.logging import setup_logging
|
||||
|
||||
# Setup logging
|
||||
setup_logging()
|
||||
|
||||
# Get settings
|
||||
settings = get_settings()
|
||||
|
||||
# Create Celery application
|
||||
celery_app = Celery(
|
||||
"servicemanager-workers",
|
||||
broker=settings.CELERY_BROKER_URL,
|
||||
backend=settings.CELERY_RESULT_BACKEND,
|
||||
include=[
|
||||
"app.tasks.email_tasks",
|
||||
"app.tasks.sla_tasks",
|
||||
"app.tasks.maintenance_tasks",
|
||||
"app.tasks.notification_tasks"
|
||||
]
|
||||
)
|
||||
|
||||
# Configure Celery
|
||||
celery_app.conf.update(
|
||||
# Task settings
|
||||
task_serializer="json",
|
||||
accept_content=["json"],
|
||||
result_serializer="json",
|
||||
timezone="UTC",
|
||||
enable_utc=True,
|
||||
|
||||
# Result backend settings
|
||||
result_expires=3600, # 1 hour
|
||||
result_persistent=True,
|
||||
|
||||
# Worker settings
|
||||
worker_prefetch_multiplier=1,
|
||||
worker_max_tasks_per_child=1000,
|
||||
worker_disable_rate_limits=False,
|
||||
|
||||
# Task routing
|
||||
task_routes={
|
||||
"app.tasks.email_tasks.*": {"queue": "email"},
|
||||
"app.tasks.sla_tasks.*": {"queue": "sla"},
|
||||
"app.tasks.maintenance_tasks.*": {"queue": "maintenance"},
|
||||
"app.tasks.notification_tasks.*": {"queue": "notifications"},
|
||||
},
|
||||
|
||||
# Queue configuration
|
||||
task_default_queue="default",
|
||||
task_default_exchange="default",
|
||||
task_default_routing_key="default",
|
||||
|
||||
# Beat schedule for periodic tasks
|
||||
beat_schedule={
|
||||
# Check SLA violations every 5 minutes
|
||||
"check-sla-violations": {
|
||||
"task": "app.tasks.sla_tasks.check_sla_violations",
|
||||
"schedule": crontab(minute="*/5"),
|
||||
},
|
||||
|
||||
# Send daily digest at 8:00 AM
|
||||
"send-daily-digest": {
|
||||
"task": "app.tasks.notification_tasks.send_daily_digest",
|
||||
"schedule": crontab(hour=8, minute=0),
|
||||
},
|
||||
|
||||
# Clean old logs weekly on Sunday at 2:00 AM
|
||||
"cleanup-old-logs": {
|
||||
"task": "app.tasks.maintenance_tasks.cleanup_old_logs",
|
||||
"schedule": crontab(hour=2, minute=0, day_of_week=0),
|
||||
},
|
||||
|
||||
# Generate weekly reports on Monday at 9:00 AM
|
||||
"generate-weekly-reports": {
|
||||
"task": "app.tasks.maintenance_tasks.generate_weekly_reports",
|
||||
"schedule": crontab(hour=9, minute=0, day_of_week=1),
|
||||
},
|
||||
|
||||
# Health check every minute
|
||||
"worker-health-check": {
|
||||
"task": "app.tasks.maintenance_tasks.health_check",
|
||||
"schedule": crontab(minute="*/1"),
|
||||
},
|
||||
},
|
||||
|
||||
# Error handling
|
||||
task_reject_on_worker_lost=True,
|
||||
task_acks_late=True,
|
||||
|
||||
# Monitoring
|
||||
worker_send_task_events=True,
|
||||
task_send_sent_event=True,
|
||||
|
||||
# Security
|
||||
worker_hijack_root_logger=False,
|
||||
worker_log_format="[%(asctime)s: %(levelname)s/%(processName)s] %(message)s",
|
||||
worker_task_log_format="[%(asctime)s: %(levelname)s/%(processName)s][%(task_name)s(%(task_id)s)] %(message)s",
|
||||
)
|
||||
|
||||
# Optional: Configure SSL if needed
|
||||
if settings.ENVIRONMENT == "production":
|
||||
# Enable SSL for production
|
||||
celery_app.conf.update(
|
||||
broker_use_ssl=True,
|
||||
redis_backend_use_ssl=True,
|
||||
)
|
||||
|
||||
|
||||
# Import all tasks to register them
|
||||
from app.tasks import (
|
||||
email_tasks,
|
||||
sla_tasks,
|
||||
maintenance_tasks,
|
||||
notification_tasks
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
celery_app.start()
|
||||
Reference in New Issue
Block a user