Skip to content

Commit d016505

Browse files
committed
wip
1 parent ca46009 commit d016505

File tree

2 files changed

+48
-24
lines changed

2 files changed

+48
-24
lines changed

opentelemetry-auto-instrumentation/src/opentelemetry/auto_instrumentation/bootstrap.py

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,36 @@
2020
import sys
2121
from logging import getLogger
2222

23-
logger = getLogger(__file__)
23+
from .decorators import syscall
2424

25-
_ACTION_INSTALL = "install"
26-
_ACTION_REQUIREMENTS = "requirements"
25+
logger = getLogger(__file__)
2726

2827

2928
# target library to desired instrumentor path/versioned package name
3029
instrumentations = {
31-
"dbapi": "opentelemetry-ext-dbapi>=0.6b0",
32-
"flask": "opentelemetry-ext-flask>=0.6b0",
33-
"grpc": "opentelemetry-ext-grpc>=0.6b0",
34-
"requests": "opentelemetry-ext-requests>=0.6b0",
35-
"mysql": "opentelemetry-ext-mysql>=0.6b0",
36-
"psycopg2": "opentelemetry-ext-psycopg2>=0.6b0",
37-
"pymongo": "opentelemetry-ext-pymongo>=0.6b0",
38-
"pymysql": "opentelemetry-ext-pymysql",
39-
"redis": "opentelemetry-ext-redis",
40-
"sqlalchemy": "opentelemetry-ext-sqlalchemy",
41-
"wsgi": "opentelemetry-ext-wsgi>=0.6b0",
30+
"dbapi": "opentelemetry-ext-dbapi>=0.7b1",
31+
"dbapi": "opentelemetry-ext-django>=0.7b1",
32+
"flask": "opentelemetry-ext-flask>=0.7b1",
33+
"grpc": "opentelemetry-ext-grpc>=0.7b1",
34+
"requests": "opentelemetry-ext-requests>=0.7b1",
35+
"jinja2": "opentelemetry-ext-jinja2>=0.7b1",
36+
"mysql": "opentelemetry-ext-mysql>=0.7b1",
37+
"psycopg2": "opentelemetry-ext-psycopg2>=0.7b1",
38+
"pymongo": "opentelemetry-ext-pymongo>=0.7b1",
39+
"pymysql": "opentelemetry-ext-pymysql>=0.7b1",
40+
"redis": "opentelemetry-ext-redis>=0.7b1",
41+
"sqlalchemy": "opentelemetry-ext-sqlalchemy>=0.7b1",
42+
"wsgi": "opentelemetry-ext-wsgi>=0.7b1",
4243
}
4344

4445
# relevant instrumentors and tracers to uninstall and check for conflicts for target libraries
4546
libraries = {
4647
"dbapi": ("opentelemetry-ext-dbapi",),
48+
"django": ("opentelemetry-ext-django",),
4749
"flask": ("opentelemetry-ext-flask",),
4850
"grpc": ("opentelemetry-ext-grpc",),
4951
"requests": ("opentelemetry-ext-requests",),
52+
"jinja2": ("opentelemetry-ext-jinja2",),
5053
"mysql": ("opentelemetry-ext-mysql",),
5154
"psycopg2": ("opentelemetry-ext-psycopg2",),
5255
"pymongo": ("opentelemetry-ext-pymongo",),
@@ -69,25 +72,27 @@ def _install_package(library, instrumentation):
6972
Using --no-dependencies alone would leave potential for nonfunctional
7073
installations.
7174
"""
72-
pip_list = _pip_freeze()
75+
pip_list = _sys_pip_freeze()
7376
for package in libraries[library]:
7477
if "{}==".format(package).lower() in pip_list:
7578
logger.info(
7679
"Existing %s installation detected. Uninstalling.", package
7780
)
78-
_pip_uninstall(package)
79-
_pip_install(instrumentation)
81+
_sys_pip_uninstall(package)
82+
_sys_pip_install(instrumentation)
8083

8184

82-
def _pip_freeze():
85+
@syscall("pip freeze")
86+
def _sys_pip_freeze():
8387
return (
8488
subprocess.check_output([sys.executable, "-m", "pip", "freeze"])
8589
.decode()
8690
.lower()
8791
)
8892

8993

90-
def _pip_install(package):
94+
@syscall("pip install")
95+
def _sys_pip_install(package):
9196
# explicit upgrade strategy to override potential pip config
9297
subprocess.check_call(
9398
[
@@ -103,7 +108,8 @@ def _pip_install(package):
103108
)
104109

105110

106-
def _pip_uninstall(package):
111+
@syscall("pip uninstall")
112+
def _sys_pip_uninstall(package):
107113
subprocess.check_call(
108114
[sys.executable, "-m", "pip", "uninstall", "-y", package]
109115
)
@@ -150,6 +156,9 @@ def _run_install(packages):
150156

151157

152158
def run() -> None:
159+
action_install = "install"
160+
action_requirements = "requirements"
161+
153162
parser = argparse.ArgumentParser(
154163
description="""
155164
opentelemetry-bootstrap detects installed libraries and automatically
@@ -159,8 +168,8 @@ def run() -> None:
159168
parser.add_argument(
160169
"-a",
161170
"--action",
162-
choices=[_ACTION_INSTALL, _ACTION_REQUIREMENTS],
163-
default=_ACTION_REQUIREMENTS,
171+
choices=[action_install, action_requirements],
172+
default=action_requirements,
164173
help="""
165174
install - uses pip to install the new requirements using to the
166175
currently active site-package.
@@ -171,7 +180,7 @@ def run() -> None:
171180
args = parser.parse_args()
172181

173182
cmd = {
174-
_ACTION_INSTALL: _run_install,
175-
_ACTION_REQUIREMENTS: _run_requirements,
183+
action_install: _run_install,
184+
action_requirements: _run_requirements,
176185
}[args.action]
177186
cmd(_find_installed_libraries())
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from subprocess import SubprocessError
2+
3+
4+
def syscall(cmd_name=None):
5+
def wrapper(func):
6+
def inner(*args, **kwargs):
7+
try:
8+
return func(*args, **kwargs)
9+
except SubprocessError:
10+
msg = "Error calling system command"
11+
if cmd_name:
12+
msg += ': {}'.format(cmd_name)
13+
raise RuntimeError(msg)
14+
return inner
15+
return wrapper

0 commit comments

Comments
 (0)