Skip to content

Commit 316a15e

Browse files
committed
feat: add prometheus /metrics endpoint
- Add prometheus_client metrics (requests, latency, extractions) - Add /metrics endpoint for Grafana/Prometheus scraping
1 parent 0031662 commit 316a15e

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

api/main.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@
4141
)
4242
logger = logging.getLogger(__name__)
4343

44+
# Prometheus metrics
45+
from prometheus_client import Counter, Histogram, Gauge, generate_latest, CONTENT_TYPE_LATEST
46+
from starlette.responses import Response
47+
48+
REQUESTS_TOTAL = Counter('chart2csv_requests_total', 'Total requests', ['endpoint', 'status'])
49+
REQUEST_LATENCY = Histogram('chart2csv_request_latency_seconds', 'Request latency', ['endpoint'])
50+
EXTRACTIONS_TOTAL = Counter('chart2csv_extractions_total', 'Total extractions', ['mode', 'chart_type'])
51+
ACTIVE_REQUESTS = Gauge('chart2csv_active_requests', 'Active requests')
52+
4453

4554
# --- Models ---
4655

@@ -375,6 +384,12 @@ async def health():
375384
)
376385

377386

387+
@app.get("/metrics")
388+
async def metrics():
389+
"""Prometheus metrics endpoint."""
390+
return Response(content=generate_latest(), media_type=CONTENT_TYPE_LATEST)
391+
392+
378393
@v1_router.post("/extract", response_model=ExtractionResult)
379394
async def extract_data_v1(
380395
file: UploadFile = File(..., description="Chart image (PNG, JPG, WebP)"),

0 commit comments

Comments
 (0)