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

Opentracing misc #5856

Merged
merged 17 commits into from
Aug 16, 2019
Merged
1 change: 1 addition & 0 deletions changelog.d/5856.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add a tag recording a request's authenticated entity and corresponding servlet in opentracing.
6 changes: 6 additions & 0 deletions synapse/api/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

from twisted.internet import defer

import synapse.logging.opentracing as opentracing
import synapse.types
from synapse import event_auth
from synapse.api.constants import EventTypes, JoinRules, Membership
Expand Down Expand Up @@ -178,6 +179,7 @@ def can_federate(self, event, auth_events):
def get_public_keys(self, invite_event):
return event_auth.get_public_keys(invite_event)

@opentracing.trace
@defer.inlineCallbacks
def get_user_by_req(
self, request, allow_guest=False, rights="access", allow_expired=False
Expand Down Expand Up @@ -209,6 +211,9 @@ def get_user_by_req(
user_id, app_service = yield self._get_appservice_user_id(request)
if user_id:
request.authenticated_entity = user_id
opentracing.set_tag("authenticated_entity", user_id)
JorikSchellekens marked this conversation as resolved.
Show resolved Hide resolved
# there is at least one other place where authenticated entity is
JorikSchellekens marked this conversation as resolved.
Show resolved Hide resolved
# set.

if ip_addr and self.hs.config.track_appservice_user_ips:
yield self.store.insert_client_ip(
Expand Down Expand Up @@ -259,6 +264,7 @@ def get_user_by_req(
)

request.authenticated_entity = user.to_string()
opentracing.set_tag("authenticated_entity", user.to_string())

return synapse.types.create_requester(
user, token_id, is_guest, device_id, app_service=app_service
Expand Down
13 changes: 7 additions & 6 deletions synapse/federation/transport/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import re

import synapse
import synapse.logging.opentracing as opentracing
from synapse.api.errors import Codes, FederationDeniedError, SynapseError
from synapse.api.room_versions import RoomVersions
from synapse.api.urls import (
Expand All @@ -37,6 +36,7 @@
parse_string_from_args,
)
from synapse.logging.context import run_in_background
from synapse.logging.opentracing import start_active_span_from_context, tags
from synapse.types import ThirdPartyInstanceID, get_domain_from_id
from synapse.util.ratelimitutils import FederationRateLimiter
from synapse.util.versionstring import get_version_string
Expand Down Expand Up @@ -287,16 +287,17 @@ async def new_func(request, *args, **kwargs):
raise

# Start an opentracing span
with opentracing.start_active_span_from_context(
with start_active_span_from_context(
request.requestHeaders,
"incoming-federation-request",
tags={
"request_id": request.get_request_id(),
opentracing.tags.SPAN_KIND: opentracing.tags.SPAN_KIND_RPC_SERVER,
opentracing.tags.HTTP_METHOD: request.get_method(),
opentracing.tags.HTTP_URL: request.get_redacted_uri(),
opentracing.tags.PEER_HOST_IPV6: request.getClientIP(),
tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER,
tags.HTTP_METHOD: request.get_method(),
tags.HTTP_URL: request.get_redacted_uri(),
tags.PEER_HOST_IPV6: request.getClientIP(),
"authenticated_entity": origin,
"servlet_name": request.request_metrics.name,
},
):
if origin:
Expand Down
23 changes: 13 additions & 10 deletions synapse/http/matrixfederationclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
from twisted.web._newclient import ResponseDone
from twisted.web.http_headers import Headers

import synapse.logging.opentracing as opentracing
import synapse.metrics
import synapse.util.retryutils
from synapse.api.errors import (
Expand All @@ -50,6 +49,12 @@
from synapse.http.client import BlacklistingAgentWrapper, IPBlacklistingResolver
from synapse.http.federation.matrix_federation_agent import MatrixFederationAgent
from synapse.logging.context import make_deferred_yieldable
from synapse.logging.opentracing import (
inject_active_span_byte_dict,
set_tag,
start_active_span,
tags,
)
from synapse.util.async_helpers import timeout_deferred
from synapse.util.metrics import Measure

Expand Down Expand Up @@ -341,20 +346,20 @@ def _send_request(
query_bytes = b""

# Retreive current span
scope = opentracing.start_active_span(
scope = start_active_span(
"outgoing-federation-request",
tags={
opentracing.tags.SPAN_KIND: opentracing.tags.SPAN_KIND_RPC_CLIENT,
opentracing.tags.PEER_ADDRESS: request.destination,
opentracing.tags.HTTP_METHOD: request.method,
opentracing.tags.HTTP_URL: request.path,
tags.SPAN_KIND: tags.SPAN_KIND_RPC_CLIENT,
tags.PEER_ADDRESS: request.destination,
tags.HTTP_METHOD: request.method,
tags.HTTP_URL: request.path,
},
finish_on_close=True,
)

# Inject the span into the headers
headers_dict = {}
opentracing.inject_active_span_byte_dict(headers_dict, request.destination)
inject_active_span_byte_dict(headers_dict, request.destination)

headers_dict[b"User-Agent"] = [self.version_string_bytes]

Expand Down Expand Up @@ -436,9 +441,7 @@ def _send_request(
response.phrase.decode("ascii", errors="replace"),
)

opentracing.set_tag(
opentracing.tags.HTTP_STATUS_CODE, response.code
)
set_tag(tags.HTTP_STATUS_CODE, response.code)

if 200 <= response.code < 300:
pass
Expand Down