Selecting and running (dummy) tests now working
This commit is contained in:
parent
d4ca575426
commit
aa5b5cd9b7
1 changed files with 82 additions and 13 deletions
|
|
@ -139,7 +139,7 @@ class State():
|
||||||
self.fix_tmux_layout(forced=False)
|
self.fix_tmux_layout(forced=False)
|
||||||
std.sleep(1)
|
std.sleep(1)
|
||||||
|
|
||||||
def init_diags(self):
|
def init_diags(self, menu):
|
||||||
"""Initialize diagnostic pass."""
|
"""Initialize diagnostic pass."""
|
||||||
# Reset objects
|
# Reset objects
|
||||||
self.disks.clear()
|
self.disks.clear()
|
||||||
|
|
@ -160,12 +160,32 @@ class State():
|
||||||
)
|
)
|
||||||
std.print_info('Starting Hardware Diagnostics')
|
std.print_info('Starting Hardware Diagnostics')
|
||||||
|
|
||||||
# Add CPU
|
# Add HW Objects
|
||||||
self.cpu = hw_obj.CpuRam()
|
self.cpu = hw_obj.CpuRam()
|
||||||
|
|
||||||
# Add disks
|
|
||||||
self.disks = get_disks()
|
self.disks = get_disks()
|
||||||
|
|
||||||
|
# Add test objects
|
||||||
|
for name, details in menu.options.items():
|
||||||
|
self.tests[name]['Enabled'] = details['Selected']
|
||||||
|
if not details['Selected']:
|
||||||
|
continue
|
||||||
|
if 'CPU' in name:
|
||||||
|
test_obj = hw_obj.Test(dev=self.cpu, label=name)
|
||||||
|
self.cpu.tests[name] = test_obj
|
||||||
|
self.tests[name]['Objects'].append(test_obj)
|
||||||
|
elif 'Disk' in name:
|
||||||
|
for disk in self.disks:
|
||||||
|
test_obj = hw_obj.Test(dev=disk, label=disk.path.name)
|
||||||
|
disk.tests[name] = test_obj
|
||||||
|
self.tests[name]['Objects'].append(test_obj)
|
||||||
|
|
||||||
|
# No disks detected?
|
||||||
|
if not self.tests[name]['Objects']:
|
||||||
|
test_obj = hw_obj.Test(dev=None, label='')
|
||||||
|
test_obj.set_status('N/A')
|
||||||
|
test_obj.disabled = True
|
||||||
|
self.tests[name]['Objects'].append(test_obj)
|
||||||
|
|
||||||
def init_tmux(self):
|
def init_tmux(self):
|
||||||
"""Initialize tmux layout."""
|
"""Initialize tmux layout."""
|
||||||
tmux.kill_all_panes()
|
tmux.kill_all_panes()
|
||||||
|
|
@ -264,39 +284,44 @@ def build_menu(cli_mode=False, quick_mode=False):
|
||||||
return menu
|
return menu
|
||||||
|
|
||||||
|
|
||||||
def cpu_mprime_test():
|
def cpu_mprime_test(state, test_objects):
|
||||||
"""CPU & cooling check using Prime95."""
|
"""CPU & cooling check using Prime95."""
|
||||||
LOG.info('CPU Test (Prime95)')
|
LOG.info('CPU Test (Prime95)')
|
||||||
#TODO: p95
|
#TODO: p95
|
||||||
std.print_warning('TODO: p95')
|
std.print_warning('TODO: p95')
|
||||||
|
std.pause()
|
||||||
|
|
||||||
|
|
||||||
def disk_attribute_check():
|
def disk_attribute_check(state, test_objects):
|
||||||
"""Disk attribute check."""
|
"""Disk attribute check."""
|
||||||
LOG.info('Disk Attribute Check')
|
LOG.info('Disk Attribute Check')
|
||||||
#TODO: at
|
#TODO: at
|
||||||
std.print_warning('TODO: at')
|
std.print_warning('TODO: at')
|
||||||
|
std.pause()
|
||||||
|
|
||||||
|
|
||||||
def disk_io_benchmark():
|
def disk_io_benchmark(state, test_objects):
|
||||||
"""Disk I/O benchmark using dd."""
|
"""Disk I/O benchmark using dd."""
|
||||||
LOG.info('Disk I/O Benchmark (dd)')
|
LOG.info('Disk I/O Benchmark (dd)')
|
||||||
#TODO: io
|
#TODO: io
|
||||||
std.print_warning('TODO: io')
|
std.print_warning('TODO: io')
|
||||||
|
std.pause()
|
||||||
|
|
||||||
|
|
||||||
def disk_self_test():
|
def disk_self_test(state, test_objects):
|
||||||
"""Disk self-test if available."""
|
"""Disk self-test if available."""
|
||||||
LOG.info('Disk Self-Test')
|
LOG.info('Disk Self-Test')
|
||||||
#TODO: st
|
#TODO: st
|
||||||
std.print_warning('TODO: st')
|
std.print_warning('TODO: st')
|
||||||
|
std.pause()
|
||||||
|
|
||||||
|
|
||||||
def disk_surface_scan():
|
def disk_surface_scan(state, test_objects):
|
||||||
"""Disk surface scan using badblocks."""
|
"""Disk surface scan using badblocks."""
|
||||||
LOG.info('Disk Surface Scan (badblocks)')
|
LOG.info('Disk Surface Scan (badblocks)')
|
||||||
#TODO: bb
|
#TODO: bb
|
||||||
std.print_warning('TODO: bb')
|
std.print_warning('TODO: bb')
|
||||||
|
std.pause()
|
||||||
|
|
||||||
|
|
||||||
def get_disks():
|
def get_disks():
|
||||||
|
|
@ -394,6 +419,12 @@ def main():
|
||||||
menu = build_menu(cli_mode=args['--cli'], quick_mode=args['--quick'])
|
menu = build_menu(cli_mode=args['--cli'], quick_mode=args['--quick'])
|
||||||
state = State()
|
state = State()
|
||||||
|
|
||||||
|
# Quick Mode
|
||||||
|
if args['--quick']:
|
||||||
|
std.clear_screen()
|
||||||
|
run_diags(state, menu, quick_mode=True)
|
||||||
|
return
|
||||||
|
|
||||||
# Show menu
|
# Show menu
|
||||||
while True:
|
while True:
|
||||||
action = None
|
action = None
|
||||||
|
|
@ -436,9 +467,7 @@ def main():
|
||||||
|
|
||||||
# Start diagnostics
|
# Start diagnostics
|
||||||
if 'Start' in selection:
|
if 'Start' in selection:
|
||||||
#TODO
|
run_diags(state, menu, quick_mode=False)
|
||||||
#run_diags()
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Reset top pane
|
# Reset top pane
|
||||||
state.update_top_pane('Main Menu')
|
state.update_top_pane('Main Menu')
|
||||||
|
|
@ -474,8 +503,48 @@ def network_test():
|
||||||
std.pause('Press Enter to return to main menu...')
|
std.pause('Press Enter to return to main menu...')
|
||||||
|
|
||||||
|
|
||||||
def run_diags(state):
|
def run_diags(state, menu, quick_mode=False):
|
||||||
"""Run selected diagnostics."""
|
"""Run selected diagnostics."""
|
||||||
|
aborted = False
|
||||||
|
state.init_diags(menu)
|
||||||
|
|
||||||
|
# Just return if no tests were selected
|
||||||
|
if not any([details['Enabled'] for details in state.tests.values()]):
|
||||||
|
std.print_warning('No tests selected?')
|
||||||
|
std.pause()
|
||||||
|
return
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
for details in state.tests.values():
|
||||||
|
if not details['Enabled']:
|
||||||
|
# Skip disabled tests
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Run test(s)
|
||||||
|
function = details['Function']
|
||||||
|
try:
|
||||||
|
function(state, details['Objects'])
|
||||||
|
except std.GenericAbort:
|
||||||
|
aborted = True
|
||||||
|
# Restart tmux
|
||||||
|
state.init_tmux()
|
||||||
|
break
|
||||||
|
|
||||||
|
# Handle aborts
|
||||||
|
if aborted:
|
||||||
|
for details in state.tests.values():
|
||||||
|
for test_obj in details['Objects']:
|
||||||
|
if test_obj.status == 'Pending':
|
||||||
|
test_obj.set_status('Aborted')
|
||||||
|
|
||||||
|
# Show results
|
||||||
|
#TODO: Show results
|
||||||
|
|
||||||
|
# Done
|
||||||
|
if quick_mode:
|
||||||
|
std.pause('Press Enter to exit...')
|
||||||
|
else:
|
||||||
|
std.pause('Press Enter to return to main menu...')
|
||||||
|
|
||||||
|
|
||||||
def screensaver(name):
|
def screensaver(name):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue