Merge pull request #6195 from matrix-org/erikj/opentracing_preview_url

Trace non-JSON APIs, /media, /key etc
pull/6197/head
Erik Johnston 2019-10-11 13:23:52 +01:00 committed by GitHub
commit 6f5c6c8f60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 5 deletions

1
changelog.d/6195.bugfix Normal file
View File

@ -0,0 +1 @@
Fix tracing of non-JSON APIs, /media, /key etc.

View File

@ -388,7 +388,7 @@ class DirectServeResource(resource.Resource):
if not callback: if not callback:
return super().render(request) return super().render(request)
resp = callback(request) resp = trace_servlet(self.__class__.__name__)(callback)(request)
# If it's a coroutine, turn it into a Deferred # If it's a coroutine, turn it into a Deferred
if isinstance(resp, types.CoroutineType): if isinstance(resp, types.CoroutineType):

View File

@ -169,6 +169,7 @@ import contextlib
import inspect import inspect
import logging import logging
import re import re
import types
from functools import wraps from functools import wraps
from typing import Dict from typing import Dict
@ -778,8 +779,7 @@ def trace_servlet(servlet_name, extract_context=False):
return func return func
@wraps(func) @wraps(func)
@defer.inlineCallbacks async def _trace_servlet_inner(request, *args, **kwargs):
def _trace_servlet_inner(request, *args, **kwargs):
request_tags = { request_tags = {
"request_id": request.get_request_id(), "request_id": request.get_request_id(),
tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER, tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER,
@ -796,8 +796,14 @@ def trace_servlet(servlet_name, extract_context=False):
scope = start_active_span(servlet_name, tags=request_tags) scope = start_active_span(servlet_name, tags=request_tags)
with scope: with scope:
result = yield defer.maybeDeferred(func, request, *args, **kwargs) result = func(request, *args, **kwargs)
return result
if not isinstance(result, (types.CoroutineType, defer.Deferred)):
# Some servlets aren't async and just return results
# directly, so we handle that here.
return result
return await result
return _trace_servlet_inner return _trace_servlet_inner