From 331d32d1851df4443b7a7f11c2454b0e8ef121d5 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 8 Feb 2024 14:14:51 -0800 Subject: [PATCH] Include device.* attributes in part A fields (#34229) --- .../azure-monitor-opentelemetry-exporter/CHANGELOG.md | 3 +++ .../azure/monitor/opentelemetry/exporter/_utils.py | 9 +++++++++ .../tests/test_utils.py | 8 +++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md index d973799d27b0..3bba3b18c8a1 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md @@ -4,6 +4,9 @@ ### Features Added +- Add device.* to part A fields + ([#34229](https://github.com/Azure/azure-sdk-for-python/pull/34229)) + ### Breaking Changes ### Bugs Fixed diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/_utils.py b/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/_utils.py index dc7c0b240f86..27b31f7e34c6 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/_utils.py +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/_utils.py @@ -161,6 +161,9 @@ def _populate_part_a_fields(resource: Resource): service_name = resource.attributes.get(ResourceAttributes.SERVICE_NAME) service_namespace = resource.attributes.get(ResourceAttributes.SERVICE_NAMESPACE) service_instance_id = resource.attributes.get(ResourceAttributes.SERVICE_INSTANCE_ID) + device_id = resource.attributes.get(ResourceAttributes.DEVICE_ID) + device_model = resource.attributes.get(ResourceAttributes.DEVICE_MODEL_NAME) + device_make = resource.attributes.get(ResourceAttributes.DEVICE_MANUFACTURER) if service_name: if service_namespace: tags[ContextTagKeys.AI_CLOUD_ROLE] = str(service_namespace) + \ @@ -172,6 +175,12 @@ def _populate_part_a_fields(resource: Resource): else: tags[ContextTagKeys.AI_CLOUD_ROLE_INSTANCE] = platform.node() # hostname default tags[ContextTagKeys.AI_INTERNAL_NODE_NAME] = tags[ContextTagKeys.AI_CLOUD_ROLE_INSTANCE] + if device_id: + tags[ContextTagKeys.AI_DEVICE_ID] = device_id # type: ignore + if device_model: + tags[ContextTagKeys.AI_DEVICE_MODEL] = device_model # type: ignore + if device_make: + tags[ContextTagKeys.AI_DEVICE_OEM_NAME] = device_make # type: ignore return tags # pylint: disable=W0622 diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/tests/test_utils.py b/sdk/monitor/azure-monitor-opentelemetry-exporter/tests/test_utils.py index 52c951d11900..7ab00c9090f9 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/tests/test_utils.py +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/tests/test_utils.py @@ -48,12 +48,18 @@ def test_populate_part_a_fields(self): resource = Resource( {"service.name": "testServiceName", "service.namespace": "testServiceNamespace", - "service.instance.id": "testServiceInstanceId"}) + "service.instance.id": "testServiceInstanceId", + "device.id": "testDeviceId", + "device.model.name": "testDeviceModel", + "device.manufacturer": "testDeviceMake"}) tags = _utils._populate_part_a_fields(resource) self.assertIsNotNone(tags) self.assertEqual(tags.get("ai.cloud.role"), "testServiceNamespace.testServiceName") self.assertEqual(tags.get("ai.cloud.roleInstance"), "testServiceInstanceId") self.assertEqual(tags.get("ai.internal.nodeName"), "testServiceInstanceId") + self.assertEqual(tags.get("ai.device.id"), "testDeviceId") + self.assertEqual(tags.get("ai.device.model"), "testDeviceModel") + self.assertEqual(tags.get("ai.device.oemName"), "testDeviceMake") def test_populate_part_a_fields_default(self): resource = Resource(