From c24554720fbb484b31af6f2027b426e75228d5f2 Mon Sep 17 00:00:00 2001 From: 2Shirt <1923621+2Shirt@users.noreply.github.com> Date: Sun, 28 Jan 2018 17:48:42 -0700 Subject: [PATCH] Add option to upload crash details * Disabled by default, enabled via main.py ENABLE_UPLOAD_DATA * Upload destination set via main.py CRASH_SERVER variable --- .bin/Scripts/functions/common.py | 51 ++++++++- .bin/Scripts/settings/main.py | 172 ++++++++++++++++--------------- 2 files changed, 139 insertions(+), 84 deletions(-) diff --git a/.bin/Scripts/functions/common.py b/.bin/Scripts/functions/common.py index 214a7d05..f668306b 100644 --- a/.bin/Scripts/functions/common.py +++ b/.bin/Scripts/functions/common.py @@ -255,7 +255,20 @@ def major_exception(): print_warning(SUPPORT_MESSAGE) print(traceback.format_exc()) print_log(traceback.format_exc()) - sleep(30) + try: + upload_crash_details() + except GenericAbort: + # User declined upload + print_warning('Upload: Aborted') + sleep(30) + except GenericError: + # No log file or uploading disabled + sleep(30) + except: + print_error('Upload: NS') + sleep(30) + else: + print_success('Upload: CS') pause('Press Enter to exit...') exit_script(1) @@ -515,6 +528,42 @@ def try_and_print(message='Trying...', else: return {'CS': not bool(err), 'Error': err, 'Out': out} +def upload_crash_details(): + if not ENABLED_UPLOAD_DATA: + raise GenericError + + import requests + if 'LogFile' in global_vars and global_vars['LogFile']: + if ask('Upload crash details to {}?'.format(CRASH_SERVER['Name'])): + with open(global_vars['LogFile']) as f: + data = '''{} +############################# +Runtime Details: + +sys.argv: {} + +global_vars: {}'''.format(f.read(), sys.argv, global_vars) + filename = global_vars.get('LogFile', 'Unknown') + filename = re.sub(r'.*(\\|/)', '', filename) + filename += '.txt' + url = '{}/Crash_{}__{}'.format( + CRASH_SERVER['Url'], + global_vars.get('Date-Time', 'Unknown Date-Time'), + filename) + r = requests.put(url, data=data, + headers = {'X-Requested-With': 'XMLHttpRequest'}, + auth = (CRASH_SERVER['User'], CRASH_SERVER['Pass'])) + # Raise exception if upload NS + if not r.ok: + raise Exception + else: + # User said no + raise GenericAbort + else: + # No LogFile defined (or invalid LogFile) + raise GenericError + + def upload_data(path, file): """Add CLIENT_INFO_SERVER to authorized connections and upload file.""" if not ENABLED_UPLOAD_DATA: diff --git a/.bin/Scripts/settings/main.py b/.bin/Scripts/settings/main.py index d48b0ba0..7da23dce 100644 --- a/.bin/Scripts/settings/main.py +++ b/.bin/Scripts/settings/main.py @@ -1,83 +1,89 @@ -# Wizard Kit: Settings - Main / Branding - -# Features -ENABLED_UPLOAD_DATA = False - -# STATIC VARIABLES (also used by BASH and BATCH files) -## NOTE: There are no spaces around the = for easier parsing in BASH and BATCH -# Main Kit -ARCHIVE_PASSWORD='Abracadabra' -KIT_NAME_FULL='Wizard Kit' -KIT_NAME_SHORT='WK' -SUPPORT_MESSAGE='Please let 2Shirt know by opening an issue on GitHub' -# Live Linux -DIAG_SHARE='/srv/ClientInfo' -DIAG_USER='wkdiag' -MPRIME_LIMIT='7' # of minutes to run Prime95 during hw-diags -ROOT_PASSWORD='Abracadabra' -SKIP_UPLOAD='False' -TECH_PASSWORD='Abracadabra' -# Server IP addresses -DIAG_SERVER='10.0.0.10' -OFFICE_SERVER_IP='10.0.0.10' -QUICKBOOKS_SERVER_IP='10.0.0.10' -# Time Zones -LINUX_TIME_ZONE='America/Los_Angeles' # See 'timedatectl list-timezones' for valid values -WINDOWS_TIME_ZONE='Pacific Standard Time' # See 'tzutil /l' for valid values -# WiFi -WIFI_SSID='SomeWifi' -WIFI_PASSWORD='Abracadabra' - -# SERVER VARIABLES -## NOTE: Windows can only use one user per server. This means that if -## one server serves multiple shares then you have to use the same -## user/password for all of those shares. -BACKUP_SERVERS = [ - { 'IP': '10.0.0.10', - 'Name': 'ServerOne', - 'Mounted': False, - 'Share': 'Backups', - 'User': 'restore', - 'Pass': 'Abracadabra', - }, - { 'IP': '10.0.0.11', - 'Name': 'ServerTwo', - 'Mounted': False, - 'Share': 'Backups', - 'User': 'restore', - 'Pass': 'Abracadabra', - }, -] -CLIENT_INFO_SERVER = { - 'IP': '10.0.0.10', - 'RegEntry': r'0x10001,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', - 'Share': '/srv/ClientInfo', - 'User': 'upload', -} -OFFICE_SERVER = { - 'IP': OFFICE_SERVER_IP, - 'Name': 'ServerOne', - 'Mounted': False, - 'Share': 'Office', - 'User': 'restore', - 'Pass': 'Abracadabra', -} -QUICKBOOKS_SERVER = { - 'IP': QUICKBOOKS_SERVER_IP, - 'Name': 'ServerOne', - 'Mounted': False, - 'Share': 'QuickBooks', - 'User': 'restore', - 'Pass': 'Abracadabra', -} -WINDOWS_SERVER = { - 'IP': '10.0.0.10', - 'Name': 'ServerOne', - 'Mounted': False, - 'Share': 'Windows', - 'User': 'restore', - 'Pass': 'Abracadabra', -} - -if __name__ == '__main__': - print("This file is not meant to be called directly.") +# Wizard Kit: Settings - Main / Branding + +# Features +ENABLED_UPLOAD_DATA = False + +# STATIC VARIABLES (also used by BASH and BATCH files) +## NOTE: There are no spaces around the = for easier parsing in BASH and BATCH +# Main Kit +ARCHIVE_PASSWORD='Abracadabra' +KIT_NAME_FULL='Wizard Kit' +KIT_NAME_SHORT='WK' +SUPPORT_MESSAGE='Please let 2Shirt know by opening an issue on GitHub' +# Live Linux +DIAG_SHARE='/srv/ClientInfo' +DIAG_USER='wkdiag' +MPRIME_LIMIT='7' # of minutes to run Prime95 during hw-diags +ROOT_PASSWORD='Abracadabra' +SKIP_UPLOAD='False' +TECH_PASSWORD='Abracadabra' +# Server IP addresses +DIAG_SERVER='10.0.0.10' +OFFICE_SERVER_IP='10.0.0.10' +QUICKBOOKS_SERVER_IP='10.0.0.10' +# Time Zones +LINUX_TIME_ZONE='America/Los_Angeles' # See 'timedatectl list-timezones' for valid values +WINDOWS_TIME_ZONE='Pacific Standard Time' # See 'tzutil /l' for valid values +# WiFi +WIFI_SSID='SomeWifi' +WIFI_PASSWORD='Abracadabra' + +# SERVER VARIABLES +## NOTE: Windows can only use one user per server. This means that if +## one server serves multiple shares then you have to use the same +## user/password for all of those shares. +BACKUP_SERVERS = [ + { 'IP': '10.0.0.10', + 'Name': 'ServerOne', + 'Mounted': False, + 'Share': 'Backups', + 'User': 'restore', + 'Pass': 'Abracadabra', + }, + { 'IP': '10.0.0.11', + 'Name': 'ServerTwo', + 'Mounted': False, + 'Share': 'Backups', + 'User': 'restore', + 'Pass': 'Abracadabra', + }, +] +CLIENT_INFO_SERVER = { + 'IP': '10.0.0.10', + 'RegEntry': r'0x10001,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + 'Share': '/srv/ClientInfo', + 'User': 'upload', +} +CRASH_SERVER = { + 'Name': 'CrashServer', + 'Url': '', + 'User': '', + 'Pass': '', +} +OFFICE_SERVER = { + 'IP': OFFICE_SERVER_IP, + 'Name': 'ServerOne', + 'Mounted': False, + 'Share': 'Office', + 'User': 'restore', + 'Pass': 'Abracadabra', +} +QUICKBOOKS_SERVER = { + 'IP': QUICKBOOKS_SERVER_IP, + 'Name': 'ServerOne', + 'Mounted': False, + 'Share': 'QuickBooks', + 'User': 'restore', + 'Pass': 'Abracadabra', +} +WINDOWS_SERVER = { + 'IP': '10.0.0.10', + 'Name': 'ServerOne', + 'Mounted': False, + 'Share': 'Windows', + 'User': 'restore', + 'Pass': 'Abracadabra', +} + +if __name__ == '__main__': + print("This file is not meant to be called directly.")