Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Add support for using rust-python-jaeger-reporter (#7697)
Browse files Browse the repository at this point in the history
  • Loading branch information
erikjohnston authored Jun 17, 2020
1 parent b44bdd7 commit e07a8ca
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
1 change: 1 addition & 0 deletions changelog.d/7697.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add support for using `rust-python-jaeger-reporter` library to reduce jaeger tracing overhead.
3 changes: 3 additions & 0 deletions mypy.ini
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,6 @@ ignore_missing_imports = True

[mypy-authlib.*]
ignore_missing_imports = True

[mypy-rust_python_jaeger_reporter.*]
ignore_missing_imports = True
39 changes: 36 additions & 3 deletions synapse/logging/opentracing.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,9 @@ def set_fates(clotho, lachesis, atropos, father="Zues", mother="Themis"):
import re
import types
from functools import wraps
from typing import TYPE_CHECKING, Dict
from typing import TYPE_CHECKING, Dict, Optional, Type

import attr
from canonicaljson import json

from twisted.internet import defer
Expand Down Expand Up @@ -232,6 +233,30 @@ class _DummyTagNames(object):
LogContextScopeManager = None # type: ignore


try:
from rust_python_jaeger_reporter import Reporter

@attr.s(slots=True, frozen=True)
class _WrappedRustReporter:
"""Wrap the reporter to ensure `report_span` never throws.
"""

_reporter = attr.ib(type=Reporter, default=attr.Factory(Reporter))

def set_process(self, *args, **kwargs):
return self._reporter.set_process(*args, **kwargs)

def report_span(self, span):
try:
return self._reporter.report_span(span)
except Exception:
logger.exception("Failed to report span")

RustReporter = _WrappedRustReporter # type: Optional[Type[_WrappedRustReporter]]
except ImportError:
RustReporter = None


logger = logging.getLogger(__name__)


Expand Down Expand Up @@ -320,11 +345,19 @@ def init_tracer(hs: "HomeServer"):

set_homeserver_whitelist(hs.config.opentracer_whitelist)

JaegerConfig(
config = JaegerConfig(
config=hs.config.jaeger_config,
service_name="{} {}".format(hs.config.server_name, hs.get_instance_name()),
scope_manager=LogContextScopeManager(hs.config),
).initialize_tracer()
)

# If we have the rust jaeger reporter available let's use that.
if RustReporter:
logger.info("Using rust_python_jaeger_reporter library")
tracer = config.create_tracer(RustReporter(), config.sampler)
opentracing.set_global_tracer(tracer)
else:
config.initialize_tracer()


# Whitelisting
Expand Down

0 comments on commit e07a8ca

Please sign in to comment.