mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-22 17:46:08 +03:00
parent
08c8469322
commit
91fa9cca99
3 changed files with 25 additions and 0 deletions
1
changelog.d/10199.misc
Normal file
1
changelog.d/10199.misc
Normal file
|
@ -0,0 +1 @@
|
|||
Expose opentracing trace id in response headers.
|
|
@ -35,6 +35,7 @@ from synapse.http.servlet import (
|
|||
parse_string_from_args,
|
||||
parse_strings_from_args,
|
||||
)
|
||||
from synapse.logging import opentracing
|
||||
from synapse.logging.context import run_in_background
|
||||
from synapse.logging.opentracing import (
|
||||
SynapseTags,
|
||||
|
@ -345,6 +346,8 @@ class BaseFederationServlet:
|
|||
)
|
||||
|
||||
with scope:
|
||||
opentracing.inject_response_headers(request.responseHeaders)
|
||||
|
||||
if origin and self.RATELIMIT:
|
||||
with ratelimiter.ratelimit(origin) as d:
|
||||
await d
|
||||
|
|
|
@ -173,6 +173,7 @@ from typing import TYPE_CHECKING, Collection, Dict, List, Optional, Pattern, Typ
|
|||
import attr
|
||||
|
||||
from twisted.internet import defer
|
||||
from twisted.web.http_headers import Headers
|
||||
|
||||
from synapse.config import ConfigError
|
||||
from synapse.util import json_decoder, json_encoder
|
||||
|
@ -668,6 +669,25 @@ def inject_header_dict(
|
|||
headers[key.encode()] = [value.encode()]
|
||||
|
||||
|
||||
def inject_response_headers(response_headers: Headers) -> None:
|
||||
"""Inject the current trace id into the HTTP response headers"""
|
||||
if not opentracing:
|
||||
return
|
||||
span = opentracing.tracer.active_span
|
||||
if not span:
|
||||
return
|
||||
|
||||
# This is a bit implementation-specific.
|
||||
#
|
||||
# Jaeger's Spans have a trace_id property; other implementations (including the
|
||||
# dummy opentracing.span.Span which we use if init_tracer is not called) do not
|
||||
# expose it
|
||||
trace_id = getattr(span, "trace_id", None)
|
||||
|
||||
if trace_id is not None:
|
||||
response_headers.addRawHeader("Synapse-Trace-Id", f"{trace_id:x}")
|
||||
|
||||
|
||||
@ensure_active_span("get the active span context as a dict", ret={})
|
||||
def get_active_span_text_map(destination=None):
|
||||
"""
|
||||
|
@ -843,6 +863,7 @@ def trace_servlet(request: "SynapseRequest", extract_context: bool = False):
|
|||
scope = start_active_span(request_name)
|
||||
|
||||
with scope:
|
||||
inject_response_headers(request.responseHeaders)
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
|
|
Loading…
Reference in a new issue