From 5b90bf2789a06ba8cca1024ecf7e56b277add3df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Herv=C3=A9?= Date: Wed, 5 Jun 2019 13:57:53 +0200 Subject: [PATCH] Encode hostname in set_external_tags The go code is expecting bytes, let's make sure that's what we've sent. --- .../datadog_checks/base/checks/base.py | 14 +++++++++----- datadog_checks_base/tests/test_agent_check.py | 11 +++++++++++ datadog_checks_base/tox.ini | 2 +- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/datadog_checks_base/datadog_checks/base/checks/base.py b/datadog_checks_base/datadog_checks/base/checks/base.py index de6e79d4d372e..e4414eb408045 100644 --- a/datadog_checks_base/datadog_checks/base/checks/base.py +++ b/datadog_checks_base/datadog_checks/base/checks/base.py @@ -17,7 +17,7 @@ from ..config import is_affirmative from ..constants import ServiceCheck from ..utils.agent.debug import enter_pdb -from ..utils.common import ensure_bytes, ensure_unicode +from ..utils.common import ensure_bytes, ensure_unicode, to_string from ..utils.http import RequestsWrapper from ..utils.limiter import Limiter from ..utils.proxy import config_proxy_skip @@ -333,10 +333,12 @@ def set_external_tags(self, external_tags): # ('hostname2', {'src2_name': ['test2:t3']}) # ] try: - for _, source_map in external_tags: + new_tags = [] + for hostname, source_map in external_tags: + new_tags.append((to_string(hostname), source_map)) for src_name, tags in iteritems(source_map): source_map[src_name] = self._normalize_tags_type(tags) - datadog_agent.set_external_tags(external_tags) + datadog_agent.set_external_tags(new_tags) except IndexError: self.log.exception('Unexpected external tags format: {}'.format(external_tags)) raise @@ -790,10 +792,12 @@ def set_external_tags(self, external_tags): # ] try: - for _, source_map in external_tags: + new_tags = [] + for hostname, source_map in external_tags: + new_tags.append((to_string(hostname), source_map)) for src_name, tags in iteritems(source_map): source_map[src_name] = self._normalize_tags_type(tags) - datadog_agent.set_external_tags(external_tags) + datadog_agent.set_external_tags(new_tags) except IndexError: self.log.exception('Unexpected external tags format: {}'.format(external_tags)) raise diff --git a/datadog_checks_base/tests/test_agent_check.py b/datadog_checks_base/tests/test_agent_check.py index 8e366f2060fe8..c70e148c87855 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.checks.base import datadog_agent def test_instance(): @@ -267,6 +268,16 @@ def test_external_host_tag_normalization(self): check.set_external_tags(external_host_tags) assert external_host_tags == [('hostname', {'src_name': ['normalize:tag']})] + def test_external_hostname(self): + check = AgentCheck() + external_host_tags = [(u'hostnam\xe9', {'src_name': ['key1:val1']})] + with mock.patch.object(datadog_agent, 'set_external_tags') as set_external_tags: + check.set_external_tags(external_host_tags) + if PY3: + set_external_tags.assert_called_with([(u'hostnam\xe9', {'src_name': ['key1:val1']})]) + else: + set_external_tags.assert_called_with([('hostnam\xc3\xa9', {'src_name': ['key1:val1']})]) + class LimitedCheck(AgentCheck): DEFAULT_METRIC_LIMIT = 10 diff --git a/datadog_checks_base/tox.ini b/datadog_checks_base/tox.ini index 6ebfb812c99be..8ce3b22c5a340 100644 --- a/datadog_checks_base/tox.ini +++ b/datadog_checks_base/tox.ini @@ -12,4 +12,4 @@ deps = -rrequirements-dev.txt commands = pip install -r requirements.in - pytest -v + pytest -v {posargs}