Moved get_disks() from wk/hw/diags to wk/hw/obj
This commit is contained in:
parent
48a6b3200b
commit
3733da17fc
2 changed files with 70 additions and 77 deletions
|
|
@ -88,10 +88,6 @@ STATUS_COLORS = {
|
||||||
'Failed': 'RED',
|
'Failed': 'RED',
|
||||||
'TimedOut': 'RED',
|
'TimedOut': 'RED',
|
||||||
}
|
}
|
||||||
WK_LABEL_REGEX = re.compile(
|
|
||||||
fr'{cfg.main.KIT_NAME_SHORT}_(LINUX|UFD)',
|
|
||||||
re.IGNORECASE,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# Error Classes
|
# Error Classes
|
||||||
|
|
@ -263,7 +259,7 @@ class State():
|
||||||
|
|
||||||
# Add HW Objects
|
# Add HW Objects
|
||||||
self.cpu = hw_obj.CpuRam()
|
self.cpu = hw_obj.CpuRam()
|
||||||
self.disks = get_disks()
|
self.disks = hw_obj.get_disks(skip_kits=True)
|
||||||
|
|
||||||
# Add test objects
|
# Add test objects
|
||||||
for name, details in menu.options.items():
|
for name, details in menu.options.items():
|
||||||
|
|
@ -1078,78 +1074,6 @@ def disk_surface_scan(state, test_objects):
|
||||||
raise std.GenericAbort('Aborted')
|
raise std.GenericAbort('Aborted')
|
||||||
|
|
||||||
|
|
||||||
def get_disks():
|
|
||||||
"""Get disks using OS-specific methods, returns list."""
|
|
||||||
disks = []
|
|
||||||
if platform.system() == 'Darwin':
|
|
||||||
disks = get_disks_macos()
|
|
||||||
elif platform.system() == 'Linux':
|
|
||||||
disks = get_disks_linux()
|
|
||||||
|
|
||||||
# Done
|
|
||||||
return disks
|
|
||||||
|
|
||||||
|
|
||||||
def get_disks_linux():
|
|
||||||
"""Get disks via lsblk, returns list."""
|
|
||||||
cmd = ['lsblk', '--json', '--nodeps', '--paths']
|
|
||||||
disks = []
|
|
||||||
|
|
||||||
# Add valid disks
|
|
||||||
json_data = exe.get_json_from_command(cmd)
|
|
||||||
for disk in json_data.get('blockdevices', []):
|
|
||||||
disk_obj = hw_obj.Disk(disk['name'])
|
|
||||||
skip = False
|
|
||||||
|
|
||||||
# Skip loopback devices, optical devices, etc
|
|
||||||
if disk_obj.details['type'] != 'disk':
|
|
||||||
skip = True
|
|
||||||
|
|
||||||
# Skip WK disks
|
|
||||||
for label in disk_obj.get_labels():
|
|
||||||
if WK_LABEL_REGEX.search(label):
|
|
||||||
skip = True
|
|
||||||
|
|
||||||
# Add disk
|
|
||||||
if not skip:
|
|
||||||
disks.append(disk_obj)
|
|
||||||
|
|
||||||
# Done
|
|
||||||
return disks
|
|
||||||
|
|
||||||
|
|
||||||
def get_disks_macos():
|
|
||||||
"""Get disks via diskutil, returns list."""
|
|
||||||
cmd = ['diskutil', 'list', '-plist', 'physical']
|
|
||||||
disks = []
|
|
||||||
|
|
||||||
# Get info from diskutil
|
|
||||||
proc = exe.run_program(cmd, encoding=None, errors=None)
|
|
||||||
try:
|
|
||||||
plist_data = plistlib.loads(proc.stdout)
|
|
||||||
except (TypeError, ValueError):
|
|
||||||
# Invalid / corrupt plist data? return empty list to avoid crash
|
|
||||||
LOG.error('Failed to get diskutil list')
|
|
||||||
return disks
|
|
||||||
|
|
||||||
# Add valid disks
|
|
||||||
for disk in plist_data['WholeDisks']:
|
|
||||||
disk_obj = hw_obj.Disk(f'/dev/{disk}')
|
|
||||||
skip = False
|
|
||||||
|
|
||||||
# Skip WK disks
|
|
||||||
for label in disk_obj.get_labels():
|
|
||||||
if WK_LABEL_REGEX.search(label):
|
|
||||||
skip = True
|
|
||||||
|
|
||||||
# Add disk
|
|
||||||
if not skip:
|
|
||||||
disks.append(disk_obj)
|
|
||||||
|
|
||||||
# Done
|
|
||||||
return disks
|
|
||||||
|
|
||||||
|
|
||||||
def keyboard_test():
|
def keyboard_test():
|
||||||
"""Test keyboard using xev."""
|
"""Test keyboard using xev."""
|
||||||
LOG.info('Keyboard Test (xev)')
|
LOG.info('Keyboard Test (xev)')
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ from wk.cfg.hw import (
|
||||||
KNOWN_RAM_VENDOR_IDS,
|
KNOWN_RAM_VENDOR_IDS,
|
||||||
REGEX_POWER_ON_TIME,
|
REGEX_POWER_ON_TIME,
|
||||||
)
|
)
|
||||||
|
from wk.cfg.main import KIT_NAME_SHORT
|
||||||
from wk.exe import get_json_from_command, run_program
|
from wk.exe import get_json_from_command, run_program
|
||||||
from wk.std import bytes_to_string, color_string, sleep, string_to_bytes
|
from wk.std import bytes_to_string, color_string, sleep, string_to_bytes
|
||||||
|
|
||||||
|
|
@ -29,6 +30,10 @@ NVME_WARNING_KEYS = (
|
||||||
'reliability_degraded',
|
'reliability_degraded',
|
||||||
'volatile_memory_backup_failed',
|
'volatile_memory_backup_failed',
|
||||||
)
|
)
|
||||||
|
WK_LABEL_REGEX = re.compile(
|
||||||
|
fr'{KIT_NAME_SHORT}_(LINUX|UFD)',
|
||||||
|
re.IGNORECASE,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Exception Classes
|
# Exception Classes
|
||||||
|
|
@ -626,6 +631,70 @@ def get_disk_serial_macos(path):
|
||||||
return smart_info.get('serial_number', 'Unknown Serial')
|
return smart_info.get('serial_number', 'Unknown Serial')
|
||||||
|
|
||||||
|
|
||||||
|
def get_disks(skip_kits=False):
|
||||||
|
"""Get disks using OS-specific methods, returns list."""
|
||||||
|
disks = []
|
||||||
|
if platform.system() == 'Darwin':
|
||||||
|
disks = get_disks_macos()
|
||||||
|
elif platform.system() == 'Linux':
|
||||||
|
disks = get_disks_linux()
|
||||||
|
|
||||||
|
# Skip WK disks
|
||||||
|
if skip_kits:
|
||||||
|
disks = [
|
||||||
|
disk_obj for disk_obj in disks
|
||||||
|
if not any(
|
||||||
|
[WK_LABEL_REGEX.search(label) for label in disk_obj.get_labels()]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
# Done
|
||||||
|
return disks
|
||||||
|
|
||||||
|
|
||||||
|
def get_disks_linux():
|
||||||
|
"""Get disks via lsblk, returns list."""
|
||||||
|
cmd = ['lsblk', '--json', '--nodeps', '--paths']
|
||||||
|
disks = []
|
||||||
|
|
||||||
|
# Add valid disks
|
||||||
|
json_data = get_json_from_command(cmd)
|
||||||
|
for disk in json_data.get('blockdevices', []):
|
||||||
|
disk_obj = Disk(disk['name'])
|
||||||
|
|
||||||
|
# Skip loopback devices, optical devices, etc
|
||||||
|
if disk_obj.details['type'] != 'disk':
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Add disk
|
||||||
|
disks.append(disk_obj)
|
||||||
|
|
||||||
|
# Done
|
||||||
|
return disks
|
||||||
|
|
||||||
|
|
||||||
|
def get_disks_macos():
|
||||||
|
"""Get disks via diskutil, returns list."""
|
||||||
|
cmd = ['diskutil', 'list', '-plist', 'physical']
|
||||||
|
disks = []
|
||||||
|
|
||||||
|
# Get info from diskutil
|
||||||
|
proc = exe.run_program(cmd, encoding=None, errors=None)
|
||||||
|
try:
|
||||||
|
plist_data = plistlib.loads(proc.stdout)
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
# Invalid / corrupt plist data? return empty list to avoid crash
|
||||||
|
LOG.error('Failed to get diskutil list')
|
||||||
|
return disks
|
||||||
|
|
||||||
|
# Add valid disks
|
||||||
|
for disk in plist_data['WholeDisks']:
|
||||||
|
disks.append(Disk(f'/dev/{disk}'))
|
||||||
|
|
||||||
|
# Done
|
||||||
|
return disks
|
||||||
|
|
||||||
|
|
||||||
def get_known_disk_attributes(model):
|
def get_known_disk_attributes(model):
|
||||||
"""Get known NVMe/SMART attributes (model specific), returns str."""
|
"""Get known NVMe/SMART attributes (model specific), returns str."""
|
||||||
known_attributes = KNOWN_DISK_ATTRIBUTES.copy()
|
known_attributes = KNOWN_DISK_ATTRIBUTES.copy()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue