Двойные аннотации/декораторы клиента Prometheus и FastAPI для одной и той же функции не работают должным образом.Python

Программы на Python
Anonymous
Двойные аннотации/декораторы клиента Prometheus и FastAPI для одной и той же функции не работают должным образом.

Сообщение Anonymous »

У меня есть вариант использования, когда мне нужно иметь два типа аннотации декоратора для одной функции. У меня есть конечная точка отдыха, для которой мне нужно собирать метрики с помощью клиентского модуля Prometheus. Я пытаюсь сделать что-то подобное, но это не работает.

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

rest_app = APIRouter(prefix='/rest')
TIME_METRICS_ANNOTATION = Gauge('request_time_taken', 'Time Taken for My Endpoint')

@TIME_METRICS_ANNOTATION.time()
@rest_app.post("/endpoint")
async def my_endpoint(request: Request):
# body
Я тоже пробовал менять местами аннотации, но вступает в силу только то, что находится непосредственно над определением метода, а не другое.
Я' Я знаю, что есть и другие способы сделать это, но первоначальный подход с аннотациями будет более чистым кодом.

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

@rest_app.post("/endpoint")
async def my_endpoint(request: Request):
start_time = time.process_time()
# body
TIME_METRICS_ANNOTATION.set(time.process_time() - start_time)
или

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

@rest_app.post("/endpoint")
async def my_endpoint(request: Request):
my_endpoint_body(request)

@TIME_METRICS_ANNOTATION.time()
def my_endpoint_body(request: Request):
# body
Любая помощь приветствуется.
Запрос к примечанию: существует ли встроенный декоратор для типа счетчика? Я столкнулся с проблемами, поскольку Counter.inc() не является вызываемым, в отличие от Gauge.time() или Summary.time()

Подробнее здесь: https://stackoverflow.com/questions/786 ... ction-is-n

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