Skip to content

Commit 6496a09

Browse files
committed
An HTTP propagator to handle inject/extract
1 parent 2211d94 commit 6496a09

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

instana/propagator.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from __future__ import absolute_import
2+
3+
import opentracing as ot
4+
5+
prefix_tracer_state = 'HTTP_X_INSTANA_'
6+
field_name_trace_id = prefix_tracer_state + 'T'
7+
field_name_span_id = prefix_tracer_state + 'S'
8+
field_count = 2
9+
10+
11+
class HTTPPropagator():
12+
"""A Propagator for Format.TEXT_MAP."""
13+
14+
def inject(self, span_context, carrier):
15+
carrier[field_name_trace_id] = '{0:x}'.format(span_context.trace_id)
16+
carrier[field_name_span_id] = '{0:x}'.format(span_context.span_id)
17+
18+
def extract(self, carrier): # noqa
19+
count = 0
20+
span_id, trace_id = (0, 0)
21+
for k in carrier:
22+
v = carrier[k]
23+
k = k.lower()
24+
if k == field_name_span_id:
25+
span_id = int(v, 16)
26+
count += 1
27+
elif k == field_name_trace_id:
28+
trace_id = int(v, 16)
29+
count += 1
30+
31+
if count != field_count:
32+
raise ot.SpanContextCorruptedException()
33+
34+
return ot.SpanContext(
35+
span_id=span_id,
36+
trace_id=trace_id,
37+
baggage={},
38+
sampled=True)

0 commit comments

Comments
 (0)