Trace non-JSON APIs, /media, /key etc

This commit is contained in:
Erik Johnston 2019-10-11 11:22:36 +01:00
parent a0d0ba7862
commit f3ceaf4323
2 changed files with 11 additions and 5 deletions

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