diff --git a/changelog.d/18815.misc b/changelog.d/18815.misc new file mode 100644 index 000000000..ad369e592 --- /dev/null +++ b/changelog.d/18815.misc @@ -0,0 +1 @@ +Instrument the `encode_response` part of Sliding Sync requests for more complete traces in Jaeger. diff --git a/synapse/events/utils.py b/synapse/events/utils.py index cae27136c..942072cf8 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py @@ -26,8 +26,8 @@ from typing import ( Any, Awaitable, Callable, + Collection, Dict, - Iterable, List, Mapping, Match, @@ -49,6 +49,7 @@ from synapse.api.constants import ( ) from synapse.api.errors import Codes, SynapseError from synapse.api.room_versions import RoomVersion +from synapse.logging.opentracing import SynapseTags, set_tag, trace from synapse.types import JsonDict, Requester from . import EventBase, StrippedStateEvent, make_event_from_dict @@ -710,9 +711,10 @@ class EventClientSerializer: "m.relations", {} ).update(serialized_aggregations) + @trace async def serialize_events( self, - events: Iterable[Union[JsonDict, EventBase]], + events: Collection[Union[JsonDict, EventBase]], time_now: int, *, config: SerializeEventConfig = _DEFAULT_SERIALIZE_EVENT_CONFIG, @@ -731,6 +733,11 @@ class EventClientSerializer: Returns: The list of serialized events """ + set_tag( + SynapseTags.FUNC_ARG_PREFIX + "events.length", + str(len(events)), + ) + return [ await self.serialize_event( event, diff --git a/synapse/rest/client/sync.py b/synapse/rest/client/sync.py index b6789a059..5e0596d1b 100644 --- a/synapse/rest/client/sync.py +++ b/synapse/rest/client/sync.py @@ -1017,6 +1017,7 @@ class SlidingSyncRestServlet(RestServlet): return 200, response_content + @trace_with_opname("sliding_sync.encode_response") async def encode_response( self, requester: Requester, @@ -1037,6 +1038,7 @@ class SlidingSyncRestServlet(RestServlet): return response + @trace_with_opname("sliding_sync.encode_lists") def encode_lists( self, lists: Mapping[str, SlidingSyncResult.SlidingWindowList] ) -> JsonDict: @@ -1058,6 +1060,7 @@ class SlidingSyncRestServlet(RestServlet): return serialized_lists + @trace_with_opname("sliding_sync.encode_rooms") async def encode_rooms( self, requester: Requester, @@ -1178,6 +1181,7 @@ class SlidingSyncRestServlet(RestServlet): return serialized_rooms + @trace_with_opname("sliding_sync.encode_extensions") async def encode_extensions( self, requester: Requester, extensions: SlidingSyncResult.Extensions ) -> JsonDict: