Merge remote-tracking branch 'upstream/dev' into dev
This commit is contained in:
commit
a42d5e06f4
1 changed files with 48 additions and 8 deletions
|
|
@ -172,7 +172,7 @@ class State():
|
||||||
self.panes.pop(key)
|
self.panes.pop(key)
|
||||||
|
|
||||||
def disk_safety_checks(self, prep=False, wait_for_self_tests=True):
|
def disk_safety_checks(self, prep=False, wait_for_self_tests=True):
|
||||||
# pylint: disable=too-many-branches
|
# pylint: disable=too-many-branches,too-many-statements
|
||||||
"""Run disk safety checks."""
|
"""Run disk safety checks."""
|
||||||
self_tests_in_progress = False
|
self_tests_in_progress = False
|
||||||
for disk in self.disks:
|
for disk in self.disks:
|
||||||
|
|
@ -190,6 +190,13 @@ class State():
|
||||||
if 'Disk Attributes' in disk.tests:
|
if 'Disk Attributes' in disk.tests:
|
||||||
disk.tests['Disk Attributes'].failed = True
|
disk.tests['Disk Attributes'].failed = True
|
||||||
disk.tests['Disk Attributes'].set_status('Failed')
|
disk.tests['Disk Attributes'].set_status('Failed')
|
||||||
|
if not prep:
|
||||||
|
# Mid-diag failure detected
|
||||||
|
LOG.warning('Critical hardware error detected during diagnostics')
|
||||||
|
disk.add_note(
|
||||||
|
'Critical hardware error detected during diagnostics',
|
||||||
|
'YELLOW',
|
||||||
|
)
|
||||||
except hw_obj.SMARTSelfTestInProgressError as err:
|
except hw_obj.SMARTSelfTestInProgressError as err:
|
||||||
if prep:
|
if prep:
|
||||||
std.print_warning(f'SMART self-test(s) in progress for {disk.path}')
|
std.print_warning(f'SMART self-test(s) in progress for {disk.path}')
|
||||||
|
|
@ -212,15 +219,32 @@ class State():
|
||||||
std.color_string('Please manually review SMART data', 'YELLOW'),
|
std.color_string('Please manually review SMART data', 'YELLOW'),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# No blocking errors encountered, check for minor attribute failures
|
if (
|
||||||
if ('Disk Attributes' in disk.tests
|
'Disk Attributes' in disk.tests
|
||||||
and not disk.tests['Disk Attributes'].failed
|
and not disk.tests['Disk Attributes'].failed
|
||||||
and not disk.check_attributes(only_blocking=False)):
|
and not disk.check_attributes(only_blocking=False)
|
||||||
# Mid-diag failure detected
|
):
|
||||||
LOG.warning('Disk attributes failure detected during diagnostics')
|
# No blocking errors encountered, but found minor attribute failures
|
||||||
|
if not prep:
|
||||||
|
# Mid-diag failure detected
|
||||||
|
LOG.warning('Attribute(s) failure detected during diagnostics')
|
||||||
|
disk.add_note(
|
||||||
|
'Attribute(s) failure detected during diagnostics',
|
||||||
|
'YELLOW',
|
||||||
|
)
|
||||||
disk.tests['Disk Attributes'].failed = True
|
disk.tests['Disk Attributes'].failed = True
|
||||||
disk.tests['Disk Attributes'].set_status('Failed')
|
disk.tests['Disk Attributes'].set_status('Failed')
|
||||||
|
|
||||||
|
# Check Surface Scan
|
||||||
|
if (
|
||||||
|
'Disk Surface Scan' in disk.tests
|
||||||
|
and disk.tests['Disk Surface Scan'].failed
|
||||||
|
and 'Disk I/O Benchmark' in disk.tests
|
||||||
|
):
|
||||||
|
# Disable I/O Benchmark test
|
||||||
|
disk.tests['Disk I/O Benchmark'].set_status('Skipped')
|
||||||
|
disk.tests['Disk I/O Benchmark'].disabled = True
|
||||||
|
|
||||||
# Disable tests if necessary
|
# Disable tests if necessary
|
||||||
if disable_tests:
|
if disable_tests:
|
||||||
disk.disable_disk_tests()
|
disk.disable_disk_tests()
|
||||||
|
|
@ -1072,7 +1096,7 @@ def disk_self_test(state, test_objects):
|
||||||
|
|
||||||
|
|
||||||
def disk_surface_scan(state, test_objects):
|
def disk_surface_scan(state, test_objects):
|
||||||
# pylint: disable=too-many-statements
|
# pylint: disable=too-many-branches,too-many-statements
|
||||||
"""Read-only disk surface scan using badblocks."""
|
"""Read-only disk surface scan using badblocks."""
|
||||||
LOG.info('Disk Surface Scan (badblocks)')
|
LOG.info('Disk Surface Scan (badblocks)')
|
||||||
aborted = False
|
aborted = False
|
||||||
|
|
@ -1138,13 +1162,29 @@ def disk_surface_scan(state, test_objects):
|
||||||
if not (test_obj.passed or test_obj.failed):
|
if not (test_obj.passed or test_obj.failed):
|
||||||
test_obj.set_status('Unknown')
|
test_obj.set_status('Unknown')
|
||||||
|
|
||||||
# Run surface scans
|
# Update panes
|
||||||
state.update_top_pane(
|
state.update_top_pane(
|
||||||
f'Disk Surface Scan{"s" if len(test_objects) > 1 else ""}',
|
f'Disk Surface Scan{"s" if len(test_objects) > 1 else ""}',
|
||||||
)
|
)
|
||||||
std.print_info(
|
std.print_info(
|
||||||
f'Starting disk surface scan{"s" if len(test_objects) > 1 else ""}',
|
f'Starting disk surface scan{"s" if len(test_objects) > 1 else ""}',
|
||||||
)
|
)
|
||||||
|
for disk in state.disks:
|
||||||
|
failed_attributes = [
|
||||||
|
line for line in disk.generate_attribute_report() if 'failed' in line
|
||||||
|
]
|
||||||
|
if failed_attributes:
|
||||||
|
size_str = std.bytes_to_string(disk.details["size"], use_binary=False)
|
||||||
|
std.print_colored(
|
||||||
|
['[', disk.path.name, ' ', size_str, ']'],
|
||||||
|
[None, 'BLUE', None, 'CYAN', None],
|
||||||
|
sep='',
|
||||||
|
)
|
||||||
|
#std.print_colored([disk.path.name, disk.description], [None, 'BLUE'])
|
||||||
|
std.print_report(failed_attributes)
|
||||||
|
std.print_standard('')
|
||||||
|
|
||||||
|
# Run surface scans
|
||||||
for test in reversed(test_objects):
|
for test in reversed(test_objects):
|
||||||
if test.disabled:
|
if test.disabled:
|
||||||
# Skip
|
# Skip
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue