From 29511dcbd0cbba1d14a9113f72e8ad19b740bef1 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Mon, 27 Jun 2022 15:37:03 -0700 Subject: [PATCH 1/8] Change tracing to use Resource.to_json() --- .../src/opentelemetry/sdk/trace/__init__.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 7dc65600f4c..ada7a1833e8 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -492,7 +492,7 @@ def to_json(self, indent=4): f_span["attributes"] = self._format_attributes(self._attributes) f_span["events"] = self._format_events(self._events) f_span["links"] = self._format_links(self._links) - f_span["resource"] = self._format_attributes(self._resource.attributes) + f_span["resource"] = self._format_resource(self._resource) return json.dumps(f_span, indent=indent) @@ -533,6 +533,15 @@ def _format_links(links): f_links.append(f_link) return f_links + @staticmethod + def _format_resource(resource): + resource_json_obj = json.loads(resource.to_json()) + if not resource.attributes: + del resource_json_obj["attributes"] + if not resource.schema_url: + del resource_json_obj["schema_url"] + return resource_json_obj + class SpanLimits: """The limits that should be enforce on recorded data such as events, links, attributes etc. From 46667e0a7c976b1081eace595d2da00af243b67e Mon Sep 17 00:00:00 2001 From: jerevoss Date: Mon, 27 Jun 2022 16:32:25 -0700 Subject: [PATCH 2/8] Edited CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40b62a40d03..08fce712210 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.12.0rc1-0.31b0...HEAD) +- Change tracing to use `Resource.to_json()` + ([#????](https://github.com/open-telemetry/opentelemetry-python/pull/????)) - Add min/max fields to Histogram ([#2759](https://github.com/open-telemetry/opentelemetry-python/pull/2759)) - `opentelemetry-exporter-otlp-proto-http` Add support for OTLP/HTTP log exporter From be63158377a67199f332d327f80a15aaf2e217be Mon Sep 17 00:00:00 2001 From: jerevoss Date: Mon, 27 Jun 2022 16:35:28 -0700 Subject: [PATCH 3/8] Added PR # to CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08fce712210..5c9aedb6cbd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.12.0rc1-0.31b0...HEAD) - Change tracing to use `Resource.to_json()` - ([#????](https://github.com/open-telemetry/opentelemetry-python/pull/????)) + ([#2784](https://github.com/open-telemetry/opentelemetry-python/pull/2784)) - Add min/max fields to Histogram ([#2759](https://github.com/open-telemetry/opentelemetry-python/pull/2759)) - `opentelemetry-exporter-otlp-proto-http` Add support for OTLP/HTTP log exporter From 78c6c6d1fe532289b3d20200a532a007bec7f37b Mon Sep 17 00:00:00 2001 From: jerevoss Date: Mon, 27 Jun 2022 15:37:03 -0700 Subject: [PATCH 4/8] Change tracing to use Resource.to_json() --- .../src/opentelemetry/sdk/trace/__init__.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 7dc65600f4c..ada7a1833e8 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -492,7 +492,7 @@ def to_json(self, indent=4): f_span["attributes"] = self._format_attributes(self._attributes) f_span["events"] = self._format_events(self._events) f_span["links"] = self._format_links(self._links) - f_span["resource"] = self._format_attributes(self._resource.attributes) + f_span["resource"] = self._format_resource(self._resource) return json.dumps(f_span, indent=indent) @@ -533,6 +533,15 @@ def _format_links(links): f_links.append(f_link) return f_links + @staticmethod + def _format_resource(resource): + resource_json_obj = json.loads(resource.to_json()) + if not resource.attributes: + del resource_json_obj["attributes"] + if not resource.schema_url: + del resource_json_obj["schema_url"] + return resource_json_obj + class SpanLimits: """The limits that should be enforce on recorded data such as events, links, attributes etc. From 749d4e997ed24d02175c76326f2326e5b5714b8a Mon Sep 17 00:00:00 2001 From: jerevoss Date: Mon, 27 Jun 2022 16:32:25 -0700 Subject: [PATCH 5/8] Edited CHANGELOG --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40b62a40d03..08fce712210 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.12.0rc1-0.31b0...HEAD) +- Change tracing to use `Resource.to_json()` + ([#????](https://github.com/open-telemetry/opentelemetry-python/pull/????)) - Add min/max fields to Histogram ([#2759](https://github.com/open-telemetry/opentelemetry-python/pull/2759)) - `opentelemetry-exporter-otlp-proto-http` Add support for OTLP/HTTP log exporter From 615f84d4a88d2bdb378c0ecce9ef3b1ad48037f3 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Mon, 27 Jun 2022 16:35:28 -0700 Subject: [PATCH 6/8] Added PR # to CHANGELOG --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08fce712210..5c9aedb6cbd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.12.0rc1-0.31b0...HEAD) - Change tracing to use `Resource.to_json()` - ([#????](https://github.com/open-telemetry/opentelemetry-python/pull/????)) + ([#2784](https://github.com/open-telemetry/opentelemetry-python/pull/2784)) - Add min/max fields to Histogram ([#2759](https://github.com/open-telemetry/opentelemetry-python/pull/2759)) - `opentelemetry-exporter-otlp-proto-http` Add support for OTLP/HTTP log exporter From 52cbb598ced46dd6349e47bbe7f52715c83241d1 Mon Sep 17 00:00:00 2001 From: jerevoss Date: Mon, 27 Jun 2022 18:47:38 -0700 Subject: [PATCH 7/8] Generalized removal of empty or blank values --- opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index ada7a1833e8..8c927dd1a81 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -536,11 +536,7 @@ def _format_links(links): @staticmethod def _format_resource(resource): resource_json_obj = json.loads(resource.to_json()) - if not resource.attributes: - del resource_json_obj["attributes"] - if not resource.schema_url: - del resource_json_obj["schema_url"] - return resource_json_obj + return {k: v for k, v in resource_json_obj.items() if v} class SpanLimits: From 4b61f9ac330d0145445fba48f915afacf7e8554f Mon Sep 17 00:00:00 2001 From: jerevoss Date: Thu, 14 Jul 2022 10:10:28 -0700 Subject: [PATCH 8/8] Simplified trace to_json to include empty and null values. --- .../src/opentelemetry/sdk/trace/__init__.py | 7 +------ opentelemetry-sdk/tests/trace/test_trace.py | 9 ++++++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 8c927dd1a81..6d30e94ed53 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -492,7 +492,7 @@ def to_json(self, indent=4): f_span["attributes"] = self._format_attributes(self._attributes) f_span["events"] = self._format_events(self._events) f_span["links"] = self._format_links(self._links) - f_span["resource"] = self._format_resource(self._resource) + f_span["resource"] = json.loads(self.resource.to_json()) return json.dumps(f_span, indent=indent) @@ -533,11 +533,6 @@ def _format_links(links): f_links.append(f_link) return f_links - @staticmethod - def _format_resource(resource): - resource_json_obj = json.loads(resource.to_json()) - return {k: v for k, v in resource_json_obj.items() if v} - class SpanLimits: """The limits that should be enforce on recorded data such as events, links, attributes etc. diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index 24d7b6fa3d7..a6683ebd032 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -1354,12 +1354,15 @@ def test_to_json(self): "attributes": {}, "events": [], "links": [], - "resource": {} + "resource": { + "attributes": {}, + "schema_url": "" + } }""", ) self.assertEqual( span.to_json(indent=None), - '{"name": "span-name", "context": {"trace_id": "0x000000000000000000000000deadbeef", "span_id": "0x00000000deadbef0", "trace_state": "[]"}, "kind": "SpanKind.INTERNAL", "parent_id": "0x00000000deadbef0", "start_time": null, "end_time": null, "status": {"status_code": "UNSET"}, "attributes": {}, "events": [], "links": [], "resource": {}}', + '{"name": "span-name", "context": {"trace_id": "0x000000000000000000000000deadbeef", "span_id": "0x00000000deadbef0", "trace_state": "[]"}, "kind": "SpanKind.INTERNAL", "parent_id": "0x00000000deadbef0", "start_time": null, "end_time": null, "status": {"status_code": "UNSET"}, "attributes": {}, "events": [], "links": [], "resource": {"attributes": {}, "schema_url": ""}}', ) def test_attributes_to_json(self): @@ -1377,7 +1380,7 @@ def test_attributes_to_json(self): span.to_json(indent=None), '{"name": "span-name", "context": {"trace_id": "0x000000000000000000000000deadbeef", "span_id": "0x00000000deadbef0", "trace_state": "[]"}, "kind": "SpanKind.INTERNAL", "parent_id": null, "start_time": null, "end_time": null, "status": {"status_code": "UNSET"}, "attributes": {"key": "value"}, "events": [{"name": "event", "timestamp": "' + date_str - + '", "attributes": {"key2": "value2"}}], "links": [], "resource": {}}', + + '", "attributes": {"key2": "value2"}}], "links": [], "resource": {"attributes": {}, "schema_url": ""}}', )