Использование собственного декоратора Python, принимающего аргументы с открытой конечной точкой - PullRequest
0 голосов
/ 17 октября 2019

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

Я также пытался использовать @ cherrypy.tools.register ('before_handler') поверх моего декоратора, а затем присоединяя его как @ cherrypy.tools.monitor_request (), но он будет через исключение аргумента в качестве декораторапринимает функцию.

def monitor_request(func):
    def inner1(*args, **kwargs):
        begin = time.time()
        func(*args, **kwargs)
        end = time.time()
        diff = end-begin
        REQUEST_LATENCY.labels(func.__name__).observe(diff)
        REQUEST_COUNT.labels(func.__name__).inc()
    return inner1


@cherrypy.expose
@monitor_request
def health1(self):
    """Give back health status"""
    return "is_healthy"

1 Ответ

1 голос
/ 19 октября 2019

Я не возвращал результат ответа от конечной точки cherrypy, которая была проблемой. Правильный код должен быть.

    def inner1(*args, **kwargs):
        begin = time.time()
        x = func(*args, **kwargs)
        end = time.time()
        diff = end-begin
        REQUEST_LATENCY.labels(func.__name__).observe(diff)
        REQUEST_COUNT.labels(func.__name__).inc()
        return x
    return inner1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...