From: Vasek Sraier Date: Mon, 7 Feb 2022 10:11:24 +0000 (+0100) Subject: manager: measuring reconfiguration request latency X-Git-Tag: v6.0.0a1~43^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c7f0b9e2bb981aa8efffafbd3d5a978825600d8;p=thirdparty%2Fknot-resolver.git manager: measuring reconfiguration request latency --- diff --git a/manager/knot_resolver_manager/server.py b/manager/knot_resolver_manager/server.py index d1f520d5f..245bbe496 100644 --- a/manager/knot_resolver_manager/server.py +++ b/manager/knot_resolver_manager/server.py @@ -141,6 +141,7 @@ class Server: } ) + @statistics.async_timing_histogram(statistics.MANAGER_REQUEST_RECONFIGURE_LATENCY) async def _handler_apply_config(self, request: web.Request) -> web.Response: """ Route handler for changing resolver configuration diff --git a/manager/knot_resolver_manager/statistics.py b/manager/knot_resolver_manager/statistics.py index 653d5888c..060985cdd 100644 --- a/manager/knot_resolver_manager/statistics.py +++ b/manager/knot_resolver_manager/statistics.py @@ -1,5 +1,5 @@ import json -from typing import Any +from typing import Any, Coroutine from prometheus_client import Counter, Histogram, exposition @@ -82,6 +82,18 @@ KRESD_ANSWER_FLAG_EDNS0 = Counter( KRESD_QUERY_EDNS = Counter("kresd_query_edns", "number of queries with EDNS present", labelnames=["instance_id"]) KRESD_QUERY_DNSSEC = Counter("kresd_query_dnssec", "number of queries with DNSSEC DO=1", labelnames=["instance_id"]) +MANAGER_REQUEST_RECONFIGURE_LATENCY = Histogram("manager_request_reconfigure_latency", "Time it takes to change configuration") + + +def async_timing_histogram(metric: Histogram): + def decorator(func: Coroutine[Any, Any, Any]): + async def wrapper(*args, **kwargs): + with metric.time(): + res = await func(*args, **kwargs) + return res + return wrapper + return decorator + def _generate_instance_metrics(instance_id: KresID, metrics: Any) -> None: # Uses private fields in order to translate kresd statistics into prometheus's library internal objects.