Black is the new black

pull/5544/head
Jorik Schellekens 2019-06-25 10:21:16 +01:00
parent ce21e41359
commit 98c8038bcf
5 changed files with 36 additions and 37 deletions

View File

@ -13,26 +13,28 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from ._base import Config import logging
from jaeger_client import Config as JaegerConfig from jaeger_client import Config as JaegerConfig
from synapse.util.scopecontextmanager import LogContextScopeManager from synapse.util.scopecontextmanager import LogContextScopeManager
import logging from ._base import Config
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class TracerConfig(Config): class TracerConfig(Config):
def read_config(self, config): def read_config(self, config):
self.tracer_config = config.get("tracer") self.tracer_config = config.get("tracer")
if self.tracer_config is None: if self.tracer_config is None:
# If the tracer is not configured we assume it is disabled # If the tracer is not configured we assume it is disabled
self.tracer_config = { self.tracer_config = {"tracer_enabled": False}
"tracer_enabled": False,
}
if self.tracer_config.get("tracer_enabled", False): if self.tracer_config.get("tracer_enabled", False):
# The tracer is enabled so sanitize the config # 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("user_whitelist", ["*"])
self.tracer_config.setdefault("homeserver_whitelist", ["*"]) self.tracer_config.setdefault("homeserver_whitelist", ["*"])
@ -58,6 +60,7 @@ class TracerConfig(Config):
- "*" - "*"
""" """
def init_tracing(config): def init_tracing(config):
"""Initialise the JaegerClient tracer """Initialise the JaegerClient tracer
@ -69,25 +72,14 @@ def init_tracing(config):
if config.tracer_config.get("tracer_enabled", False): if config.tracer_config.get("tracer_enabled", False):
jaeger_config = JaegerConfig( jaeger_config = JaegerConfig(
config={ config={"sampler": {"type": "const", "param": 1}, "logging": True},
'sampler': {
'type': 'const',
'param': 1,
},
'logging': True,
},
service_name=config.server_name, service_name=config.server_name,
scope_manager=LogContextScopeManager(config), 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( jaeger_config = JaegerConfig(
config={ config={"sampler": {"type": "const", "param": 0}},
'sampler': { service_name=config.server_name,
'type': 'const',
'param': 0,
}
},
service_name=config.server_name
) )
return jaeger_config.initialize_tracer() return jaeger_config.initialize_tracer()

View File

@ -23,8 +23,10 @@ from six import PY3, raise_from, string_types
from six.moves import urllib from six.moves import urllib
import attr import attr
import opentracing
import treq import treq
from canonicaljson import encode_canonical_json from canonicaljson import encode_canonical_json
from opentracing.propagation import Format
from prometheus_client import Counter from prometheus_client import Counter
from signedjson.sign import sign_json from signedjson.sign import sign_json
from zope.interface import implementer 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.logcontext import make_deferred_yieldable
from synapse.util.metrics import Measure from synapse.util.metrics import Measure
import opentracing
from opentracing.propagation import Format
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
outgoing_requests_counter = Counter( outgoing_requests_counter = Counter(

View File

@ -14,6 +14,7 @@
import contextlib import contextlib
import logging import logging
import time import time
import opentracing import opentracing
from twisted.web.server import Request, Site 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 import redact_uri
from synapse.http.request_metrics import RequestMetrics, requests_counter from synapse.http.request_metrics import RequestMetrics, requests_counter
from synapse.util.logcontext import LoggingContext, PreserveLoggingContext 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__) logger = logging.getLogger(__name__)
@ -247,7 +248,7 @@ class SynapseRequest(Request):
"http.url": self.get_redacted_uri(), "http.url": self.get_redacted_uri(),
"peer.ipv6": self.getClientIP(), "peer.ipv6": self.getClientIP(),
}, },
child_of=span_context child_of=span_context,
) )
def _finished_processing(self): def _finished_processing(self):

View File

@ -1,9 +1,12 @@
from .logcontext import LoggingContext, nested_logging_context
from opentracing import ScopeManager, Scope
import logging import logging
from opentracing import Scope, ScopeManager
from .logcontext import LoggingContext, nested_logging_context
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class LogContextScopeManager(ScopeManager): class LogContextScopeManager(ScopeManager):
_homeserver_whitelist = ["*"] _homeserver_whitelist = ["*"]
@ -71,6 +74,7 @@ class LogContextScopeManager(ScopeManager):
def user_whitelisted(self, request): def user_whitelisted(self, request):
pass pass
class _LogContextScope(Scope): class _LogContextScope(Scope):
def __init__(self, manager, span, logcontext, enter_logcontext, finish_on_close): def __init__(self, manager, span, logcontext, enter_logcontext, finish_on_close):
super(_LogContextScope, self).__init__(manager, span) super(_LogContextScope, self).__init__(manager, span)
@ -86,7 +90,7 @@ class _LogContextScope(Scope):
super(_LogContextScope, self).__exit__(type, value, traceback) super(_LogContextScope, self).__exit__(type, value, traceback)
if self._enter_logcontext: if self._enter_logcontext:
self.logcontext.__exit__(type, value, traceback) 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 self.logcontext.scope = None
def close(self): def close(self):
@ -95,4 +99,4 @@ class _LogContextScope(Scope):
return return
if self._finish_on_close: if self._finish_on_close:
self.span.finish() self.span.finish()

View File

@ -1,8 +1,9 @@
from opentracing.propagation import Format
import opentracing import opentracing
from opentracing.propagation import Format
from .logcontext import LoggingContext from .logcontext import LoggingContext
def extract_span_context(headers): def extract_span_context(headers):
""" """
Extracts a span context from Twisted 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. # Twisted encodes the values as lists whereas opentracing doesn't.
# So, we take the first item in the list. # 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()} header_dict = {k.decode(): v[0].decode() for k, v in headers.getAllRawHeaders()}
return opentracing.tracer.extract(Format.HTTP_HEADERS, header_dict) return opentracing.tracer.extract(Format.HTTP_HEADERS, header_dict)
def inject_span_context(headers, span): def inject_span_context(headers, span):
""" """
@ -34,14 +35,16 @@ def inject_span_context(headers, span):
""" """
carrier = {} carrier = {}
carrier = opentracing.tracer.inject(span, Format.HTTP_HEADERS, {}) carrier = opentracing.tracer.inject(span, Format.HTTP_HEADERS, {})
for key, value in carrier: for key, value in carrier:
headers.addRawHeaders(key, value) headers.addRawHeaders(key, value)
# TODO: Implement whitelisting # TODO: Implement whitelisting
def request_from_whitelisted_homeserver(request): def request_from_whitelisted_homeserver(request):
pass pass
# TODO: Implement whitelisting # TODO: Implement whitelisting
def user_whitelisted(request): def user_whitelisted(request):
pass pass