- Add .env.backup with full application configuration template - Create RequestIDMiddleware for trace ID injection in logs - Implement ARQ fallback pool for Redis unavailability - Add Dead Letter Queue module for failed job handling - Include project ROADMAP with audit and 27 applied corrections - Add Grafana monitoring dashboard with 10 panels
27 lines
929 B
Python
27 lines
929 B
Python
"""
|
|
Middleware RequestID — injecte un identifiant unique de requête (trace_id)
|
|
dans les logs structlog pour le tracing de bout en bout.
|
|
|
|
Usage : le trace_id est disponible dans structlog.contextvars.bind_contextvars(trace_id=...)
|
|
et dans la réponse via l'en-tête X-Request-ID.
|
|
"""
|
|
import uuid
|
|
import structlog
|
|
from starlette.middleware.base import BaseHTTPMiddleware
|
|
from starlette.requests import Request
|
|
from starlette.responses import Response
|
|
|
|
|
|
class RequestIDMiddleware(BaseHTTPMiddleware):
|
|
async def dispatch(self, request: Request, call_next) -> Response:
|
|
trace_id = str(uuid.uuid4())
|
|
|
|
# Injecter dans structlog pour toute la durée de la requête
|
|
structlog.contextvars.bind_contextvars(trace_id=trace_id)
|
|
|
|
response = await call_next(request)
|
|
|
|
# Ajouter l'en-tête dans la réponse pour le client
|
|
response.headers["X-Request-ID"] = trace_id
|
|
return response
|