diff --git a/src/github.com/matrix-org/dendrite/roomserver/api/alias.go b/src/github.com/matrix-org/dendrite/roomserver/api/alias.go index 45a349c5d..5099846d5 100644 --- a/src/github.com/matrix-org/dendrite/roomserver/api/alias.go +++ b/src/github.com/matrix-org/dendrite/roomserver/api/alias.go @@ -17,6 +17,8 @@ package api import ( "context" "net/http" + + opentracing "github.com/opentracing/opentracing-go" ) // SetRoomAliasRequest is a request to SetRoomAlias @@ -111,8 +113,11 @@ func (h *httpRoomserverAliasAPI) SetRoomAlias( request *SetRoomAliasRequest, response *SetRoomAliasResponse, ) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "SetRoomAlias") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverSetRoomAliasPath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } // GetAliasRoomID implements RoomserverAliasAPI @@ -121,8 +126,11 @@ func (h *httpRoomserverAliasAPI) GetAliasRoomID( request *GetAliasRoomIDRequest, response *GetAliasRoomIDResponse, ) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "GetAliasRoomID") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverGetAliasRoomIDPath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } // RemoveRoomAlias implements RoomserverAliasAPI @@ -131,6 +139,9 @@ func (h *httpRoomserverAliasAPI) RemoveRoomAlias( request *RemoveRoomAliasRequest, response *RemoveRoomAliasResponse, ) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "RemoveRoomAlias") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverRemoveRoomAliasPath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } diff --git a/src/github.com/matrix-org/dendrite/roomserver/api/input.go b/src/github.com/matrix-org/dendrite/roomserver/api/input.go index 82be45f3b..fb4f7a616 100644 --- a/src/github.com/matrix-org/dendrite/roomserver/api/input.go +++ b/src/github.com/matrix-org/dendrite/roomserver/api/input.go @@ -20,6 +20,7 @@ import ( "net/http" "github.com/matrix-org/gomatrixserverlib" + opentracing "github.com/opentracing/opentracing-go" ) const ( @@ -117,6 +118,9 @@ func (h *httpRoomserverInputAPI) InputRoomEvents( request *InputRoomEventsRequest, response *InputRoomEventsResponse, ) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "InputRoomEvents") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverInputRoomEventsPath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } diff --git a/src/github.com/matrix-org/dendrite/roomserver/api/query.go b/src/github.com/matrix-org/dendrite/roomserver/api/query.go index 9222b1687..248850bff 100644 --- a/src/github.com/matrix-org/dendrite/roomserver/api/query.go +++ b/src/github.com/matrix-org/dendrite/roomserver/api/query.go @@ -21,6 +21,10 @@ import ( "fmt" "net/http" + "github.com/opentracing/opentracing-go/ext" + + "github.com/opentracing/opentracing-go" + "github.com/matrix-org/gomatrixserverlib" ) @@ -234,8 +238,11 @@ func (h *httpRoomserverQueryAPI) QueryLatestEventsAndState( request *QueryLatestEventsAndStateRequest, response *QueryLatestEventsAndStateResponse, ) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "QueryLatestEventsAndState") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverQueryLatestEventsAndStatePath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } // QueryStateAfterEvents implements RoomserverQueryAPI @@ -244,8 +251,11 @@ func (h *httpRoomserverQueryAPI) QueryStateAfterEvents( request *QueryStateAfterEventsRequest, response *QueryStateAfterEventsResponse, ) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "QueryStateAfterEvents") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverQueryStateAfterEventsPath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } // QueryEventsByID implements RoomserverQueryAPI @@ -254,8 +264,11 @@ func (h *httpRoomserverQueryAPI) QueryEventsByID( request *QueryEventsByIDRequest, response *QueryEventsByIDResponse, ) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "QueryEventsByID") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverQueryEventsByIDPath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } // QueryMembershipsForRoom implements RoomserverQueryAPI @@ -264,8 +277,11 @@ func (h *httpRoomserverQueryAPI) QueryMembershipsForRoom( request *QueryMembershipsForRoomRequest, response *QueryMembershipsForRoomResponse, ) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "QueryMembershipsForRoom") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverQueryMembershipsForRoomPath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } // QueryInvitesForUser implements RoomserverQueryAPI @@ -274,8 +290,11 @@ func (h *httpRoomserverQueryAPI) QueryInvitesForUser( request *QueryInvitesForUserRequest, response *QueryInvitesForUserResponse, ) error { + span, ctx := opentracing.StartSpanFromContext(ctx, "QueryInvitesForUser") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverQueryInvitesForUserPath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } // QueryServerAllowedToSeeEvent implements RoomserverQueryAPI @@ -284,12 +303,15 @@ func (h *httpRoomserverQueryAPI) QueryServerAllowedToSeeEvent( request *QueryServerAllowedToSeeEventRequest, response *QueryServerAllowedToSeeEventResponse, ) (err error) { + span, ctx := opentracing.StartSpanFromContext(ctx, "QueryServerAllowedToSeeEvent") + defer span.Finish() + apiURL := h.roomserverURL + RoomserverQueryServerAllowedToSeeEventPath - return postJSON(ctx, h.httpClient, apiURL, request, response) + return postJSON(ctx, span, h.httpClient, apiURL, request, response) } func postJSON( - ctx context.Context, httpClient *http.Client, + ctx context.Context, span opentracing.Span, httpClient *http.Client, apiURL string, request, response interface{}, ) error { jsonBytes, err := json.Marshal(request) @@ -302,6 +324,15 @@ func postJSON( return err } + // Mark the span as being an RPC client. + ext.SpanKindRPCClient.Set(span) + carrier := opentracing.HTTPHeadersCarrier(req.Header) + tracer := opentracing.GlobalTracer() + + if err = tracer.Inject(span.Context(), opentracing.HTTPHeaders, carrier); err != nil { + return err + } + req.Header.Set("Content-Type", "application/json") res, err := httpClient.Do(req.WithContext(ctx))