sdk: Implement basic os resource detector by Zirak · Pull Request #3992 · open-telemetry/opentelemetry-python
Great points, thank you! I've completely missed the entrypoint.
Regarding making it a default, I've done the following simple diff:
@@ -180,11 +180,13 @@ class Resource: resource = _DEFAULT_RESOURCE otel_experimental_resource_detectors = environ.get( - OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, "otel" + OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, "otel,os" ).split(",") if "otel" not in otel_experimental_resource_detectors: otel_experimental_resource_detectors.append("otel") + if "os" not in otel_experimental_resource_detectors: + otel_experimental_resource_detectors.append("os") for resource_detector in otel_experimental_resource_detectors: resource_detectors.append(
Running locally it looks good (yay!), but I'm having trouble with testing. A lot of things expect _DEFAULT_RESOURCE to be the baseline for all future resources. I'm currently tinkering with decorating the entire TestResources with a platform.uname patch, alongside with extending _DEFAULT_RESOURCE as part of __init__ and rewriting existing test cases to use it (Edit: This has since been pushed), e.g.
@@ -61,12 +62,26 @@ except ImportError: psutil = None +@patch("platform.uname", lambda: platform.uname_result( + system="Linux", + node="node", + release="1.2.3", + version="4.5.6", + machine="x86_64", + processor="x86_64" + )) class TestResources(unittest.TestCase): def setUp(self) -> None: environ[OTEL_RESOURCE_ATTRIBUTES] = "" + self.mock_platform = { + OS_TYPE: "linux", + OS_VERSION: "1.2.3", + } + self.default_resource = _DEFAULT_RESOURCE.merge(Resource(self.mock_platform)) @@ -86,6 +101,7 @@ class TestResources(unittest.TestCase): TELEMETRY_SDK_VERSION: _OPENTELEMETRY_SDK_VERSION, SERVICE_NAME: "unknown_service", } + expected_attributes.update(self.mock_platform) @@ -431,7 +447,7 @@ class TestResources(unittest.TestCase): resource_detector.raise_on_error = False self.assertEqual( get_aggregated_resources([resource_detector]), - _DEFAULT_RESOURCE.merge( + self.default_resource.merge(
It feels a bit icky. Am I missing a better, simpler way?