Skip to content

Commit a779fdc

Browse files
authored
Merge pull request #16 from elgris/13-standard-propagators-support
Implements TextPropagator
2 parents 6e19bff + 71ba5c0 commit a779fdc

File tree

3 files changed

+49
-2
lines changed

3 files changed

+49
-2
lines changed
File renamed without changes.

instana/text_propagator.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from __future__ import absolute_import
2+
3+
import opentracing as ot
4+
from basictracer.context import SpanContext
5+
from instana import util, log
6+
7+
prefix_tracer_state = 'X-INSTANA-'
8+
prefix_baggage = 'X-INSTANA-BAGGAGE-'
9+
field_name_trace_id = prefix_tracer_state + 'T'
10+
field_name_span_id = prefix_tracer_state + 'S'
11+
12+
13+
class TextPropagator():
14+
"""
15+
A Propagator for Format.TEXT_MAP.
16+
Does not support Baggage and Sampling
17+
"""
18+
19+
def inject(self, span_context, carrier):
20+
carrier[field_name_trace_id] = '{0:x}'.format(span_context.trace_id)
21+
carrier[field_name_span_id] = '{0:x}'.format(span_context.span_id)
22+
if span_context.baggage is not None:
23+
for k in span_context.baggage:
24+
carrier[prefix_baggage+k] = span_context.baggage[k]
25+
26+
def extract(self, carrier): # noqa
27+
try:
28+
if type(carrier) is dict or hasattr(carrier, "__dict__"):
29+
dc = carrier
30+
elif type(carrier) is list:
31+
dc = dict(carrier)
32+
else:
33+
raise ot.SpanContextCorruptedException()
34+
35+
if field_name_trace_id in dc and field_name_span_id in dc:
36+
trace_id = util.header_to_id(dc[field_name_trace_id])
37+
span_id = util.header_to_id(dc[field_name_span_id])
38+
39+
return SpanContext(span_id=span_id,
40+
trace_id=trace_id,
41+
baggage={},
42+
sampled=True)
43+
44+
except Exception as e:
45+
log.debug("extract error: ", str(e))

instana/tracer.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
import opentracing as ot
55
import instana.options as o
66
import instana.sensor as s
7-
import instana.propagator as tp
87

98
from basictracer.context import SpanContext
109
from basictracer.span import BasicSpan
10+
from instana.http_propagator import HTTPPropagator
11+
from instana.text_propagator import TextPropagator
1112
from instana.util import generate_id
1213

1314
# In case a user or app creates multiple tracers, we limit to just
@@ -29,7 +30,8 @@ def __init__(self, options=o.Options()):
2930
super(InstanaTracer, self).__init__(
3031
r.InstanaRecorder(self.sensor), r.InstanaSampler())
3132

32-
self._propagators[ot.Format.HTTP_HEADERS] = tp.HTTPPropagator()
33+
self._propagators[ot.Format.HTTP_HEADERS] = HTTPPropagator()
34+
self._propagators[ot.Format.TEXT_MAP] = TextPropagator()
3335

3436
def start_span(
3537
self,

0 commit comments

Comments
 (0)