diff --git a/CHANGELOG.md b/CHANGELOG.md index b9ffe834538..7b38d998f7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1513](https://github.com/open-telemetry/opentelemetry-python/pull/1513)) - Update default port for OTLP exporter from 55680 to 4317 ([#1516](https://github.com/open-telemetry/opentelemetry-python/pull/1516)) +- `opentelemetry-exporter-zipkin` Update boolean attribute value transformation + ([#1509](https://github.com/open-telemetry/opentelemetry-python/pull/1509)) ### Removed - `opentelemetry-api` Remove ThreadLocalRuntimeContext since python3.4 is not supported. diff --git a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py index 6b376c203c5..1610e0a3f67 100644 --- a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py +++ b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py @@ -352,7 +352,9 @@ def _extract_tags_from_dict(self, tags_dict): if not tags_dict: return tags for attribute_key, attribute_value in tags_dict.items(): - if isinstance(attribute_value, (int, bool, float, str)): + if isinstance(attribute_value, bool): + value = str(attribute_value).lower() + elif isinstance(attribute_value, (int, float, str)): value = str(attribute_value) elif isinstance(attribute_value, Sequence): value = self._extract_tag_value_string_from_sequence( @@ -381,7 +383,9 @@ def _extract_tag_value_string_from_sequence(self, sequence: Sequence): defined_max_tag_value_length = self.max_tag_value_length > 0 for element in sequence: - if isinstance(element, (int, bool, float, str)): + if isinstance(element, bool): + tag_value_element = str(element).lower() + elif isinstance(element, (int, float, str)): tag_value_element = str(element) elif element is None: tag_value_element = None @@ -407,7 +411,7 @@ def _extract_tag_value_string_from_sequence(self, sequence: Sequence): return json.dumps(tag_value_elements, separators=(",", ":")) def _extract_tags_from_span(self, span: Span): - tags = self._extract_tags_from_dict(getattr(span, "attributes", None)) + tags = self._extract_tags_from_dict(span.attributes) if span.resource: tags.update(self._extract_tags_from_dict(span.resource.attributes)) return tags diff --git a/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py index eb3f4894c12..ee6c9f2a09c 100644 --- a/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py +++ b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py @@ -243,7 +243,7 @@ def test_export_json(self): "localEndpoint": local_endpoint, "kind": span_kind, "tags": { - "key_bool": "False", + "key_bool": "false", "key_string": "hello_world", "key_float": "111.22", "otel.status_code": "ERROR", @@ -471,11 +471,11 @@ def test_export_json_max_tag_length(self): ) self.assertEqual( tags["list5"], - '["True","True","True","True","True","True","True","True","True","True","True","True","True","True","True","True","True","True"]', + '["true","true","true","true","true","true","true","true","true","true","true","true","true","true","true","true","true","true"]', ) self.assertEqual( tags["list6"], - '["True","True","True","True","True","True","True","True","True","True"]', + '["true","true","true","true","true","true","true","true","true","true"]', ) self.assertEqual( tags["tuple1"], @@ -493,11 +493,11 @@ def test_export_json_max_tag_length(self): ) self.assertEqual( tags["tuple5"], - '["True","True","True","True","True","True","True","True","True","True","True","True","True","True","True","True","True","True"]', + '["true","true","true","true","true","true","true","true","true","true","true","true","true","true","true","true","true","true"]', ) self.assertEqual( tags["tuple6"], - '["True","True","True","True","True","True","True","True","True","True"]', + '["true","true","true","true","true","true","true","true","true","true"]', ) self.assertEqual( tags["range1"], @@ -580,14 +580,14 @@ def test_export_json_max_tag_length(self): self.assertEqual(tags["list2"], '["a","a"]') self.assertEqual(tags["list3"], '["2","2"]') self.assertEqual(tags["list4"], '["2","2"]') - self.assertEqual(tags["list5"], '["True"]') - self.assertEqual(tags["list6"], '["True"]') + self.assertEqual(tags["list5"], '["true"]') + self.assertEqual(tags["list6"], '["true"]') self.assertEqual(tags["tuple1"], '["a","a"]') self.assertEqual(tags["tuple2"], '["a","a"]') self.assertEqual(tags["tuple3"], '["2","2"]') self.assertEqual(tags["tuple4"], '["2","2"]') - self.assertEqual(tags["tuple5"], '["True"]') - self.assertEqual(tags["tuple6"], '["True"]') + self.assertEqual(tags["tuple5"], '["true"]') + self.assertEqual(tags["tuple6"], '["true"]') self.assertEqual(tags["range1"], '["0","1"]') self.assertEqual(tags["range2"], '["0","1"]') @@ -606,14 +606,14 @@ def test_export_json_max_tag_length(self): self.assertEqual(tags["list2"], '["a","a"]') self.assertEqual(tags["list3"], '["2","2"]') self.assertEqual(tags["list4"], '["2","2"]') - self.assertEqual(tags["list5"], '["True"]') - self.assertEqual(tags["list6"], '["True"]') + self.assertEqual(tags["list5"], '["true"]') + self.assertEqual(tags["list6"], '["true"]') self.assertEqual(tags["tuple1"], '["a","a"]') self.assertEqual(tags["tuple2"], '["a","a"]') self.assertEqual(tags["tuple3"], '["2","2"]') self.assertEqual(tags["tuple4"], '["2","2"]') - self.assertEqual(tags["tuple5"], '["True"]') - self.assertEqual(tags["tuple6"], '["True"]') + self.assertEqual(tags["tuple5"], '["true"]') + self.assertEqual(tags["tuple6"], '["true"]') self.assertEqual(tags["range1"], '["0","1"]') self.assertEqual(tags["range2"], '["0","1"]') @@ -632,14 +632,14 @@ def test_export_json_max_tag_length(self): self.assertEqual(tags["list2"], '["a","a"]') self.assertEqual(tags["list3"], '["2","2"]') self.assertEqual(tags["list4"], '["2","2"]') - self.assertEqual(tags["list5"], '["True"]') - self.assertEqual(tags["list6"], '["True"]') + self.assertEqual(tags["list5"], '["true"]') + self.assertEqual(tags["list6"], '["true"]') self.assertEqual(tags["tuple1"], '["a","a"]') self.assertEqual(tags["tuple2"], '["a","a"]') self.assertEqual(tags["tuple3"], '["2","2"]') self.assertEqual(tags["tuple4"], '["2","2"]') - self.assertEqual(tags["tuple5"], '["True"]') - self.assertEqual(tags["tuple6"], '["True"]') + self.assertEqual(tags["tuple5"], '["true"]') + self.assertEqual(tags["tuple6"], '["true"]') self.assertEqual(tags["range1"], '["0","1"]') self.assertEqual(tags["range2"], '["0","1"]') @@ -768,7 +768,7 @@ def test_export_protobuf(self): local_endpoint=local_endpoint, kind=span_kind, tags={ - "key_bool": "False", + "key_bool": "false", "key_string": "hello_world", "key_float": "111.22", "otel.status_code": "ERROR",