1111# project
1212from ... import compat
1313from ...ext import http , errors , AppTypes
14+ from ...propagation .http import HTTPPropagator
15+ from ...context import Context
1416
1517# 3p
1618import flask .templating
@@ -86,17 +88,19 @@ def _connect(self, signal_to_handler):
8688
8789 # common methods
8890
89- def _start_span (self , trace_id = None , parent_id = None ):
91+ def _start_span (self ):
92+ if self ._use_distributed_tracing :
93+ propagator = HTTPPropagator ()
94+ context = propagator .extract (request .headers )
95+ # Only need to active the new context if something was propagated
96+ if context .trace_id :
97+ self ._tracer .context_provider .activate (context )
9098 try :
9199 g .flask_datadog_span = self ._tracer .trace (
92100 "flask.request" ,
93101 service = self ._service ,
94102 span_type = http .TYPE ,
95103 )
96- if trace_id :
97- g .flask_datadog_span .trace_id = trace_id
98- if parent_id :
99- g .flask_datadog_span .parent_id = parent_id
100104 except Exception :
101105 self .app .logger .exception ("error tracing request" )
102106
@@ -142,10 +146,7 @@ def _before_request(self):
142146 """ Starts tracing the current request and stores it in the global
143147 request object.
144148 """
145- if self ._use_distributed_tracing :
146- self ._start_span (* _trace_context_from_request ())
147- else :
148- self ._start_span ()
149+ self ._start_span ()
149150
150151 def _after_request (self , response ):
151152 """ handles a successful response. """
@@ -159,10 +160,7 @@ def _after_request(self, response):
159160 # signal handling methods
160161
161162 def _request_started (self , sender ):
162- if self ._use_distributed_tracing :
163- self ._start_span (* _trace_context_from_request ())
164- else :
165- self ._start_span ()
163+ self ._start_span ()
166164
167165 def _request_finished (self , sender , response , ** kwargs ):
168166 try :
@@ -179,12 +177,6 @@ def _request_exception(self, *args, **kwargs):
179177 except Exception :
180178 self .app .logger .exception ("error tracing error" )
181179
182-
183- def _trace_context_from_request ():
184- return (request .headers .get ('x-datadog-trace-id' ),
185- request .headers .get ('x-datadog-parent-id' ))
186-
187-
188180def _patch_render (tracer ):
189181 """ patch flask's render template methods with the given tracer. """
190182 # fall back to patching global method
0 commit comments