diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cefc2c2..1f876a92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## Unreleased +- Unpin OTel SDK/API version + ([#310](https://github.com/microsoft/ApplicationInsights-Python/pull/310)) +- Replace explicit log processor exporter interval env var with OT SDK env var + ([#311](https://github.com/microsoft/ApplicationInsights-Python/pull/311)) +- Update vendored instrumentations to 0.40b0 + ([#309](https://github.com/microsoft/ApplicationInsights-Python/pull/309)) + ## [1.0.0b15](https://github.com/microsoft/ApplicationInsights-Python/releases/tag/v1.0.0b15) - 2023-07-17 - Upgrade to exporter 1.0.0b15 and OTel 1.19 diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index 9538a386..efe130a8 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -14,14 +14,13 @@ DISABLE_METRICS_ARG, DISABLE_TRACING_ARG, DISABLED_INSTRUMENTATIONS_ARG, - LOGGING_EXPORT_INTERVAL_MS_ARG, SAMPLING_RATIO_ARG, ) from azure.monitor.opentelemetry._types import ConfigurationValue -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.dependencies import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.dependencies import ( get_dependency_conflicts, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import ( BaseInstrumentor, ) from azure.monitor.opentelemetry.exporter import ( @@ -52,7 +51,7 @@ "psycopg2": ("psycopg2 >= 2.7.3.1",), "requests": ("requests ~= 2.0",), "urllib": tuple(), - "urllib3": ("urllib3 >= 1.0.0, < 2.0.0",), + "urllib3": ("urllib3 >= 1.0.0, < 3.0.0",), } @@ -113,14 +112,11 @@ def _setup_tracing(configurations: Dict[str, ConfigurationValue]): def _setup_logging(configurations: Dict[str, ConfigurationValue]): - # TODO: Remove after upgrading to OTel SDK 1.18 - logging_export_interval_ms = configurations[LOGGING_EXPORT_INTERVAL_MS_ARG] logger_provider = LoggerProvider() set_logger_provider(logger_provider) log_exporter = AzureMonitorLogExporter(**configurations) log_record_processor = BatchLogRecordProcessor( log_exporter, - schedule_delay_millis=logging_export_interval_ms, ) get_logger_provider().add_log_record_processor(log_record_processor) handler = LoggingHandler(logger_provider=get_logger_provider()) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_constants.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_constants.py index fbc7d332..5001107c 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_constants.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_constants.py @@ -21,7 +21,6 @@ DISABLE_METRICS_ARG = "disable_metrics" DISABLE_TRACING_ARG = "disable_tracing" DISABLED_INSTRUMENTATIONS_ARG = "disabled_instrumentations" -LOGGING_EXPORT_INTERVAL_MS_ARG = "logging_export_interval_ms" SAMPLING_RATIO_ARG = "sampling_ratio" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/psycopg2/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/psycopg2/version.py deleted file mode 100644 index a84e45c8..00000000 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/psycopg2/version.py +++ /dev/null @@ -1,15 +0,0 @@ -# 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.39b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/requests/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/requests/version.py deleted file mode 100644 index a84e45c8..00000000 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/requests/version.py +++ /dev/null @@ -1,15 +0,0 @@ -# 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.39b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib3/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib3/version.py deleted file mode 100644 index a84e45c8..00000000 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib3/version.py +++ /dev/null @@ -1,15 +0,0 @@ -# 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.39b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/version.py deleted file mode 100644 index a84e45c8..00000000 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/version.py +++ /dev/null @@ -1,15 +0,0 @@ -# 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.39b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/wsgi/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/wsgi/version.py deleted file mode 100644 index a84e45c8..00000000 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/wsgi/version.py +++ /dev/null @@ -1,15 +0,0 @@ -# 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.39b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/http/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/http/version.py deleted file mode 100644 index a84e45c8..00000000 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/http/version.py +++ /dev/null @@ -1,15 +0,0 @@ -# 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.39b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/__init__.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/__init__.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/__init__.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/__init__.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/__init__.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/__init__.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/asgi/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/asgi/__init__.py similarity index 88% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/asgi/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/asgi/__init__.py index 05c1c31a..922bf5da 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/asgi/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/asgi/__init__.py @@ -23,13 +23,11 @@ from asgiref.compatibility import guarantee_single_callable from opentelemetry import context, trace -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.asgi.version import ( - __version__ -) # noqa -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.propagators import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.asgi.version import __version__ # noqa +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.propagators import ( get_global_response_propagator, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import ( _start_internal_or_server_span, http_status_to_status_code, ) @@ -39,7 +37,7 @@ from opentelemetry.semconv.trace import SpanAttributes from opentelemetry.trace import Span, set_span_in_context from opentelemetry.trace.status import Status, StatusCode -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http import ( OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS, OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST, OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE, @@ -242,18 +240,23 @@ def set_status_code(span, status_code): def get_default_span_details(scope: dict) -> Tuple[str, dict]: - """Default implementation for get_default_span_details + """ + Default span name is the HTTP method and URL path, or just the method. + https://github.com/open-telemetry/opentelemetry-specification/pull/3165 + https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/http/#name + Args: scope: the ASGI scope dictionary Returns: a tuple of the span name, and any attributes to attach to the span. """ - span_name = ( - scope.get("path", "").strip() - or f"HTTP {scope.get('method', '').strip()}" - ) - - return span_name, {} + path = scope.get("path", "").strip() + method = scope.get("method", "").strip() + if method and path: # http + return f"{method} {path}", {} + if path: # websocket + return path, {} + return method, {} # http with no path def _collect_target_attribute( @@ -328,6 +331,16 @@ def __init__( unit="ms", description="measures the duration of the inbound HTTP request", ) + self.server_response_size_histogram = self.meter.create_histogram( + name=MetricInstruments.HTTP_SERVER_RESPONSE_SIZE, + unit="By", + description="measures the size of HTTP response messages (compressed).", + ) + self.server_request_size_histogram = self.meter.create_histogram( + name=MetricInstruments.HTTP_SERVER_REQUEST_SIZE, + unit="By", + description="Measures the size of HTTP request messages (compressed).", + ) self.active_requests_counter = self.meter.create_up_down_counter( name=MetricInstruments.HTTP_SERVER_ACTIVE_REQUESTS, unit="requests", @@ -340,6 +353,7 @@ def __init__( self.server_request_hook = server_request_hook self.client_request_hook = client_request_hook self.client_response_hook = client_response_hook + self.content_length_header = None async def __call__(self, scope, receive, send): """The ASGI application @@ -415,6 +429,20 @@ async def __call__(self, scope, receive, send): self.active_requests_counter.add( -1, active_requests_count_attrs ) + if self.content_length_header: + self.server_response_size_histogram.record( + self.content_length_header, duration_attrs + ) + request_size = asgi_getter.get(scope, "content-length") + if request_size: + try: + request_size_amount = int(request_size[0]) + except ValueError: + pass + else: + self.server_request_size_histogram.record( + request_size_amount, duration_attrs + ) if token: context.detach(token) @@ -482,6 +510,13 @@ async def otel_send(message): setter=asgi_setter, ) + content_length = asgi_getter.get(message, "content-length") + if content_length: + try: + self.content_length_header = int(content_length[0]) + except ValueError: + pass + await send(message) return otel_send diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/asgi/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/asgi/package.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/asgi/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/asgi/package.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/flask/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/asgi/version.py similarity index 96% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/flask/version.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/asgi/version.py index a84e45c8..c8536e2a 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/flask/version.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/asgi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.39b0" +__version__ = "0.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/auto_instrumentation/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/auto_instrumentation/__init__.py similarity index 97% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/auto_instrumentation/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/auto_instrumentation/__init__.py index 1339113a..31373fb0 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/auto_instrumentation/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/auto_instrumentation/__init__.py @@ -23,9 +23,7 @@ from pkg_resources import iter_entry_points -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.version import ( - __version__ -) +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.version import __version__ _logger = getLogger(__name__) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/auto_instrumentation/_load.py similarity index 59% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/auto_instrumentation/_load.py index 6b142f75..4e4c8bf6 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/auto_instrumentation/_load.py @@ -14,46 +14,42 @@ from logging import getLogger from os import environ -from os.path import abspath, dirname, pathsep from pkg_resources import iter_entry_points -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.dependencies import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.dependencies import ( get_dist_dependency_conflicts, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.distro import ( - BaseDistro, - DefaultDistro -) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.environment_variables import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.distro import BaseDistro, DefaultDistro +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.environment_variables import ( + OTEL_PYTHON_CONFIGURATOR, OTEL_PYTHON_DISABLED_INSTRUMENTATIONS, + OTEL_PYTHON_DISTRO, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import ( - _python_path_without_directory -) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.version import ( - __version__ -) +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.version import __version__ -logger = getLogger(__name__) +_logger = getLogger(__name__) -def _load_distros() -> BaseDistro: +def _load_distro() -> BaseDistro: + distro_name = environ.get(OTEL_PYTHON_DISTRO, None) for entry_point in iter_entry_points("opentelemetry_distro"): try: - distro = entry_point.load()() - if not isinstance(distro, BaseDistro): - logger.debug( - "%s is not an OpenTelemetry Distro. Skipping", - entry_point.name, + # If no distro is specified, use first to come up. + if distro_name is None or distro_name == entry_point.name: + distro = entry_point.load()() + if not isinstance(distro, BaseDistro): + _logger.debug( + "%s is not an OpenTelemetry Distro. Skipping", + entry_point.name, + ) + continue + _logger.debug( + "Distribution %s will be configured", entry_point.name ) - continue - logger.debug( - "Distribution %s will be configured", entry_point.name - ) - return distro + return distro except Exception as exc: # pylint: disable=broad-except - logger.exception( + _logger.exception( "Distribution %s configuration failed", entry_point.name ) raise exc @@ -72,7 +68,7 @@ def _load_instrumentors(distro): for entry_point in iter_entry_points("opentelemetry_instrumentor"): if entry_point.name in package_to_exclude: - logger.debug( + _logger.debug( "Instrumentation skipped for library %s", entry_point.name ) continue @@ -80,7 +76,7 @@ def _load_instrumentors(distro): try: conflict = get_dist_dependency_conflicts(entry_point.dist) if conflict: - logger.debug( + _logger.debug( "Skipping instrumentation %s: %s", entry_point.name, conflict, @@ -89,9 +85,9 @@ def _load_instrumentors(distro): # tell instrumentation to not run dep checks again as we already did it above distro.load_instrumentor(entry_point, skip_dep_check=True) - logger.debug("Instrumented %s", entry_point.name) + _logger.debug("Instrumented %s", entry_point.name) except Exception as exc: # pylint: disable=broad-except - logger.exception("Instrumenting of %s failed", entry_point.name) + _logger.exception("Instrumenting of %s failed", entry_point.name) raise exc for entry_point in iter_entry_points("opentelemetry_post_instrument"): @@ -99,36 +95,30 @@ def _load_instrumentors(distro): def _load_configurators(): + configurator_name = environ.get(OTEL_PYTHON_CONFIGURATOR, None) configured = None for entry_point in iter_entry_points("opentelemetry_configurator"): if configured is not None: - logger.warning( + _logger.warning( "Configuration of %s not loaded, %s already loaded", entry_point.name, configured, ) continue try: - entry_point.load()().configure(auto_instrumentation_version=__version__) # type: ignore - configured = entry_point.name + if ( + configurator_name is None + or configurator_name == entry_point.name + ): + entry_point.load()().configure(auto_instrumentation_version=__version__) # type: ignore + configured = entry_point.name + else: + _logger.warning( + "Configuration of %s not loaded because %s is set by %s", + entry_point.name, + configurator_name, + OTEL_PYTHON_CONFIGURATOR, + ) except Exception as exc: # pylint: disable=broad-except - logger.exception("Configuration of %s failed", entry_point.name) + _logger.exception("Configuration of %s failed", entry_point.name) raise exc - - -def initialize(): - # prevents auto-instrumentation of subprocesses if code execs another python process - environ["PYTHONPATH"] = _python_path_without_directory( - environ["PYTHONPATH"], dirname(abspath(__file__)), pathsep - ) - - try: - distro = _load_distros() - distro.configure() - _load_configurators() - _load_instrumentors(distro) - except Exception: # pylint: disable=broad-except - logger.exception("Failed to auto initialize opentelemetry") - - -initialize() diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py new file mode 100644 index 00000000..2d61864b --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py @@ -0,0 +1,44 @@ +# 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 logging import getLogger +from os import environ +from os.path import abspath, dirname, pathsep + +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.auto_instrumentation._load import ( + _load_configurators, + _load_distro, + _load_instrumentors, +) +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import _python_path_without_directory + +logger = getLogger(__name__) + + +def initialize(): + # prevents auto-instrumentation of subprocesses if code execs another python process + environ["PYTHONPATH"] = _python_path_without_directory( + environ["PYTHONPATH"], dirname(abspath(__file__)), pathsep + ) + + try: + distro = _load_distro() + distro.configure() + _load_configurators() + _load_instrumentors(distro) + except Exception: # pylint: disable=broad-except + logger.exception("Failed to auto initialize opentelemetry") + + +initialize() diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/bootstrap.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/bootstrap.py similarity index 96% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/bootstrap.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/bootstrap.py index ab1577b5..e644ff50 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/bootstrap.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/bootstrap.py @@ -21,13 +21,11 @@ import pkg_resources -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.bootstrap_gen import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.bootstrap_gen import ( default_instrumentations, libraries, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.version import ( - __version__ -) +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.version import __version__ logger = logging.getLogger(__name__) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/bootstrap_gen.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/bootstrap_gen.py similarity index 83% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/bootstrap_gen.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/bootstrap_gen.py index f78c60cf..6834a29f 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/bootstrap_gen.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/bootstrap_gen.py @@ -18,158 +18,162 @@ libraries = { "aio_pika": { "library": "aio_pika >= 7.2.0, < 10.0.0", - "instrumentation": "opentelemetry-instrumentation-aio-pika==0.39b0", + "instrumentation": "opentelemetry-instrumentation-aio-pika==0.40b0", }, "aiohttp": { "library": "aiohttp ~= 3.0", - "instrumentation": "opentelemetry-instrumentation-aiohttp-client==0.39b0", + "instrumentation": "opentelemetry-instrumentation-aiohttp-client==0.40b0", }, "aiopg": { "library": "aiopg >= 0.13.0, < 2.0.0", - "instrumentation": "opentelemetry-instrumentation-aiopg==0.39b0", + "instrumentation": "opentelemetry-instrumentation-aiopg==0.40b0", }, "asgiref": { "library": "asgiref ~= 3.0", - "instrumentation": "opentelemetry-instrumentation-asgi==0.39b0", + "instrumentation": "opentelemetry-instrumentation-asgi==0.40b0", }, "asyncpg": { "library": "asyncpg >= 0.12.0", - "instrumentation": "opentelemetry-instrumentation-asyncpg==0.39b0", + "instrumentation": "opentelemetry-instrumentation-asyncpg==0.40b0", }, "boto": { "library": "boto~=2.0", - "instrumentation": "opentelemetry-instrumentation-boto==0.39b0", + "instrumentation": "opentelemetry-instrumentation-boto==0.40b0", }, "boto3": { "library": "boto3 ~= 1.0", - "instrumentation": "opentelemetry-instrumentation-boto3sqs==0.39b0", + "instrumentation": "opentelemetry-instrumentation-boto3sqs==0.40b0", }, "botocore": { "library": "botocore ~= 1.0", - "instrumentation": "opentelemetry-instrumentation-botocore==0.39b0", + "instrumentation": "opentelemetry-instrumentation-botocore==0.40b0", }, "celery": { "library": "celery >= 4.0, < 6.0", - "instrumentation": "opentelemetry-instrumentation-celery==0.39b0", + "instrumentation": "opentelemetry-instrumentation-celery==0.40b0", }, "confluent-kafka": { - "library": "confluent-kafka >= 1.8.2, < 2.0.0", - "instrumentation": "opentelemetry-instrumentation-confluent-kafka==0.39b0", + "library": "confluent-kafka >= 1.8.2, <= 2.2.0", + "instrumentation": "opentelemetry-instrumentation-confluent-kafka==0.40b0", }, "django": { "library": "django >= 1.10", - "instrumentation": "opentelemetry-instrumentation-django==0.39b0", + "instrumentation": "opentelemetry-instrumentation-django==0.40b0", }, "elasticsearch": { "library": "elasticsearch >= 2.0", - "instrumentation": "opentelemetry-instrumentation-elasticsearch==0.39b0", + "instrumentation": "opentelemetry-instrumentation-elasticsearch==0.40b0", }, "falcon": { "library": "falcon >= 1.4.1, < 4.0.0", - "instrumentation": "opentelemetry-instrumentation-falcon==0.39b0", + "instrumentation": "opentelemetry-instrumentation-falcon==0.40b0", }, "fastapi": { "library": "fastapi ~= 0.58", - "instrumentation": "opentelemetry-instrumentation-fastapi==0.39b0", + "instrumentation": "opentelemetry-instrumentation-fastapi==0.40b0", }, "flask": { "library": "flask >= 1.0, < 3.0", - "instrumentation": "opentelemetry-instrumentation-flask==0.39b0", + "instrumentation": "opentelemetry-instrumentation-flask==0.40b0", }, "grpcio": { "library": "grpcio ~= 1.27", - "instrumentation": "opentelemetry-instrumentation-grpc==0.39b0", + "instrumentation": "opentelemetry-instrumentation-grpc==0.40b0", }, "httpx": { - "library": "httpx >= 0.18.0, <= 0.23.0", - "instrumentation": "opentelemetry-instrumentation-httpx==0.39b0", + "library": "httpx >= 0.18.0", + "instrumentation": "opentelemetry-instrumentation-httpx==0.40b0", }, "jinja2": { "library": "jinja2 >= 2.7, < 4.0", - "instrumentation": "opentelemetry-instrumentation-jinja2==0.39b0", + "instrumentation": "opentelemetry-instrumentation-jinja2==0.40b0", }, "kafka-python": { "library": "kafka-python >= 2.0", - "instrumentation": "opentelemetry-instrumentation-kafka-python==0.39b0", + "instrumentation": "opentelemetry-instrumentation-kafka-python==0.40b0", }, "mysql-connector-python": { "library": "mysql-connector-python ~= 8.0", - "instrumentation": "opentelemetry-instrumentation-mysql==0.39b0", + "instrumentation": "opentelemetry-instrumentation-mysql==0.40b0", + }, + "mysqlclient": { + "library": "mysqlclient < 3", + "instrumentation": "opentelemetry-instrumentation-mysqlclient==0.40b0", }, "pika": { "library": "pika >= 0.12.0", - "instrumentation": "opentelemetry-instrumentation-pika==0.39b0", + "instrumentation": "opentelemetry-instrumentation-pika==0.40b0", }, "psycopg2": { "library": "psycopg2 >= 2.7.3.1", - "instrumentation": "opentelemetry-instrumentation-psycopg2==0.39b0", + "instrumentation": "opentelemetry-instrumentation-psycopg2==0.40b0", }, "pymemcache": { "library": "pymemcache >= 1.3.5, < 5", - "instrumentation": "opentelemetry-instrumentation-pymemcache==0.39b0", + "instrumentation": "opentelemetry-instrumentation-pymemcache==0.40b0", }, "pymongo": { "library": "pymongo >= 3.1, < 5.0", - "instrumentation": "opentelemetry-instrumentation-pymongo==0.39b0", + "instrumentation": "opentelemetry-instrumentation-pymongo==0.40b0", }, "PyMySQL": { "library": "PyMySQL < 2", - "instrumentation": "opentelemetry-instrumentation-pymysql==0.39b0", + "instrumentation": "opentelemetry-instrumentation-pymysql==0.40b0", }, "pyramid": { "library": "pyramid >= 1.7", - "instrumentation": "opentelemetry-instrumentation-pyramid==0.39b0", + "instrumentation": "opentelemetry-instrumentation-pyramid==0.40b0", }, "redis": { "library": "redis >= 2.6", - "instrumentation": "opentelemetry-instrumentation-redis==0.39b0", + "instrumentation": "opentelemetry-instrumentation-redis==0.40b0", }, "remoulade": { "library": "remoulade >= 0.50", - "instrumentation": "opentelemetry-instrumentation-remoulade==0.39b0", + "instrumentation": "opentelemetry-instrumentation-remoulade==0.40b0", }, "requests": { "library": "requests ~= 2.0", - "instrumentation": "opentelemetry-instrumentation-requests==0.39b0", + "instrumentation": "opentelemetry-instrumentation-requests==0.40b0", }, "scikit-learn": { "library": "scikit-learn ~= 0.24.0", - "instrumentation": "opentelemetry-instrumentation-sklearn==0.39b0", + "instrumentation": "opentelemetry-instrumentation-sklearn==0.40b0", }, "sqlalchemy": { "library": "sqlalchemy", - "instrumentation": "opentelemetry-instrumentation-sqlalchemy==0.39b0", + "instrumentation": "opentelemetry-instrumentation-sqlalchemy==0.40b0", }, "starlette": { "library": "starlette ~= 0.13.0", - "instrumentation": "opentelemetry-instrumentation-starlette==0.39b0", + "instrumentation": "opentelemetry-instrumentation-starlette==0.40b0", }, "psutil": { "library": "psutil >= 5", - "instrumentation": "opentelemetry-instrumentation-system-metrics==0.39b0", + "instrumentation": "opentelemetry-instrumentation-system-metrics==0.40b0", }, "tornado": { "library": "tornado >= 5.1.1", - "instrumentation": "opentelemetry-instrumentation-tornado==0.39b0", + "instrumentation": "opentelemetry-instrumentation-tornado==0.40b0", }, "tortoise-orm": { "library": "tortoise-orm >= 0.17.0", - "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.39b0", + "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.40b0", }, "pydantic": { "library": "pydantic >= 1.10.2", - "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.39b0", + "instrumentation": "opentelemetry-instrumentation-tortoiseorm==0.40b0", }, "urllib3": { - "library": "urllib3 >= 1.0.0, < 2.0.0", - "instrumentation": "opentelemetry-instrumentation-urllib3==0.39b0", + "library": "urllib3 >= 1.0.0, < 3.0.0", + "instrumentation": "opentelemetry-instrumentation-urllib3==0.40b0", }, } default_instrumentations = [ - "opentelemetry-instrumentation-aws-lambda==0.39b0", - "opentelemetry-instrumentation-dbapi==0.39b0", - "opentelemetry-instrumentation-logging==0.39b0", - "opentelemetry-instrumentation-sqlite3==0.39b0", - "opentelemetry-instrumentation-urllib==0.39b0", - "opentelemetry-instrumentation-wsgi==0.39b0", + "opentelemetry-instrumentation-aws-lambda==0.40b0", + "opentelemetry-instrumentation-dbapi==0.40b0", + "opentelemetry-instrumentation-logging==0.40b0", + "opentelemetry-instrumentation-sqlite3==0.40b0", + "opentelemetry-instrumentation-urllib==0.40b0", + "opentelemetry-instrumentation-wsgi==0.40b0", ] diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dbapi/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dbapi/__init__.py similarity index 98% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dbapi/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dbapi/__init__.py index 16aad526..a08c5b94 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dbapi/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dbapi/__init__.py @@ -21,13 +21,9 @@ import wrapt from opentelemetry import trace as trace_api -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.dbapi.version import ( - __version__ -) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.sqlcommenter_utils import ( - _add_sql_comment -) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.dbapi.version import __version__ +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.sqlcommenter_utils import _add_sql_comment +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import ( _get_opentelemetry_values, unwrap, ) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dbapi/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dbapi/package.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dbapi/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dbapi/package.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dbapi/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dbapi/version.py similarity index 96% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dbapi/version.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dbapi/version.py index 6cca9608..e0760dbf 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dbapi/version.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dbapi/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.39b0" +__version__ = "0.40b0" _instruments = tuple() diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dependencies.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dependencies.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/dependencies.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/dependencies.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/distro.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/distro.py similarity index 94% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/distro.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/distro.py index 298c1195..f417e924 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/distro.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/distro.py @@ -22,9 +22,7 @@ from pkg_resources import EntryPoint -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import ( - BaseInstrumentor -) +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor _LOG = getLogger(__name__) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/__init__.py similarity index 89% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/__init__.py index f0d86fc9..039bb579 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/__init__.py @@ -21,25 +21,19 @@ from django.conf import settings from django.core.exceptions import ImproperlyConfigured -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.django.environment_variables import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.django.environment_variables import ( OTEL_PYTHON_DJANGO_INSTRUMENT, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.django.middleware.otel_middleware import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.django.middleware.otel_middleware import ( _DjangoMiddleware, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.django.package import ( - _instruments -) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.django.version import ( - __version__ -) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import ( - BaseInstrumentor -) +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.django.package import _instruments +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.django.version import __version__ +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.metrics import get_meter from opentelemetry.semconv.metrics import MetricInstruments from opentelemetry.trace import get_tracer -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http import get_excluded_urls, parse_excluded_urls +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http import get_excluded_urls, parse_excluded_urls DJANGO_2_0 = django_version >= (2, 0) @@ -66,7 +60,7 @@ class DjangoInstrumentor(BaseInstrumentor): [_DjangoMiddleware.__module__, _DjangoMiddleware.__qualname__] ) - _sql_commenter_middleware = "azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware.SqlCommenter" + _sql_commenter_middleware = "opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware.SqlCommenter" def instrumentation_dependencies(self) -> Collection[str]: return _instruments diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/environment_variables.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/environment_variables.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/environment_variables.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/environment_variables.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/middleware/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/middleware/__init__.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/middleware/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/middleware/__init__.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/middleware/otel_middleware.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/middleware/otel_middleware.py similarity index 89% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/middleware/otel_middleware.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/middleware/otel_middleware.py index 0518b9af..dab7a914 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/middleware/otel_middleware.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/middleware/otel_middleware.py @@ -22,31 +22,27 @@ from django.http import HttpRequest, HttpResponse from opentelemetry.context import detach -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.propagators import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.propagators import ( get_global_response_propagator, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import ( _start_internal_or_server_span, extract_attributes_from_object, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.wsgi import ( - add_response_attributes -) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.wsgi import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.wsgi import add_response_attributes +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.wsgi import ( collect_custom_request_headers_attributes as wsgi_collect_custom_request_headers_attributes, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.wsgi import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.wsgi import ( collect_custom_response_headers_attributes as wsgi_collect_custom_response_headers_attributes, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.wsgi import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.wsgi import ( collect_request_attributes as wsgi_collect_request_attributes, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.wsgi import ( - wsgi_getter -) +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.wsgi import wsgi_getter from opentelemetry.semconv.trace import SpanAttributes from opentelemetry.trace import Span, SpanKind, use_span -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http import ( _parse_active_request_count_attrs, _parse_duration_attrs, get_excluded_urls, @@ -93,22 +89,17 @@ def __call__(self, request): # try/except block exclusive for optional ASGI imports. try: - from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.asgi import ( - asgi_getter, - asgi_setter - ) - from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.asgi import ( + from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.asgi import asgi_getter, asgi_setter + from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.asgi import ( collect_custom_request_headers_attributes as asgi_collect_custom_request_attributes, ) - from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.asgi import ( + from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.asgi import ( collect_custom_response_headers_attributes as asgi_collect_custom_response_attributes, ) - from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.asgi import ( + from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.asgi import ( collect_request_attributes as asgi_collect_request_attributes, ) - from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.asgi import ( - set_status_code - ) + from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.asgi import set_status_code _is_asgi_supported = True except ImportError: @@ -181,19 +172,16 @@ def _get_span_name(request): else: match = resolve(request.path) - if hasattr(match, "route"): - return match.route + if hasattr(match, "route") and match.route: + return f"{request.method} {match.route}" - # Instead of using `view_name`, better to use `_func_name` as some applications can use similar - # view names in different modules - if hasattr(match, "_func_name"): - return match._func_name # pylint: disable=protected-access + if hasattr(match, "url_name") and match.url_name: + return f"{request.method} {match.url_name}" - # Fallback for safety as `_func_name` private field - return match.view_name + return request.method except Resolver404: - return f"HTTP {request.method}" + return request.method # pylint: disable=too-many-locals def process_request(self, request): diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py similarity index 94% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py index 24fcab5d..af74f288 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py @@ -22,12 +22,8 @@ from django.db import connections from django.db.backends.utils import CursorDebugWrapper -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.sqlcommenter_utils import ( - _add_sql_comment -) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import ( - _get_opentelemetry_values -) +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.sqlcommenter_utils import _add_sql_comment +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import _get_opentelemetry_values from opentelemetry.trace.propagation.tracecontext import ( TraceContextTextMapPropagator, ) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/package.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/package.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/asgi/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/version.py similarity index 96% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/asgi/version.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/version.py index a84e45c8..c8536e2a 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/asgi/version.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/django/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.39b0" +__version__ = "0.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/environment_variables.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/environment_variables.py similarity index 79% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/environment_variables.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/environment_variables.py index ad28f068..78867796 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/environment_variables.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/environment_variables.py @@ -16,3 +16,13 @@ """ .. envvar:: OTEL_PYTHON_DISABLED_INSTRUMENTATIONS """ + +OTEL_PYTHON_DISTRO = "OTEL_PYTHON_DISTRO" +""" +.. envvar:: OTEL_PYTHON_DISTRO +""" + +OTEL_PYTHON_CONFIGURATOR = "OTEL_PYTHON_CONFIGURATOR" +""" +.. envvar:: OTEL_PYTHON_CONFIGURATOR +""" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/fastapi/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/fastapi/__init__.py similarity index 85% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/fastapi/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/fastapi/__init__.py index da0917d5..4e1d40d6 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/fastapi/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/fastapi/__init__.py @@ -20,14 +20,14 @@ import fastapi from starlette.routing import Match -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.fastapi.package import _instruments -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.fastapi.version import __version__ -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.fastapi.package import _instruments +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.fastapi.version import __version__ +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.metrics import get_meter from opentelemetry.semconv.trace import SpanAttributes from opentelemetry.trace import Span -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http import get_excluded_urls, parse_excluded_urls +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http import get_excluded_urls, parse_excluded_urls _excluded_urls_from_env = get_excluded_urls("FASTAPI") _logger = logging.getLogger(__name__) @@ -69,7 +69,7 @@ def instrument_app( app.add_middleware( OpenTelemetryMiddleware, excluded_urls=excluded_urls, - default_span_details=_get_route_details, + default_span_details=_get_default_span_details, server_request_hook=server_request_hook, client_request_hook=client_request_hook, client_response_hook=client_response_hook, @@ -142,7 +142,7 @@ def __init__(self, *args, **kwargs): self.add_middleware( OpenTelemetryMiddleware, excluded_urls=_InstrumentedFastAPI._excluded_urls, - default_span_details=_get_route_details, + default_span_details=_get_default_span_details, server_request_hook=_InstrumentedFastAPI._server_request_hook, client_request_hook=_InstrumentedFastAPI._client_request_hook, client_response_hook=_InstrumentedFastAPI._client_response_hook, @@ -158,15 +158,21 @@ def __del__(self): def _get_route_details(scope): - """Callback to retrieve the fastapi route being served. + """ + Function to retrieve Starlette route from scope. TODO: there is currently no way to retrieve http.route from a starlette application from scope. - See: https://github.com/encode/starlette/pull/804 + + Args: + scope: A Starlette scope + Returns: + A string containing the route or None """ app = scope["app"] route = None + for starlette_route in app.routes: match, _ = starlette_route.matches(scope) if match == Match.FULL: @@ -174,10 +180,27 @@ def _get_route_details(scope): break if match == Match.PARTIAL: route = starlette_route.path - # method only exists for http, if websocket - # leave it blank. - span_name = route or scope.get("method", "") + return route + + +def _get_default_span_details(scope): + """ + Callback to retrieve span name and attributes from scope. + + Args: + scope: A Starlette scope + Returns: + A tuple of span name and attributes + """ + route = _get_route_details(scope) + method = scope.get("method", "") attributes = {} if route: attributes[SpanAttributes.HTTP_ROUTE] = route + if method and route: # http + span_name = f"{method} {route}" + elif route: # websocket + span_name = route + else: # fallback + span_name = method return span_name, attributes diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/fastapi/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/fastapi/package.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/fastapi/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/fastapi/package.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/fastapi/version.py similarity index 96% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/version.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/fastapi/version.py index a84e45c8..c8536e2a 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/django/version.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/fastapi/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.39b0" +__version__ = "0.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/flask/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/flask/__init__.py similarity index 88% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/flask/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/flask/__init__.py index 722b457a..b9fd843c 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/flask/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/flask/__init__.py @@ -16,38 +16,49 @@ # https://github.com/PyCQA/pylint/issues/2648 +import weakref from logging import getLogger -from threading import get_ident from time import time_ns from timeit import default_timer from typing import Collection import flask +from packaging import version as package_version -import azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.wsgi as otel_wsgi +import azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.wsgi as otel_wsgi from opentelemetry import context, trace -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.flask.package import _instruments -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.flask.version import __version__ -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.propagators import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.flask.package import _instruments +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.flask.version import __version__ +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.propagators import ( get_global_response_propagator, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import _start_internal_or_server_span +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import _start_internal_or_server_span from opentelemetry.metrics import get_meter from opentelemetry.semconv.metrics import MetricInstruments from opentelemetry.semconv.trace import SpanAttributes -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http import get_excluded_urls, parse_excluded_urls +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http import get_excluded_urls, parse_excluded_urls _logger = getLogger(__name__) _ENVIRON_STARTTIME_KEY = "opentelemetry-flask.starttime_key" _ENVIRON_SPAN_KEY = "opentelemetry-flask.span_key" _ENVIRON_ACTIVATION_KEY = "opentelemetry-flask.activation_key" -_ENVIRON_THREAD_ID_KEY = "opentelemetry-flask.thread_id_key" +_ENVIRON_REQCTX_REF_KEY = "opentelemetry-flask.reqctx_ref_key" _ENVIRON_TOKEN = "opentelemetry-flask.token" _excluded_urls_from_env = get_excluded_urls("FLASK") +if package_version.parse(flask.__version__) >= package_version.parse("2.2.0"): + + def _request_ctx_ref() -> weakref.ReferenceType: + return weakref.ref(flask.globals.request_ctx._get_current_object()) + +else: + + def _request_ctx_ref() -> weakref.ReferenceType: + return weakref.ref(flask._request_ctx_stack.top) + def get_default_span_name(): try: @@ -142,27 +153,26 @@ def _before_request(): flask_request_environ = flask.request.environ span_name = get_default_span_name() + attributes = otel_wsgi.collect_request_attributes( + flask_request_environ + ) + if flask.request.url_rule: + # For 404 that result from no route found, etc, we + # don't have a url_rule. + attributes[SpanAttributes.HTTP_ROUTE] = flask.request.url_rule.rule span, token = _start_internal_or_server_span( tracer=tracer, span_name=span_name, start_time=flask_request_environ.get(_ENVIRON_STARTTIME_KEY), context_carrier=flask_request_environ, context_getter=otel_wsgi.wsgi_getter, + attributes=attributes, ) if request_hook: request_hook(span, flask_request_environ) if span.is_recording(): - attributes = otel_wsgi.collect_request_attributes( - flask_request_environ - ) - if flask.request.url_rule: - # For 404 that result from no route found, etc, we - # don't have a url_rule. - attributes[ - SpanAttributes.HTTP_ROUTE - ] = flask.request.url_rule.rule for key, value in attributes.items(): span.set_attribute(key, value) if span.is_recording() and span.kind == trace.SpanKind.SERVER: @@ -177,7 +187,7 @@ def _before_request(): activation = trace.use_span(span, end_on_exit=True) activation.__enter__() # pylint: disable=E1101 flask_request_environ[_ENVIRON_ACTIVATION_KEY] = activation - flask_request_environ[_ENVIRON_THREAD_ID_KEY] = get_ident() + flask_request_environ[_ENVIRON_REQCTX_REF_KEY] = _request_ctx_ref() flask_request_environ[_ENVIRON_SPAN_KEY] = span flask_request_environ[_ENVIRON_TOKEN] = token @@ -217,17 +227,22 @@ def _teardown_request(exc): return activation = flask.request.environ.get(_ENVIRON_ACTIVATION_KEY) - thread_id = flask.request.environ.get(_ENVIRON_THREAD_ID_KEY) - if not activation or thread_id != get_ident(): + + original_reqctx_ref = flask.request.environ.get( + _ENVIRON_REQCTX_REF_KEY + ) + current_reqctx_ref = _request_ctx_ref() + if not activation or original_reqctx_ref != current_reqctx_ref: # This request didn't start a span, maybe because it was created in # a way that doesn't run `before_request`, like when it is created # with `app.test_request_context`. # - # Similarly, check the thread_id against the current thread to ensure - # tear down only happens on the original thread. This situation can - # arise if the original thread handling the request spawn children - # threads and then uses something like copy_current_request_context - # to copy the request context. + # Similarly, check that the request_ctx that created the span + # matches the current request_ctx, and only tear down if they match. + # This situation can arise if the original request_ctx handling + # the request calls functions that push new request_ctx's, + # like any decorated with `flask.copy_current_request_context`. + return if exc is None: activation.__exit__(None, None, None) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/flask/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/flask/package.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/flask/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/flask/package.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/fastapi/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/flask/version.py similarity index 96% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/fastapi/version.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/flask/version.py index a84e45c8..c8536e2a 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/fastapi/version.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/flask/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.39b0" +__version__ = "0.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/instrumentor.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/instrumentor.py similarity index 98% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/instrumentor.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/instrumentor.py index 3cc46a4e..f6b02507 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/instrumentor.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/instrumentor.py @@ -21,7 +21,7 @@ from logging import getLogger from typing import Collection, Optional -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.dependencies import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.dependencies import ( DependencyConflict, get_dependency_conflicts, ) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/propagators.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/propagators.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/propagators.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/propagators.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/psycopg2/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/psycopg2/__init__.py similarity index 95% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/psycopg2/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/psycopg2/__init__.py index 2da379cd..2363f7cb 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/psycopg2/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/psycopg2/__init__.py @@ -23,10 +23,10 @@ ) from psycopg2.sql import Composed # pylint: disable=no-name-in-module -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation import dbapi -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.psycopg2.package import _instruments -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.psycopg2.version import __version__ +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation import dbapi +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.psycopg2.package import _instruments +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.psycopg2.version import __version__ _logger = logging.getLogger(__name__) _OTEL_CURSOR_FACTORY_KEY = "_otel_orig_cursor_factory" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/psycopg2/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/psycopg2/package.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/psycopg2/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/psycopg2/package.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/psycopg2/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/psycopg2/version.py new file mode 100644 index 00000000..c8536e2a --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/psycopg2/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.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/py.typed b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/py.typed similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/py.typed rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/py.typed diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/requests/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/requests/__init__.py similarity index 93% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/requests/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/requests/__init__.py index f7e65e2e..a7b78fa6 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/requests/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/requests/__init__.py @@ -27,10 +27,10 @@ # FIXME: fix the importing of this private attribute when the location of the _SUPPRESS_HTTP_INSTRUMENTATION_KEY is defined. from opentelemetry.context import _SUPPRESS_HTTP_INSTRUMENTATION_KEY -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.requests.package import _instruments -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.requests.version import __version__ -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.requests.package import _instruments +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.requests.version import __version__ +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import ( _SUPPRESS_INSTRUMENTATION_KEY, http_status_to_status_code, ) @@ -41,13 +41,13 @@ from opentelemetry.trace import SpanKind, Tracer, get_tracer from opentelemetry.trace.span import Span from opentelemetry.trace.status import Status -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http import ( ExcludeList, get_excluded_urls, parse_excluded_urls, remove_url_credentials, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http.httplib import set_ip_on_next_http_connection +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http.httplib import set_ip_on_next_http_connection _excluded_urls_from_env = get_excluded_urls("REQUESTS") @@ -210,8 +210,16 @@ def _uninstrument_from(instr_root, restore_as_bound_func=False): def get_default_span_name(method): - """Default implementation for name_callback, returns HTTP {method_name}.""" - return f"HTTP {method.strip()}" + """ + Default implementation for name_callback, returns HTTP {method_name}. + https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/http/#name + + Args: + method: string representing HTTP method + Returns: + span name + """ + return method.strip() class RequestsInstrumentor(BaseInstrumentor): diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/requests/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/requests/package.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/requests/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/requests/package.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/requests/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/requests/version.py new file mode 100644 index 00000000..c8536e2a --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/requests/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.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/sqlcommenter_utils.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/sqlcommenter_utils.py similarity index 96% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/sqlcommenter_utils.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/sqlcommenter_utils.py index f201269e..29378a42 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/sqlcommenter_utils.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/sqlcommenter_utils.py @@ -13,7 +13,7 @@ # limitations under the License. from opentelemetry import context -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import _url_quote +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import _url_quote def _add_sql_comment(sql, **meta) -> str: diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib/__init__.py similarity index 96% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib/__init__.py index bce63f39..3bd83d4f 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib/__init__.py @@ -28,10 +28,10 @@ # FIXME: fix the importing of this private attribute when the location of the _SUPPRESS_HTTP_INSTRUMENTATION_KEY is defined. from opentelemetry.context import _SUPPRESS_HTTP_INSTRUMENTATION_KEY -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.urllib.package import _instruments -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.urllib.version import __version__ -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.urllib.package import _instruments +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.urllib.version import __version__ +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import ( _SUPPRESS_INSTRUMENTATION_KEY, http_status_to_status_code, ) @@ -41,7 +41,7 @@ from opentelemetry.semconv.trace import SpanAttributes from opentelemetry.trace import Span, SpanKind, get_tracer from opentelemetry.trace.status import Status -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http import ( ExcludeList, get_excluded_urls, parse_excluded_urls, @@ -146,7 +146,7 @@ def _instrumented_open_call( method = request.get_method().upper() - span_name = f"HTTP {method}".strip() + span_name = method.strip() url = remove_url_credentials(url) diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib/package.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib/package.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib/version.py similarity index 96% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib/version.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib/version.py index 6cca9608..e0760dbf 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib/version.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib/version.py @@ -12,6 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.39b0" +__version__ = "0.40b0" _instruments = tuple() diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib3/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib3/__init__.py similarity index 95% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib3/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib3/__init__.py index 903eb261..91c5f929 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib3/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib3/__init__.py @@ -27,10 +27,10 @@ # FIXME: fix the importing of this private attribute when the location of the _SUPPRESS_HTTP_INSTRUMENTATION_KEY is defined. from opentelemetry.context import _SUPPRESS_HTTP_INSTRUMENTATION_KEY -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.urllib3.package import _instruments -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.urllib3.version import __version__ -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.urllib3.package import _instruments +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.urllib3.version import __version__ +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import ( _SUPPRESS_INSTRUMENTATION_KEY, http_status_to_status_code, unwrap, @@ -41,12 +41,12 @@ from opentelemetry.semconv.trace import SpanAttributes from opentelemetry.trace import Span, SpanKind, Tracer, get_tracer from opentelemetry.trace.status import Status -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http import ( ExcludeList, get_excluded_urls, parse_excluded_urls, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http.httplib import set_ip_on_next_http_connection +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http.httplib import set_ip_on_next_http_connection _excluded_urls_from_env = get_excluded_urls("URLLIB3") @@ -160,7 +160,7 @@ def instrumented_urlopen(wrapped, instance, args, kwargs): headers = _prepare_headers(kwargs) body = _get_url_open_arg("body", args, kwargs) - span_name = f"HTTP {method.strip()}" + span_name = method.strip() span_attributes = { SpanAttributes.HTTP_METHOD: method, SpanAttributes.HTTP_URL: url, diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib3/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib3/package.py similarity index 93% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib3/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib3/package.py index 2f5df62d..9d52db0a 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/urllib3/package.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib3/package.py @@ -13,6 +13,6 @@ # limitations under the License. -_instruments = ("urllib3 >= 1.0.0, < 2.0.0",) +_instruments = ("urllib3 >= 1.0.0, < 3.0.0",) _supports_metrics = True diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib3/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib3/version.py new file mode 100644 index 00000000..c8536e2a --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/urllib3/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.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/utils.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/utils.py similarity index 99% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/utils.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/utils.py index 3022e6dd..35a55a12 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/utils.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/utils.py @@ -95,7 +95,7 @@ def _start_internal_or_server_span( Args: tracer : tracer in use by given instrumentation library - name (string): name of the span + span_name (string): name of the span start_time : start time of the span context_carrier : object which contains values that are used to construct a Context. This object diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/version.py new file mode 100644 index 00000000..c8536e2a --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/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.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/wsgi/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/wsgi/__init__.py similarity index 94% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/wsgi/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/wsgi/__init__.py index 5a730bdc..ff9f92f3 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/wsgi/__init__.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/wsgi/__init__.py @@ -19,17 +19,17 @@ from timeit import default_timer from opentelemetry import context, trace -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import ( _start_internal_or_server_span, http_status_to_status_code, ) -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.wsgi.version import __version__ +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.wsgi.version import __version__ from opentelemetry.metrics import get_meter from opentelemetry.propagators.textmap import Getter from opentelemetry.semconv.metrics import MetricInstruments from opentelemetry.semconv.trace import SpanAttributes from opentelemetry.trace.status import Status, StatusCode -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.util.http import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.util.http import ( OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS, OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST, OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE, @@ -252,8 +252,21 @@ def add_response_attributes( def get_default_span_name(environ): - """Default implementation for name_callback, returns HTTP {METHOD_NAME}.""" - return f"HTTP {environ.get('REQUEST_METHOD', '')}".strip() + """ + Default span name is the HTTP method and URL path, or just the method. + https://github.com/open-telemetry/opentelemetry-specification/pull/3165 + https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/http/#name + + Args: + environ: The WSGI environ object. + Returns: + The span name. + """ + method = environ.get("REQUEST_METHOD", "").strip() + path = environ.get("PATH_INFO", "").strip() + if method and path: + return f"{method} {path}" + return method class OpenTelemetryMiddleware: @@ -393,7 +406,7 @@ def _end_span_after_iterating(iterable, span, token): context.detach(token) -# TODO: inherit from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.propagators.Setter +# TODO: inherit from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.propagators.Setter class ResponsePropagationSetter: diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/wsgi/package.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/wsgi/package.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/instrumentation/wsgi/package.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/wsgi/package.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/wsgi/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/wsgi/version.py new file mode 100644 index 00000000..c8536e2a --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/instrumentation/wsgi/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.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/__init__.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/__init__.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/_importlib_metadata.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/_importlib_metadata.py new file mode 100644 index 00000000..cbf09f3e --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/_importlib_metadata.py @@ -0,0 +1,29 @@ +# 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. + +# FIXME: Use importlib.metadata when support for 3.11 is dropped if the rest of +# the supported versions at that time have the same API. +from importlib_metadata import ( # type: ignore + EntryPoint, + EntryPoints, + entry_points, + version, +) + +# The importlib-metadata library has introduced breaking changes before to its +# API, this module is kept just to act as a layer between the +# importlib-metadata library and our project if in any case it is necessary to +# do so. + +__all__ = ["entry_points", "version", "EntryPoint", "EntryPoints"] diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/_once.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/_once.py new file mode 100644 index 00000000..c0cee43a --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/_once.py @@ -0,0 +1,47 @@ +# 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 threading import Lock +from typing import Callable + + +class Once: + """Execute a function exactly once and block all callers until the function returns + + Same as golang's `sync.Once `_ + """ + + def __init__(self) -> None: + self._lock = Lock() + self._done = False + + def do_once(self, func: Callable[[], None]) -> bool: + """Execute ``func`` if it hasn't been executed or return. + + Will block until ``func`` has been called by one thread. + + Returns: + Whether or not ``func`` was executed in this call + """ + + # fast path, try to avoid locking + if self._done: + return False + + with self._lock: + if not self._done: + func() + self._done = True + return True + return False diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/_providers.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/_providers.py new file mode 100644 index 00000000..d255ac99 --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/_providers.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 logging import getLogger +from os import environ +from typing import TYPE_CHECKING, TypeVar, cast + +from opentelemetry.util._importlib_metadata import entry_points + +if TYPE_CHECKING: + from opentelemetry.metrics import MeterProvider + from opentelemetry.trace import TracerProvider + +Provider = TypeVar("Provider", "TracerProvider", "MeterProvider") + +logger = getLogger(__name__) + + +def _load_provider( + provider_environment_variable: str, provider: str +) -> Provider: + + try: + + provider_name = cast( + str, + environ.get(provider_environment_variable, f"default_{provider}"), + ) + + return cast( + Provider, + next( # type: ignore + iter( # type: ignore + entry_points( # type: ignore + group=f"opentelemetry_{provider}", + name=provider_name, + ) + ) + ).load()(), + ) + except Exception: # pylint: disable=broad-except + logger.exception("Failed to load configured provider %s", provider) + raise diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/http/__init__.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/http/__init__.py similarity index 100% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/http/__init__.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/http/__init__.py diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/http/httplib.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/http/httplib.py similarity index 97% rename from azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/http/httplib.py rename to azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/http/httplib.py index 181c58b4..a4761322 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_39b0/opentelemetry/util/http/httplib.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/http/httplib.py @@ -27,8 +27,8 @@ import wrapt from opentelemetry import context -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.utils import unwrap +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.utils import unwrap from opentelemetry.semconv.trace import SpanAttributes from opentelemetry.trace.span import Span diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/http/version.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/http/version.py new file mode 100644 index 00000000..c8536e2a --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/http/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.40b0" diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/re.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/re.py new file mode 100644 index 00000000..5f19521d --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/re.py @@ -0,0 +1,78 @@ +# 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 logging import getLogger +from re import compile, split +from typing import Dict, List, Mapping +from urllib.parse import unquote + +from deprecated import deprecated + +_logger = getLogger(__name__) + +# The following regexes reference this spec: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#specifying-headers-via-environment-variables + +# Optional whitespace +_OWS = r"[ \t]*" +# A key contains printable US-ASCII characters except: SP and "(),/:;<=>?@[\]{} +_KEY_FORMAT = ( + r"[\x21\x23-\x27\x2a\x2b\x2d\x2e\x30-\x39\x41-\x5a\x5e-\x7a\x7c\x7e]+" +) +# A value contains a URL-encoded UTF-8 string. The encoded form can contain any +# printable US-ASCII characters (0x20-0x7f) other than SP, DEL, and ",;/ +_VALUE_FORMAT = r"[\x21\x23-\x2b\x2d-\x3a\x3c-\x5b\x5d-\x7e]*" +# A key-value is key=value, with optional whitespace surrounding key and value +_KEY_VALUE_FORMAT = rf"{_OWS}{_KEY_FORMAT}{_OWS}={_OWS}{_VALUE_FORMAT}{_OWS}" + +_HEADER_PATTERN = compile(_KEY_VALUE_FORMAT) +_DELIMITER_PATTERN = compile(r"[ \t]*,[ \t]*") + +_BAGGAGE_PROPERTY_FORMAT = rf"{_KEY_VALUE_FORMAT}|{_OWS}{_KEY_FORMAT}{_OWS}" + + +# pylint: disable=invalid-name + + +@deprecated(version="1.15.0", reason="You should use parse_env_headers") # type: ignore +def parse_headers(s: str) -> Mapping[str, str]: + return parse_env_headers(s) + + +def parse_env_headers(s: str) -> Mapping[str, str]: + """ + Parse ``s``, which is a ``str`` instance containing HTTP headers encoded + for use in ENV variables per the W3C Baggage HTTP header format at + https://www.w3.org/TR/baggage/#baggage-http-header-format, except that + additional semi-colon delimited metadata is not supported. + """ + headers: Dict[str, str] = {} + headers_list: List[str] = split(_DELIMITER_PATTERN, s) + for header in headers_list: + if not header: # empty string + continue + match = _HEADER_PATTERN.fullmatch(header.strip()) + if not match: + _logger.warning( + "Header format invalid! Header values in environment variables must be " + "URL encoded per the OpenTelemetry Protocol Exporter specification: %s", + header, + ) + continue + # value may contain any number of `=` + name, value = match.string.split("=", 1) + name = unquote(name).strip().lower() + value = unquote(value).strip() + headers[name] = value + + return headers diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/types.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/types.py new file mode 100644 index 00000000..be171ef0 --- /dev/null +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_vendor/v0_40b0/opentelemetry/util/types.py @@ -0,0 +1,44 @@ +# 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 Mapping, Optional, Sequence, Tuple, Union + +AttributeValue = Union[ + str, + bool, + int, + float, + Sequence[str], + Sequence[bool], + Sequence[int], + Sequence[float], +] +Attributes = Optional[Mapping[str, AttributeValue]] +AttributesAsKey = Tuple[ + Tuple[ + str, + Union[ + str, + bool, + int, + float, + Tuple[Optional[str], ...], + Tuple[Optional[bool], ...], + Tuple[Optional[int], ...], + Tuple[Optional[float], ...], + ], + ], + ..., +] diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/autoinstrumentation/_distro.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/autoinstrumentation/_distro.py index 7d1af773..8e4473b5 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/autoinstrumentation/_distro.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/autoinstrumentation/_distro.py @@ -8,7 +8,7 @@ from azure.core.settings import settings from azure.core.tracing.ext.opentelemetry_span import OpenTelemetrySpan -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.distro import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.distro import ( BaseDistro, ) from azure.monitor.opentelemetry.diagnostics._diagnostic_logging import ( diff --git a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/util/configurations.py b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/util/configurations.py index e5a37523..c6afbdf5 100644 --- a/azure-monitor-opentelemetry/azure/monitor/opentelemetry/util/configurations.py +++ b/azure-monitor-opentelemetry/azure/monitor/opentelemetry/util/configurations.py @@ -14,11 +14,10 @@ DISABLE_METRICS_ARG, DISABLE_TRACING_ARG, DISABLED_INSTRUMENTATIONS_ARG, - LOGGING_EXPORT_INTERVAL_MS_ARG, SAMPLING_RATIO_ARG, ) from azure.monitor.opentelemetry._types import ConfigurationValue -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.environment_variables import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.environment_variables import ( OTEL_PYTHON_DISABLED_INSTRUMENTATIONS, ) from opentelemetry.environment_variables import ( @@ -32,8 +31,6 @@ _INVALID_INT_MESSAGE = "Value of %s must be a integer. Defaulting to %s: %s" -# Speced out but unused by OTel SDK as of 1.17.0 -LOGGING_EXPORT_INTERVAL_MS_ENV_VAR = "OTEL_BLRP_SCHEDULE_DELAY" # TODO: remove when sampler uses env var instead SAMPLING_RATIO_ENV_VAR = OTEL_TRACES_SAMPLER_ARG @@ -51,16 +48,9 @@ def _get_configurations(**kwargs) -> Dict[str, ConfigurationValue]: _default_disable_metrics(configurations) _default_disable_tracing(configurations) _default_disabled_instrumentations(configurations) - _default_logging_export_interval_ms(configurations) _default_sampling_ratio(configurations) _default_disable_azure_core_tracing(configurations) - # TODO: remove when validation added to BLRP - if configurations[LOGGING_EXPORT_INTERVAL_MS_ARG] <= 0: - raise ValueError( - "%s must be positive." % LOGGING_EXPORT_INTERVAL_MS_ARG - ) - return configurations @@ -101,21 +91,6 @@ def _default_disabled_instrumentations(configurations): configurations[DISABLED_INSTRUMENTATIONS_ARG] = disabled_instrumentation -def _default_logging_export_interval_ms(configurations): - default = 5000 - if LOGGING_EXPORT_INTERVAL_MS_ENV_VAR in environ: - try: - default = int(environ[LOGGING_EXPORT_INTERVAL_MS_ENV_VAR]) - except ValueError as e: - _logger.error( - _INVALID_INT_MESSAGE, - LOGGING_EXPORT_INTERVAL_MS_ENV_VAR, - default, - e, - ) - configurations[LOGGING_EXPORT_INTERVAL_MS_ARG] = default - - # TODO: remove when sampler uses env var instead def _default_sampling_ratio(configurations): default = 1.0 diff --git a/azure-monitor-opentelemetry/setup.py b/azure-monitor-opentelemetry/setup.py index 67f6206a..ff58d65b 100644 --- a/azure-monitor-opentelemetry/setup.py +++ b/azure-monitor-opentelemetry/setup.py @@ -85,11 +85,12 @@ python_requires=">=3.7", install_requires=[ "azure-core-tracing-opentelemetry~=1.0.0b10", - "azure-monitor-opentelemetry-exporter>=1.0.0b15", - "opentelemetry-api==1.19.0", - "opentelemetry-sdk==1.19.0", + "azure-monitor-opentelemetry-exporter~=1.0.0b15", + "opentelemetry-api~=1.19.0", + "opentelemetry-sdk~=1.19.0", "wrapt >= 1.0.0, < 2.0.0", "importlib-metadata~=6.0.0,<=6.7.0; python_version < '3.8'", + "packaging>=21.0", ], entry_points={ "opentelemetry_distro": [ @@ -99,13 +100,13 @@ "azure_monitor_opentelemetry_configurator = azure.monitor.opentelemetry.autoinstrumentation._configurator:AzureMonitorConfigurator" ], "azure_monitor_opentelemetry_instrumentor": [ - "django = azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.django:DjangoInstrumentor", - "fastapi = azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.fastapi:FastAPIInstrumentor", - "flask = azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.flask:FlaskInstrumentor", - "psycopg2 = azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.psycopg2:Psycopg2Instrumentor", - "requests = azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.requests:RequestsInstrumentor", - "urllib = azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.urllib:URLLibInstrumentor", - "urllib3 = azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.urllib3:URLLib3Instrumentor", + "django = azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.django:DjangoInstrumentor", + "fastapi = azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.fastapi:FastAPIInstrumentor", + "flask = azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.flask:FlaskInstrumentor", + "psycopg2 = azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.psycopg2:Psycopg2Instrumentor", + "requests = azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.requests:RequestsInstrumentor", + "urllib = azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.urllib:URLLibInstrumentor", + "urllib3 = azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.urllib3:URLLib3Instrumentor", ], }, ) diff --git a/azure-monitor-opentelemetry/tests/configuration/test_configure.py b/azure-monitor-opentelemetry/tests/configuration/test_configure.py index 40c5b618..33160ec5 100644 --- a/azure-monitor-opentelemetry/tests/configuration/test_configure.py +++ b/azure-monitor-opentelemetry/tests/configuration/test_configure.py @@ -270,7 +270,6 @@ def test_setup_logging( configurations = { "connection_string": "test_cs", - "logging_export_interval_ms": 10000, } _setup_logging(configurations) @@ -279,7 +278,7 @@ def test_setup_logging( get_logger_provider_mock.assert_called() log_exporter_mock.assert_called_once_with(**configurations) blrp_mock.assert_called_once_with( - log_exp_init_mock, schedule_delay_millis=10000 + log_exp_init_mock, ) lp_init_mock.add_log_record_processor.assert_called_once_with( blrp_init_mock diff --git a/azure-monitor-opentelemetry/tests/configuration/test_util.py b/azure-monitor-opentelemetry/tests/configuration/test_util.py index 48487c1d..696bfb20 100644 --- a/azure-monitor-opentelemetry/tests/configuration/test_util.py +++ b/azure-monitor-opentelemetry/tests/configuration/test_util.py @@ -15,11 +15,10 @@ from unittest import TestCase from unittest.mock import patch -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.environment_variables import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.environment_variables import ( OTEL_PYTHON_DISABLED_INSTRUMENTATIONS, ) from azure.monitor.opentelemetry.util.configurations import ( - LOGGING_EXPORT_INTERVAL_MS_ENV_VAR, SAMPLING_RATIO_ENV_VAR, _get_configurations, ) @@ -44,7 +43,6 @@ def test_get_configurations(self): self.assertEqual(configurations["disable_tracing"], False) self.assertEqual(configurations["disabled_instrumentations"], []) self.assertEqual(configurations["sampling_ratio"], 1.0) - self.assertEqual(configurations["logging_export_interval_ms"], 5000) self.assertEqual(configurations["credential"], ("test_credential")) self.assertTrue("storage_directory" not in configurations) @@ -59,25 +57,13 @@ def test_get_configurations_defaults(self): self.assertEqual(configurations["disable_tracing"], False) self.assertEqual(configurations["disabled_instrumentations"], []) self.assertEqual(configurations["sampling_ratio"], 1.0) - self.assertEqual(configurations["logging_export_interval_ms"], 5000) self.assertTrue("credential" not in configurations) self.assertTrue("storage_directory" not in configurations) - @patch.dict( - "os.environ", - { - LOGGING_EXPORT_INTERVAL_MS_ENV_VAR: "-1", - }, - clear=True, - ) - def test_get_configurations_logging_export_validation(self): - self.assertRaises(ValueError, _get_configurations) - @patch.dict( "os.environ", { OTEL_PYTHON_DISABLED_INSTRUMENTATIONS: "flask , requests,fastapi", - LOGGING_EXPORT_INTERVAL_MS_ENV_VAR: "10000", SAMPLING_RATIO_ENV_VAR: "0.5", OTEL_TRACES_EXPORTER: "None", OTEL_LOGS_EXPORTER: "none", @@ -98,12 +84,10 @@ def test_get_configurations_env_vars(self): ["flask", "requests", "fastapi"], ) self.assertEqual(configurations["sampling_ratio"], 0.5) - self.assertEqual(configurations["logging_export_interval_ms"], 10000) @patch.dict( "os.environ", { - LOGGING_EXPORT_INTERVAL_MS_ENV_VAR: "Ten Thousand", SAMPLING_RATIO_ENV_VAR: "Half", OTEL_TRACES_EXPORTER: "False", OTEL_LOGS_EXPORTER: "no", @@ -120,4 +104,3 @@ def test_get_configurations_env_vars_validation(self): self.assertEqual(configurations["disable_metrics"], False) self.assertEqual(configurations["disable_tracing"], False) self.assertEqual(configurations["sampling_ratio"], 1.0) - self.assertEqual(configurations["logging_export_interval_ms"], 5000) diff --git a/azure-monitor-opentelemetry/tests/instrumentation/test_django.py b/azure-monitor-opentelemetry/tests/instrumentation/test_django.py index e2b001c1..a7df45ea 100644 --- a/azure-monitor-opentelemetry/tests/instrumentation/test_django.py +++ b/azure-monitor-opentelemetry/tests/instrumentation/test_django.py @@ -6,7 +6,7 @@ import unittest -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.django import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.django import ( DjangoInstrumentor, ) diff --git a/azure-monitor-opentelemetry/tests/instrumentation/test_fastapi.py b/azure-monitor-opentelemetry/tests/instrumentation/test_fastapi.py index d1b8ea2a..70502774 100644 --- a/azure-monitor-opentelemetry/tests/instrumentation/test_fastapi.py +++ b/azure-monitor-opentelemetry/tests/instrumentation/test_fastapi.py @@ -6,7 +6,7 @@ import unittest -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.fastapi import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.fastapi import ( FastAPIInstrumentor, ) diff --git a/azure-monitor-opentelemetry/tests/instrumentation/test_flask.py b/azure-monitor-opentelemetry/tests/instrumentation/test_flask.py index e1dc52a5..838a75b0 100644 --- a/azure-monitor-opentelemetry/tests/instrumentation/test_flask.py +++ b/azure-monitor-opentelemetry/tests/instrumentation/test_flask.py @@ -6,7 +6,7 @@ import unittest -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.flask import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.flask import ( FlaskInstrumentor, ) diff --git a/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py b/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py index f0aa4033..ece352db 100644 --- a/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py +++ b/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py @@ -6,7 +6,7 @@ import unittest -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.psycopg2 import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.psycopg2 import ( Psycopg2Instrumentor, ) diff --git a/azure-monitor-opentelemetry/tests/instrumentation/test_requests.py b/azure-monitor-opentelemetry/tests/instrumentation/test_requests.py index 751184aa..119fef81 100644 --- a/azure-monitor-opentelemetry/tests/instrumentation/test_requests.py +++ b/azure-monitor-opentelemetry/tests/instrumentation/test_requests.py @@ -6,7 +6,7 @@ import unittest -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.requests import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.requests import ( RequestsInstrumentor, ) diff --git a/azure-monitor-opentelemetry/tests/instrumentation/test_urllib.py b/azure-monitor-opentelemetry/tests/instrumentation/test_urllib.py index d16478bd..45e27ff3 100644 --- a/azure-monitor-opentelemetry/tests/instrumentation/test_urllib.py +++ b/azure-monitor-opentelemetry/tests/instrumentation/test_urllib.py @@ -6,7 +6,7 @@ import unittest -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.urllib import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.urllib import ( URLLibInstrumentor, ) diff --git a/azure-monitor-opentelemetry/tests/instrumentation/test_urllib3.py b/azure-monitor-opentelemetry/tests/instrumentation/test_urllib3.py index b4fab20f..dc8210ed 100644 --- a/azure-monitor-opentelemetry/tests/instrumentation/test_urllib3.py +++ b/azure-monitor-opentelemetry/tests/instrumentation/test_urllib3.py @@ -6,7 +6,7 @@ import unittest -from azure.monitor.opentelemetry._vendor.v0_39b0.opentelemetry.instrumentation.urllib3 import ( +from azure.monitor.opentelemetry._vendor.v0_40b0.opentelemetry.instrumentation.urllib3 import ( URLLib3Instrumentor, )