20
20
import sys
21
21
from logging import getLogger
22
22
23
- logger = getLogger ( __file__ )
23
+ from . decorators import syscall
24
24
25
- _ACTION_INSTALL = "install"
26
- _ACTION_REQUIREMENTS = "requirements"
25
+ logger = getLogger (__file__ )
27
26
28
27
29
28
# target library to desired instrumentor path/versioned package name
30
29
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" ,
42
43
}
43
44
44
45
# relevant instrumentors and tracers to uninstall and check for conflicts for target libraries
45
46
libraries = {
46
47
"dbapi" : ("opentelemetry-ext-dbapi" ,),
48
+ "django" : ("opentelemetry-ext-django" ,),
47
49
"flask" : ("opentelemetry-ext-flask" ,),
48
50
"grpc" : ("opentelemetry-ext-grpc" ,),
49
51
"requests" : ("opentelemetry-ext-requests" ,),
52
+ "jinja2" : ("opentelemetry-ext-jinja2" ,),
50
53
"mysql" : ("opentelemetry-ext-mysql" ,),
51
54
"psycopg2" : ("opentelemetry-ext-psycopg2" ,),
52
55
"pymongo" : ("opentelemetry-ext-pymongo" ,),
@@ -69,25 +72,27 @@ def _install_package(library, instrumentation):
69
72
Using --no-dependencies alone would leave potential for nonfunctional
70
73
installations.
71
74
"""
72
- pip_list = _pip_freeze ()
75
+ pip_list = _sys_pip_freeze ()
73
76
for package in libraries [library ]:
74
77
if "{}==" .format (package ).lower () in pip_list :
75
78
logger .info (
76
79
"Existing %s installation detected. Uninstalling." , package
77
80
)
78
- _pip_uninstall (package )
79
- _pip_install (instrumentation )
81
+ _sys_pip_uninstall (package )
82
+ _sys_pip_install (instrumentation )
80
83
81
84
82
- def _pip_freeze ():
85
+ @syscall ("pip freeze" )
86
+ def _sys_pip_freeze ():
83
87
return (
84
88
subprocess .check_output ([sys .executable , "-m" , "pip" , "freeze" ])
85
89
.decode ()
86
90
.lower ()
87
91
)
88
92
89
93
90
- def _pip_install (package ):
94
+ @syscall ("pip install" )
95
+ def _sys_pip_install (package ):
91
96
# explicit upgrade strategy to override potential pip config
92
97
subprocess .check_call (
93
98
[
@@ -103,7 +108,8 @@ def _pip_install(package):
103
108
)
104
109
105
110
106
- def _pip_uninstall (package ):
111
+ @syscall ("pip uninstall" )
112
+ def _sys_pip_uninstall (package ):
107
113
subprocess .check_call (
108
114
[sys .executable , "-m" , "pip" , "uninstall" , "-y" , package ]
109
115
)
@@ -150,6 +156,9 @@ def _run_install(packages):
150
156
151
157
152
158
def run () -> None :
159
+ action_install = "install"
160
+ action_requirements = "requirements"
161
+
153
162
parser = argparse .ArgumentParser (
154
163
description = """
155
164
opentelemetry-bootstrap detects installed libraries and automatically
@@ -159,8 +168,8 @@ def run() -> None:
159
168
parser .add_argument (
160
169
"-a" ,
161
170
"--action" ,
162
- choices = [_ACTION_INSTALL , _ACTION_REQUIREMENTS ],
163
- default = _ACTION_REQUIREMENTS ,
171
+ choices = [action_install , action_requirements ],
172
+ default = action_requirements ,
164
173
help = """
165
174
install - uses pip to install the new requirements using to the
166
175
currently active site-package.
@@ -171,7 +180,7 @@ def run() -> None:
171
180
args = parser .parse_args ()
172
181
173
182
cmd = {
174
- _ACTION_INSTALL : _run_install ,
175
- _ACTION_REQUIREMENTS : _run_requirements ,
183
+ action_install : _run_install ,
184
+ action_requirements : _run_requirements ,
176
185
}[args .action ]
177
186
cmd (_find_installed_libraries ())
0 commit comments