From b5b81db05f4016496cb8cd53797effc7fc97eee4 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Wed, 28 Oct 2020 17:28:58 -0400 Subject: [PATCH 1/5] Change status codes from grpc status codes, remove setting status in instrumentations except on ERROR (#1282) --- .../tests/test_middleware.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py index 4aa794f0d..d087dc2d9 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py @@ -27,7 +27,7 @@ from opentelemetry.sdk.util import get_dict_as_key from opentelemetry.test.test_base import TestBase from opentelemetry.test.wsgitestutil import WsgiTestBase from opentelemetry.trace import SpanKind -from opentelemetry.trace.status import StatusCanonicalCode +from opentelemetry.trace.status import StatusCode from opentelemetry.util import ExcludeList # pylint: disable=import-error @@ -87,7 +87,7 @@ class TestMiddleware(TestBase, WsgiTestBase): else "tests.views.traced", ) self.assertEqual(span.kind, SpanKind.SERVER) - self.assertEqual(span.status.canonical_code, StatusCanonicalCode.OK) + self.assertEqual(span.status.status_code, StatusCode.UNSET) self.assertEqual(span.attributes["http.method"], "GET") self.assertEqual( span.attributes["http.url"], @@ -113,7 +113,7 @@ class TestMiddleware(TestBase, WsgiTestBase): span.name, "^traced/" if DJANGO_2_2 else "tests.views.traced" ) self.assertEqual(span.kind, SpanKind.SERVER) - self.assertEqual(span.status.canonical_code, StatusCanonicalCode.OK) + self.assertEqual(span.status.status_code, StatusCode.UNSET) self.assertEqual(span.attributes["http.method"], "GET") self.assertEqual( span.attributes["http.url"], "http://testserver/traced/" @@ -170,7 +170,7 @@ class TestMiddleware(TestBase, WsgiTestBase): span.name, "^traced/" if DJANGO_2_2 else "tests.views.traced" ) self.assertEqual(span.kind, SpanKind.SERVER) - self.assertEqual(span.status.canonical_code, StatusCanonicalCode.OK) + self.assertEqual(span.status.status_code, StatusCode.UNSET) self.assertEqual(span.attributes["http.method"], "POST") self.assertEqual( span.attributes["http.url"], "http://testserver/traced/" @@ -193,9 +193,7 @@ class TestMiddleware(TestBase, WsgiTestBase): span.name, "^error/" if DJANGO_2_2 else "tests.views.error" ) self.assertEqual(span.kind, SpanKind.SERVER) - self.assertEqual( - span.status.canonical_code, StatusCanonicalCode.INTERNAL - ) + self.assertEqual(span.status.status_code, StatusCode.ERROR) self.assertEqual(span.attributes["http.method"], "GET") self.assertEqual( span.attributes["http.url"], "http://testserver/error/" From 2504416734be0158b15abeaeebbd5d46ff49f9e7 Mon Sep 17 00:00:00 2001 From: zhutianyu <704735206@qq.com> Date: Mon, 2 Nov 2020 11:50:17 +0800 Subject: [PATCH 2/5] Bugfix django instrumentation (#1309) --- .../CHANGELOG.md | 1 + .../instrumentation/django/middleware.py | 2 +- .../tests/test_middleware.py | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md index 36962fbdc..2e399b202 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 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 41343873d..5c27ed289 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 @@ class _DjangoMiddleware(MiddlewareMixin): 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 diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py index d087dc2d9..3f70f62be 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py @@ -250,6 +250,7 @@ class TestMiddleware(TestBase, WsgiTestBase): 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,22 @@ class TestMiddleware(TestBase, WsgiTestBase): else "tests.views.route_span_name", ) + 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) + + 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 6f579299b572dcfac868cd39b14c1496fddbdfac Mon Sep 17 00:00:00 2001 From: Prajilesh N Date: Mon, 2 Nov 2020 09:42:47 +0530 Subject: [PATCH 3/5] Converted TextMap propagator getter to a class and added keys method (#1196) Co-authored-by: alrex --- .../src/opentelemetry/instrumentation/django/middleware.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 5c27ed289..1f465ca57 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py @@ -23,8 +23,8 @@ from opentelemetry.instrumentation.django.version import __version__ from opentelemetry.instrumentation.utils import extract_attributes_from_object from opentelemetry.instrumentation.wsgi import ( add_response_attributes, + carrier_getter, collect_request_attributes, - get_header_from_environ, ) from opentelemetry.propagators import extract from opentelemetry.trace import SpanKind, get_tracer @@ -125,7 +125,7 @@ class _DjangoMiddleware(MiddlewareMixin): environ = request.META - token = attach(extract(get_header_from_environ, environ)) + token = attach(extract(carrier_getter, environ)) tracer = get_tracer(__name__, __version__) From 41a10aacc2dbbb73bbf161d2492cbabedad89db1 Mon Sep 17 00:00:00 2001 From: alrex Date: Mon, 2 Nov 2020 08:01:02 -0800 Subject: [PATCH 4/5] fixing changelogs (#1315) Found a few discrepancies in the changelogs that needed to be fixed --- .../CHANGELOG.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md index 2e399b202..5fe7d9c2f 100644 --- a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md @@ -2,8 +2,16 @@ ## 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#)) +- 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#)) +- Record span status and http.status_code attribute on exception + ([#1257](https://github.com/open-telemetry/opentelemetry-python/pull/1257)) +- Added capture of http.route + ([#1226](https://github.com/open-telemetry/opentelemetry-python/issues/1226)) +- Add support for tracking http metrics + ([#1230](https://github.com/open-telemetry/opentelemetry-python/pull/1230)) ## Version 0.14b0 @@ -11,9 +19,6 @@ Released 2020-10-13 - Changed span name extraction from request to comply semantic convention ([#992](https://github.com/open-telemetry/opentelemetry-python/pull/992)) - Added support for `OTEL_PYTHON_DJANGO_TRACED_REQUEST_ATTRS` ([#1154](https://github.com/open-telemetry/opentelemetry-python/pull/1154)) -- Added capture of http.route ([#1226](https://github.com/open-telemetry/opentelemetry-python/issues/1226)) -- Add support for tracking http metrics - ([#1230](https://github.com/open-telemetry/opentelemetry-python/pull/1230)) ## Version 0.13b0 From 015fa570bd47614b327f0c2a58c9a5ea55beca02 Mon Sep 17 00:00:00 2001 From: alrex Date: Mon, 2 Nov 2020 09:00:06 -0800 Subject: [PATCH 5/5] [pre-release] Update changelogs, version [0.15b0] (#1320) --- .../opentelemetry-instrumentation-django/CHANGELOG.md | 4 ++++ .../opentelemetry-instrumentation-django/setup.cfg | 8 ++++---- .../src/opentelemetry/instrumentation/django/version.py | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md index 5fe7d9c2f..5876936a0 100644 --- a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +## Version 0.15b0 + +Released 2020-11-02 + - 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 diff --git a/instrumentation/opentelemetry-instrumentation-django/setup.cfg b/instrumentation/opentelemetry-instrumentation-django/setup.cfg index 37ef9f2a8..4cc9b5863 100644 --- a/instrumentation/opentelemetry-instrumentation-django/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-django/setup.cfg @@ -40,13 +40,13 @@ package_dir= packages=find_namespace: install_requires = django >= 1.10 - opentelemetry-instrumentation-wsgi == 0.15.dev0 - opentelemetry-instrumentation == 0.15.dev0 - opentelemetry-api == 0.15.dev0 + opentelemetry-instrumentation-wsgi == 0.15b0 + opentelemetry-instrumentation == 0.15b0 + opentelemetry-api == 0.15b0 [options.extras_require] test = - opentelemetry-test == 0.15.dev0 + opentelemetry-test == 0.15b0 [options.packages.find] where = src diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py index e7b342d64..ff494d225 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/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.15.dev0" +__version__ = "0.15b0"