From 3f48b1094269f30c9fffafb472fa97df3e5617ef Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Thu, 25 Mar 2021 21:11:21 -0600 Subject: [PATCH 1/3] Apply "temp" fix for macOS HW-Diags --- scripts/wk/hw/obj.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/wk/hw/obj.py b/scripts/wk/hw/obj.py index a67d8e98..63f958eb 100644 --- a/scripts/wk/hw/obj.py +++ b/scripts/wk/hw/obj.py @@ -749,8 +749,9 @@ def get_disks_macos(): disks.append(Disk(f'/dev/{disk}')) # Remove virtual disks + # TODO: Test more to figure out why some drives are being marked 'Unknown' disks = [ - d for d in disks if d.details.get('VirtualOrPhysical') == 'Physical' + d for d in disks if d.details.get('VirtualOrPhysical') != 'Virtual' ] # Done From 9818d5196f747827d49e31869a2a108de7c6c2f0 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Thu, 25 Mar 2021 21:15:56 -0600 Subject: [PATCH 2/3] Export state objects as pickle files This should better ensure debugging an issue will have all the relevant info at the ready. --- scripts/wk/hw/ddrescue.py | 1 + scripts/wk/hw/diags.py | 1 + scripts/wk/std.py | 53 ++++++++++++++++++++++++++++----------- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/scripts/wk/hw/ddrescue.py b/scripts/wk/hw/ddrescue.py index 5d3d7e2e..496ac01f 100644 --- a/scripts/wk/hw/ddrescue.py +++ b/scripts/wk/hw/ddrescue.py @@ -958,6 +958,7 @@ class State(): debug_dir.mkdir() # State (self) + std.save_pickles({'state': self}, debug_dir) with open(f'{debug_dir}/state.report', 'a') as _f: _f.write('[Debug report]\n') _f.write('\n'.join(debug.generate_object_report(self))) diff --git a/scripts/wk/hw/diags.py b/scripts/wk/hw/diags.py index f36b5471..fbea7b98 100644 --- a/scripts/wk/hw/diags.py +++ b/scripts/wk/hw/diags.py @@ -331,6 +331,7 @@ class State(): debug_dir.mkdir() # State (self) + std.save_pickles({'state': self}, debug_dir) with open(f'{debug_dir}/state.report', 'a') as _f: _f.write('\n'.join(debug.generate_object_report(self))) diff --git a/scripts/wk/std.py b/scripts/wk/std.py index e30c3fd7..31555d05 100644 --- a/scripts/wk/std.py +++ b/scripts/wk/std.py @@ -2,11 +2,13 @@ # pylint: disable=too-many-lines # vim: sts=2 sw=2 ts=2 +import inspect import itertools import logging import lzma import os import pathlib +import pickle import platform import re import socket @@ -26,6 +28,7 @@ from wk.cfg.main import ( WIDTH, ) from wk.cfg.net import CRASH_SERVER +from wk.log import get_root_logger_path # STATIC VARIABLES @@ -863,23 +866,26 @@ def major_exception(): LOG.critical('Major exception encountered', exc_info=True) print_error('Major exception', log=False) print_warning(SUPPORT_MESSAGE) + if ENABLED_UPLOAD_DATA: + print_warning('Also, please run upload-logs to help debugging!') print(traceback.format_exc()) - # Build report - report = generate_debug_report() + # TODO: Decide to remove or reinstate following section + ## Build report + #report = generate_debug_report() - # Upload details - prompt = f'Upload details to {CRASH_SERVER.get("Name", "?")}?' - if ENABLED_UPLOAD_DATA and ask(prompt): - print('Uploading... ', end='', flush=True) - try: - upload_debug_report(report, reason='CRASH') - except Exception: #pylint: disable=broad-except - print_error('FAILED', log=False) - LOG.error('Upload failed', exc_info=True) - else: - print_success('SUCCESS', log=False) - LOG.info('Upload successful') + ## Upload details + #prompt = f'Upload details to {CRASH_SERVER.get("Name", "?")}?' + #if ENABLED_UPLOAD_DATA and ask(prompt): + # print('Uploading... ', end='', flush=True) + # try: + # upload_debug_report(report, reason='CRASH') + # except Exception: #pylint: disable=broad-except + # print_error('FAILED', log=False) + # LOG.error('Upload failed', exc_info=True) + # else: + # print_success('SUCCESS', log=False) + # LOG.info('Upload successful') # Done pause('Press Enter to exit... ') @@ -960,6 +966,25 @@ def print_warning(msg, log=True, **kwargs): LOG.warning(msg) +def save_pickles(obj_dict, out_path=None): + """Save dict of objects using pickle.""" + LOG.info('Saving pickles') + + # Set path + if not out_path: + out_path = pathlib.Path(f'{get_root_logger_path().parent}/debug') + + # Save pickles + try: + for name, obj in obj_dict.copy().items(): + if name.startswith('__') or inspect.ismodule(obj): + continue + with open(f'{out_path}/{name}.pickle', 'wb') as _f: + pickle.dump(obj, _f, protocol=pickle.HIGHEST_PROTOCOL) + except Exception: # pylint: disable=broad-except + LOG.error('Failed to save all the pickles', exc_info=True) + + def set_title(title): """Set window title.""" LOG.debug('title: %s', title) From ba5efedb1177c6f7597dab6d40361750beb388e7 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Thu, 25 Mar 2021 21:25:40 -0600 Subject: [PATCH 3/3] Remove pylint bad-whitepace references --- scripts/wk/cfg/ddrescue.py | 2 +- scripts/wk/cfg/hw.py | 2 +- scripts/wk/cfg/main.py | 1 - scripts/wk/cfg/net.py | 1 - scripts/wk/cfg/ufd.py | 1 - scripts/wk/graph.py | 1 - scripts/wk/std.py | 2 +- 7 files changed, 3 insertions(+), 7 deletions(-) diff --git a/scripts/wk/cfg/ddrescue.py b/scripts/wk/cfg/ddrescue.py index e218b345..15146c5f 100644 --- a/scripts/wk/cfg/ddrescue.py +++ b/scripts/wk/cfg/ddrescue.py @@ -1,5 +1,5 @@ """WizardKit: Config - ddrescue""" -# pylint: disable=bad-whitespace,line-too-long +# pylint: disable=line-too-long # vim: sts=2 sw=2 ts=2 from collections import OrderedDict diff --git a/scripts/wk/cfg/hw.py b/scripts/wk/cfg/hw.py index 26163047..456cb08c 100644 --- a/scripts/wk/cfg/hw.py +++ b/scripts/wk/cfg/hw.py @@ -1,5 +1,5 @@ """WizardKit: Config - Hardware""" -# pylint: disable=bad-whitespace,line-too-long +# pylint: disable=line-too-long # vim: sts=2 sw=2 ts=2 import re diff --git a/scripts/wk/cfg/main.py b/scripts/wk/cfg/main.py index 99a3b2a1..a2afda8a 100644 --- a/scripts/wk/cfg/main.py +++ b/scripts/wk/cfg/main.py @@ -2,7 +2,6 @@ NOTE: Non-standard formating is used for BASH/BATCH/PYTHON compatibility """ -# pylint: disable=bad-whitespace # vim: sts=2 sw=2 ts=2 diff --git a/scripts/wk/cfg/net.py b/scripts/wk/cfg/net.py index f530bb6e..7c517bfe 100644 --- a/scripts/wk/cfg/net.py +++ b/scripts/wk/cfg/net.py @@ -1,5 +1,4 @@ """WizardKit: Config - Net""" -# pylint: disable=bad-whitespace # vim: sts=2 sw=2 ts=2 diff --git a/scripts/wk/cfg/ufd.py b/scripts/wk/cfg/ufd.py index a22f0db7..d583b97a 100644 --- a/scripts/wk/cfg/ufd.py +++ b/scripts/wk/cfg/ufd.py @@ -1,5 +1,4 @@ """WizardKit: Config - UFD""" -# pylint: disable=bad-whitespace # vim: sts=2 sw=2 ts=2 from collections import OrderedDict diff --git a/scripts/wk/graph.py b/scripts/wk/graph.py index 1bcb9c27..885cfe8e 100644 --- a/scripts/wk/graph.py +++ b/scripts/wk/graph.py @@ -1,5 +1,4 @@ """WizardKit: Graph Functions""" -# pylint: disable=bad-whitespace # vim: sts=2 sw=2 ts=2 import logging diff --git a/scripts/wk/std.py b/scripts/wk/std.py index 31555d05..903e8cd4 100644 --- a/scripts/wk/std.py +++ b/scripts/wk/std.py @@ -880,7 +880,7 @@ def major_exception(): # print('Uploading... ', end='', flush=True) # try: # upload_debug_report(report, reason='CRASH') - # except Exception: #pylint: disable=broad-except + # except Exception: # pylint: disable=broad-except # print_error('FAILED', log=False) # LOG.error('Upload failed', exc_info=True) # else: