mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-31 14:11:50 +08:00
Merge pull request #101 from NathanielRN/move-instrumentation-django
Move instrumentation django
This commit is contained in:
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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__)
|
||||||
|
|
||||||
|
@ -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"
|
||||||
|
@ -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()
|
||||||
|
Reference in New Issue
Block a user