diff --git a/datadog_checks_base/changelog.d/24905.added b/datadog_checks_base/changelog.d/24905.added new file mode 100644 index 0000000000000..28afc86815a98 --- /dev/null +++ b/datadog_checks_base/changelog.d/24905.added @@ -0,0 +1 @@ +Implement the ``agent_version`` property on the ``DatabaseCheck`` base class. diff --git a/datadog_checks_base/datadog_checks/base/checks/db.py b/datadog_checks_base/datadog_checks/base/checks/db.py index d604bbfba8212..40464d905fe76 100644 --- a/datadog_checks_base/datadog_checks/base/checks/db.py +++ b/datadog_checks_base/datadog_checks/base/checks/db.py @@ -28,6 +28,7 @@ class DatabaseCheck(AgentCheck): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._agent_hostname = None + self._agent_version = None self._database_identifier = None self._dbms_fallback_warning_logged = False self.tag_manager = TagManager() @@ -165,6 +166,12 @@ def agent_hostname(self) -> str: self._agent_hostname = datadog_agent.get_hostname() return self._agent_hostname + @property + def agent_version(self) -> str: + if self._agent_version is None: + self._agent_version = datadog_agent.get_version() + return self._agent_version + @property def dbms(self) -> str: """ diff --git a/datadog_checks_base/tests/base/checks/test_database_check.py b/datadog_checks_base/tests/base/checks/test_database_check.py index 8e142f2819409..69fa217878725 100644 --- a/datadog_checks_base/tests/base/checks/test_database_check.py +++ b/datadog_checks_base/tests/base/checks/test_database_check.py @@ -71,6 +71,15 @@ def test_agent_hostname_resolves_once_and_caches(): assert get_hostname.call_count == 1 +def test_agent_version_resolves_once_and_caches(): + check = FakeDatabaseCheck("test", {}, [{}]) + # The version comes from an FFI call, so it should only be resolved once and cached. + with mock.patch.object(datadog_agent, "get_version", return_value="7.70.0") as get_version: + assert check.agent_version == "7.70.0" + assert check.agent_version == "7.70.0" + assert get_version.call_count == 1 + + @pytest.mark.parametrize( ("tags", "template", "connection_params", "expected"), [