Skip to content

Commit b3e5daf

Browse files
committed
forgot to add the files
1 parent a8a5681 commit b3e5daf

4 files changed

Lines changed: 70 additions & 0 deletions

File tree

src/core/fastapi/__init__.py

Whitespace-only changes.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from .logging import LoggingMiddleware
2+
from .metrics import PrometheusMiddleware
3+
4+
__all__ = ["LoggingMiddleware", "PrometheusMiddleware"]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import logging
2+
import time
3+
4+
from fastapi import Request
5+
from starlette.middleware.base import BaseHTTPMiddleware
6+
7+
logger = logging.getLogger(__name__)
8+
9+
10+
class LoggingMiddleware(BaseHTTPMiddleware):
11+
async def dispatch(self, request: Request, call_next):
12+
start_time = time.perf_counter()
13+
response = await call_next(request)
14+
process_time = time.perf_counter() - start_time
15+
16+
query_params_list = [
17+
(key, value if key != "token" else "***")
18+
for key, value in request.query_params.items()
19+
]
20+
21+
logger.info(
22+
{
23+
"url": request.url.path,
24+
"params": query_params_list,
25+
"process_time": f"{process_time:.4f}",
26+
}
27+
)
28+
return response
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from prometheus_client.metrics import Counter, Histogram
2+
3+
import time
4+
from starlette.middleware.base import BaseHTTPMiddleware
5+
from fastapi import Request
6+
7+
# Define Prometheus metrics
8+
REQUEST_COUNT = Counter(
9+
"request_count", "Total number of requests", ["method", "endpoint", "http_status"]
10+
)
11+
REQUEST_LATENCY = Histogram(
12+
"request_latency_seconds", "Latency of requests in seconds", ["method", "endpoint"]
13+
)
14+
15+
16+
# Middleware for Prometheus metrics logging
17+
class PrometheusMiddleware(BaseHTTPMiddleware):
18+
async def dispatch(self, request: Request, call_next):
19+
REQUEST_COUNT.labels(
20+
method=request.method,
21+
endpoint=request.url.path
22+
).inc()
23+
24+
# Start timer for request latency
25+
start_time = time.perf_counter()
26+
27+
# Process request
28+
response = await call_next(request)
29+
30+
# Calculate request latency
31+
latency = time.perf_counter() - start_time
32+
33+
REQUEST_LATENCY.labels(
34+
method=request.method,
35+
endpoint=request.url.path,
36+
).observe(latency)
37+
38+
return response

0 commit comments

Comments
 (0)