]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: measuring reconfiguration request latency
authorVasek Sraier <git@vakabus.cz>
Mon, 7 Feb 2022 10:11:24 +0000 (11:11 +0100)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 8 Apr 2022 14:17:54 +0000 (16:17 +0200)
manager/knot_resolver_manager/server.py
manager/knot_resolver_manager/statistics.py

index d1f520d5fd77ef77f27459c1a3defdb65ffb89af..245bbe496d8d4018d1ed628ac5722df6cc442623 100644 (file)
@@ -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
index 653d5888c75db0f269cf6508600ca2ae499bd404..060985cdd2b2d44c6f9a47a6755f4a650907a7d0 100644 (file)
@@ -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.