mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 14:11:13 -05:00
Add Django Celery tasks and utilities to periodically collect system metrics (error rates, response times, queue sizes) and record them into metric_time_series. Include monitoring app scaffolding, metrics collector, Celery beat schedule, middleware for live metrics, and a Supabase edge function for cross-source metrics.
83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
"""
|
|
Celery tasks for periodic metric collection.
|
|
"""
|
|
import logging
|
|
from celery import shared_task
|
|
from .metrics_collector import MetricsCollector
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@shared_task(bind=True, name='monitoring.collect_system_metrics')
|
|
def collect_system_metrics(self):
|
|
"""
|
|
Periodic task to collect all system metrics.
|
|
Runs every minute to gather current system state.
|
|
"""
|
|
logger.info("Starting system metrics collection")
|
|
|
|
try:
|
|
metrics = MetricsCollector.collect_all_metrics()
|
|
logger.info(f"Collected metrics: {metrics}")
|
|
return {
|
|
'success': True,
|
|
'metrics_collected': len(metrics),
|
|
'metrics': metrics
|
|
}
|
|
except Exception as e:
|
|
logger.error(f"Error in collect_system_metrics task: {e}", exc_info=True)
|
|
raise
|
|
|
|
|
|
@shared_task(bind=True, name='monitoring.collect_error_metrics')
|
|
def collect_error_metrics(self):
|
|
"""
|
|
Collect error-specific metrics.
|
|
Runs every minute to track error rates.
|
|
"""
|
|
try:
|
|
error_rate = MetricsCollector.get_error_rate()
|
|
MetricsCollector.record_metric('error_rate', error_rate, 'performance')
|
|
return {'success': True, 'error_rate': error_rate}
|
|
except Exception as e:
|
|
logger.error(f"Error in collect_error_metrics task: {e}", exc_info=True)
|
|
raise
|
|
|
|
|
|
@shared_task(bind=True, name='monitoring.collect_performance_metrics')
|
|
def collect_performance_metrics(self):
|
|
"""
|
|
Collect performance metrics (response times, cache hit rates).
|
|
Runs every minute.
|
|
"""
|
|
try:
|
|
metrics = {}
|
|
|
|
response_time = MetricsCollector.get_api_response_time()
|
|
MetricsCollector.record_metric('api_response_time', response_time, 'performance')
|
|
metrics['api_response_time'] = response_time
|
|
|
|
cache_hit_rate = MetricsCollector.get_cache_hit_rate()
|
|
MetricsCollector.record_metric('cache_hit_rate', cache_hit_rate, 'performance')
|
|
metrics['cache_hit_rate'] = cache_hit_rate
|
|
|
|
return {'success': True, 'metrics': metrics}
|
|
except Exception as e:
|
|
logger.error(f"Error in collect_performance_metrics task: {e}", exc_info=True)
|
|
raise
|
|
|
|
|
|
@shared_task(bind=True, name='monitoring.collect_queue_metrics')
|
|
def collect_queue_metrics(self):
|
|
"""
|
|
Collect Celery queue metrics.
|
|
Runs every minute to monitor queue health.
|
|
"""
|
|
try:
|
|
queue_size = MetricsCollector.get_celery_queue_size()
|
|
MetricsCollector.record_metric('celery_queue_size', queue_size, 'system')
|
|
return {'success': True, 'queue_size': queue_size}
|
|
except Exception as e:
|
|
logger.error(f"Error in collect_queue_metrics task: {e}", exc_info=True)
|
|
raise
|