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

Commit 24b3834

Browse files
Start tracing client requests from the servlet
1 parent 14376e7 commit 24b3834

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

synapse/http/servlet.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from canonicaljson import json
2121

2222
from synapse.api.errors import Codes, SynapseError
23+
from synapse.util.tracerutils import trace_servlet
2324

2425
logger = logging.getLogger(__name__)
2526

@@ -290,7 +291,9 @@ def register(self, http_server):
290291
for method in ("GET", "PUT", "POST", "OPTIONS", "DELETE"):
291292
if hasattr(self, "on_%s" % (method,)):
292293
method_handler = getattr(self, "on_%s" % (method,))
293-
http_server.register_paths(method, patterns, method_handler)
294+
http_server.register_paths(
295+
method, patterns, trace_servlet(method_handler)
296+
)
294297

295298
else:
296299
raise NotImplementedError("RestServlet must register something.")

synapse/util/tracerutils.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import re
3030
from functools import wraps
3131

32+
from twisted.internet import defer
33+
3234
logger = logging.getLogger(__name__)
3335

3436

@@ -305,3 +307,24 @@ def inject_active_span_byte_dict(headers, destination):
305307

306308
for key, value in carrier.items():
307309
headers[key.encode()] = [value.encode()]
310+
311+
312+
def trace_servlet(func):
313+
@wraps(func)
314+
@defer.inlineCallbacks
315+
def f(request, *args, **kwargs):
316+
with start_active_span_from_context(
317+
request.requestHeaders,
318+
"incoming-client-request",
319+
tags={
320+
"request_id": request.get_request_id(),
321+
tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER,
322+
tags.HTTP_METHOD: request.get_method(),
323+
tags.HTTP_URL: request.get_redacted_uri(),
324+
tags.PEER_HOST_IPV6: request.getClientIP(),
325+
},
326+
):
327+
result = yield defer.maybeDeferred(func, request, *args, **kwargs)
328+
defer.returnValue(result)
329+
330+
return f

0 commit comments

Comments
 (0)