|
1 | | -import opentracing |
| 1 | +import opentracing as ot |
2 | 2 | import instana.tracer |
3 | 3 | import opentracing.ext.tags as ext |
4 | 4 |
|
5 | 5 |
|
6 | 6 | class InstanaMiddleware(object): |
7 | 7 | def __init__(self, get_response): |
8 | 8 | self.get_response = get_response |
9 | | - opentracing.global_tracer = instana.tracer.InstanaTracer() |
| 9 | + ot.global_tracer = instana.tracer.InstanaTracer() |
10 | 10 | self |
11 | 11 |
|
12 | 12 | def __call__(self, request): |
13 | | - span = opentracing.global_tracer.start_span("django") |
| 13 | + env = request.environ |
| 14 | + if 'HTTP_X_INSTANA_T' in env and 'HTTP_X_INSTANA_S' in env: |
| 15 | + ctx = ot.global_tracer.extract(ot.Format.HTTP_HEADERS, env) |
| 16 | + span = ot.global_tracer.start_span("django", child_of=ctx) |
| 17 | + else: |
| 18 | + span = ot.global_tracer.start_span("django") |
14 | 19 |
|
15 | | - span.set_tag(ext.HTTP_URL, request.environ['PATH_INFO']) |
16 | | - span.set_tag("http.params", request.environ['QUERY_STRING']) |
| 20 | + span.set_tag(ext.HTTP_URL, env['PATH_INFO']) |
| 21 | + span.set_tag("http.params", env['QUERY_STRING']) |
17 | 22 | span.set_tag(ext.HTTP_METHOD, request.method) |
18 | | - span.set_tag("http.host", request.environ['HTTP_HOST']) |
| 23 | + span.set_tag("http.host", env['HTTP_HOST']) |
19 | 24 |
|
20 | 25 | response = self.get_response(request) |
21 | 26 |
|
22 | 27 | span.set_tag(ext.HTTP_STATUS_CODE, response.status_code) |
| 28 | + ot.global_tracer.inject(span.context, ot.Format.HTTP_HEADERS, response) |
23 | 29 | span.finish() |
24 | 30 | return response |
0 commit comments