From bfd4f00713790f52c97da36698e6f02f9c237e02 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 2 Feb 2023 12:05:11 -0800 Subject: [PATCH 1/4] exclude --- CHANGELOG.md | 2 ++ .../src/opentelemetry/instrumentation/django/__init__.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9120929bc..82156565f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `opentelemetry-instrumentation-aws-lambda` Flush `MeterProvider` at end of function invocation. ([#1613](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1613)) - Fix aiohttp bug with unset `trace_configs` ([#1592](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1592)) +- `opentelemetry-instrumentation-django` Allow explicit `excluded_urls` configuration through `instrument()` + ([#1613](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1613)) ### Fixed diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py index f975890d51..2ec88c1dd4 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py @@ -255,9 +255,11 @@ def response_hook(span, request, response): from opentelemetry.metrics import get_meter from opentelemetry.semconv.metrics import MetricInstruments from opentelemetry.trace import get_tracer +from opentelemetry.util.http import get_excluded_urls, parse_excluded_urls DJANGO_2_0 = django_version >= (2, 0) +_excluded_urls_from_env = get_excluded_urls("DJANGO") _logger = getLogger(__name__) @@ -294,6 +296,7 @@ def _instrument(self, **kwargs): tracer_provider = kwargs.get("tracer_provider") meter_provider = kwargs.get("meter_provider") + _excluded_urls = kwargs.get("excluded_urls") tracer = get_tracer( __name__, __version__, @@ -302,6 +305,11 @@ def _instrument(self, **kwargs): meter = get_meter(__name__, __version__, meter_provider=meter_provider) _DjangoMiddleware._tracer = tracer _DjangoMiddleware._meter = meter + _DjangoMiddleware._excluded_urls = ( + _excluded_urls_from_env + if _excluded_urls is None + else parse_excluded_urls(_excluded_urls) + ) _DjangoMiddleware._otel_request_hook = kwargs.pop("request_hook", None) _DjangoMiddleware._otel_response_hook = kwargs.pop( "response_hook", None From 45cb81c3dcc4df75a7c70fcfc0ff4eb954171862 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 2 Feb 2023 13:59:14 -0800 Subject: [PATCH 2/4] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82156565f0..1734043800 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#1613](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1613)) - Fix aiohttp bug with unset `trace_configs` ([#1592](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1592)) - `opentelemetry-instrumentation-django` Allow explicit `excluded_urls` configuration through `instrument()` - ([#1613](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1613)) + ([#1618](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1618)) ### Fixed From 9e2257a7183e4927fbed9d9dc3bd1efc852d8146 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Fri, 3 Feb 2023 14:24:30 -0800 Subject: [PATCH 3/4] test --- .../tests/test_middleware.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py index b4bb33e144..780a3a2c5c 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py @@ -285,6 +285,18 @@ def test_exclude_lists(self): span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 1) + def test_exclude_lists_through_instrument(self): + _django_instrumentor.uninstrument() + _django_instrumentor.instrument(excluded_urls="excluded_explicit") + client = Client() + client.get("/excluded_explicit") + span_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(span_list), 0) + + client.get("/excluded_arg/123") + span_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(span_list), 1) + def test_span_name(self): # test no query_string Client().get("/span_name/1234/") From 383b9a6ad9313fb8553da3871af6eeaad074b902 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Fri, 3 Feb 2023 14:39:59 -0800 Subject: [PATCH 4/4] Update test_middleware.py --- .../tests/test_middleware.py | 1 + 1 file changed, 1 insertion(+) diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py index 780a3a2c5c..e235c8840e 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py @@ -91,6 +91,7 @@ _django_instrumentor = DjangoInstrumentor() +# pylint: disable=too-many-public-methods class TestMiddleware(WsgiTestBase): @classmethod def setUpClass(cls):