Spaces:
Sleeping
Sleeping
| """Request logging middleware for timing.""" | |
| import time | |
| import logging | |
| from typing import Callable | |
| from fastapi import Request, Response | |
| from starlette.middleware.base import BaseHTTPMiddleware | |
| logger = logging.getLogger(__name__) | |
| class RequestLoggingMiddleware(BaseHTTPMiddleware): | |
| """Middleware to log request processing time.""" | |
| async def dispatch(self, request: Request, call_next: Callable) -> Response: | |
| """Process request with timing.""" | |
| start_time = time.time() | |
| # Log incoming request | |
| logger.info(f"Incoming request: {request.method} {request.url}") | |
| # Process request | |
| response = await call_next(request) | |
| # Calculate processing time | |
| process_time = time.time() - start_time | |
| # Log processing time | |
| logger.info(f"Request processed in {process_time:.4f}s - {request.method} {request.url} - Status: {response.status_code}") | |
| # Add processing time to response headers | |
| response.headers["X-Process-Time"] = str(process_time) | |
| return response |