使用自定义 python 装饰器接受带有 cherrypy 公开端点的参数

Using a custom python decorator accepting arguments with a cherrypy exposed endpoint

我正在尝试使用 prometheus.There 来监控应用程序的延迟,这是一个装饰器函数,它计算一个函数到 execute.Now 所花费的时间,因为我用一个 cherrypy 暴露的端点包装它,没有来自它的回应。

我也尝试过在我的装饰器上使用 @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"

我没有返回来自 cherrypy 端点的响应结果,issue.The 正确的代码应该是。

    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