diff --git a/ddtrace/contrib/django/apps.py b/ddtrace/contrib/django/apps.py index b353413485a..8f5daaf2286 100644 --- a/ddtrace/contrib/django/apps.py +++ b/ddtrace/contrib/django/apps.py @@ -31,13 +31,6 @@ def ready(self): if settings.TAGS: tracer.set_tags(settings.TAGS) - # define the service details - tracer.set_service_info( - app='django', - app_type=AppTypes.web, - service=settings.DEFAULT_SERVICE, - ) - # configure the tracer instance # TODO[manu]: we may use configure() but because it creates a new # AgentWriter, it breaks all tests. The configure() behavior must @@ -46,6 +39,13 @@ def ready(self): tracer.writer.api.hostname = settings.AGENT_HOSTNAME tracer.writer.api.port = settings.AGENT_PORT + # define the service details + tracer.set_service_info( + app='django', + app_type=AppTypes.web, + service=settings.DEFAULT_SERVICE, + ) + if settings.AUTO_INSTRUMENT: # trace Django internals insert_exception_middleware() diff --git a/tests/contrib/django/test_tracing_disabled.py b/tests/contrib/django/test_tracing_disabled.py new file mode 100644 index 00000000000..c23ec2c4212 --- /dev/null +++ b/tests/contrib/django/test_tracing_disabled.py @@ -0,0 +1,40 @@ +# 3rd party +from django.apps import apps +from django.test import TestCase, override_settings + +# project +from ddtrace.tracer import Tracer +from ddtrace.contrib.django.conf import settings + +# testing +from ...test_tracer import DummyWriter + + +class DjangoTracingDisabledTest(TestCase): + def setUp(self): + tracer = Tracer() + tracer.writer = DummyWriter() + self.tracer = tracer + # Backup the old conf + self.backupTracer = settings.TRACER + self.backupEnabled = settings.ENABLED + # Disable tracing + settings.ENABLED = False + settings.TRACER = tracer + # Restart the app + app = apps.get_app_config('datadog_django') + app.ready() + + def tearDown(self): + # Reset the original settings + settings.ENABLED = self.backupEnabled + settings.TRACER = self.backupTracer + + def test_no_service_info_is_written(self): + services = self.tracer.writer.pop_services() + assert len(services) == 0 + + def test_no_trace_is_written(self): + settings.TRACER.trace("client.testing").finish() + traces = self.tracer.writer.pop_traces() + assert len(traces) == 0