Skip to content

Commit a36587c

Browse files
oliver-zhangpmcollinslzchenemdneto
authored
sdk: Implement basic host resource detector (#4182)
* add host resource detector * add host resource detector * update changelog * code format * Update opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py Co-authored-by: Pablo Collins <[email protected]> * resolve conversation * check setup pre-commit * remove error import * remove error import * change get resources * add this resource detector to the list of entry points * add test_resource_detector_entry_points_host and code reformat * Add an underscore _ in front of the resource detector * Add an underscore _ in front of the resource detector * Add an underscore _ in front of the resource detector * Update opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py Co-authored-by: Emídio Neto <[email protected]> * Remove unnecessary variable declarations --------- Co-authored-by: Pablo Collins <[email protected]> Co-authored-by: Leighton Chen <[email protected]> Co-authored-by: Pablo Collins <[email protected]> Co-authored-by: Emídio Neto <[email protected]>
1 parent d5c54e3 commit a36587c

File tree

4 files changed

+42
-0
lines changed

4 files changed

+42
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1313
([#4154](https://github.com/open-telemetry/opentelemetry-python/pull/4154))
1414
- sdk: Add support for log formatting
1515
([#4137](https://github.com/open-telemetry/opentelemetry-python/pull/4166))
16+
- sdk: Add Host resource detector
17+
([#4182](https://github.com/open-telemetry/opentelemetry-python/pull/4182))
1618
- sdk: Implementation of exemplars
1719
([#4094](https://github.com/open-telemetry/opentelemetry-python/pull/4094))
1820
- Implement events sdk

opentelemetry-sdk/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ console = "opentelemetry.sdk.trace.export:ConsoleSpanExporter"
6868
otel = "opentelemetry.sdk.resources:OTELResourceDetector"
6969
process = "opentelemetry.sdk.resources:ProcessResourceDetector"
7070
os = "opentelemetry.sdk.resources:OsResourceDetector"
71+
host = "opentelemetry.sdk.resources:_HostResourceDetector"
7172

7273
[project.urls]
7374
Homepage = "https://github.com/open-telemetry/opentelemetry-python/tree/main/opentelemetry-sdk"

opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import logging
6161
import os
6262
import platform
63+
import socket
6364
import sys
6465
import typing
6566
from json import dumps
@@ -105,6 +106,7 @@
105106
FAAS_VERSION = ResourceAttributes.FAAS_VERSION
106107
FAAS_INSTANCE = ResourceAttributes.FAAS_INSTANCE
107108
HOST_NAME = ResourceAttributes.HOST_NAME
109+
HOST_ARCH = ResourceAttributes.HOST_ARCH
108110
HOST_TYPE = ResourceAttributes.HOST_TYPE
109111
HOST_IMAGE_NAME = ResourceAttributes.HOST_IMAGE_NAME
110112
HOST_IMAGE_ID = ResourceAttributes.HOST_IMAGE_ID
@@ -471,6 +473,20 @@ def detect(self) -> "Resource":
471473
)
472474

473475

476+
class _HostResourceDetector(ResourceDetector):
477+
"""
478+
The HostResourceDetector detects the hostname and architecture attributes.
479+
"""
480+
481+
def detect(self) -> "Resource":
482+
return Resource(
483+
{
484+
HOST_NAME: socket.gethostname(),
485+
HOST_ARCH: platform.machine(),
486+
}
487+
)
488+
489+
474490
def get_aggregated_resources(
475491
detectors: typing.List["ResourceDetector"],
476492
initial_resource: typing.Optional[Resource] = None,

opentelemetry-sdk/tests/resources/test_resources.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
_DEFAULT_RESOURCE,
2929
_EMPTY_RESOURCE,
3030
_OPENTELEMETRY_SDK_VERSION,
31+
HOST_ARCH,
32+
HOST_NAME,
3133
OS_TYPE,
3234
OS_VERSION,
3335
OTEL_RESOURCE_ATTRIBUTES,
@@ -52,6 +54,7 @@
5254
ProcessResourceDetector,
5355
Resource,
5456
ResourceDetector,
57+
_HostResourceDetector,
5558
get_aggregated_resources,
5659
)
5760

@@ -777,3 +780,23 @@ def test_os_detector_solaris(self):
777780

778781
self.assertEqual(resource.attributes[OS_TYPE], "solaris")
779782
self.assertEqual(resource.attributes[OS_VERSION], "666.4.0.15.0")
783+
784+
785+
class TestHostResourceDetector(unittest.TestCase):
786+
@patch("socket.gethostname", lambda: "foo")
787+
@patch("platform.machine", lambda: "AMD64")
788+
def test_host_resource_detector(self):
789+
resource = get_aggregated_resources(
790+
[_HostResourceDetector()],
791+
Resource({}),
792+
)
793+
self.assertEqual(resource.attributes[HOST_NAME], "foo")
794+
self.assertEqual(resource.attributes[HOST_ARCH], "AMD64")
795+
796+
@patch.dict(
797+
environ, {OTEL_EXPERIMENTAL_RESOURCE_DETECTORS: "host"}, clear=True
798+
)
799+
def test_resource_detector_entry_points_host(self):
800+
resource = Resource({}).create()
801+
self.assertIn(HOST_NAME, resource.attributes)
802+
self.assertIn(HOST_ARCH, resource.attributes)

0 commit comments

Comments
 (0)