mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-31 14:11:50 +08:00
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
import ddtrace
|
|
import tornado
|
|
|
|
from ddtrace.vendor.wrapt import wrap_function_wrapper as _w
|
|
|
|
from . import handlers, application, decorators, template, compat, context_provider
|
|
from ...utils.wrappers import unwrap as _u
|
|
|
|
|
|
def patch():
|
|
"""
|
|
Tracing function that patches the Tornado web application so that it will be
|
|
traced using the given ``tracer``.
|
|
"""
|
|
# patch only once
|
|
if getattr(tornado, '__datadog_patch', False):
|
|
return
|
|
setattr(tornado, '__datadog_patch', True)
|
|
|
|
# patch Application to initialize properly our settings and tracer
|
|
_w('tornado.web', 'Application.__init__', application.tracer_config)
|
|
|
|
# patch RequestHandler to trace all Tornado handlers
|
|
_w('tornado.web', 'RequestHandler._execute', handlers.execute)
|
|
_w('tornado.web', 'RequestHandler.on_finish', handlers.on_finish)
|
|
_w('tornado.web', 'RequestHandler.log_exception', handlers.log_exception)
|
|
|
|
# patch Template system
|
|
_w('tornado.template', 'Template.generate', template.generate)
|
|
|
|
# patch Python Futures if available when an Executor pool is used
|
|
compat.wrap_futures()
|
|
|
|
# configure the global tracer
|
|
ddtrace.tracer.configure(
|
|
context_provider=context_provider,
|
|
wrap_executor=decorators.wrap_executor,
|
|
)
|
|
|
|
|
|
def unpatch():
|
|
"""
|
|
Remove all tracing functions in a Tornado web application.
|
|
"""
|
|
if not getattr(tornado, '__datadog_patch', False):
|
|
return
|
|
setattr(tornado, '__datadog_patch', False)
|
|
|
|
# unpatch Tornado
|
|
_u(tornado.web.RequestHandler, '_execute')
|
|
_u(tornado.web.RequestHandler, 'on_finish')
|
|
_u(tornado.web.RequestHandler, 'log_exception')
|
|
_u(tornado.web.Application, '__init__')
|
|
_u(tornado.concurrent, 'run_on_executor')
|
|
_u(tornado.template.Template, 'generate')
|
|
|
|
# unpatch `futures`
|
|
compat.unwrap_futures()
|