From e982323b88d67ee61051c688bb10401758d98f74 Mon Sep 17 00:00:00 2001 From: keep94 Date: Fri, 16 Sep 2022 15:11:48 -0700 Subject: [PATCH] Add version as tag to internal metrics. (#100) --- .github/workflows/main.yml | 5 ++--- setup.py | 2 +- test/test_client.py | 17 +++++++++++++++++ wavefront_sdk/client.py | 2 ++ wavefront_sdk/common/utils.py | 26 ++++++++++++++++++++------ 5 files changed, 42 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1eb30ed..5f4b3b2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,10 +2,9 @@ name: Linters & Tests on: push: + branches: [ master ] pull_request: - types: - - opened - - reopened + branches: [ master ] workflow_call: inputs: env_yml: diff --git a/setup.py b/setup.py index 1ce2e4b..da0c4f0 100755 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ setuptools.setup( name='wavefront-sdk-python', - version='1.8.11', # The version number. Update with each pull request. + version='1.8.12', # The version number. Update with each pull request. author='Wavefront by VMware', url='https://github.com/wavefrontHQ/wavefront-sdk-python', license='Apache-2.0', diff --git a/test/test_client.py b/test/test_client.py index b3c52e3..8faf775 100644 --- a/test/test_client.py +++ b/test/test_client.py @@ -12,6 +12,7 @@ import requests from wavefront_sdk.client import WavefrontClient +from wavefront_sdk.common.metrics import registry from wavefront_sdk.entities.tracing.span_log import SpanLog @@ -29,6 +30,22 @@ def setUp(self): self._response = Mock() self._response.status_code = 200 + def test_send_version_with_internal_metrics(self): + no_registry = registry.WavefrontSdkMetricsRegistry( + wf_metric_sender=None) + with patch.object( + registry, + 'WavefrontSdkMetricsRegistry', + return_value=no_registry) as mock_registry: + WavefrontClient( + 'no_server', + 'no_token', + flush_interval_seconds=86400, + enable_internal_metrics=True) + self.assertRegex( + mock_registry.call_args[1]['tags']['version'], + r'^(v\d+\.\d+\.\d+)|(unknown)$') + def test_send_span_with_span_logs(self): self._sender.send_span( diff --git a/wavefront_sdk/client.py b/wavefront_sdk/client.py index 06ac9d5..177c8bc 100644 --- a/wavefront_sdk/client.py +++ b/wavefront_sdk/client.py @@ -92,8 +92,10 @@ def __init__(self, server, token, max_queue_size=50000, batch_size=10000, ingestion_type = 'proxy' if enable_internal_metrics: + version = utils.get_version(constants.WAVEFRONT_SDK_PYTHON) self._sdk_metrics_registry = registry.WavefrontSdkMetricsRegistry( wf_metric_sender=self, + tags={'version': version}, prefix=f'{constants.SDK_METRIC_PREFIX}' f'.core.sender.{ingestion_type}' ) diff --git a/wavefront_sdk/common/utils.py b/wavefront_sdk/common/utils.py index f64075f..3115a32 100644 --- a/wavefront_sdk/common/utils.py +++ b/wavefront_sdk/common/utils.py @@ -435,21 +435,35 @@ def event_to_json(name, start_time, end_time, source, tags, return str(json.dumps(event)) -def get_sem_ver(name): - """Return semantic version of sdk used in Wavefront reportable format. - - Ex: .<2-digit-minor><2-digit-patch> (1.0603 => v1.6.3) +def get_version(name): + """Return semantic version of sdk used ex: 'v1.6.3'. @param name: SDK Name @type name: str - @return: Semantic version in wavefront format as String + @return: The version of this library. ex: 'v1.6.3' If version can't be + found, returns 'unknown' """ try: version = pkg_resources.require(name)[0].version - return get_sem_ver_value(version) + return "v" + version except pkg_resources.DistributionNotFound: LOGGER.warning('Unable to get version info,' ' No distribution found for : %s', name) + return "unknown" + + +def get_sem_ver(name): + """Return semantic version of sdk used in Wavefront reportable format. + + Ex: .<2-digit-minor><2-digit-patch> (1.0603 => v1.6.3) + + @param name: SDK Name + @type name: str + @return: Semantic version in wavefront format as String. Ex: '1.0603' + """ + version = get_version(name) + if version.startswith('v'): + return get_sem_ver_value(version[1:]) return "0.0"