aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/opentelemetry/resource
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/opentelemetry/resource
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/opentelemetry/resource')
-rw-r--r--.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/__init__.py27
-rw-r--r--.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/_constants.py74
-rw-r--r--.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/_utils.py54
-rw-r--r--.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/app_service.py59
-rw-r--r--.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/functions.py68
-rw-r--r--.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/version.py15
-rw-r--r--.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/vm.py103
7 files changed, 400 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/__init__.py b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/__init__.py
new file mode 100644
index 00000000..628a8ab7
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/__init__.py
@@ -0,0 +1,27 @@
+# Copyright The OpenTelemetry Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# pylint: disable=import-error
+
+from .app_service import AzureAppServiceResourceDetector
+from .functions import AzureFunctionsResourceDetector
+from .version import __version__
+from .vm import AzureVMResourceDetector
+
+__all__ = [
+ "AzureAppServiceResourceDetector",
+ "AzureFunctionsResourceDetector",
+ "AzureVMResourceDetector",
+ "__version__",
+]
diff --git a/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/_constants.py b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/_constants.py
new file mode 100644
index 00000000..3a6415e0
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/_constants.py
@@ -0,0 +1,74 @@
+# Copyright The OpenTelemetry Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from opentelemetry.semconv.resource import ResourceAttributes
+
+# cSpell:disable
+
+# Azure Kubernetes
+
+_AKS_ARM_NAMESPACE_ID = "AKS_ARM_NAMESPACE_ID"
+
+# AppService
+
+_AZURE_APP_SERVICE_STAMP_RESOURCE_ATTRIBUTE = "azure.app.service.stamp"
+_REGION_NAME = "REGION_NAME"
+_WEBSITE_HOME_STAMPNAME = "WEBSITE_HOME_STAMPNAME"
+_WEBSITE_HOSTNAME = "WEBSITE_HOSTNAME"
+_WEBSITE_INSTANCE_ID = "WEBSITE_INSTANCE_ID"
+_WEBSITE_OWNER_NAME = "WEBSITE_OWNER_NAME"
+_WEBSITE_RESOURCE_GROUP = "WEBSITE_RESOURCE_GROUP"
+_WEBSITE_SITE_NAME = "WEBSITE_SITE_NAME"
+_WEBSITE_SLOT_NAME = "WEBSITE_SLOT_NAME"
+
+_APP_SERVICE_ATTRIBUTE_ENV_VARS = {
+ ResourceAttributes.CLOUD_REGION: _REGION_NAME,
+ ResourceAttributes.DEPLOYMENT_ENVIRONMENT: _WEBSITE_SLOT_NAME,
+ ResourceAttributes.HOST_ID: _WEBSITE_HOSTNAME,
+ ResourceAttributes.SERVICE_INSTANCE_ID: _WEBSITE_INSTANCE_ID,
+ _AZURE_APP_SERVICE_STAMP_RESOURCE_ATTRIBUTE: _WEBSITE_HOME_STAMPNAME,
+}
+
+# Functions
+
+_FUNCTIONS_WORKER_RUNTIME = "FUNCTIONS_WORKER_RUNTIME"
+_WEBSITE_MEMORY_LIMIT_MB = "WEBSITE_MEMORY_LIMIT_MB"
+
+_FUNCTIONS_ATTRIBUTE_ENV_VARS = {
+ ResourceAttributes.FAAS_INSTANCE: _WEBSITE_INSTANCE_ID,
+ ResourceAttributes.FAAS_MAX_MEMORY: _WEBSITE_MEMORY_LIMIT_MB,
+}
+
+# Vm
+
+_AZURE_VM_METADATA_ENDPOINT = "http://169.254.169.254/metadata/instance/compute?api-version=2021-12-13&format=json"
+_AZURE_VM_SCALE_SET_NAME_ATTRIBUTE = "azure.vm.scaleset.name"
+_AZURE_VM_SKU_ATTRIBUTE = "azure.vm.sku"
+
+_EXPECTED_AZURE_AMS_ATTRIBUTES = [
+ _AZURE_VM_SCALE_SET_NAME_ATTRIBUTE,
+ _AZURE_VM_SKU_ATTRIBUTE,
+ ResourceAttributes.CLOUD_PLATFORM,
+ ResourceAttributes.CLOUD_PROVIDER,
+ ResourceAttributes.CLOUD_REGION,
+ ResourceAttributes.CLOUD_RESOURCE_ID,
+ ResourceAttributes.HOST_ID,
+ ResourceAttributes.HOST_NAME,
+ ResourceAttributes.HOST_TYPE,
+ ResourceAttributes.OS_TYPE,
+ ResourceAttributes.OS_VERSION,
+ ResourceAttributes.SERVICE_INSTANCE_ID,
+]
+
+# cSpell:enable
diff --git a/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/_utils.py b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/_utils.py
new file mode 100644
index 00000000..62d00c5a
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/_utils.py
@@ -0,0 +1,54 @@
+# Copyright The OpenTelemetry Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+from os import environ
+from typing import Optional
+
+from ._constants import (
+ _AKS_ARM_NAMESPACE_ID,
+ _FUNCTIONS_WORKER_RUNTIME,
+ _WEBSITE_OWNER_NAME,
+ _WEBSITE_RESOURCE_GROUP,
+ _WEBSITE_SITE_NAME,
+)
+
+
+def _is_on_aks() -> bool:
+ return environ.get(_AKS_ARM_NAMESPACE_ID) is not None
+
+
+def _is_on_app_service() -> bool:
+ return environ.get(_WEBSITE_SITE_NAME) is not None
+
+
+def _is_on_functions() -> bool:
+ return environ.get(_FUNCTIONS_WORKER_RUNTIME) is not None
+
+
+def _can_ignore_vm_detect() -> bool:
+ return _is_on_aks() or _is_on_app_service() or _is_on_functions()
+
+
+def _get_azure_resource_uri() -> Optional[str]:
+ website_site_name = environ.get(_WEBSITE_SITE_NAME)
+ website_resource_group = environ.get(_WEBSITE_RESOURCE_GROUP)
+ website_owner_name = environ.get(_WEBSITE_OWNER_NAME)
+
+ subscription_id = website_owner_name
+ if website_owner_name and "+" in website_owner_name:
+ subscription_id = website_owner_name[0 : website_owner_name.index("+")]
+
+ if not (website_site_name and website_resource_group and subscription_id):
+ return None
+
+ return f"/subscriptions/{subscription_id}/resourceGroups/{website_resource_group}/providers/Microsoft.Web/sites/{website_site_name}"
diff --git a/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/app_service.py b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/app_service.py
new file mode 100644
index 00000000..41371b8e
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/app_service.py
@@ -0,0 +1,59 @@
+# Copyright The OpenTelemetry Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from typing import Optional
+from os import environ
+
+from opentelemetry.sdk.resources import Resource, ResourceDetector
+from opentelemetry.semconv.resource import (
+ CloudPlatformValues,
+ CloudProviderValues,
+ ResourceAttributes,
+)
+from opentelemetry.resource.detector.azure._utils import _get_azure_resource_uri
+
+from ._constants import (
+ _APP_SERVICE_ATTRIBUTE_ENV_VARS,
+ _WEBSITE_SITE_NAME,
+)
+
+from opentelemetry.resource.detector.azure._utils import _is_on_functions
+
+
+class AzureAppServiceResourceDetector(ResourceDetector):
+ def detect(self) -> Resource:
+ attributes = {}
+ website_site_name = environ.get(_WEBSITE_SITE_NAME)
+ if website_site_name:
+ # Functions resource detector takes priority with `service.name` and `cloud.platform`
+ if not _is_on_functions():
+ attributes[ResourceAttributes.SERVICE_NAME] = website_site_name
+ attributes[ResourceAttributes.CLOUD_PLATFORM] = (
+ CloudPlatformValues.AZURE_APP_SERVICE.value
+ )
+ attributes[ResourceAttributes.CLOUD_PROVIDER] = (
+ CloudProviderValues.AZURE.value
+ )
+
+ azure_resource_uri = _get_azure_resource_uri()
+ if azure_resource_uri:
+ attributes[ResourceAttributes.CLOUD_RESOURCE_ID] = (
+ azure_resource_uri
+ )
+ for key, env_var in _APP_SERVICE_ATTRIBUTE_ENV_VARS.items():
+ value = environ.get(env_var)
+ if value:
+ attributes[key] = value
+
+ return Resource(attributes)
diff --git a/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/functions.py b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/functions.py
new file mode 100644
index 00000000..0bf9a10f
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/functions.py
@@ -0,0 +1,68 @@
+# Copyright The OpenTelemetry Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from os import environ, getpid
+
+from opentelemetry.sdk.resources import Resource, ResourceDetector
+from opentelemetry.semconv.resource import (
+ CloudPlatformValues,
+ CloudProviderValues,
+ ResourceAttributes,
+)
+
+from ._constants import (
+ _FUNCTIONS_ATTRIBUTE_ENV_VARS,
+ _REGION_NAME,
+ _WEBSITE_SITE_NAME,
+)
+from opentelemetry.resource.detector.azure._utils import (
+ _get_azure_resource_uri,
+ _is_on_functions,
+)
+
+
+class AzureFunctionsResourceDetector(ResourceDetector):
+ def detect(self) -> Resource:
+ attributes = {}
+ if _is_on_functions():
+ website_site_name = environ.get(_WEBSITE_SITE_NAME)
+ if website_site_name:
+ attributes[ResourceAttributes.SERVICE_NAME] = website_site_name
+ attributes[ResourceAttributes.PROCESS_PID] = getpid()
+ attributes[ResourceAttributes.CLOUD_PROVIDER] = (
+ CloudProviderValues.AZURE.value
+ )
+ attributes[ResourceAttributes.CLOUD_PLATFORM] = (
+ CloudPlatformValues.AZURE_FUNCTIONS.value
+ )
+ cloud_region = environ.get(_REGION_NAME)
+ if cloud_region:
+ attributes[ResourceAttributes.CLOUD_REGION] = cloud_region
+ azure_resource_uri = _get_azure_resource_uri()
+ if azure_resource_uri:
+ attributes[ResourceAttributes.CLOUD_RESOURCE_ID] = (
+ azure_resource_uri
+ )
+ for key, env_var in _FUNCTIONS_ATTRIBUTE_ENV_VARS.items():
+ value = environ.get(env_var)
+ if value:
+ if key == ResourceAttributes.FAAS_MAX_MEMORY:
+ try:
+ value = int(value)
+ except ValueError:
+ continue
+ attributes[key] = value
+
+ return Resource(attributes)
+
diff --git a/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/version.py b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/version.py
new file mode 100644
index 00000000..fac29d77
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/version.py
@@ -0,0 +1,15 @@
+# Copyright The OpenTelemetry Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+__version__ = "0.1.5"
diff --git a/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/vm.py b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/vm.py
new file mode 100644
index 00000000..21122829
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/opentelemetry/resource/detector/azure/vm.py
@@ -0,0 +1,103 @@
+# Copyright The OpenTelemetry Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from json import loads
+from logging import getLogger
+from urllib.error import URLError
+from urllib.request import Request, urlopen
+
+from opentelemetry.context import (
+ _SUPPRESS_INSTRUMENTATION_KEY,
+ attach,
+ detach,
+ set_value,
+)
+from opentelemetry.sdk.resources import Resource, ResourceDetector
+from opentelemetry.semconv.resource import (
+ CloudPlatformValues,
+ CloudProviderValues,
+ ResourceAttributes,
+)
+
+from ._constants import (
+ _AZURE_VM_METADATA_ENDPOINT,
+ _AZURE_VM_SCALE_SET_NAME_ATTRIBUTE,
+ _AZURE_VM_SKU_ATTRIBUTE,
+ _EXPECTED_AZURE_AMS_ATTRIBUTES,
+)
+from ._utils import _can_ignore_vm_detect
+
+_logger = getLogger(__name__)
+
+
+class AzureVMResourceDetector(ResourceDetector):
+ # pylint: disable=no-self-use
+ def detect(self) -> "Resource":
+ attributes = {}
+ if not _can_ignore_vm_detect():
+ token = attach(set_value(_SUPPRESS_INSTRUMENTATION_KEY, True))
+ metadata_json = _get_azure_vm_metadata()
+ if not metadata_json:
+ return Resource(attributes)
+ for attribute_key in _EXPECTED_AZURE_AMS_ATTRIBUTES:
+ attributes[attribute_key] = _get_attribute_from_metadata(
+ metadata_json, attribute_key
+ )
+ detach(token)
+ return Resource(attributes)
+
+
+def _get_azure_vm_metadata():
+ request = Request(_AZURE_VM_METADATA_ENDPOINT)
+ request.add_header("Metadata", "True")
+ try:
+ # VM metadata service should not take more than 200ms on success case
+ with urlopen(request, timeout=0.2) as response:
+ return loads(response.read())
+ except URLError:
+ # Not on Azure VM
+ return None
+ except Exception as e: # pylint: disable=broad-except,invalid-name
+ _logger.exception("Failed to receive Azure VM metadata: %s", e)
+ return None
+
+
+def _get_attribute_from_metadata(metadata_json, attribute_key):
+ ams_value = ""
+ if attribute_key == _AZURE_VM_SCALE_SET_NAME_ATTRIBUTE:
+ ams_value = metadata_json["vmScaleSetName"]
+ elif attribute_key == _AZURE_VM_SKU_ATTRIBUTE:
+ ams_value = metadata_json["sku"]
+ elif attribute_key == ResourceAttributes.CLOUD_PLATFORM:
+ ams_value = CloudPlatformValues.AZURE_VM.value
+ elif attribute_key == ResourceAttributes.CLOUD_PROVIDER:
+ ams_value = CloudProviderValues.AZURE.value
+ elif attribute_key == ResourceAttributes.CLOUD_REGION:
+ ams_value = metadata_json["location"]
+ elif attribute_key == ResourceAttributes.CLOUD_RESOURCE_ID:
+ ams_value = metadata_json["resourceId"]
+ elif attribute_key in (
+ ResourceAttributes.HOST_ID,
+ ResourceAttributes.SERVICE_INSTANCE_ID,
+ ):
+ ams_value = metadata_json["vmId"]
+ elif attribute_key == ResourceAttributes.HOST_NAME:
+ ams_value = metadata_json["name"]
+ elif attribute_key == ResourceAttributes.HOST_TYPE:
+ ams_value = metadata_json["vmSize"]
+ elif attribute_key == ResourceAttributes.OS_TYPE:
+ ams_value = metadata_json["osType"]
+ elif attribute_key == ResourceAttributes.OS_VERSION:
+ ams_value = metadata_json["version"]
+ return ams_value