Carrier inject and extraction for Twisted Headers

pull/5544/head
Jorik Schellekens 2019-06-21 12:11:53 +01:00
parent 297c5fe0a2
commit 45d412e67d
1 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,47 @@
from opentracing.propagation import Format
import opentracing
from .logcontext import LoggingContext
def extract_span_context(headers):
"""
Extracts a span context from Twisted Headers.
args:
headers (twisted.web.http_headers.Headers)
returns:
span_context (opentracing.span.SpanContext)
"""
# Twisted encodes the values as lists whereas opentracing doesn't.
# So, we take the first item in the list.
# Also, twisted uses byte arrays while opentracing expects strings.
header_dict = {k.decode(): v[0].decode() for k, v in headers.getAllRawHeaders()}
return opentracing.tracer.extract(Format.HTTP_HEADERS, header_dict)
def inject_span_context(headers, span):
"""
Injects a span context into twisted headers inplace
args:
headers (twisted.web.http_headers.Headers)
span (opentracing.Span)
note:
The headers set by the tracer are custom to the tracer implementation which
should be unique enough that they don't interfere with any headers set by
synapse or twisted. If we're still using jaeger these headers would be those
here:
https://github.com/jaegertracing/jaeger-client-python/blob/master/jaeger_client/constants.py
"""
carrier = {}
carrier = opentracing.tracer.inject(span, Format.HTTP_HEADERS, {})
for key, value in carrier:
headers.addRawHeaders(key, value)
# TODO: Implement whitelisting
def request_from_whitelisted_homeserver(request):
pass
# TODO: Implement whitelisting
def user_whitelisted(request):
pass