mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-28 12:43:39 +08:00

OpenTelemetry doesn't support Python 2.7. Removing it from the tests and removing contrib packages that don't support Python 3. In this change: - removing pylons contrib - removing mysqldb contrib - updating minimum versions of flask (>=1.0), gevent (>=1.1) Signed-off-by: Alex Boten <aboten@lightstep.com>
83 lines
3.1 KiB
Python
Executable File
83 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
from distutils import spawn
|
|
import os
|
|
import sys
|
|
import logging
|
|
|
|
debug = os.environ.get('DATADOG_TRACE_DEBUG')
|
|
if debug and debug.lower() == 'true':
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
# Do not use `ddtrace.internal.logger.get_logger` here
|
|
# DEV: It isn't really necessary to use `DDLogger` here so we want to
|
|
# defer importing `ddtrace` until we actually need it.
|
|
# As well, no actual rate limiting would apply here since we only
|
|
# have a few logged lines
|
|
log = logging.getLogger(__name__)
|
|
|
|
USAGE = """
|
|
Execute the given Python program after configuring it to emit Datadog traces.
|
|
Append command line arguments to your program as usual.
|
|
|
|
Usage: [ENV_VARS] ddtrace-run <my_program>
|
|
|
|
Available environment variables:
|
|
|
|
DATADOG_ENV : override an application's environment (no default)
|
|
DATADOG_TRACE_ENABLED=true|false : override the value of tracer.enabled (default: true)
|
|
DATADOG_TRACE_DEBUG=true|false : enabled debug logging (default: false)
|
|
DATADOG_PATCH_MODULES=module:patch,module:patch... e.g. boto:true,redis:false : override the modules patched for this execution of the program (default: none)
|
|
DATADOG_TRACE_AGENT_HOSTNAME=localhost: override the address of the trace agent host that the default tracer will attempt to submit to (default: localhost)
|
|
DATADOG_TRACE_AGENT_PORT=8126: override the port that the default tracer will submit to (default: 8126)
|
|
DATADOG_SERVICE_NAME : override the service name to be used for this program (no default)
|
|
This value is passed through when setting up middleware for web framework integrations.
|
|
(e.g. flask, django)
|
|
For tracing without a web integration, prefer setting the service name in code.
|
|
DATADOG_PRIORITY_SAMPLING=true|false : (default: false): enables Priority Sampling.
|
|
""" # noqa: E501
|
|
|
|
|
|
def _ddtrace_root():
|
|
from ddtrace import __file__
|
|
return os.path.dirname(__file__)
|
|
|
|
|
|
def _add_bootstrap_to_pythonpath(bootstrap_dir):
|
|
"""
|
|
Add our bootstrap directory to the head of $PYTHONPATH to ensure
|
|
it is loaded before program code
|
|
"""
|
|
python_path = os.environ.get('PYTHONPATH', '')
|
|
|
|
if python_path:
|
|
new_path = '%s%s%s' % (bootstrap_dir, os.path.pathsep, os.environ['PYTHONPATH'])
|
|
os.environ['PYTHONPATH'] = new_path
|
|
else:
|
|
os.environ['PYTHONPATH'] = bootstrap_dir
|
|
|
|
|
|
def main():
|
|
if len(sys.argv) < 2 or sys.argv[1] == '-h':
|
|
print(USAGE)
|
|
return
|
|
|
|
log.debug('sys.argv: %s', sys.argv)
|
|
|
|
root_dir = _ddtrace_root()
|
|
log.debug('ddtrace root: %s', root_dir)
|
|
|
|
bootstrap_dir = os.path.join(root_dir, 'bootstrap')
|
|
log.debug('ddtrace bootstrap: %s', bootstrap_dir)
|
|
|
|
_add_bootstrap_to_pythonpath(bootstrap_dir)
|
|
log.debug('PYTHONPATH: %s', os.environ['PYTHONPATH'])
|
|
log.debug('sys.path: %s', sys.path)
|
|
|
|
executable = sys.argv[1]
|
|
|
|
# Find the executable path
|
|
executable = spawn.find_executable(executable)
|
|
log.debug('program executable: %s', executable)
|
|
|
|
os.execl(executable, executable, *sys.argv[2:])
|