Skip to content

Commit

Permalink
Add ability to exclude some routes explicitly with Django Instrument…
Browse files Browse the repository at this point in the history
…ation (#1618)
  • Loading branch information
lzchen committed Feb 3, 2023
1 parent 673e4aa commit 3770e57
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,9 +255,11 @@ def response_hook(span, request, response):
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__)


Expand Down Expand Up @@ -293,6 +295,7 @@ def _instrument(self, **kwargs):

tracer_provider = kwargs.get("tracer_provider")
meter_provider = kwargs.get("meter_provider")
_excluded_urls = kwargs.get("excluded_urls")
tracer = get_tracer(
__name__,
__version__,
Expand All @@ -301,6 +304,11 @@ def _instrument(self, **kwargs):
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
_django_instrumentor = DjangoInstrumentor()


# pylint: disable=too-many-public-methods
class TestMiddleware(WsgiTestBase):
@classmethod
def setUpClass(cls):
Expand Down Expand Up @@ -285,6 +286,18 @@ def test_exclude_lists(self):
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/")
Expand Down

0 comments on commit 3770e57

Please sign in to comment.