mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-01 09:13:23 +08:00
Add ability to exclude some routes explicitly with Django Instrumentation (#1618)
This commit is contained in:
@ -18,6 +18,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()`
|
||||
([#1618](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1618))
|
||||
|
||||
### Fixed
|
||||
|
||||
|
@ -255,9 +255,11 @@ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
|
||||
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__)
|
||||
|
||||
|
||||
@ -293,6 +295,7 @@ class DjangoInstrumentor(BaseInstrumentor):
|
||||
|
||||
tracer_provider = kwargs.get("tracer_provider")
|
||||
meter_provider = kwargs.get("meter_provider")
|
||||
_excluded_urls = kwargs.get("excluded_urls")
|
||||
tracer = get_tracer(
|
||||
__name__,
|
||||
__version__,
|
||||
@ -301,6 +304,11 @@ class DjangoInstrumentor(BaseInstrumentor):
|
||||
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
|
||||
|
@ -91,6 +91,7 @@ urlpatterns = [
|
||||
_django_instrumentor = DjangoInstrumentor()
|
||||
|
||||
|
||||
# pylint: disable=too-many-public-methods
|
||||
class TestMiddleware(WsgiTestBase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
@ -285,6 +286,18 @@ class TestMiddleware(WsgiTestBase):
|
||||
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/")
|
||||
|
Reference in New Issue
Block a user