1717from opencensus .trace import execution_context
1818from opencensus .trace .span_context import SpanContext
1919from opencensus .trace import span as trace_span
20+ from opencensus .trace .exporters import print_exporter
2021from opencensus .trace .tracer import base
2122
2223
@@ -27,10 +28,14 @@ class ContextTracer(base.Tracer):
2728 :param span_context: SpanContext encapsulates the current context within
2829 the request's trace.
2930 """
30- def __init__ (self , span_context = None ):
31+ def __init__ (self , exporter = None , span_context = None ):
32+ if exporter is None :
33+ exporter = print_exporter .PrintExporter ()
34+
3135 if span_context is None :
3236 span_context = SpanContext ()
3337
38+ self .exporter = exporter
3439 self .span_context = span_context
3540 self .trace_id = span_context .trace_id
3641 self .root_span_id = span_context .span_id
@@ -44,11 +49,8 @@ def finish(self):
4449 :rtype: dict
4550 :returns: JSON format trace.
4651 """
47- trace = self ._get_trace_json ()
4852 self ._spans_list = []
4953
50- return trace
51-
5254 def span (self , name = 'span' ):
5355 """Create a new span with the trace using the context information.
5456
@@ -88,10 +90,9 @@ def start_span(self, name='span'):
8890 span .start ()
8991 return span
9092
91- def end_span (self ):
92- """End a span. Remove the span from the span stack, and update the
93- span_id in TraceContext as the current span_id which is the peek
94- element in the span stack.
93+ def end_span (self , * args , ** kwargs ):
94+ """End a span. Update the span_id in SpanContext to the current span's
95+ parent span id; Update the current span.
9596 """
9697 cur_span = self .current_span ()
9798
@@ -107,6 +108,11 @@ def end_span(self):
107108 else :
108109 execution_context .set_current_span (None )
109110
111+ span_json = self .get_trace_json (cur_span )
112+ self .exporter .export (span_json )
113+
114+ return cur_span
115+
110116 def current_span (self ):
111117 """Return the current span."""
112118 current_span = execution_context .get_current_span ()
@@ -128,33 +134,13 @@ def add_label_to_current_span(self, label_key, label_value):
128134 current_span = self .current_span ()
129135 current_span .add_label (label_key , label_value )
130136
131- def add_label_to_spans (self , label_key , label_value ):
132- """Add label to the spans in current trace.
133-
134- :type label_key: str
135- :param label_key: Label key.
136-
137- :type label_value:str
138- :param label_value: Label value.
139- """
140- for span in self ._spans_list :
141- span .add_label (label_key , label_value )
142-
143- def _get_trace_json (self ):
137+ def get_trace_json (self , span ):
144138 """Get the JSON format trace."""
145- spans_list = []
146- for root_span in self ._spans_list :
147- span_tree = list (iter (root_span ))
148- span_tree_json = [trace_span .format_span_json (span )
149- for span in span_tree ]
150- spans_list .extend (span_tree_json )
151-
152- if len (spans_list ) == 0 :
153- return
139+ span_json = trace_span .format_span_json (span )
154140
155141 trace = {
156142 'traceId' : self .trace_id ,
157- 'spans' : spans_list ,
143+ 'spans' : [ span_json ] ,
158144 }
159145
160146 return trace
0 commit comments