aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils
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/azure/monitor/opentelemetry/_utils
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils')
-rw-r--r--.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils/__init__.py65
-rw-r--r--.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils/configurations.py178
2 files changed, 243 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils/__init__.py b/.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils/__init__.py
new file mode 100644
index 00000000..1de00af4
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils/__init__.py
@@ -0,0 +1,65 @@
+# -------------------------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# Licensed under the MIT License. See License in the project root for
+# license information.
+# --------------------------------------------------------------------------
+
+import logging
+import platform
+from os import environ
+from pathlib import Path
+
+from azure.monitor.opentelemetry.exporter._connection_string_parser import ( # pylint: disable=import-error,no-name-in-module
+ ConnectionStringParser,
+)
+from azure.monitor.opentelemetry.exporter._utils import ( # pylint: disable=import-error,no-name-in-module
+ _is_on_app_service,
+)
+from azure.monitor.opentelemetry._constants import (
+ _LOG_PATH_LINUX,
+ _LOG_PATH_WINDOWS,
+)
+
+
+logger = logging.getLogger(__name__)
+
+
+# --------------------Diagnostic/status logging------------------------------
+
+# TODO: Add environment variable to enabled diagnostics off of App Service
+_IS_DIAGNOSTICS_ENABLED = _is_on_app_service()
+_CUSTOMER_IKEY_ENV_VAR = None
+
+
+# pylint: disable=global-statement
+def _get_customer_ikey_from_env_var():
+ global _CUSTOMER_IKEY_ENV_VAR
+ if not _CUSTOMER_IKEY_ENV_VAR:
+ _CUSTOMER_IKEY_ENV_VAR = "unknown"
+ try:
+ _CUSTOMER_IKEY_ENV_VAR = ConnectionStringParser().instrumentation_key
+ except ValueError as e:
+ logger.error("Failed to parse Instrumentation Key: %s", e) # pylint: disable=C
+ return _CUSTOMER_IKEY_ENV_VAR
+
+
+def _get_log_path(status_log_path=False):
+ system = platform.system()
+ if system == "Linux":
+ return _LOG_PATH_LINUX
+ if system == "Windows":
+ log_path = str(Path.home()) + _LOG_PATH_WINDOWS
+ if status_log_path:
+ return log_path + "\\status"
+ return log_path
+ return None
+
+
+def _env_var_or_default(var_name, default_val=""):
+ try:
+ return environ[var_name]
+ except KeyError:
+ return default_val
+
+
+_EXTENSION_VERSION = _env_var_or_default("ApplicationInsightsAgent_EXTENSION_VERSION", "disabled")
diff --git a/.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils/configurations.py b/.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils/configurations.py
new file mode 100644
index 00000000..ff1d38aa
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/monitor/opentelemetry/_utils/configurations.py
@@ -0,0 +1,178 @@
+# -------------------------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# Licensed under the MIT License. See License in the project root for
+# license information.
+# --------------------------------------------------------------------------
+
+from logging import getLogger
+from os import environ
+from typing import Dict
+
+from opentelemetry.environment_variables import (
+ OTEL_LOGS_EXPORTER,
+ OTEL_METRICS_EXPORTER,
+ OTEL_TRACES_EXPORTER,
+)
+from opentelemetry.instrumentation.environment_variables import (
+ OTEL_PYTHON_DISABLED_INSTRUMENTATIONS,
+)
+from opentelemetry.sdk.environment_variables import (
+ OTEL_EXPERIMENTAL_RESOURCE_DETECTORS,
+ OTEL_TRACES_SAMPLER_ARG,
+)
+from opentelemetry.sdk.resources import Resource
+
+from azure.monitor.opentelemetry._constants import (
+ _AZURE_APP_SERVICE_RESOURCE_DETECTOR_NAME,
+ _AZURE_VM_RESOURCE_DETECTOR_NAME,
+ _FULLY_SUPPORTED_INSTRUMENTED_LIBRARIES,
+ _PREVIEW_INSTRUMENTED_LIBRARIES,
+ DISABLE_LOGGING_ARG,
+ DISABLE_METRICS_ARG,
+ DISABLE_TRACING_ARG,
+ DISTRO_VERSION_ARG,
+ ENABLE_LIVE_METRICS_ARG,
+ INSTRUMENTATION_OPTIONS_ARG,
+ LOGGER_NAME_ARG,
+ RESOURCE_ARG,
+ SAMPLING_RATIO_ARG,
+ SPAN_PROCESSORS_ARG,
+ VIEWS_ARG,
+)
+from azure.monitor.opentelemetry._types import ConfigurationValue
+from azure.monitor.opentelemetry._version import VERSION
+
+
+_INVALID_FLOAT_MESSAGE = "Value of %s must be a float. Defaulting to %s: %s"
+_SUPPORTED_RESOURCE_DETECTORS = (
+ _AZURE_APP_SERVICE_RESOURCE_DETECTOR_NAME,
+ _AZURE_VM_RESOURCE_DETECTOR_NAME,
+)
+# TODO: remove when sampler uses env var instead
+SAMPLING_RATIO_ENV_VAR = OTEL_TRACES_SAMPLER_ARG
+
+
+_logger = getLogger(__name__)
+
+
+def _get_configurations(**kwargs) -> Dict[str, ConfigurationValue]:
+ configurations = {}
+
+ for key, val in kwargs.items():
+ configurations[key] = val
+ configurations[DISTRO_VERSION_ARG] = VERSION
+
+ _default_disable_logging(configurations)
+ _default_disable_metrics(configurations)
+ _default_disable_tracing(configurations)
+ _default_logger_name(configurations)
+ _default_resource(configurations)
+ _default_sampling_ratio(configurations)
+ _default_instrumentation_options(configurations)
+ _default_span_processors(configurations)
+ _default_enable_live_metrics(configurations)
+ _default_views(configurations)
+
+ return configurations
+
+
+def _default_disable_logging(configurations):
+ default = False
+ if OTEL_LOGS_EXPORTER in environ:
+ if environ[OTEL_LOGS_EXPORTER].lower().strip() == "none":
+ default = True
+ configurations[DISABLE_LOGGING_ARG] = default
+
+
+def _default_disable_metrics(configurations):
+ default = False
+ if OTEL_METRICS_EXPORTER in environ:
+ if environ[OTEL_METRICS_EXPORTER].lower().strip() == "none":
+ default = True
+ configurations[DISABLE_METRICS_ARG] = default
+
+
+def _default_disable_tracing(configurations):
+ default = False
+ if OTEL_TRACES_EXPORTER in environ:
+ if environ[OTEL_TRACES_EXPORTER].lower().strip() == "none":
+ default = True
+ configurations[DISABLE_TRACING_ARG] = default
+
+
+def _default_logger_name(configurations):
+ configurations.setdefault(LOGGER_NAME_ARG, "")
+
+
+def _default_resource(configurations):
+ environ.setdefault(OTEL_EXPERIMENTAL_RESOURCE_DETECTORS, ",".join(_SUPPORTED_RESOURCE_DETECTORS))
+ if RESOURCE_ARG not in configurations:
+ configurations[RESOURCE_ARG] = Resource.create()
+ else:
+ configurations[RESOURCE_ARG] = Resource.create(configurations[RESOURCE_ARG].attributes)
+
+
+# TODO: remove when sampler uses env var instead
+def _default_sampling_ratio(configurations):
+ default = 1.0
+ if SAMPLING_RATIO_ENV_VAR in environ:
+ try:
+ default = float(environ[SAMPLING_RATIO_ENV_VAR])
+ except ValueError as e:
+ _logger.error( # pylint: disable=C
+ _INVALID_FLOAT_MESSAGE,
+ SAMPLING_RATIO_ENV_VAR,
+ default,
+ e,
+ )
+ configurations[SAMPLING_RATIO_ARG] = default
+
+
+def _default_instrumentation_options(configurations):
+ otel_disabled_instrumentations = _get_otel_disabled_instrumentations()
+
+ merged_instrumentation_options = {}
+ instrumentation_options = configurations.get(INSTRUMENTATION_OPTIONS_ARG, {})
+ for lib_name in _FULLY_SUPPORTED_INSTRUMENTED_LIBRARIES:
+ disabled_by_env_var = lib_name in otel_disabled_instrumentations
+ options = {"enabled": not disabled_by_env_var}
+ options.update(instrumentation_options.get(lib_name, {}))
+ merged_instrumentation_options[lib_name] = options
+ for lib_name in _PREVIEW_INSTRUMENTED_LIBRARIES:
+ options = {"enabled": False}
+ options.update(instrumentation_options.get(lib_name, {}))
+ merged_instrumentation_options[lib_name] = options
+
+ configurations[INSTRUMENTATION_OPTIONS_ARG] = merged_instrumentation_options
+
+
+def _default_span_processors(configurations):
+ configurations.setdefault(SPAN_PROCESSORS_ARG, [])
+
+
+def _default_enable_live_metrics(configurations):
+ configurations.setdefault(ENABLE_LIVE_METRICS_ARG, False)
+
+
+def _default_views(configurations):
+ configurations.setdefault(VIEWS_ARG, [])
+
+
+def _get_otel_disabled_instrumentations():
+ disabled_instrumentation = environ.get(OTEL_PYTHON_DISABLED_INSTRUMENTATIONS, "")
+ disabled_instrumentation = disabled_instrumentation.split(",")
+ # to handle users entering "requests , flask" or "requests, flask" with spaces
+ disabled_instrumentation = [x.strip() for x in disabled_instrumentation]
+ return disabled_instrumentation
+
+
+def _is_instrumentation_enabled(configurations, lib_name):
+ if INSTRUMENTATION_OPTIONS_ARG not in configurations:
+ return False
+ instrumentation_options = configurations[INSTRUMENTATION_OPTIONS_ARG]
+ if not lib_name in instrumentation_options:
+ return False
+ library_options = instrumentation_options[lib_name]
+ if "enabled" not in library_options:
+ return False
+ return library_options["enabled"] is True