Skip to content

Commit

Permalink
Add error handling to opentelemetry-bootstrap -a (open-telemetry#2517)
Browse files Browse the repository at this point in the history
* Revert "Refactor bootstrap generation (open-telemetry#2101)"

This reverts commit 1ee7261.

* Add error handling to opentelemetry-bootstrap -a

Fixes open-telemetry#2516

---------

Co-authored-by: Tammy Baylis <[email protected]>
  • Loading branch information
2 people authored and shadchin committed May 29, 2024
1 parent 5e6daf3 commit e3939de
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,14 @@

import argparse
import logging
import subprocess
import sys
from subprocess import (
PIPE,
CalledProcessError,
Popen,
SubprocessError,
check_call,
)

import pkg_resources

Expand All @@ -34,7 +40,7 @@ def wrapper(package=None):
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)}"'
Expand All @@ -48,18 +54,21 @@ def wrapper(package=None):
@_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():
Expand All @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
"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",
Expand Down Expand Up @@ -187,6 +191,7 @@
"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",
]
46 changes: 17 additions & 29 deletions scripts/otel_packaging.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
],
Expand Down

0 comments on commit e3939de

Please sign in to comment.