opentracing的这个middleware怎么加到tornado里使用?

opentracing的这个middleware怎么加到tornado里使用?

请问opentracing的这个中间件怎么加到tornado里使用呢?

import opentracing

from opentracing.scope_managers.tornado import TornadoScopeManager

from opentracing_instrumentation import span_in_stack_context, http_server

opentracing.tracer = MyOpenTracingTracer(scope_manager=TornadoScopeManager())

class TracerMiddleware(object):

def __init__(self):

# perform initialization similar to above, including installing

# the client_hooks

@gen.coroutine

def __call__(self, request, handler, next_mw):

request_wrapper = http_server.TornadoRequestWrapper(request=request)

span = http_server.before_request(request=request_wrapper)

@gen.coroutine

def next_middleware_with_span():

yield next_mw()

yield run_coroutine_with_span(span=span,

func=next_middleware_with_span)

span.finish()

def run_coroutine_with_span(span, func, *args, **kwargs):

"""Wrap the execution of a Tornado coroutine func in a tracing span.

This makes the span available through the get_current_span() function.

:param span: The tracing span to expose.

:param func: Co-routine to execute in the scope of tracing span.

:param args: Positional args to func, if any.

:param kwargs: Keyword args to func, if any.

"""

with span_in_stack_context(span):

return func(*args, **kwargs)

以上是 opentracing的这个middleware怎么加到tornado里使用? 的全部内容, 来源链接: utcz.com/a/156786.html

回到顶部