mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-31 22:23:12 +08:00
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
import ddtrace
|
|
|
|
from tornado import template
|
|
|
|
from . import decorators, context_provider
|
|
from .constants import CONFIG_KEY
|
|
|
|
|
|
def tracer_config(__init__, app, args, kwargs):
|
|
"""
|
|
Wrap Tornado web application so that we can configure services info and
|
|
tracing settings after the initialization.
|
|
"""
|
|
# call the Application constructor
|
|
__init__(*args, **kwargs)
|
|
|
|
# default settings
|
|
settings = {
|
|
'tracer': ddtrace.tracer,
|
|
'default_service': 'tornado-web',
|
|
'distributed_tracing': True,
|
|
'analytics_enabled': None
|
|
}
|
|
|
|
# update defaults with users settings
|
|
user_settings = app.settings.get(CONFIG_KEY)
|
|
if user_settings:
|
|
settings.update(user_settings)
|
|
|
|
app.settings[CONFIG_KEY] = settings
|
|
tracer = settings['tracer']
|
|
service = settings['default_service']
|
|
|
|
# extract extra settings
|
|
extra_settings = settings.get('settings', {})
|
|
|
|
# the tracer must use the right Context propagation and wrap executor;
|
|
# this action is done twice because the patch() method uses the
|
|
# global tracer while here we can have a different instance (even if
|
|
# this is not usual).
|
|
tracer.configure(
|
|
context_provider=context_provider,
|
|
wrap_executor=decorators.wrap_executor,
|
|
enabled=settings.get('enabled', None),
|
|
hostname=settings.get('agent_hostname', None),
|
|
port=settings.get('agent_port', None),
|
|
settings=extra_settings,
|
|
)
|
|
|
|
# set global tags if any
|
|
tags = settings.get('tags', None)
|
|
if tags:
|
|
tracer.set_tags(tags)
|
|
|
|
# configure the PIN object for template rendering
|
|
ddtrace.Pin(app='tornado', service=service, tracer=tracer).onto(template)
|