def start_span(self, name='span'): """Start a span. :type name: str :param name: The name of the span. :rtype: :class:`~opencensus.trace.span.Span` :returns: The Span object. """ parent_span = self.current_span() # If a span has remote parent span, then the parent_span.span_id # should be the span_id from the request header. if parent_span is None: parent_span = base.NullContextManager( span_id=self.span_context.span_id) span = trace_span.Span(name, parent_span=parent_span, context_tracer=self) with self._spans_list_condition: self._spans_list.append(span) self.span_context.span_id = span.span_id execution_context.set_current_span(span) span.start() return span
def test_end_span_batch_export(self, mock_current_span): from opencensus.trace import span span = span.Span(name='test') exporter = mock.Mock() tracer = context_tracer.ContextTracer(exporter=exporter) tracer._spans_list = [span] mock_span = mock.Mock() mock_span.name = 'span' mock_span._child_spans = [] mock_span.status = None mock_span.links = None mock_span.stack_trace = None mock_span.time_events = None mock_span.attributes = {} mock_span.__iter__ = mock.Mock(return_value=iter([mock_span])) parent_span_id = 1234 mock_span.parent_span.span_id = parent_span_id mock_current_span.return_value = mock_span tracer.end_span() self.assertTrue(mock_span.finish.called) self.assertEqual(tracer.span_context.span_id, parent_span_id) self.assertTrue(tracer.exporter.export.called)
def test_end_leftover_spans(self): tracer = context_tracer.ContextTracer() tracer._spans_list = [span.Span(name='span')] tracer.finish() self.assertEqual(tracer._spans_list, [])
def __init__(self, *args, **kwargs): self._current_span = span_module.Span('mock_span') execution_context.set_opencensus_tracer(self)