From 0db71e987d8d8a39e9ec5d537d3fe1944b96f7bd Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Sat, 7 Sep 2024 14:07:23 +0800 Subject: [PATCH 01/17] add host resource detector --- .../opentelemetry/sdk/resources/__init__.py | 50 +++++++++++++++---- .../tests/resources/test_resources.py | 31 +++++++++++- 2 files changed, 69 insertions(+), 12 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index 0ebd42349c4..782321bc114 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -60,6 +60,7 @@ import logging import os import platform +import socket import sys import typing from json import dumps @@ -105,6 +106,7 @@ FAAS_VERSION = ResourceAttributes.FAAS_VERSION FAAS_INSTANCE = ResourceAttributes.FAAS_INSTANCE HOST_NAME = ResourceAttributes.HOST_NAME +HOST_ARCH = ResourceAttributes.HOST_ARCH HOST_TYPE = ResourceAttributes.HOST_TYPE HOST_IMAGE_NAME = ResourceAttributes.HOST_IMAGE_NAME HOST_IMAGE_ID = ResourceAttributes.HOST_IMAGE_ID @@ -159,7 +161,7 @@ class Resource: _schema_url: str def __init__( - self, attributes: Attributes, schema_url: typing.Optional[str] = None + self, attributes: Attributes, schema_url: typing.Optional[str] = None ): self._attributes = BoundedAttributes(attributes=attributes) if schema_url is None: @@ -168,8 +170,8 @@ def __init__( @staticmethod def create( - attributes: typing.Optional[Attributes] = None, - schema_url: typing.Optional[str] = None, + attributes: typing.Optional[Attributes] = None, + schema_url: typing.Optional[str] = None, ) -> "Resource": """Creates a new `Resource` from attributes. @@ -188,8 +190,8 @@ def create( { otel_experimental_resource_detector.strip() for otel_experimental_resource_detector in environ.get( - OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, "" - ).split(",") + OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, "" + ).split(",") if otel_experimental_resource_detector } ) @@ -276,8 +278,8 @@ def __eq__(self, other: object) -> bool: if not isinstance(other, Resource): return False return ( - self._attributes == other._attributes - and self._schema_url == other._schema_url + self._attributes == other._attributes + and self._schema_url == other._schema_url ) def __hash__(self) -> int: @@ -353,7 +355,7 @@ def detect(self) -> "Resource": ( sys.version_info[:3] if sys.version_info.releaselevel == "final" - and not sys.version_info.serial + and not sys.version_info.serial else sys.version_info ), ) @@ -471,10 +473,36 @@ def detect(self) -> "Resource": ) +class HostResourceDetector(ResourceDetector): + """ + The HostResourceDetector detects host resources using OpenTelemetry. + """ + + def detect(self) -> "Resource": + try: + resource = Resource.get_empty() + host_name = socket.gethostname() + if host_name: + resource = resource.merge(Resource({HOST_NAME: host_name})) + host_arch = platform.machine() + if host_arch: + resource = resource.merge(Resource({HOST_ARCH: host_arch})) + return resource + except Exception as e: + logger.warning( + "%s Resource Detection failed silently: %s", + self.__class__.__name__, + e, + ) + if self.raise_on_error: + raise e + return Resource.get_empty() + + def get_aggregated_resources( - detectors: typing.List["ResourceDetector"], - initial_resource: typing.Optional[Resource] = None, - timeout: int = 5, + detectors: typing.List["ResourceDetector"], + initial_resource: typing.Optional[Resource] = None, + timeout: int = 5, ) -> "Resource": """Retrieves resources from detectors in the order that they were passed diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index 70e90864a53..92833a64f43 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -20,7 +20,9 @@ from os import environ from unittest.mock import Mock, patch from urllib import parse - +from opentelemetry import trace as trace_api +from opentelemetry.exporter.otlp.proto.grpc import exporter +from opentelemetry.resource.detector.host import HostResourceDetector from opentelemetry.sdk.environment_variables import ( OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, ) @@ -54,6 +56,9 @@ ResourceDetector, get_aggregated_resources, ) +from opentelemetry.sdk.trace import TracerProvider, export +from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter +from opentelemetry.semconv.resource import ResourceAttributes try: import psutil @@ -777,3 +782,27 @@ def test_os_detector_solaris(self): self.assertEqual(resource.attributes[OS_TYPE], "solaris") self.assertEqual(resource.attributes[OS_VERSION], "666.4.0.15.0") +class TestHostResourceDetector(unittest.TestCase): + def test_host_resource_detector(self): + detector = HostResourceDetector() + actual = detector.detect() + self.assertTrue(actual.attributes.get(ResourceAttributes.HOST_NAME)) + self.assertTrue(actual.attributes.get(ResourceAttributes.HOST_ARCH)) + + def test_host_resource_as_span_attribute(self): + + tracer_provider = TracerProvider(resource=get_aggregated_resources([HostResourceDetector()])) + memory_exporter = InMemorySpanExporter() + span_processor = export.SimpleSpanProcessor(memory_exporter) + tracer_provider.add_span_processor(span_processor) + tracer = tracer_provider.get_tracer(__name__) + + with tracer.start_as_current_span( + "test", kind=trace_api.SpanKind.SERVER + ) as _: + pass + + span_list = memory_exporter.get_finished_spans() + self.assertTrue(span_list[0].resource.attributes.get(ResourceAttributes.HOST_NAME)) + self.assertTrue(span_list[0].resource.attributes.get(ResourceAttributes.HOST_ARCH)) + From 55d984da40429df87df1abb3f3238558d0671106 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Sat, 7 Sep 2024 14:12:11 +0800 Subject: [PATCH 02/17] add host resource detector --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7152dbaafcb..1f1d18ceebc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#4154](https://github.com/open-telemetry/opentelemetry-python/pull/4154)) - sdk: Add support for log formatting ([#4137](https://github.com/open-telemetry/opentelemetry-python/pull/4166)) +- sdk: Add Host resource detector ## Version 1.27.0/0.48b0 (2024-08-28) From 3f2277ebcb45f9e0f5af742b3cbf464c12f2aa5d Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Sat, 7 Sep 2024 14:21:56 +0800 Subject: [PATCH 03/17] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f1d18ceebc..a6bb3a74498 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - sdk: Add support for log formatting ([#4137](https://github.com/open-telemetry/opentelemetry-python/pull/4166)) - sdk: Add Host resource detector + ([#4182](https://github.com/open-telemetry/opentelemetry-python/pull/4182)) ## Version 1.27.0/0.48b0 (2024-08-28) From e7f5bbab21e3fc8a4bfac1bf09beb25a9c79d075 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Wed, 11 Sep 2024 11:28:36 +0800 Subject: [PATCH 04/17] code format --- .../opentelemetry/sdk/resources/__init__.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index 782321bc114..a4029387989 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -161,7 +161,7 @@ class Resource: _schema_url: str def __init__( - self, attributes: Attributes, schema_url: typing.Optional[str] = None + self, attributes: Attributes, schema_url: typing.Optional[str] = None ): self._attributes = BoundedAttributes(attributes=attributes) if schema_url is None: @@ -170,8 +170,8 @@ def __init__( @staticmethod def create( - attributes: typing.Optional[Attributes] = None, - schema_url: typing.Optional[str] = None, + attributes: typing.Optional[Attributes] = None, + schema_url: typing.Optional[str] = None, ) -> "Resource": """Creates a new `Resource` from attributes. @@ -190,8 +190,8 @@ def create( { otel_experimental_resource_detector.strip() for otel_experimental_resource_detector in environ.get( - OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, "" - ).split(",") + OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, "" + ).split(",") if otel_experimental_resource_detector } ) @@ -278,8 +278,8 @@ def __eq__(self, other: object) -> bool: if not isinstance(other, Resource): return False return ( - self._attributes == other._attributes - and self._schema_url == other._schema_url + self._attributes == other._attributes + and self._schema_url == other._schema_url ) def __hash__(self) -> int: @@ -355,7 +355,7 @@ def detect(self) -> "Resource": ( sys.version_info[:3] if sys.version_info.releaselevel == "final" - and not sys.version_info.serial + and not sys.version_info.serial else sys.version_info ), ) @@ -500,9 +500,9 @@ def detect(self) -> "Resource": def get_aggregated_resources( - detectors: typing.List["ResourceDetector"], - initial_resource: typing.Optional[Resource] = None, - timeout: int = 5, + detectors: typing.List["ResourceDetector"], + initial_resource: typing.Optional[Resource] = None, + timeout: int = 5, ) -> "Resource": """Retrieves resources from detectors in the order that they were passed From e30e79eee5e6aa5d8f04068f8ddf27d50adeb2c7 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Thu, 12 Sep 2024 11:36:20 +0800 Subject: [PATCH 05/17] Update opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py Co-authored-by: Pablo Collins --- opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index a4029387989..60a9ee32982 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -475,7 +475,7 @@ def detect(self) -> "Resource": class HostResourceDetector(ResourceDetector): """ - The HostResourceDetector detects host resources using OpenTelemetry. + The HostResourceDetector detects the hostname and architecture attributes. """ def detect(self) -> "Resource": From ac2a828f7d58fd5cb85cec963f286646550ca6f2 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Thu, 12 Sep 2024 12:13:38 +0800 Subject: [PATCH 06/17] resolve conversation --- .../opentelemetry/sdk/resources/__init__.py | 23 ++++----------- .../tests/resources/test_resources.py | 29 ++++--------------- 2 files changed, 10 insertions(+), 42 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index 60a9ee32982..d739eb92eaf 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -479,24 +479,11 @@ class HostResourceDetector(ResourceDetector): """ def detect(self) -> "Resource": - try: - resource = Resource.get_empty() - host_name = socket.gethostname() - if host_name: - resource = resource.merge(Resource({HOST_NAME: host_name})) - host_arch = platform.machine() - if host_arch: - resource = resource.merge(Resource({HOST_ARCH: host_arch})) - return resource - except Exception as e: - logger.warning( - "%s Resource Detection failed silently: %s", - self.__class__.__name__, - e, - ) - if self.raise_on_error: - raise e - return Resource.get_empty() + return Resource({ + HOST_NAME: socket.gethostname(), + HOST_ARCH: platform.machine(), + }) + def get_aggregated_resources( diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index 92833a64f43..e4e65a2f7b9 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -20,8 +20,7 @@ from os import environ from unittest.mock import Mock, patch from urllib import parse -from opentelemetry import trace as trace_api -from opentelemetry.exporter.otlp.proto.grpc import exporter + from opentelemetry.resource.detector.host import HostResourceDetector from opentelemetry.sdk.environment_variables import ( OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, @@ -56,8 +55,6 @@ ResourceDetector, get_aggregated_resources, ) -from opentelemetry.sdk.trace import TracerProvider, export -from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter from opentelemetry.semconv.resource import ResourceAttributes try: @@ -783,26 +780,10 @@ def test_os_detector_solaris(self): self.assertEqual(resource.attributes[OS_TYPE], "solaris") self.assertEqual(resource.attributes[OS_VERSION], "666.4.0.15.0") class TestHostResourceDetector(unittest.TestCase): + @patch("socket.gethostname", lambda: "foo") + @patch("platform.machine",lambda: "AMD64") def test_host_resource_detector(self): detector = HostResourceDetector() actual = detector.detect() - self.assertTrue(actual.attributes.get(ResourceAttributes.HOST_NAME)) - self.assertTrue(actual.attributes.get(ResourceAttributes.HOST_ARCH)) - - def test_host_resource_as_span_attribute(self): - - tracer_provider = TracerProvider(resource=get_aggregated_resources([HostResourceDetector()])) - memory_exporter = InMemorySpanExporter() - span_processor = export.SimpleSpanProcessor(memory_exporter) - tracer_provider.add_span_processor(span_processor) - tracer = tracer_provider.get_tracer(__name__) - - with tracer.start_as_current_span( - "test", kind=trace_api.SpanKind.SERVER - ) as _: - pass - - span_list = memory_exporter.get_finished_spans() - self.assertTrue(span_list[0].resource.attributes.get(ResourceAttributes.HOST_NAME)) - self.assertTrue(span_list[0].resource.attributes.get(ResourceAttributes.HOST_ARCH)) - + self.assertEqual(actual.attributes.get(ResourceAttributes.HOST_NAME),"foo") + self.assertEqual(actual.attributes.get(ResourceAttributes.HOST_ARCH),"AMD64") From 6093e34e4b97ab6700cfeb1d73a7934de813745b Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Fri, 13 Sep 2024 09:55:20 +0800 Subject: [PATCH 07/17] check setup pre-commit --- opentelemetry-sdk/tests/resources/test_resources.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index e4e65a2f7b9..22e09568d15 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -779,11 +779,17 @@ def test_os_detector_solaris(self): self.assertEqual(resource.attributes[OS_TYPE], "solaris") self.assertEqual(resource.attributes[OS_VERSION], "666.4.0.15.0") + + class TestHostResourceDetector(unittest.TestCase): @patch("socket.gethostname", lambda: "foo") - @patch("platform.machine",lambda: "AMD64") + @patch("platform.machine", lambda: "AMD64") def test_host_resource_detector(self): detector = HostResourceDetector() actual = detector.detect() - self.assertEqual(actual.attributes.get(ResourceAttributes.HOST_NAME),"foo") - self.assertEqual(actual.attributes.get(ResourceAttributes.HOST_ARCH),"AMD64") + self.assertEqual( + actual.attributes.get(ResourceAttributes.HOST_NAME), "foo" + ) + self.assertEqual( + actual.attributes.get(ResourceAttributes.HOST_ARCH), "AMD64" + ) From d162529df1d005958fab967c0ba96227cd714ceb Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Fri, 13 Sep 2024 10:37:51 +0800 Subject: [PATCH 08/17] remove error import --- opentelemetry-sdk/tests/resources/test_resources.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index 22e09568d15..de6643d0c21 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -21,7 +21,6 @@ from unittest.mock import Mock, patch from urllib import parse -from opentelemetry.resource.detector.host import HostResourceDetector from opentelemetry.sdk.environment_variables import ( OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, ) @@ -48,6 +47,7 @@ TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_NAME, TELEMETRY_SDK_VERSION, + HostResourceDetector, OsResourceDetector, OTELResourceDetector, ProcessResourceDetector, From 1e9e9c24648da2e82ea89bee88eff1b8a16cb6dd Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Fri, 13 Sep 2024 10:45:04 +0800 Subject: [PATCH 09/17] remove error import --- .../tests/resources/test_resources.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index de6643d0c21..6162ac5ba62 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -28,6 +28,8 @@ _DEFAULT_RESOURCE, _EMPTY_RESOURCE, _OPENTELEMETRY_SDK_VERSION, + HOST_ARCH, + HOST_NAME, OS_TYPE, OS_VERSION, OTEL_RESOURCE_ATTRIBUTES, @@ -55,7 +57,6 @@ ResourceDetector, get_aggregated_resources, ) -from opentelemetry.semconv.resource import ResourceAttributes try: import psutil @@ -785,11 +786,6 @@ class TestHostResourceDetector(unittest.TestCase): @patch("socket.gethostname", lambda: "foo") @patch("platform.machine", lambda: "AMD64") def test_host_resource_detector(self): - detector = HostResourceDetector() - actual = detector.detect() - self.assertEqual( - actual.attributes.get(ResourceAttributes.HOST_NAME), "foo" - ) - self.assertEqual( - actual.attributes.get(ResourceAttributes.HOST_ARCH), "AMD64" - ) + resource = get_aggregated_resources([HostResourceDetector()]) + self.assertEqual(resource.attributes[HOST_NAME], "foo") + self.assertEqual(resource.attributes[HOST_ARCH], "AMD64") From 96f31d7d4c6f7a1ca09af21821eafbe43bfbc6b9 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Fri, 13 Sep 2024 10:52:40 +0800 Subject: [PATCH 10/17] change get resources --- opentelemetry-sdk/tests/resources/test_resources.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index 6162ac5ba62..3be116164a8 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -786,6 +786,9 @@ class TestHostResourceDetector(unittest.TestCase): @patch("socket.gethostname", lambda: "foo") @patch("platform.machine", lambda: "AMD64") def test_host_resource_detector(self): - resource = get_aggregated_resources([HostResourceDetector()]) + resource = get_aggregated_resources( + [HostResourceDetector()], + Resource({}), + ) self.assertEqual(resource.attributes[HOST_NAME], "foo") self.assertEqual(resource.attributes[HOST_ARCH], "AMD64") From 13d6cbee3652b709866680f63935b8d072e97723 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Wed, 18 Sep 2024 16:39:48 +0800 Subject: [PATCH 11/17] add this resource detector to the list of entry points --- opentelemetry-sdk/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/opentelemetry-sdk/pyproject.toml b/opentelemetry-sdk/pyproject.toml index 69895bfd5b6..acb4268838e 100644 --- a/opentelemetry-sdk/pyproject.toml +++ b/opentelemetry-sdk/pyproject.toml @@ -68,6 +68,7 @@ console = "opentelemetry.sdk.trace.export:ConsoleSpanExporter" otel = "opentelemetry.sdk.resources:OTELResourceDetector" process = "opentelemetry.sdk.resources:ProcessResourceDetector" os = "opentelemetry.sdk.resources:OsResourceDetector" +host = "opentelemetry.sdk.resources:HostResourceDetector" [project.urls] Homepage = "https://github.com/open-telemetry/opentelemetry-python/tree/main/opentelemetry-sdk" From 5d279157d054fbef5f7cdf6b8ad32460ca46f9a3 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Thu, 19 Sep 2024 10:02:19 +0800 Subject: [PATCH 12/17] add test_resource_detector_entry_points_host and code reformat --- .../src/opentelemetry/sdk/resources/__init__.py | 15 ++++++++------- .../tests/resources/test_resources.py | 8 ++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index d739eb92eaf..5e51f43eb09 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -475,15 +475,16 @@ def detect(self) -> "Resource": class HostResourceDetector(ResourceDetector): """ - The HostResourceDetector detects the hostname and architecture attributes. - """ + The HostResourceDetector detects the hostname and architecture attributes. + """ def detect(self) -> "Resource": - return Resource({ - HOST_NAME: socket.gethostname(), - HOST_ARCH: platform.machine(), - }) - + return Resource( + { + HOST_NAME: socket.gethostname(), + HOST_ARCH: platform.machine(), + } + ) def get_aggregated_resources( diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index 3be116164a8..07d03703e9e 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -792,3 +792,11 @@ def test_host_resource_detector(self): ) self.assertEqual(resource.attributes[HOST_NAME], "foo") self.assertEqual(resource.attributes[HOST_ARCH], "AMD64") + + @patch.dict( + environ, {OTEL_EXPERIMENTAL_RESOURCE_DETECTORS: "host"}, clear=True + ) + def test_resource_detector_entry_points_host(self): + resource = Resource({}).create() + self.assertIn(HOST_NAME, resource.attributes) + self.assertIn(HOST_ARCH, resource.attributes) From d4e49525073e632e2b5a17ce83f3eadf4ad2ae0b Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Fri, 20 Sep 2024 09:32:42 +0800 Subject: [PATCH 13/17] Add an underscore _ in front of the resource detector --- .../src/opentelemetry/sdk/resources/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index 5e51f43eb09..b023f45a178 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -479,10 +479,12 @@ class HostResourceDetector(ResourceDetector): """ def detect(self) -> "Resource": + _host_name = socket.gethostname() + _host_arch = platform.machine() return Resource( { - HOST_NAME: socket.gethostname(), - HOST_ARCH: platform.machine(), + HOST_NAME: _host_name, + HOST_ARCH: _host_arch, } ) From bd6263ec3b889c653cba6568a3c2388d43c5cb56 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Sat, 21 Sep 2024 11:00:26 +0800 Subject: [PATCH 14/17] Add an underscore _ in front of the resource detector --- opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index b023f45a178..1735010c70b 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -473,7 +473,7 @@ def detect(self) -> "Resource": ) -class HostResourceDetector(ResourceDetector): +class _HostResourceDetector(ResourceDetector): """ The HostResourceDetector detects the hostname and architecture attributes. """ From f31da4bff2916817238bda1820a2c3094e0bdfd0 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Tue, 24 Sep 2024 10:17:13 +0800 Subject: [PATCH 15/17] Add an underscore _ in front of the resource detector --- opentelemetry-sdk/pyproject.toml | 2 +- opentelemetry-sdk/tests/resources/test_resources.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/opentelemetry-sdk/pyproject.toml b/opentelemetry-sdk/pyproject.toml index acb4268838e..1a3b945d055 100644 --- a/opentelemetry-sdk/pyproject.toml +++ b/opentelemetry-sdk/pyproject.toml @@ -68,7 +68,7 @@ console = "opentelemetry.sdk.trace.export:ConsoleSpanExporter" otel = "opentelemetry.sdk.resources:OTELResourceDetector" process = "opentelemetry.sdk.resources:ProcessResourceDetector" os = "opentelemetry.sdk.resources:OsResourceDetector" -host = "opentelemetry.sdk.resources:HostResourceDetector" +host = "opentelemetry.sdk.resources:_HostResourceDetector" [project.urls] Homepage = "https://github.com/open-telemetry/opentelemetry-python/tree/main/opentelemetry-sdk" diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py index 07d03703e9e..1cceeb53a2b 100644 --- a/opentelemetry-sdk/tests/resources/test_resources.py +++ b/opentelemetry-sdk/tests/resources/test_resources.py @@ -49,12 +49,12 @@ TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_NAME, TELEMETRY_SDK_VERSION, - HostResourceDetector, OsResourceDetector, OTELResourceDetector, ProcessResourceDetector, Resource, ResourceDetector, + _HostResourceDetector, get_aggregated_resources, ) @@ -787,7 +787,7 @@ class TestHostResourceDetector(unittest.TestCase): @patch("platform.machine", lambda: "AMD64") def test_host_resource_detector(self): resource = get_aggregated_resources( - [HostResourceDetector()], + [_HostResourceDetector()], Resource({}), ) self.assertEqual(resource.attributes[HOST_NAME], "foo") From 0d9a6d3a17a58fb4a9951f820baf708e96682f07 Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Tue, 8 Oct 2024 10:00:31 +0800 Subject: [PATCH 16/17] Update opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Emídio Neto <9735060+emdneto@users.noreply.github.com> --- opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index 1735010c70b..cb9d5b9ebcd 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -483,7 +483,7 @@ def detect(self) -> "Resource": _host_arch = platform.machine() return Resource( { - HOST_NAME: _host_name, + HOST_NAME: socket.gethostname(), HOST_ARCH: _host_arch, } ) From e57c9029955b32babd18fd6383f4e76eb7ba076c Mon Sep 17 00:00:00 2001 From: oliver zhang Date: Tue, 8 Oct 2024 10:03:41 +0800 Subject: [PATCH 17/17] Remove unnecessary variable declarations --- opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py index cb9d5b9ebcd..bbec2850701 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py @@ -479,12 +479,10 @@ class _HostResourceDetector(ResourceDetector): """ def detect(self) -> "Resource": - _host_name = socket.gethostname() - _host_arch = platform.machine() return Resource( { HOST_NAME: socket.gethostname(), - HOST_ARCH: _host_arch, + HOST_ARCH: platform.machine(), } )