Add ability to exclude some routes explicitly with Django Instrumentation (#1618)
This commit is contained in:
parent
673e4aadb4
commit
3770e574eb
|
|
@ -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.
|
- `opentelemetry-instrumentation-aws-lambda` Flush `MeterProvider` at end of function invocation.
|
||||||
([#1613](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1613))
|
([#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))
|
- 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
|
### Fixed
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -255,9 +255,11 @@ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
|
||||||
from opentelemetry.metrics import get_meter
|
from opentelemetry.metrics import get_meter
|
||||||
from opentelemetry.semconv.metrics import MetricInstruments
|
from opentelemetry.semconv.metrics import MetricInstruments
|
||||||
from opentelemetry.trace import get_tracer
|
from opentelemetry.trace import get_tracer
|
||||||
|
from opentelemetry.util.http import get_excluded_urls, parse_excluded_urls
|
||||||
|
|
||||||
DJANGO_2_0 = django_version >= (2, 0)
|
DJANGO_2_0 = django_version >= (2, 0)
|
||||||
|
|
||||||
|
_excluded_urls_from_env = get_excluded_urls("DJANGO")
|
||||||
_logger = getLogger(__name__)
|
_logger = getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -293,6 +295,7 @@ class DjangoInstrumentor(BaseInstrumentor):
|
||||||
|
|
||||||
tracer_provider = kwargs.get("tracer_provider")
|
tracer_provider = kwargs.get("tracer_provider")
|
||||||
meter_provider = kwargs.get("meter_provider")
|
meter_provider = kwargs.get("meter_provider")
|
||||||
|
_excluded_urls = kwargs.get("excluded_urls")
|
||||||
tracer = get_tracer(
|
tracer = get_tracer(
|
||||||
__name__,
|
__name__,
|
||||||
__version__,
|
__version__,
|
||||||
|
|
@ -301,6 +304,11 @@ class DjangoInstrumentor(BaseInstrumentor):
|
||||||
meter = get_meter(__name__, __version__, meter_provider=meter_provider)
|
meter = get_meter(__name__, __version__, meter_provider=meter_provider)
|
||||||
_DjangoMiddleware._tracer = tracer
|
_DjangoMiddleware._tracer = tracer
|
||||||
_DjangoMiddleware._meter = meter
|
_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_request_hook = kwargs.pop("request_hook", None)
|
||||||
_DjangoMiddleware._otel_response_hook = kwargs.pop(
|
_DjangoMiddleware._otel_response_hook = kwargs.pop(
|
||||||
"response_hook", None
|
"response_hook", None
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,7 @@ urlpatterns = [
|
||||||
_django_instrumentor = DjangoInstrumentor()
|
_django_instrumentor = DjangoInstrumentor()
|
||||||
|
|
||||||
|
|
||||||
|
# pylint: disable=too-many-public-methods
|
||||||
class TestMiddleware(WsgiTestBase):
|
class TestMiddleware(WsgiTestBase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
|
|
@ -285,6 +286,18 @@ class TestMiddleware(WsgiTestBase):
|
||||||
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)
|
||||||
|
|
||||||
|
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):
|
def test_span_name(self):
|
||||||
# test no query_string
|
# test no query_string
|
||||||
Client().get("/span_name/1234/")
|
Client().get("/span_name/1234/")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue