mirror of
https://github.com/python/cpython.git
synced 2026-06-28 11:50:50 +00:00
[3.15] gh-151929: Get boot ID, machine ID and uptime in test.pythoninfo (GH-152127) (#152134)
gh-151929: Get boot ID, machine ID and uptime in test.pythoninfo (GH-152127)
(cherry picked from commit 3db3bba4d1)
GHA: Run test.pythoninfo on the "Cross build Linux" job.
Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
parent
ab8434a3dc
commit
7d5e2dd398
2 changed files with 59 additions and 8 deletions
3
.github/workflows/build.yml
vendored
3
.github/workflows/build.yml
vendored
|
|
@ -648,6 +648,9 @@ jobs:
|
|||
run: ./configure --prefix="$BUILD_DIR/cross-python" --with-build-python="$BUILD_DIR/host-python/bin/python3"
|
||||
- name: Install cross Python
|
||||
run: make -j8 install
|
||||
- name: Display build info
|
||||
run: |
|
||||
"$BUILD_DIR/cross-python/bin/python3" -m test.pythoninfo
|
||||
- name: Run test subset with host build
|
||||
run: |
|
||||
"$BUILD_DIR/cross-python/bin/python3" -m test test_sysconfig test_site test_embed
|
||||
|
|
|
|||
|
|
@ -16,6 +16,15 @@ def normalize_text(text):
|
|||
return text.strip()
|
||||
|
||||
|
||||
def read_first_line(filename):
|
||||
# Get the first line of a text file and strip trailing spaces
|
||||
try:
|
||||
with open(filename, encoding="utf-8") as fp:
|
||||
return fp.readline().rstrip()
|
||||
except OSError:
|
||||
return ''
|
||||
|
||||
|
||||
class PythonInfo:
|
||||
def __init__(self):
|
||||
self.info = {}
|
||||
|
|
@ -1015,14 +1024,9 @@ def collect_fips(info_add):
|
|||
if _hashlib is not None:
|
||||
call_func(info_add, 'fips.openssl_fips_mode', _hashlib, 'get_fips_mode')
|
||||
|
||||
try:
|
||||
with open("/proc/sys/crypto/fips_enabled", encoding="utf-8") as fp:
|
||||
line = fp.readline().rstrip()
|
||||
|
||||
if line:
|
||||
info_add('fips.linux_crypto_fips_enabled', line)
|
||||
except OSError:
|
||||
pass
|
||||
fips_enabled = read_first_line("/proc/sys/crypto/fips_enabled")
|
||||
if fips_enabled:
|
||||
info_add('fips.linux_crypto_fips_enabled', fips_enabled)
|
||||
|
||||
|
||||
def collect_tempfile(info_add):
|
||||
|
|
@ -1040,6 +1044,49 @@ def collect_libregrtest_utils(info_add):
|
|||
info_add('libregrtests.build_info', ' '.join(utils.get_build_info()))
|
||||
|
||||
|
||||
def linux_get_uptime():
|
||||
# Use CLOCK_BOOTTIME if available
|
||||
import time
|
||||
try:
|
||||
return time.clock_gettime(time.CLOCK_BOOTTIME)
|
||||
except (AttributeError, OSError):
|
||||
pass
|
||||
|
||||
# Otherwise, parse the first member of /proc/uptime
|
||||
uptime = read_first_line("/proc/uptime")
|
||||
if not uptime:
|
||||
return
|
||||
try:
|
||||
parts = uptime.split()
|
||||
if not parts:
|
||||
return
|
||||
return float(parts[0])
|
||||
except ValueError:
|
||||
return
|
||||
|
||||
|
||||
def collect_linux(info_add):
|
||||
boot_id = read_first_line("/proc/sys/kernel/random/boot_id")
|
||||
if boot_id:
|
||||
info_add('linux.boot_id', boot_id)
|
||||
|
||||
# https://www.freedesktop.org/software/systemd/man/latest/machine-id.html
|
||||
machine_id = read_first_line("/etc/machine-id")
|
||||
if machine_id:
|
||||
info_add('linux.machine_id', machine_id)
|
||||
|
||||
uptime = linux_get_uptime()
|
||||
if uptime is not None:
|
||||
# truncate microseconds
|
||||
uptime = int(uptime)
|
||||
try:
|
||||
import datetime
|
||||
uptime = str(datetime.timedelta(seconds=uptime))
|
||||
except ImportError:
|
||||
uptime = f'{uptime} sec'
|
||||
info_add('linux.uptime', uptime)
|
||||
|
||||
|
||||
def collect_info(info):
|
||||
error = False
|
||||
info_add = info.add
|
||||
|
|
@ -1081,6 +1128,7 @@ def collect_info(info):
|
|||
collect_zlib,
|
||||
collect_zstd,
|
||||
collect_libregrtest_utils,
|
||||
collect_linux,
|
||||
|
||||
# Collecting from tests should be last as they have side effects.
|
||||
collect_test_socket,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue