From 5258da65a55c0a3a7d692d76e40b3dbddae8ea80 Mon Sep 17 00:00:00 2001 From: Lilia Kai Date: Thu, 21 Dec 2023 16:17:34 +0100 Subject: [PATCH] Instrument exceptions by type --- src/main.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main.py b/src/main.py index 71f2ebb..4163ecf 100644 --- a/src/main.py +++ b/src/main.py @@ -12,6 +12,7 @@ from loguru import logger from datetime import datetime import sqlalchemy from prometheus_fastapi_instrumentator import Instrumentator +from prometheus_client import Counter from worker import create_archive_task, create_sheet_task, celery, insert_result_into_db @@ -39,8 +40,13 @@ app.add_middleware( allow_headers=["*"], ) +EXCEPTION_COUNTER = Counter( + "exceptions", + "Number of times a certain exception has occurred.", + labelnames=("types",) +) # prometheus exposed in /metrics with authentication -Instrumentator(should_group_status_codes=False, excluded_handlers=["/metrics"]).instrument(app).expose(app, dependencies=[Depends(get_basic_auth)]) +Instrumentator(should_group_status_codes=False, excluded_handlers=["/metrics"]).instrument(app).expose(app, dependencies=[Depends(get_server_auth)]) app.mount("/static", StaticFiles(directory="static"), name="static") @@ -54,13 +60,18 @@ def get_db(): try: yield session finally: session.close() + # logging configurations logger.add("logs/api_logs.log", retention="30 days", rotation="3 days") @app.middleware("http") async def logging_middleware(request: Request, call_next): - response = await call_next(request) - logger.info(f"{request.client.host}:{request.client.port} {request.method} {request.url._url} - HTTP {response.status_code}") - return response + try: + response = await call_next(request) + logger.info(f"{request.client.host}:{request.client.port} {request.method} {request.url._url} - HTTP {response.status_code}") + return response + except Exception as e: + EXCEPTION_COUNTER.labels(type(e).__name__).inc() + raise e @app.get("/") async def home(request: Request):