Merge pull request #101 from NathanielRN/move-instrumentation-django

Move instrumentation django
This commit is contained in:
alrex
2020-11-02 13:34:49 -08:00
committed by GitHub
5 changed files with 44 additions and 19 deletions

View File

@ -2,7 +2,20 @@
## Unreleased ## 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)) ## 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
([#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 ## Version 0.14b0
@ -10,9 +23,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)) - 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 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 ## Version 0.13b0

View File

@ -40,13 +40,13 @@ package_dir=
packages=find_namespace: packages=find_namespace:
install_requires = install_requires =
django >= 1.10 django >= 1.10
opentelemetry-instrumentation-wsgi == 0.15.dev0 opentelemetry-instrumentation-wsgi == 0.15b0
opentelemetry-instrumentation == 0.15.dev0 opentelemetry-instrumentation == 0.15b0
opentelemetry-api == 0.15.dev0 opentelemetry-api == 0.15b0
[options.extras_require] [options.extras_require]
test = test =
opentelemetry-test == 0.15.dev0 opentelemetry-test == 0.15b0
[options.packages.find] [options.packages.find]
where = src where = src

View File

@ -23,8 +23,8 @@ from opentelemetry.instrumentation.django.version import __version__
from opentelemetry.instrumentation.utils import extract_attributes_from_object from opentelemetry.instrumentation.utils import extract_attributes_from_object
from opentelemetry.instrumentation.wsgi import ( from opentelemetry.instrumentation.wsgi import (
add_response_attributes, add_response_attributes,
carrier_getter,
collect_request_attributes, collect_request_attributes,
get_header_from_environ,
) )
from opentelemetry.propagators import extract from opentelemetry.propagators import extract
from opentelemetry.trace import SpanKind, get_tracer from opentelemetry.trace import SpanKind, get_tracer
@ -81,7 +81,7 @@ class _DjangoMiddleware(MiddlewareMixin):
if getattr(request, "resolver_match"): if getattr(request, "resolver_match"):
match = request.resolver_match match = request.resolver_match
else: else:
match = resolve(request.get_full_path()) match = resolve(request.path)
if hasattr(match, "route"): if hasattr(match, "route"):
return match.route return match.route
@ -125,7 +125,7 @@ class _DjangoMiddleware(MiddlewareMixin):
environ = request.META environ = request.META
token = attach(extract(get_header_from_environ, environ)) token = attach(extract(carrier_getter, environ))
tracer = get_tracer(__name__, __version__) tracer = get_tracer(__name__, __version__)

View File

@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
__version__ = "0.15.dev0" __version__ = "0.15b0"

View File

@ -27,7 +27,7 @@ from opentelemetry.sdk.util import get_dict_as_key
from opentelemetry.test.test_base import TestBase from opentelemetry.test.test_base import TestBase
from opentelemetry.test.wsgitestutil import WsgiTestBase from opentelemetry.test.wsgitestutil import WsgiTestBase
from opentelemetry.trace import SpanKind from opentelemetry.trace import SpanKind
from opentelemetry.trace.status import StatusCanonicalCode from opentelemetry.trace.status import StatusCode
from opentelemetry.util import ExcludeList from opentelemetry.util import ExcludeList
# pylint: disable=import-error # pylint: disable=import-error
@ -87,7 +87,7 @@ class TestMiddleware(TestBase, WsgiTestBase):
else "tests.views.traced", else "tests.views.traced",
) )
self.assertEqual(span.kind, SpanKind.SERVER) 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.method"], "GET")
self.assertEqual( self.assertEqual(
span.attributes["http.url"], span.attributes["http.url"],
@ -113,7 +113,7 @@ class TestMiddleware(TestBase, WsgiTestBase):
span.name, "^traced/" if DJANGO_2_2 else "tests.views.traced" span.name, "^traced/" if DJANGO_2_2 else "tests.views.traced"
) )
self.assertEqual(span.kind, SpanKind.SERVER) 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.method"], "GET")
self.assertEqual( self.assertEqual(
span.attributes["http.url"], "http://testserver/traced/" 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" span.name, "^traced/" if DJANGO_2_2 else "tests.views.traced"
) )
self.assertEqual(span.kind, SpanKind.SERVER) 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.method"], "POST")
self.assertEqual( self.assertEqual(
span.attributes["http.url"], "http://testserver/traced/" 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" span.name, "^error/" if DJANGO_2_2 else "tests.views.error"
) )
self.assertEqual(span.kind, SpanKind.SERVER) self.assertEqual(span.kind, SpanKind.SERVER)
self.assertEqual( self.assertEqual(span.status.status_code, StatusCode.ERROR)
span.status.canonical_code, StatusCanonicalCode.INTERNAL
)
self.assertEqual(span.attributes["http.method"], "GET") self.assertEqual(span.attributes["http.method"], "GET")
self.assertEqual( self.assertEqual(
span.attributes["http.url"], "http://testserver/error/" span.attributes["http.url"], "http://testserver/error/"
@ -252,6 +250,7 @@ class TestMiddleware(TestBase, WsgiTestBase):
self.assertEqual(len(span_list), 1) self.assertEqual(len(span_list), 1)
def test_span_name(self): def test_span_name(self):
# test no query_string
Client().get("/span_name/1234/") Client().get("/span_name/1234/")
span_list = self.memory_exporter.get_finished_spans() span_list = self.memory_exporter.get_finished_spans()
self.assertEqual(len(span_list), 1) self.assertEqual(len(span_list), 1)
@ -264,6 +263,22 @@ class TestMiddleware(TestBase, WsgiTestBase):
else "tests.views.route_span_name", 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): def test_span_name_404(self):
Client().get("/span_name/1234567890/") Client().get("/span_name/1234567890/")
span_list = self.memory_exporter.get_finished_spans() span_list = self.memory_exporter.get_finished_spans()