From fb9fd8c1895fd27296cf32c26e6243e013608dfc Mon Sep 17 00:00:00 2001 From: zhutianyu Date: Fri, 30 Oct 2020 17:00:45 +0800 Subject: [PATCH 1/4] Fix: Django instrumentation if request have query_string will not correct resolver we need use request.path to replace request.get_full_path() --- .../src/opentelemetry/instrumentation/django/middleware.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py index 41343873d04..5c27ed289a2 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py @@ -81,7 +81,7 @@ def _get_span_name(request): if getattr(request, "resolver_match"): match = request.resolver_match else: - match = resolve(request.get_full_path()) + match = resolve(request.path) if hasattr(match, "route"): return match.route From c24c6e2584516240a0cadb02355337541d36eedb Mon Sep 17 00:00:00 2001 From: zhutianyu Date: Fri, 30 Oct 2020 17:16:24 +0800 Subject: [PATCH 2/4] Add Unit Test --- .../tests/test_middleware.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py index d087dc2d9d1..8585f1e15dc 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py @@ -250,6 +250,7 @@ def test_exclude_lists(self): self.assertEqual(len(span_list), 1) def test_span_name(self): + # test no query_string Client().get("/span_name/1234/") span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 1) @@ -262,6 +263,19 @@ def test_span_name(self): else "tests.views.route_span_name", ) + # test have query_string + Client().get("/span_name/1234/?query=test") + span_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(span_list), 1) + + span = span_list[0] + self.assertEqual( + span.name, + "^span_name/([0-9]{4})/$" + if DJANGO_2_2 + else "tests.views.route_span_name", + ) + def test_span_name_404(self): Client().get("/span_name/1234567890/") span_list = self.memory_exporter.get_finished_spans() From d07b342f00eaba7da8d95028f41f84bb6584c34d Mon Sep 17 00:00:00 2001 From: zhutianyu Date: Fri, 30 Oct 2020 19:33:07 +0800 Subject: [PATCH 3/4] Update Test --- .../tests/test_middleware.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py index 8585f1e15dc..3f70f62bec0 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py @@ -263,7 +263,10 @@ def test_span_name(self): else "tests.views.route_span_name", ) - # test have query_string + def test_span_name_for_query_string(self): + """ + request not have query string + """ Client().get("/span_name/1234/?query=test") span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 1) From 62af35ea1f3487b4ab1f9c58860bf3b27cd852b3 Mon Sep 17 00:00:00 2001 From: zhutianyu <704735206@qq.com> Date: Sat, 31 Oct 2020 12:26:55 +0800 Subject: [PATCH 4/4] Update CHANGELOG.md --- .../opentelemetry-instrumentation-django/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md index 36962fbdcef..2e399b202df 100644 --- a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased - Django instrumentation is now enabled by default but can be disabled by setting `OTEL_PYTHON_DJANGO_INSTRUMENT` to `False` ([#1239](https://github.com/open-telemetry/opentelemetry-python/pull/1239)) +- Bugfix use request.path replace request.get_full_path(). It will get correct span name ([#1309](https://github.com/open-telemetry/opentelemetry-python/pull/1309#)) ## Version 0.14b0