Spaces:
Sleeping
Sleeping
Download app/middleware/logging.py from rriviere/attrition-api-dev: direct link, hf CLI and curl.
- Browser
- Download file 1.04 kB
-
https://huggingface.co/spaces/rriviere/attrition-api-dev/resolve/main/app/middleware/logging.py
- Command line
-
hf download hf://spaces/rriviere/attrition-api-dev/app/middleware/logging.py
-
curl -L -o logging.py https://huggingface.co/spaces/rriviere/attrition-api-dev/resolve/main/app/middleware/logging.py
1.04 kB
| import time | |
| from starlette.middleware.base import BaseHTTPMiddleware | |
| from app.db import crud | |
| from fastapi import Request | |
| class LoggingMiddleware(BaseHTTPMiddleware): | |
| async def dispatch(self, request: Request, call_next): | |
| # Ignore les routes non enregistrées (ex: /docs, /openapi.json) | |
| if request.url.path not in request.app.state.logged_paths: | |
| return await call_next(request) | |
| start = time.time() | |
| response = await call_next(request) | |
| response_time_ms = (time.time() - start) * 1000 | |
| prediction_id = getattr(request.state, "prediction_id", None) | |
| db = request.app.state.SessionLocal() | |
| try: | |
| crud.log_request( | |
| db=db, | |
| endpoint=request.url.path, | |
| method=request.method, | |
| status_code=response.status_code, | |
| response_time_ms=round(response_time_ms, 2), | |
| prediction_id=prediction_id, | |
| ) | |
| finally: | |
| db.close() | |
| return response | |