diff --git a/datadog_checks_base/datadog_checks/base/checks/base.py b/datadog_checks_base/datadog_checks/base/checks/base.py index 42c753ef18fe2..80aa36c27112e 100644 --- a/datadog_checks_base/datadog_checks/base/checks/base.py +++ b/datadog_checks_base/datadog_checks/base/checks/base.py @@ -2,6 +2,7 @@ # All rights reserved # Licensed under a 3-clause BSD style license (see LICENSE) import copy +import importlib import inspect import json import logging @@ -133,6 +134,9 @@ class except the :py:meth:`check` method but sometimes it might be useful for a # Only new checks or checks on Agent 6.13+ can and should use this for HTTP requests. self._http = None + # Save the dynamically detected integration version + self._check_version = None + # TODO: Remove with Agent 5 # Set proxy settings self.proxies = self._get_requests_proxy() @@ -201,6 +205,19 @@ def http(self): return self._http + @property + def check_version(self): + if self._check_version is None: + # 'datadog_checks.....' + module_parts = self.__module__.split('.') + package_path = '.'.join(module_parts[:2]) + package = importlib.import_module(package_path) + + # Provide a default just in case + self._check_version = getattr(package, '__version__', '0.0.0') + + return self._check_version + @property def in_developer_mode(self): self._log_deprecation('in_developer_mode') diff --git a/datadog_checks_base/tests/test_agent_check.py b/datadog_checks_base/tests/test_agent_check.py index c70e148c87855..06f2e4b2e496e 100644 --- a/datadog_checks_base/tests/test_agent_check.py +++ b/datadog_checks_base/tests/test_agent_check.py @@ -8,6 +8,7 @@ from six import PY3 from datadog_checks.base import AgentCheck +from datadog_checks.base import __version__ as base_package_version from datadog_checks.base.checks.base import datadog_agent @@ -28,6 +29,12 @@ def test_instance(): assert check.instances == [{'bar': 'baz'}] +def test_check_version(): + check = AgentCheck() + + assert check.check_version == base_package_version + + def test_load_config(): assert AgentCheck.load_config("raw_foo: bar") == {'raw_foo': 'bar'}