mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-02 19:47:17 +08:00
Add error handling to opentelemetry-bootstrap -a (#2517)
* Revert "Refactor bootstrap generation (#2101)" This reverts commit 1ee7261ea7117fbd22e2262e488402213a874125. * Add error handling to opentelemetry-bootstrap -a Fixes #2516 --------- Co-authored-by: Tammy Baylis <96076570+tammy-baylis-swi@users.noreply.github.com>
This commit is contained in:
@ -14,8 +14,14 @@
|
||||
|
||||
import argparse
|
||||
import logging
|
||||
import subprocess
|
||||
import sys
|
||||
from subprocess import (
|
||||
PIPE,
|
||||
CalledProcessError,
|
||||
Popen,
|
||||
SubprocessError,
|
||||
check_call,
|
||||
)
|
||||
|
||||
import pkg_resources
|
||||
|
||||
@ -34,7 +40,7 @@ def _syscall(func):
|
||||
if package:
|
||||
return func(package)
|
||||
return func()
|
||||
except subprocess.SubprocessError as exp:
|
||||
except SubprocessError as exp:
|
||||
cmd = getattr(exp, "cmd", None)
|
||||
if cmd:
|
||||
msg = f'Error calling system command "{" ".join(cmd)}"'
|
||||
@ -48,18 +54,21 @@ def _syscall(func):
|
||||
@_syscall
|
||||
def _sys_pip_install(package):
|
||||
# explicit upgrade strategy to override potential pip config
|
||||
subprocess.check_call(
|
||||
[
|
||||
sys.executable,
|
||||
"-m",
|
||||
"pip",
|
||||
"install",
|
||||
"-U",
|
||||
"--upgrade-strategy",
|
||||
"only-if-needed",
|
||||
package,
|
||||
]
|
||||
)
|
||||
try:
|
||||
check_call(
|
||||
[
|
||||
sys.executable,
|
||||
"-m",
|
||||
"pip",
|
||||
"install",
|
||||
"-U",
|
||||
"--upgrade-strategy",
|
||||
"only-if-needed",
|
||||
package,
|
||||
]
|
||||
)
|
||||
except CalledProcessError as error:
|
||||
print(error)
|
||||
|
||||
|
||||
def _pip_check():
|
||||
@ -70,8 +79,8 @@ def _pip_check():
|
||||
'opentelemetry-instrumentation-flask 1.0.1 has requirement opentelemetry-sdk<2.0,>=1.0, but you have opentelemetry-sdk 0.5.'
|
||||
To not be too restrictive, we'll only check for relevant packages.
|
||||
"""
|
||||
with subprocess.Popen(
|
||||
[sys.executable, "-m", "pip", "check"], stdout=subprocess.PIPE
|
||||
with Popen(
|
||||
[sys.executable, "-m", "pip", "check"], stdout=PIPE
|
||||
) as check_pipe:
|
||||
pip_check = check_pipe.communicate()[0].decode()
|
||||
pip_check_lower = pip_check.lower()
|
||||
|
@ -24,6 +24,10 @@ libraries = [
|
||||
"library": "aiohttp ~= 3.0",
|
||||
"instrumentation": "opentelemetry-instrumentation-aiohttp-client==0.46b0.dev",
|
||||
},
|
||||
{
|
||||
"library": "aiohttp ~= 3.0",
|
||||
"instrumentation": "opentelemetry-instrumentation-aiohttp-server==0.46b0.dev",
|
||||
},
|
||||
{
|
||||
"library": "aiopg >= 0.13.0, < 2.0.0",
|
||||
"instrumentation": "opentelemetry-instrumentation-aiopg==0.46b0.dev",
|
||||
@ -187,6 +191,7 @@ default_instrumentations = [
|
||||
"opentelemetry-instrumentation-dbapi==0.46b0.dev",
|
||||
"opentelemetry-instrumentation-logging==0.46b0.dev",
|
||||
"opentelemetry-instrumentation-sqlite3==0.46b0.dev",
|
||||
"opentelemetry-instrumentation-threading==0.46b0.dev",
|
||||
"opentelemetry-instrumentation-urllib==0.46b0.dev",
|
||||
"opentelemetry-instrumentation-wsgi==0.46b0.dev",
|
||||
]
|
||||
|
@ -12,55 +12,43 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from tomli import load
|
||||
from os import path, listdir
|
||||
from subprocess import check_output, CalledProcessError
|
||||
from requests import get
|
||||
import os
|
||||
import subprocess
|
||||
from subprocess import CalledProcessError
|
||||
|
||||
scripts_path = path.dirname(path.abspath(__file__))
|
||||
root_path = path.dirname(scripts_path)
|
||||
instrumentations_path = path.join(root_path, "instrumentation")
|
||||
import tomli
|
||||
|
||||
scripts_path = os.path.dirname(os.path.abspath(__file__))
|
||||
root_path = os.path.dirname(scripts_path)
|
||||
instrumentations_path = os.path.join(root_path, "instrumentation")
|
||||
|
||||
|
||||
def get_instrumentation_packages():
|
||||
for pkg in sorted(listdir(instrumentations_path)):
|
||||
pkg_path = path.join(instrumentations_path, pkg)
|
||||
if not path.isdir(pkg_path):
|
||||
for pkg in sorted(os.listdir(instrumentations_path)):
|
||||
pkg_path = os.path.join(instrumentations_path, pkg)
|
||||
if not os.path.isdir(pkg_path):
|
||||
continue
|
||||
|
||||
error = f"Could not get version for package {pkg}"
|
||||
|
||||
try:
|
||||
hatch_version = check_output(
|
||||
version = subprocess.check_output(
|
||||
"hatch version",
|
||||
shell=True,
|
||||
cwd=pkg_path,
|
||||
universal_newlines=True
|
||||
universal_newlines=True,
|
||||
)
|
||||
|
||||
except CalledProcessError as exc:
|
||||
print(f"Could not get hatch version from path {pkg_path}")
|
||||
print(exc.output)
|
||||
raise exc
|
||||
|
||||
try:
|
||||
response = get(f"https://pypi.org/pypi/{pkg}/json", timeout=10)
|
||||
|
||||
except Exception:
|
||||
print(error)
|
||||
continue
|
||||
|
||||
if response.status_code != 200:
|
||||
print(error)
|
||||
continue
|
||||
|
||||
pyproject_toml_path = path.join(pkg_path, "pyproject.toml")
|
||||
pyproject_toml_path = os.path.join(pkg_path, "pyproject.toml")
|
||||
|
||||
with open(pyproject_toml_path, "rb") as file:
|
||||
pyproject_toml = load(file)
|
||||
pyproject_toml = tomli.load(file)
|
||||
|
||||
instrumentation = {
|
||||
"name": pyproject_toml["project"]["name"],
|
||||
"version": hatch_version.strip(),
|
||||
"version": version.strip(),
|
||||
"instruments": pyproject_toml["project"]["optional-dependencies"][
|
||||
"instruments"
|
||||
],
|
||||
|
Reference in New Issue
Block a user