- Implement tests for database generator to ensure proper session handling. - Create tests for EXIF extraction and conversion functions. - Add tests for image-related endpoints, ensuring proper data retrieval and isolation between clients. - Develop tests for OCR functionality, including language detection and text extraction. - Introduce tests for the image processing pipeline, covering success and failure scenarios. - Validate rate limiting functionality and ensure independent counters for different clients. - Implement scraper tests to verify HTML content fetching and error handling. - Add unit tests for various services, including storage and filename generation. - Establish worker entry point for ARQ to handle background image processing tasks.
42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
"""
|
|
Middleware de logging HTTP — enregistre chaque requête avec structlog.
|
|
|
|
Exclut les endpoints de santé (/health, /metrics) pour réduire le bruit.
|
|
"""
|
|
import time
|
|
import logging
|
|
from starlette.middleware.base import BaseHTTPMiddleware
|
|
from starlette.requests import Request
|
|
from starlette.responses import Response
|
|
|
|
logger = logging.getLogger("http")
|
|
|
|
# Chemins exclus du logging
|
|
_EXCLUDED_PATHS = {"/health", "/health/detailed", "/metrics", "/favicon.ico"}
|
|
|
|
|
|
class LoggingMiddleware(BaseHTTPMiddleware):
|
|
async def dispatch(self, request: Request, call_next) -> Response:
|
|
if request.url.path in _EXCLUDED_PATHS:
|
|
return await call_next(request)
|
|
|
|
start = time.monotonic()
|
|
client_id = getattr(request.state, "client_id", "anonymous")
|
|
|
|
response = await call_next(request)
|
|
|
|
duration_ms = int((time.monotonic() - start) * 1000)
|
|
|
|
logger.info(
|
|
"http.request",
|
|
extra={
|
|
"method": request.method,
|
|
"path": request.url.path,
|
|
"status": response.status_code,
|
|
"duration_ms": duration_ms,
|
|
"client_id": str(client_id),
|
|
},
|
|
)
|
|
|
|
return response
|