Spaces:
Runtime error
Runtime error
File size: 1,832 Bytes
6a5b8d8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
"""
Custom middleware for the application
"""
from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.responses import Response
import logging
import time
from typing import Callable
logger = logging.getLogger(__name__)
class RequestLoggerMiddleware(BaseHTTPMiddleware):
"""Middleware for logging requests"""
async def dispatch(self, request: Request, call_next: Callable) -> Response:
start_time = time.time()
# Get request details
method = request.method
url = str(request.url)
try:
# Process the request
response = await call_next(request)
# Calculate processing time
process_time = time.time() - start_time
# Log the request details
logger.info(
f"Request: {method} {url} - Status: {response.status_code} - "
f"Processing Time: {process_time:.3f}s"
)
return response
except Exception as e:
logger.error(
f"Request failed: {method} {url} - Error: {str(e)}"
)
raise
class ErrorHandlerMiddleware(BaseHTTPMiddleware):
"""Middleware for handling errors"""
async def dispatch(self, request: Request, call_next: Callable) -> Response:
try:
return await call_next(request)
except Exception as e:
# Log the error
logger.error(f"Unhandled error: {str(e)}", exc_info=True)
# Return error response
return Response(
content={"detail": "Internal server error"},
status_code=500
)
|