Spaces:
Sleeping
Sleeping
Delete app/services/metrics.py
Browse files- app/services/metrics.py +0 -74
app/services/metrics.py
DELETED
|
@@ -1,74 +0,0 @@
|
|
| 1 |
-
# app/monitoring/metrics.py
|
| 2 |
-
import time
|
| 3 |
-
from typing import Dict, Any
|
| 4 |
-
from starlette.middleware.base import BaseHTTPMiddleware
|
| 5 |
-
from starlette.requests import Request
|
| 6 |
-
from starlette.responses import Response
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
# =========================
|
| 10 |
-
# Simple Metrics Storage
|
| 11 |
-
# =========================
|
| 12 |
-
_metrics: Dict[str, Any] = {
|
| 13 |
-
"total_requests": 0,
|
| 14 |
-
"requests_by_endpoint": {},
|
| 15 |
-
"requests_by_status": {},
|
| 16 |
-
"total_latency_ms": 0.0,
|
| 17 |
-
"start_time": time.time(),
|
| 18 |
-
}
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
# =========================
|
| 22 |
-
# Metrics Middleware
|
| 23 |
-
# =========================
|
| 24 |
-
class MetricsMiddleware(BaseHTTPMiddleware):
|
| 25 |
-
"""Middleware to collect request metrics"""
|
| 26 |
-
|
| 27 |
-
async def dispatch(self, request: Request, call_next):
|
| 28 |
-
start_time = time.time()
|
| 29 |
-
|
| 30 |
-
# Process request
|
| 31 |
-
response = await call_next(request)
|
| 32 |
-
|
| 33 |
-
# Calculate latency
|
| 34 |
-
process_time = (time.time() - start_time) * 1000 # ms
|
| 35 |
-
|
| 36 |
-
# Update metrics
|
| 37 |
-
_metrics["total_requests"] += 1
|
| 38 |
-
_metrics["total_latency_ms"] += process_time
|
| 39 |
-
|
| 40 |
-
endpoint = request.url.path
|
| 41 |
-
_metrics["requests_by_endpoint"][endpoint] = (
|
| 42 |
-
_metrics["requests_by_endpoint"].get(endpoint, 0) + 1
|
| 43 |
-
)
|
| 44 |
-
|
| 45 |
-
status = str(response.status_code)
|
| 46 |
-
_metrics["requests_by_status"][status] = (
|
| 47 |
-
_metrics["requests_by_status"].get(status, 0) + 1
|
| 48 |
-
)
|
| 49 |
-
|
| 50 |
-
return response
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
# =========================
|
| 54 |
-
# Metrics Endpoint
|
| 55 |
-
# =========================
|
| 56 |
-
def metrics_endpoint(request: Request) -> Dict[str, Any]:
|
| 57 |
-
"""
|
| 58 |
-
Return metrics in JSON format.
|
| 59 |
-
Compatible with Prometheus text format if needed.
|
| 60 |
-
"""
|
| 61 |
-
uptime = time.time() - _metrics["start_time"]
|
| 62 |
-
avg_latency = (
|
| 63 |
-
_metrics["total_latency_ms"] / _metrics["total_requests"]
|
| 64 |
-
if _metrics["total_requests"] > 0
|
| 65 |
-
else 0.0
|
| 66 |
-
)
|
| 67 |
-
|
| 68 |
-
return {
|
| 69 |
-
"total_requests": _metrics["total_requests"],
|
| 70 |
-
"requests_by_endpoint": _metrics["requests_by_endpoint"],
|
| 71 |
-
"requests_by_status": _metrics["requests_by_status"],
|
| 72 |
-
"average_latency_ms": round(avg_latency, 2),
|
| 73 |
-
"uptime_seconds": round(uptime, 2),
|
| 74 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|