Black is the new black
parent
ce21e41359
commit
98c8038bcf
|
@ -13,26 +13,28 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from ._base import Config
|
||||
import logging
|
||||
|
||||
from jaeger_client import Config as JaegerConfig
|
||||
|
||||
from synapse.util.scopecontextmanager import LogContextScopeManager
|
||||
|
||||
import logging
|
||||
from ._base import Config
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TracerConfig(Config):
|
||||
def read_config(self, config):
|
||||
self.tracer_config = config.get("tracer")
|
||||
|
||||
if self.tracer_config is None:
|
||||
# If the tracer is not configured we assume it is disabled
|
||||
self.tracer_config = {
|
||||
"tracer_enabled": False,
|
||||
}
|
||||
|
||||
self.tracer_config = {"tracer_enabled": False}
|
||||
|
||||
if self.tracer_config.get("tracer_enabled", False):
|
||||
# The tracer is enabled so sanitize the config
|
||||
# If no whitelists are given
|
||||
# If no whitelists are given
|
||||
self.tracer_config.setdefault("user_whitelist", ["*"])
|
||||
self.tracer_config.setdefault("homeserver_whitelist", ["*"])
|
||||
|
||||
|
@ -58,6 +60,7 @@ class TracerConfig(Config):
|
|||
- "*"
|
||||
"""
|
||||
|
||||
|
||||
def init_tracing(config):
|
||||
"""Initialise the JaegerClient tracer
|
||||
|
||||
|
@ -69,25 +72,14 @@ def init_tracing(config):
|
|||
|
||||
if config.tracer_config.get("tracer_enabled", False):
|
||||
jaeger_config = JaegerConfig(
|
||||
config={
|
||||
'sampler': {
|
||||
'type': 'const',
|
||||
'param': 1,
|
||||
},
|
||||
'logging': True,
|
||||
},
|
||||
config={"sampler": {"type": "const", "param": 1}, "logging": True},
|
||||
service_name=config.server_name,
|
||||
scope_manager=LogContextScopeManager(config),
|
||||
)
|
||||
else: # The tracer is not configured so we instantiate a noop tracer
|
||||
else: # The tracer is not configured so we instantiate a noop tracer
|
||||
jaeger_config = JaegerConfig(
|
||||
config={
|
||||
'sampler': {
|
||||
'type': 'const',
|
||||
'param': 0,
|
||||
}
|
||||
},
|
||||
service_name=config.server_name
|
||||
config={"sampler": {"type": "const", "param": 0}},
|
||||
service_name=config.server_name,
|
||||
)
|
||||
|
||||
return jaeger_config.initialize_tracer()
|
||||
return jaeger_config.initialize_tracer()
|
||||
|
|
|
@ -23,8 +23,10 @@ from six import PY3, raise_from, string_types
|
|||
from six.moves import urllib
|
||||
|
||||
import attr
|
||||
import opentracing
|
||||
import treq
|
||||
from canonicaljson import encode_canonical_json
|
||||
from opentracing.propagation import Format
|
||||
from prometheus_client import Counter
|
||||
from signedjson.sign import sign_json
|
||||
from zope.interface import implementer
|
||||
|
@ -52,9 +54,6 @@ from synapse.util.async_helpers import timeout_deferred
|
|||
from synapse.util.logcontext import make_deferred_yieldable
|
||||
from synapse.util.metrics import Measure
|
||||
|
||||
import opentracing
|
||||
from opentracing.propagation import Format
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
outgoing_requests_counter = Counter(
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
import contextlib
|
||||
import logging
|
||||
import time
|
||||
|
||||
import opentracing
|
||||
|
||||
from twisted.web.server import Request, Site
|
||||
|
@ -21,7 +22,7 @@ from twisted.web.server import Request, Site
|
|||
from synapse.http import redact_uri
|
||||
from synapse.http.request_metrics import RequestMetrics, requests_counter
|
||||
from synapse.util.logcontext import LoggingContext, PreserveLoggingContext
|
||||
from synapse.util.tracerutils import extract_span_context
|
||||
from synapse.util.tracerutils import extract_span_context
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -247,7 +248,7 @@ class SynapseRequest(Request):
|
|||
"http.url": self.get_redacted_uri(),
|
||||
"peer.ipv6": self.getClientIP(),
|
||||
},
|
||||
child_of=span_context
|
||||
child_of=span_context,
|
||||
)
|
||||
|
||||
def _finished_processing(self):
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
from .logcontext import LoggingContext, nested_logging_context
|
||||
from opentracing import ScopeManager, Scope
|
||||
import logging
|
||||
|
||||
from opentracing import Scope, ScopeManager
|
||||
|
||||
from .logcontext import LoggingContext, nested_logging_context
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class LogContextScopeManager(ScopeManager):
|
||||
|
||||
_homeserver_whitelist = ["*"]
|
||||
|
@ -71,6 +74,7 @@ class LogContextScopeManager(ScopeManager):
|
|||
def user_whitelisted(self, request):
|
||||
pass
|
||||
|
||||
|
||||
class _LogContextScope(Scope):
|
||||
def __init__(self, manager, span, logcontext, enter_logcontext, finish_on_close):
|
||||
super(_LogContextScope, self).__init__(manager, span)
|
||||
|
@ -86,7 +90,7 @@ class _LogContextScope(Scope):
|
|||
super(_LogContextScope, self).__exit__(type, value, traceback)
|
||||
if self._enter_logcontext:
|
||||
self.logcontext.__exit__(type, value, traceback)
|
||||
else: # the logcontext existed before the creation of the scope
|
||||
else: # the logcontext existed before the creation of the scope
|
||||
self.logcontext.scope = None
|
||||
|
||||
def close(self):
|
||||
|
@ -95,4 +99,4 @@ class _LogContextScope(Scope):
|
|||
return
|
||||
|
||||
if self._finish_on_close:
|
||||
self.span.finish()
|
||||
self.span.finish()
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
from opentracing.propagation import Format
|
||||
import opentracing
|
||||
from opentracing.propagation import Format
|
||||
|
||||
from .logcontext import LoggingContext
|
||||
|
||||
|
||||
def extract_span_context(headers):
|
||||
"""
|
||||
Extracts a span context from Twisted Headers.
|
||||
|
@ -13,10 +14,10 @@ def extract_span_context(headers):
|
|||
"""
|
||||
# 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.
|
||||
# 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):
|
||||
"""
|
||||
|
@ -34,14 +35,16 @@ def inject_span_context(headers, span):
|
|||
"""
|
||||
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
|
||||
pass
|
||||
|
|
Loading…
Reference in New Issue