From 0ff9fa738a934879f2fa4ffc9d1b08f7aa9d71a4 Mon Sep 17 00:00:00 2001 From: Jerome Vizcaino Date: Fri, 12 Oct 2018 15:24:51 +0200 Subject: [PATCH] base: add check name to Limiter warning message --- datadog_checks_base/datadog_checks/base/checks/base.py | 2 +- .../datadog_checks/base/utils/limiter.py | 6 ++++-- datadog_checks_base/tests/test_utils.py | 10 +++++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/datadog_checks_base/datadog_checks/base/checks/base.py b/datadog_checks_base/datadog_checks/base/checks/base.py index 2afbe7a292f55..f4d63a3d0e7bb 100644 --- a/datadog_checks_base/datadog_checks/base/checks/base.py +++ b/datadog_checks_base/datadog_checks/base/checks/base.py @@ -133,7 +133,7 @@ def __init__(self, *args, **kwargs): except Exception: metric_limit = self.DEFAULT_METRIC_LIMIT if metric_limit > 0: - self.metric_limiter = Limiter("metrics", metric_limit, self.warning) + self.metric_limiter = Limiter(self.name, "metrics", metric_limit, self.warning) @property def in_developer_mode(self): diff --git a/datadog_checks_base/datadog_checks/base/utils/limiter.py b/datadog_checks_base/datadog_checks/base/utils/limiter.py index 3ee20dae0283c..b16e152a0aeac 100644 --- a/datadog_checks_base/datadog_checks/base/utils/limiter.py +++ b/datadog_checks_base/datadog_checks/base/utils/limiter.py @@ -9,8 +9,9 @@ class Limiter(object): It is used by the AgentCheck class to limit the number of sets of tags that can be set by an instance. """ - def __init__(self, object_name, object_limit, warning_func=None): + def __init__(self, check_name, object_name, object_limit, warning_func=None): """ + :param check_name: name of the check using this limiter :param object_name: (plural) name of counted objects for warning wording :param object_limit: maximum number of objects to accept before limiting :param warning_func: callback function, called with a string when limit is exceeded @@ -18,6 +19,7 @@ def __init__(self, object_name, object_limit, warning_func=None): self.warning = warning_func self.name = object_name self.limit = object_limit + self.check_name = check_name self.reached_limit = False self.count = 0 @@ -55,7 +57,7 @@ def is_reached(self, uid=None): if self.count > self.limit: if self.warning: - self.warning("Exceeded limit of {} {}, ignoring next ones".format(self.limit, self.name)) + self.warning("Check {} exceeded limit of {} {}, ignoring next ones".format(self.check_name, self.limit, self.name)) self.reached_limit = True return True return False diff --git a/datadog_checks_base/tests/test_utils.py b/datadog_checks_base/tests/test_utils.py index 00b98058f81db..5ac5f38f4c951 100644 --- a/datadog_checks_base/tests/test_utils.py +++ b/datadog_checks_base/tests/test_utils.py @@ -57,7 +57,7 @@ def test_key_function(self): class TestLimiter(): def test_no_uid(self): warnings = [] - limiter = Limiter("names", 10, warning_func=warnings.append) + limiter = Limiter("my_check", "names", 10, warning_func=warnings.append) for i in range(0, 10): assert limiter.is_reached() is False assert limiter.get_status() == (10, 10, False) @@ -65,7 +65,7 @@ def test_no_uid(self): # Reach limit assert limiter.is_reached() is True assert limiter.get_status() == (11, 10, True) - assert warnings == ["Exceeded limit of 10 names, ignoring next ones"] + assert warnings == ["Check my_check exceeded limit of 10 names, ignoring next ones"] # Make sure warning is only sent once assert limiter.is_reached() is True @@ -73,7 +73,7 @@ def test_no_uid(self): def test_with_uid(self): warnings = [] - limiter = Limiter("names", 10, warning_func=warnings.append) + limiter = Limiter("my_check", "names", 10, warning_func=warnings.append) for i in range(0, 20): assert limiter.is_reached("dummy1") is False assert limiter.get_status() == (1, 10, False) @@ -84,7 +84,7 @@ def test_with_uid(self): assert len(warnings) == 0 def test_mixed(self): - limiter = Limiter("names", 10) + limiter = Limiter("my_check", "names", 10) for i in range(0, 20): assert limiter.is_reached("dummy1") is False @@ -95,7 +95,7 @@ def test_mixed(self): assert limiter.get_status() == (6, 10, False) def test_reset(self): - limiter = Limiter("names", 10) + limiter = Limiter("my_check", "names", 10) for i in range(1, 20): limiter.is_reached("dummy1")