Skip to content

Commit 3cdb54f

Browse files
authored
Add default and service name to get_aggregated_resource (open-telemetry#2013)
* Add default & service name to resource aggregator * Aggregator calls Resource.create() to set default attributes * Allow get aggregated resources to remove defaults
1 parent 240ee76 commit 3cdb54f

File tree

3 files changed

+73
-30
lines changed

3 files changed

+73
-30
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.4.0-0.23b0...HEAD)
8-
- Fix documentation on well known exporters and variable OTEL_TRACES_EXPORTER which were misnamed [#2023](https://github.com/open-telemetry/opentelemetry-python/pull/2023)
8+
- Fix documentation on well known exporters and variable OTEL_TRACES_EXPORTER which were misnamed
9+
([#2023](https://github.com/open-telemetry/opentelemetry-python/pull/2023))
10+
- `opentelemetry-sdk` `get_aggregated_resource()` returns default resource and service name
11+
whenever called
12+
([#2013](https://github.com/open-telemetry/opentelemetry-python/pull/2013))
913
- `opentelemetry-distro` & `opentelemetry-sdk` Moved Auto Instrumentation Configurator code to SDK
1014
to let distros use its default implementation
1115
([#1937](https://github.com/open-telemetry/opentelemetry-python/pull/1937))

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -291,23 +291,25 @@ def get_aggregated_resources(
291291
:param timeout: Number of seconds to wait for each detector to return
292292
:return:
293293
"""
294-
final_resource = initial_resource or _EMPTY_RESOURCE
295-
detectors = [OTELResourceDetector()] + detectors
294+
detectors_merged_resource = initial_resource or Resource.create()
296295

297296
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
298297
futures = [executor.submit(detector.detect) for detector in detectors]
299298
for detector_ind, future in enumerate(futures):
300299
detector = detectors[detector_ind]
301300
try:
302-
detected_resources = future.result(timeout=timeout)
301+
detected_resource = future.result(timeout=timeout)
303302
# pylint: disable=broad-except
304303
except Exception as ex:
305304
if detector.raise_on_error:
306305
raise ex
307306
logger.warning(
308307
"Exception %s in detector %s, ignoring", ex, detector
309308
)
310-
detected_resources = _EMPTY_RESOURCE
309+
detected_resource = _EMPTY_RESOURCE
311310
finally:
312-
final_resource = final_resource.merge(detected_resources)
313-
return final_resource
311+
detectors_merged_resource = detectors_merged_resource.merge(
312+
detected_resource
313+
)
314+
315+
return detectors_merged_resource

opentelemetry-sdk/tests/resources/test_resources.py

Lines changed: 60 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -230,9 +230,18 @@ def test_invalid_resource_attribute_values(self):
230230

231231
def test_aggregated_resources_no_detectors(self):
232232
aggregated_resources = resources.get_aggregated_resources([])
233-
self.assertEqual(aggregated_resources, resources.Resource.get_empty())
233+
self.assertEqual(
234+
aggregated_resources,
235+
resources._DEFAULT_RESOURCE.merge(
236+
resources.Resource(
237+
{resources.SERVICE_NAME: "unknown_service"}, ""
238+
)
239+
),
240+
)
234241

235-
def test_aggregated_resources_with_static_resource(self):
242+
def test_aggregated_resources_with_default_destroying_static_resource(
243+
self,
244+
):
236245
static_resource = resources.Resource({"static_key": "static_value"})
237246

238247
self.assertEqual(
@@ -280,13 +289,19 @@ def test_aggregated_resources_multiple_detectors(self):
280289
resources.get_aggregated_resources(
281290
[resource_detector1, resource_detector2, resource_detector3]
282291
),
283-
resources.Resource(
284-
{
285-
"key1": "value1",
286-
"key2": "try_to_overwrite_existing_value",
287-
"key3": "try_to_overwrite_existing_value",
288-
"key4": "value4",
289-
}
292+
resources._DEFAULT_RESOURCE.merge(
293+
resources.Resource(
294+
{resources.SERVICE_NAME: "unknown_service"}, ""
295+
)
296+
).merge(
297+
resources.Resource(
298+
{
299+
"key1": "value1",
300+
"key2": "try_to_overwrite_existing_value",
301+
"key3": "try_to_overwrite_existing_value",
302+
"key4": "value4",
303+
}
304+
)
290305
),
291306
)
292307

@@ -321,18 +336,30 @@ def test_aggregated_resources_different_schema_urls(self):
321336
resources.get_aggregated_resources(
322337
[resource_detector1, resource_detector2]
323338
),
324-
resources.Resource(
325-
{"key1": "value1", "key2": "value2", "key3": "value3"},
326-
"url1",
339+
resources._DEFAULT_RESOURCE.merge(
340+
resources.Resource(
341+
{resources.SERVICE_NAME: "unknown_service"}, ""
342+
)
343+
).merge(
344+
resources.Resource(
345+
{"key1": "value1", "key2": "value2", "key3": "value3"},
346+
"url1",
347+
)
327348
),
328349
)
329350
with self.assertLogs(level=ERROR) as log_entry:
330351
self.assertEqual(
331352
resources.get_aggregated_resources(
332353
[resource_detector2, resource_detector3]
333354
),
334-
resources.Resource(
335-
{"key2": "value2", "key3": "value3"}, "url1"
355+
resources._DEFAULT_RESOURCE.merge(
356+
resources.Resource(
357+
{resources.SERVICE_NAME: "unknown_service"}, ""
358+
)
359+
).merge(
360+
resources.Resource(
361+
{"key2": "value2", "key3": "value3"}, "url1"
362+
)
336363
),
337364
)
338365
self.assertIn("url1", log_entry.output[0])
@@ -347,14 +374,20 @@ def test_aggregated_resources_different_schema_urls(self):
347374
resource_detector1,
348375
]
349376
),
350-
resources.Resource(
351-
{
352-
"key1": "value1",
353-
"key2": "try_to_overwrite_existing_value",
354-
"key3": "try_to_overwrite_existing_value",
355-
"key4": "value4",
356-
},
357-
"url1",
377+
resources._DEFAULT_RESOURCE.merge(
378+
resources.Resource(
379+
{resources.SERVICE_NAME: "unknown_service"}, ""
380+
)
381+
).merge(
382+
resources.Resource(
383+
{
384+
"key1": "value1",
385+
"key2": "try_to_overwrite_existing_value",
386+
"key3": "try_to_overwrite_existing_value",
387+
"key4": "value4",
388+
},
389+
"url1",
390+
)
358391
),
359392
)
360393
self.assertIn("url1", log_entry.output[0])
@@ -366,7 +399,11 @@ def test_resource_detector_ignore_error(self):
366399
resource_detector.raise_on_error = False
367400
self.assertEqual(
368401
resources.get_aggregated_resources([resource_detector]),
369-
resources.Resource.get_empty(),
402+
resources._DEFAULT_RESOURCE.merge(
403+
resources.Resource(
404+
{resources.SERVICE_NAME: "unknown_service"}, ""
405+
)
406+
),
370407
)
371408

372409
def test_resource_detector_raise_error(self):

0 commit comments

Comments
 (0)