def _before_request(self):
        """A function to be run before each request.

        See: http://flask.pocoo.org/docs/0.12/api/#flask.Flask.before_request
        """
        try:
            header = get_flask_header()
            span_context = self.propagator.from_header(header)

            tracer = request_tracer.RequestTracer(span_context=span_context,
                                                  sampler=self.sampler,
                                                  reporter=self.reporter,
                                                  propagator=self.propagator)

            tracer.start_trace()

            span = tracer.start_span()

            # Set the span name as the name of the current module name
            span.name = '[{}]{}'.format(flask.request.method,
                                        flask.request.url)
            tracer.add_label_to_spans(HTTP_METHOD, flask.request.method)
            tracer.add_label_to_spans(HTTP_URL, flask.request.url)
        except Exception:  # pragma: NO COVER
            log.error('Failed to trace request', exc_info=True)
Exemplo n.º 2
0
    def test_should_sample_not_sampled(self):
        sampler = mock.Mock()
        sampler.should_sample = False
        tracer = request_tracer.RequestTracer(sampler=sampler)
        sampled = tracer.should_sample()

        self.assertFalse(sampled)
Exemplo n.º 3
0
    def process_request(self, request):
        """Called on each request, before Django decides which view to execute.

        :type request: :class:`~django.http.request.HttpRequest`
        :param request: Django http request.
        """
        # Add the request to thread local
        execution_context.set_opencensus_attr(REQUEST_THREAD_LOCAL_KEY,
                                              request)

        try:
            # Start tracing this request
            header = get_django_header()
            span_context = self.propagator.from_header(header)

            # Reload the tracer with the new span context
            tracer = request_tracer.RequestTracer(span_context=span_context,
                                                  sampler=self.sampler,
                                                  reporter=self.reporter,
                                                  propagator=self.propagator)

            tracer.start_trace()

            # Span name is being set at process_view
            tracer.start_span()
            tracer.add_label_to_spans(label_key=HTTP_METHOD,
                                      label_value=request.method)
            tracer.add_label_to_spans(label_key=HTTP_URL,
                                      label_value=request.path)
        except Exception:  # pragma: NO COVER
            log.error('Failed to trace request', exc_info=True)
Exemplo n.º 4
0
    def test_end_trace_not_sampled(self):
        sampler = mock.Mock()
        sampler.should_sample = False
        tracer = request_tracer.RequestTracer(sampler=sampler)
        cur_trace = mock.Mock()
        tracer.tracer.cur_trace = cur_trace

        tracer.end_trace()
        self.assertFalse(cur_trace.finish.called)
Exemplo n.º 5
0
    def test_span_not_sampled(self):
        from opencensus.trace.tracer import base

        sampler = mock.Mock()
        sampler.should_sample = False
        tracer = request_tracer.RequestTracer(sampler=sampler)

        span = tracer.span()
        assert isinstance(span, base.NullContextManager)
Exemplo n.º 6
0
    def test_end_span_sampled(self):
        sampler = mock.Mock()
        sampler.should_sample = True
        tracer = request_tracer.RequestTracer(sampler=sampler)
        span = mock.Mock()
        tracer.tracer._span_stack.append(span)
        tracer.end_span()

        self.assertTrue(span.finish.called)
Exemplo n.º 7
0
    def test_should_sample_force_not_trace(self):
        from opencensus.trace import span_context

        span_context = mock.Mock()
        span_context.enabled = False
        tracer = request_tracer.RequestTracer(span_context=span_context)
        sampled = tracer.should_sample()

        self.assertFalse(sampled)
Exemplo n.º 8
0
    def test_start_span_sampled(self):
        from opencensus.trace import trace_span

        sampler = mock.Mock()
        sampler.should_sample = True
        tracer = request_tracer.RequestTracer(sampler=sampler)
        span = tracer.start_span()

        assert isinstance(span, trace_span.TraceSpan)
Exemplo n.º 9
0
    def get_tracer_context_tracer(self):
        from opencensus.trace.tracer import context_tracer

        sampler = mock.Mock()
        sampler.should_sample = True
        tracer = request_tracer.RequestTracer(sampler=sampler)

        result = tracer.get_tracer()

        assert isinstance(result, context_tracer.ContextTracer)
Exemplo n.º 10
0
    def get_tracer_noop_tracer(self):
        from opencensus.trace.tracer import noop_tracer

        sampler = mock.Mock()
        sampler.should_sample = False
        tracer = request_tracer.RequestTracer(sampler=sampler)

        result = tracer.get_tracer()

        assert isinstance(result, noop_tracer.NoopTracer)
Exemplo n.º 11
0
    def test_start_trace_sampled(self):
        sampler = mock.Mock()
        sampler.should_sample = True
        tracer = request_tracer.RequestTracer(sampler=sampler)

        cur_trace = mock.Mock()
        tracer.tracer.cur_trace = cur_trace

        tracer.start_trace()
        self.assertTrue(cur_trace.start.called)
Exemplo n.º 12
0
    def test_current_span_sampled(self):
        sampler = mock.Mock()
        sampler.should_sample = True
        tracer = request_tracer.RequestTracer(sampler=sampler)
        span = mock.Mock()
        tracer.tracer._span_stack.append(span)

        result = tracer.current_span()

        self.assertEqual(result, span)
Exemplo n.º 13
0
    def test_end_trace_sampled(self):
        sampler = mock.Mock()
        sampler.should_sample = True
        tracer = request_tracer.RequestTracer(sampler=sampler)
        cur_trace = mock.Mock()
        cur_trace.spans = []
        tracer.tracer.cur_trace = cur_trace

        tracer.end_trace()
        self.assertTrue(cur_trace.finish.called)
Exemplo n.º 14
0
    def test_end_span_not_sampled(self):
        sampler = mock.Mock()
        sampler.should_sample = False
        span_context = mock.Mock()
        tracer = request_tracer.RequestTracer(sampler=sampler,
                                              span_context=span_context)

        tracer.end_span()

        self.assertFalse(span_context.span_id.called)
Exemplo n.º 15
0
    def test_span_sampled(self):
        sampler = mock.Mock()
        sampler.should_sample = True
        tracer = request_tracer.RequestTracer(sampler=sampler)
        tracer_mock = mock.Mock()
        tracer.tracer = tracer_mock

        tracer.span()

        self.assertTrue(tracer_mock.span.called)
Exemplo n.º 16
0
    def test_add_label_to_current_span_not_sampled(self):
        from opencensus.trace.tracer import base

        sampler = mock.Mock()
        sampler.should_sample = False
        tracer = request_tracer.RequestTracer(sampler=sampler)
        tracer.add_label_to_current_span('key', 'value')

        span = tracer.current_span()

        assert isinstance(span, base.NullContextManager)
Exemplo n.º 17
0
    def test_trace_decorator(self):
        tracer = request_tracer.RequestTracer()

        return_value = "test"

        @tracer.trace_decorator()
        def test_decorator():
            return return_value

        returned = test_decorator()

        self.assertEqual(len(tracer.tracer.cur_trace.spans), 1)
        self.assertEqual(tracer.tracer.cur_trace.spans[0].name,
                         'test_decorator')
        self.assertEqual(returned, return_value)
Exemplo n.º 18
0
    def test_constructor_default(self):
        from opencensus.trace.propagation import google_cloud_format
        from opencensus.trace.reporters import print_reporter
        from opencensus.trace.samplers.always_on import AlwaysOnSampler
        from opencensus.trace.span_context import SpanContext
        from opencensus.trace.tracer import context_tracer

        tracer = request_tracer.RequestTracer()

        assert isinstance(tracer.span_context, SpanContext)
        assert isinstance(tracer.sampler, AlwaysOnSampler)
        assert isinstance(tracer.reporter, print_reporter.PrintReporter)
        assert isinstance(tracer.propagator,
                          google_cloud_format.GoogleCloudFormatPropagator)
        assert isinstance(tracer.tracer, context_tracer.ContextTracer)
Exemplo n.º 19
0
    def test_constructor_explicit(self):
        from opencensus.trace.tracer import noop_tracer

        sampler = mock.Mock()
        sampler.should_sample = False

        reporter = mock.Mock()
        propagator = mock.Mock()
        span_context = mock.Mock()

        tracer = request_tracer.RequestTracer(span_context=span_context,
                                              sampler=sampler,
                                              reporter=reporter,
                                              propagator=propagator)

        self.assertIs(tracer.span_context, span_context)
        self.assertIs(tracer.sampler, sampler)
        self.assertIs(tracer.reporter, reporter)
        self.assertIs(tracer.propagator, propagator)
        assert isinstance(tracer.tracer, noop_tracer.NoopTracer)