Skip to content

Commit d267a18

Browse files
authored
Merge pull request #148 from mlibrary/fastapi-metrics
Fastapi prometheus metrics
2 parents 43c230f + a003189 commit d267a18

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

api/catalog_api/main.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from fastapi import FastAPI, HTTPException
2+
from prometheus_fastapi_instrumentator import Instrumentator
3+
from prometheus_client import Histogram
4+
25
from catalog_api import schemas
36
from catalog_api.solr_client import NotFoundError
47
from catalog_api.record import record_for
@@ -7,6 +10,13 @@
710
title="Catalog Search API", description="REST API for Catalog Search Solr"
811
)
912

13+
Instrumentator().instrument(app).expose(app)
14+
15+
RECORD_HISTOGRAM = Histogram(
16+
"catalog_api_record_request_duration_seconds",
17+
"Length of api request for a catalog record",
18+
)
19+
1020

1121
@app.get(
1222
"/records/{id}",
@@ -18,6 +28,7 @@
1828
},
1929
response_model_exclude_none=True,
2030
)
31+
@RECORD_HISTOGRAM.time()
2132
def get_record(id: str) -> schemas.Record:
2233
"""
2334
Gets a record from catalog solr. The record is fetched by the solr id, which

api/catalog_api/solr_client.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
import requests
22
from requests.auth import HTTPBasicAuth
33
from catalog_api.services import S
4+
from prometheus_client import Histogram
45

56

67
class NotFoundError(Exception):
78
pass
89

910

1011
class SolrClient:
12+
SOLR_HISTOGRAM = Histogram(
13+
"catalog_api_solr_record_request_duration_seconds", "Length of solr requests"
14+
)
15+
1116
def __init__(self) -> None:
1217
self.session = requests.Session()
1318
self.base_url = f"{S.solr_url}/solr/biblio"
1419
if S.solr_cloud_on:
1520
self.session.auth = HTTPBasicAuth(S.solr_user, S.solr_password)
1621

22+
@SOLR_HISTOGRAM.time()
1723
def get_record(self, id: str):
1824
params = {"q": f"id:{id}"}
1925
url = f"{self.base_url}/select"

api/poetry.lock

Lines changed: 30 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ fastapi = "^0.115.11"
1818
uvicorn = "^0.34.0"
1919
httpx = "^0.28.1"
2020
pymarc = "^5.2.3"
21+
prometheus-fastapi-instrumentator = "^7.1.0"
2122

2223

2324
[tool.poetry.group.dev.dependencies]

0 commit comments

Comments
 (0)