diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md index d973799d27b0..e48038a74510 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/CHANGELOG.md @@ -10,6 +10,9 @@ ### Other Changes +- Add attachType character to sdkVersion prefix + ([#34226](https://github.com/Azure/azure-sdk-for-python/pull/34226)) + ## 1.0.0b22 (2024-02-01) ### Features Added 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..50bad74d1e66 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 @@ -36,8 +36,10 @@ def _is_on_app_service(): - return "WEBSITE_SITE_NAME" in environ + return environ.get("WEBSITE_SITE_NAME") is not None +def _is_on_functions(): + return environ.get("FUNCTIONS_WORKER_RUNTIME") is not None def _is_attach_enabled(): return isdir("/agents/python/") @@ -45,14 +47,30 @@ def _is_attach_enabled(): def _get_sdk_version_prefix(): sdk_version_prefix = '' - if _is_on_app_service() and _is_attach_enabled(): - os = 'u' - system = platform.system() - if system == "Linux": - os = 'l' - elif system == "Windows": - os = 'w' - sdk_version_prefix = "a{}_".format(os) + rp = 'u' + if _is_on_functions(): + rp = 'f' + elif _is_on_app_service(): + rp = 'a' + # TODO: Add VM scenario outside statsbeat + # elif _is_on_vm(): + # rp = 'v' + # TODO: Add AKS scenario + # elif _is_on_aks(): + # rp = 'k' + + os = 'u' + system = platform.system() + if system == "Linux": + os = 'l' + elif system == "Windows": + os = 'w' + + attach_type = 'm' + if _is_attach_enabled(): + attach_type = 'i' + sdk_version_prefix = "{}{}{}_".format(rp, os, attach_type) + return sdk_version_prefix diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/statsbeat/_statsbeat_metrics.py b/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/statsbeat/_statsbeat_metrics.py index 656ac76460f1..1001b3e1a264 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/statsbeat/_statsbeat_metrics.py +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/azure/monitor/opentelemetry/exporter/statsbeat/_statsbeat_metrics.py @@ -159,14 +159,14 @@ def _get_attach_metric(self, options: CallbackOptions) -> Iterable[Observation]: rpId = '' os_type = platform.system() # rp, rpId - if os.environ.get("WEBSITE_SITE_NAME") is not None: + if _utils._is_on_app_service(): # Web apps rp = _RP_NAMES[0] rpId = '{}/{}'.format( os.environ.get("WEBSITE_SITE_NAME"), os.environ.get("WEBSITE_HOME_STAMPNAME", '') ) - elif os.environ.get("FUNCTIONS_WORKER_RUNTIME") is not None: + elif _utils._is_on_functions(): # Function apps rp = _RP_NAMES[1] rpId = os.environ.get("WEBSITE_HOSTNAME", '') @@ -177,6 +177,7 @@ def _get_attach_metric(self, options: CallbackOptions) -> Iterable[Observation]: self._vm_data.get("vmId", ''), self._vm_data.get("subscriptionId", '')) os_type = self._vm_data.get("osType", '') + # TODO: add AKS scenario else: # Not in any rp or VM metadata failed rp = _RP_NAMES[3] diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/samples/traces/django/sample/sample/asgi.py b/sdk/monitor/azure-monitor-opentelemetry-exporter/samples/traces/django/sample/sample/asgi.py index a78e7cdaa690..a8326fa20595 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/samples/traces/django/sample/sample/asgi.py +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/samples/traces/django/sample/sample/asgi.py @@ -38,4 +38,3 @@ application = get_asgi_application() # cSpell:enable - 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..89ac619dc9b3 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/tests/test_utils.py +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/tests/test_utils.py @@ -77,36 +77,110 @@ def test_create_telemetry_item(self, mock_ns_to_iso_str): ) self.assertEqual(result, expected) - @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=True) + # Unknown + + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=False) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="") + def test_get_sdk_version_prefix(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "uum_") + + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=False) @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Linux") - def test_get_sdk_version_prefix_off_app_service(self, mock_system, mock_getenv): + def test_get_sdk_version_prefix_linux(self, mock_system, mock_getenv): result = _utils._get_sdk_version_prefix() - self.assertEqual(result, "") + self.assertEqual(result, "ulm_") + + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=False) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Windows") + def test_get_sdk_version_prefix_windows(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "uwm_") + + # App Service + + @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"WEBSITE_SITE_NAME": TEST_WEBSITE_SITE_NAME}) + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=False) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="") + def test_get_sdk_version_prefix_app_service(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "aum_") @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"WEBSITE_SITE_NAME": TEST_WEBSITE_SITE_NAME}) @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=False) @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Linux") - def test_get_sdk_version_prefix_app_service_disabled_attach(self, mock_system, mock_getenv): + def test_get_sdk_version_prefix_app_service_linux(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "alm_") + + @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"WEBSITE_SITE_NAME": TEST_WEBSITE_SITE_NAME}) + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=False) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Windows") + def test_get_sdk_version_prefix_app_service_windows(self, mock_system, mock_getenv): result = _utils._get_sdk_version_prefix() - self.assertEqual(result, "") + self.assertEqual(result, "awm_") + + @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"WEBSITE_SITE_NAME": TEST_WEBSITE_SITE_NAME}) + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=True) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="") + def test_get_sdk_version_prefix_app_service_attach(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "aui_") @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"WEBSITE_SITE_NAME": TEST_WEBSITE_SITE_NAME}) @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=True) @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Linux") - def test_get_sdk_version_prefix_linux_attach(self, mock_system, mock_getenv): + def test_get_sdk_version_prefix_app_service_linux_attach(self, mock_system, mock_getenv): result = _utils._get_sdk_version_prefix() - self.assertEqual(result, "al_") + self.assertEqual(result, "ali_") @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"WEBSITE_SITE_NAME": TEST_WEBSITE_SITE_NAME}) @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=True) @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Windows") - def test_get_sdk_version_prefix_windows_attach(self, mock_system, mock_getenv): + def test_get_sdk_version_prefix_app_service_windows_attach(self, mock_system, mock_getenv): result = _utils._get_sdk_version_prefix() - self.assertEqual(result, "aw_") + self.assertEqual(result, "awi_") - @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"WEBSITE_SITE_NAME": TEST_WEBSITE_SITE_NAME}) + # Function + + @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"FUNCTIONS_WORKER_RUNTIME": TEST_WEBSITE_SITE_NAME}) + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=False) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="") + def test_get_sdk_version_prefix_function(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "fum_") + + @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"FUNCTIONS_WORKER_RUNTIME": TEST_WEBSITE_SITE_NAME}) + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=False) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Linux") + def test_get_sdk_version_prefix_function_linux(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "flm_") + + @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"FUNCTIONS_WORKER_RUNTIME": TEST_WEBSITE_SITE_NAME}) + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=False) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Windows") + def test_get_sdk_version_prefix_function_windows(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "fwm_") + + @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"FUNCTIONS_WORKER_RUNTIME": TEST_WEBSITE_SITE_NAME}) @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=True) @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="") - def test_get_sdk_version_prefix_unknown_attach(self, mock_system, mock_getenv): + def test_get_sdk_version_prefix_function_attach(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "fui_") + + @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"FUNCTIONS_WORKER_RUNTIME": TEST_WEBSITE_SITE_NAME}) + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=True) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Linux") + def test_get_sdk_version_prefix_function_linux_attach(self, mock_system, mock_getenv): + result = _utils._get_sdk_version_prefix() + self.assertEqual(result, "fli_") + + @patch("azure.monitor.opentelemetry.exporter._utils.environ", {"FUNCTIONS_WORKER_RUNTIME": TEST_WEBSITE_SITE_NAME}) + @patch("azure.monitor.opentelemetry.exporter._utils.isdir", return_value=True) + @patch("azure.monitor.opentelemetry.exporter._utils.platform.system", return_value="Windows") + def test_get_sdk_version_prefix_function_windows_attach(self, mock_system, mock_getenv): result = _utils._get_sdk_version_prefix() - self.assertEqual(result, "au_") + self.assertEqual(result, "fwi_")