From b9d0527c524708bf38bbd6fc1e9458cc246df1fe Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Sat, 11 Jan 2020 21:23:49 -0700 Subject: [PATCH] Added osTicket checkbox sections --- scripts/wk/hw/diags.py | 66 +++++++++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/scripts/wk/hw/diags.py b/scripts/wk/hw/diags.py index 04da9158..f7ea7f7e 100644 --- a/scripts/wk/hw/diags.py +++ b/scripts/wk/hw/diags.py @@ -35,6 +35,7 @@ BADBLOCKS_REGEX = re.compile( r'^Pass completed, (\d+) bad blocks found. .(\d+)/(\d+)/(\d+) errors', re.IGNORECASE, ) +CPU_MAX_TEMP = 0 IO_GRAPH_WIDTH = 40 IO_ALT_TEST_SIZE_FACTOR = 0.01 IO_BLOCK_SIZE = 512 * 1024 @@ -732,6 +733,14 @@ def cpu_mprime_test(state, test_objects): test_cooling_obj.report.append(std.color_string('Temps', 'BLUE')) check_cooling_results(test_obj=test_cooling_obj, sensors=sensors) + # Post results to osTicket + if not state.ost.disabled: + CPU_MAX_TEMP = sensors.cpu_max_temp() # pylint: disable=invalid-name,redefined-outer-name,unused-variable + state.ost.post_response( + ost_build_report(state.cpu, 'CPU'), + color='Diags FAIL' if state.cpu.any_test_failed() else 'Diags', + ) + # Cleanup state.update_progress_pane() sensors.stop_background_monitor() @@ -1281,6 +1290,7 @@ def ost_convert_report(original_report, start_index): _hex = match.group('hex') _data = match.group('data') line = f'{_hex}/{_dec}: {_data}' + line = line.replace('failed', 'FAILED') # Skip empty lines if not line.strip(): @@ -1319,6 +1329,48 @@ def ost_post_disk_results(state): ) +def ost_update_checkboxes(state): + """Update osTicket checkboxes after confirmation.""" + cpu_tests_enabled = [data['Enabled'] for name, data in state.tests.items() + if name.startswith('CPU')] + disk_tests_enabled = [data['Enabled'] for name, data in state.tests.items() + if name.startswith('Disk')] + + # Bail if osTicket integration disabled + if state.ost.disabled: + return + + # Bail if values not confirmed + if not std.ask('Update osTicket checkboxes using the data above?'): + return + + # CPU max temp and pass/fail + if any(cpu_tests_enabled): + state.ost.set_cpu_max_temp(CPU_MAX_TEMP) + if state.cpu.any_test_failed(): + state.ost.set_flag_failed('CPU') + elif state.cpu.all_tests_passed(): + state.ost.set_flag_passed('CPU') + + # Disk pass/fail (only if all disk tests were selected) + if all(disk_tests_enabled) and len(disk_tests_enabled) == NUM_DISK_TESTS: + all_disks_passed = True + + # Check results for all disks + for disk in state.disks: + if disk.any_test_failed(): + all_disks_passed = False + state.ost.set_flag_failed('Disk') + break + if not disk.all_tests_passed(): + all_disks_passed = False + break + + # All disks passed + if all_disks_passed: + state.ost.set_flag_passed('Disk') + + def print_countdown(proc, seconds): """Print countdown to screen while proc is alive.""" for i in range(seconds): @@ -1346,7 +1398,6 @@ def print_countdown(proc, seconds): def run_diags(state, menu, quick_mode=False): - # pylint: disable=too-many-branches """Run selected diagnostics.""" aborted = False atexit.register(state.save_debug_reports) @@ -1397,16 +1448,6 @@ def run_diags(state, menu, quick_mode=False): aborted = True state.abort_testing() state.update_progress_pane() - - # Post CPU results - if name.startswith('CPU') and not state.ost.disabled: - state.ost.post_response( - ost_build_report(state.cpu, 'CPU'), - color='Diags FAIL' if state.cpu.any_test_failed() else 'Diags', - ) - - # Exit if aborted - if aborted: break # Run safety checks @@ -1426,6 +1467,9 @@ def run_diags(state, menu, quick_mode=False): # Show results show_results(state) + # Update checkboxes + ost_update_checkboxes(state) + # Done state.save_debug_reports() atexit.unregister(state.save_debug_reports)