Set up auto metric collection

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.
This commit is contained in:
gpt-engineer-app[bot]
2025-11-11 02:09:55 +00:00
parent be94b4252c
commit e2b0368a62
8 changed files with 780 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
"""
Middleware for tracking API response times and error rates.
"""
import time
import logging
from django.core.cache import cache
from django.utils.deprecation import MiddlewareMixin
logger = logging.getLogger(__name__)
class MetricsMiddleware(MiddlewareMixin):
"""
Middleware to track API response times and error rates.
Stores metrics in cache for periodic collection.
"""
def process_request(self, request):
"""Record request start time."""
request._metrics_start_time = time.time()
return None
def process_response(self, request, response):
"""Record response time and update metrics."""
if hasattr(request, '_metrics_start_time'):
response_time = (time.time() - request._metrics_start_time) * 1000 # Convert to ms
# Store response time in cache for aggregation
cache_key = 'metrics:response_times'
response_times = cache.get(cache_key, [])
response_times.append(response_time)
# Keep only last 100 response times
if len(response_times) > 100:
response_times = response_times[-100:]
cache.set(cache_key, response_times, 300) # 5 minute TTL
# Track cache hits/misses
if response.status_code == 200:
cache.incr('metrics:cache_hits', 1)
return response
def process_exception(self, request, exception):
"""Track exceptions and error rates."""
logger.error(f"Exception in request: {exception}", exc_info=True)
# Increment error counter
cache.incr('metrics:cache_misses', 1)
return None