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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)