Как добавить промежуточное программное обеспечение в быстрый API, чтобы создать метрики для отслеживания времени, проведPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как добавить промежуточное программное обеспечение в быстрый API, чтобы создать метрики для отслеживания времени, провед

Сообщение Anonymous »

Я добавляю промежуточное программное обеспечение в свое приложение Fast API, чтобы создать метрики Prometheus, чтобы получить время обработки и количество запросов на маршрут. Кто -нибудь может сказать мне, что мне не хватает?

Код: Выделить всё

import time

from fastapi import Request
from prometheus_client import Summary, make_asgi_app, CollectorRegistry
from starlette.middleware.base import BaseHTTPMiddleware

registry = CollectorRegistry()
metrics_app = make_asgi_app(registry=registry)
summary_metrics = {}

class MyMiddleware:

def __init__(
self, app
):
self.app = app

route_names = [r.name for r in app.routes]
if len(set(route_names)) != len(route_names):
raise Exception("Route names must be unique")

for route_name in route_names:
if route_name is not None:
summary_metrics[route_name] = Summary(route_name, f'{route_name} processing time', registry=registry)

async def __call__(self, request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
if request.scope.get('route'):
summary_metrics.get(request.scope.get('route')).observe(process_time)
return response
< /code>
Это мое приложение.py < /p>
app.include_router(some_valid_router)
app.mount("/metrics", metrics_app)
my_middleware = MyMiddleware(app)
app.add_middleware(BaseHTTPMiddleware, dispatch=my_middleware)

if __name__ == "__main__":
LOGGER.info("Starting up the application")
uvicorn_logger = (
UVICORN_LOG_CONFIG if config["CUSTOM_UVICORN_LOGGING"].lower() == "y" else None
)
if uvicorn_logger:
uvicorn.run(
"app:app",
host="0.0.0.0",
port=int(config["PORT"]),
reload=config["DEBUG"],
log_config=uvicorn_logger,
)
else:
uvicorn.run(
"app:app", host="0.0.0.0", port=int(config["PORT"]), reload=config["DEBUG"]
)

Я получаю значение ValueError: дублированные времена в коллекционере: Ошибка, если у меня есть my_middleware = mymiddleware (app) app.add_middleware (basehttpmiddle, dispatch = my_middleware) за пределами __main __ , и Metry enpoint ye is IS It Metry ye is Is Metry if It Metric Is It Matrics Is It Matic Is It Metrics Is It Matic Is It Matis Is It Matic Is It Matrics Is It Matrics Is It Matrics Is It Matis Is It Matrics IS It Matrics Is It Metric. В начале __main __ .
Я вижу общее количество запросов и общее время, проведенное, если я изменю свое промежуточное программное обеспечение на ниже и перемещаю app.add_middleware на внешнюю часть __main __ .
import time

from fastapi import Request
from prometheus_client import Summary, make_asgi_app, CollectorRegistry
from starlette.middleware.base import BaseHTTPMiddleware

registry = CollectorRegistry()
metrics_app = make_asgi_app(registry=registry)
summary_metrics = {}
REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request', registry=registry)

class MyMiddleware:

def __init__(
self, app
):
self.app = app

async def __call__(self, request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
REQUEST_TIME.observe(process_time)
return response

< /code>
может кто -нибудь сказать мне, что я делаю не так? Это мое первое взаимодействие с быстрым API. Пожалуйста, дайте мне знать, если мой подход должен быть исправлен или есть лучшие способы получить время обработки и количество запросов на метрики маршрута.
Спасибо !!

Подробнее здесь: https://stackoverflow.com/questions/773 ... -spent-and
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»