diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md index d973799d27b05..3bba3b18c8a19 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 dc7c0b240f869..27b31f7e34c69 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 52c951d119000..7ab00c9090f9a 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(