Carrier inject and extraction for Twisted Headers
parent
297c5fe0a2
commit
45d412e67d
|
@ -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
|
Loading…
Reference in New Issue