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
This commit is contained in:
parent
8e05cb0e40
commit
c24554720f
2 changed files with 139 additions and 84 deletions
|
|
@ -255,7 +255,20 @@ def major_exception():
|
||||||
print_warning(SUPPORT_MESSAGE)
|
print_warning(SUPPORT_MESSAGE)
|
||||||
print(traceback.format_exc())
|
print(traceback.format_exc())
|
||||||
print_log(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...')
|
pause('Press Enter to exit...')
|
||||||
exit_script(1)
|
exit_script(1)
|
||||||
|
|
||||||
|
|
@ -515,6 +528,42 @@ def try_and_print(message='Trying...',
|
||||||
else:
|
else:
|
||||||
return {'CS': not bool(err), 'Error': err, 'Out': out}
|
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):
|
def upload_data(path, file):
|
||||||
"""Add CLIENT_INFO_SERVER to authorized connections and upload file."""
|
"""Add CLIENT_INFO_SERVER to authorized connections and upload file."""
|
||||||
if not ENABLED_UPLOAD_DATA:
|
if not ENABLED_UPLOAD_DATA:
|
||||||
|
|
|
||||||
|
|
@ -1,83 +1,89 @@
|
||||||
# Wizard Kit: Settings - Main / Branding
|
# Wizard Kit: Settings - Main / Branding
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
ENABLED_UPLOAD_DATA = False
|
ENABLED_UPLOAD_DATA = False
|
||||||
|
|
||||||
# STATIC VARIABLES (also used by BASH and BATCH files)
|
# STATIC VARIABLES (also used by BASH and BATCH files)
|
||||||
## NOTE: There are no spaces around the = for easier parsing in BASH and BATCH
|
## NOTE: There are no spaces around the = for easier parsing in BASH and BATCH
|
||||||
# Main Kit
|
# Main Kit
|
||||||
ARCHIVE_PASSWORD='Abracadabra'
|
ARCHIVE_PASSWORD='Abracadabra'
|
||||||
KIT_NAME_FULL='Wizard Kit'
|
KIT_NAME_FULL='Wizard Kit'
|
||||||
KIT_NAME_SHORT='WK'
|
KIT_NAME_SHORT='WK'
|
||||||
SUPPORT_MESSAGE='Please let 2Shirt know by opening an issue on GitHub'
|
SUPPORT_MESSAGE='Please let 2Shirt know by opening an issue on GitHub'
|
||||||
# Live Linux
|
# Live Linux
|
||||||
DIAG_SHARE='/srv/ClientInfo'
|
DIAG_SHARE='/srv/ClientInfo'
|
||||||
DIAG_USER='wkdiag'
|
DIAG_USER='wkdiag'
|
||||||
MPRIME_LIMIT='7' # of minutes to run Prime95 during hw-diags
|
MPRIME_LIMIT='7' # of minutes to run Prime95 during hw-diags
|
||||||
ROOT_PASSWORD='Abracadabra'
|
ROOT_PASSWORD='Abracadabra'
|
||||||
SKIP_UPLOAD='False'
|
SKIP_UPLOAD='False'
|
||||||
TECH_PASSWORD='Abracadabra'
|
TECH_PASSWORD='Abracadabra'
|
||||||
# Server IP addresses
|
# Server IP addresses
|
||||||
DIAG_SERVER='10.0.0.10'
|
DIAG_SERVER='10.0.0.10'
|
||||||
OFFICE_SERVER_IP='10.0.0.10'
|
OFFICE_SERVER_IP='10.0.0.10'
|
||||||
QUICKBOOKS_SERVER_IP='10.0.0.10'
|
QUICKBOOKS_SERVER_IP='10.0.0.10'
|
||||||
# Time Zones
|
# Time Zones
|
||||||
LINUX_TIME_ZONE='America/Los_Angeles' # See 'timedatectl list-timezones' for valid values
|
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
|
WINDOWS_TIME_ZONE='Pacific Standard Time' # See 'tzutil /l' for valid values
|
||||||
# WiFi
|
# WiFi
|
||||||
WIFI_SSID='SomeWifi'
|
WIFI_SSID='SomeWifi'
|
||||||
WIFI_PASSWORD='Abracadabra'
|
WIFI_PASSWORD='Abracadabra'
|
||||||
|
|
||||||
# SERVER VARIABLES
|
# SERVER VARIABLES
|
||||||
## NOTE: Windows can only use one user per server. This means that if
|
## 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
|
## one server serves multiple shares then you have to use the same
|
||||||
## user/password for all of those shares.
|
## user/password for all of those shares.
|
||||||
BACKUP_SERVERS = [
|
BACKUP_SERVERS = [
|
||||||
{ 'IP': '10.0.0.10',
|
{ 'IP': '10.0.0.10',
|
||||||
'Name': 'ServerOne',
|
'Name': 'ServerOne',
|
||||||
'Mounted': False,
|
'Mounted': False,
|
||||||
'Share': 'Backups',
|
'Share': 'Backups',
|
||||||
'User': 'restore',
|
'User': 'restore',
|
||||||
'Pass': 'Abracadabra',
|
'Pass': 'Abracadabra',
|
||||||
},
|
},
|
||||||
{ 'IP': '10.0.0.11',
|
{ 'IP': '10.0.0.11',
|
||||||
'Name': 'ServerTwo',
|
'Name': 'ServerTwo',
|
||||||
'Mounted': False,
|
'Mounted': False,
|
||||||
'Share': 'Backups',
|
'Share': 'Backups',
|
||||||
'User': 'restore',
|
'User': 'restore',
|
||||||
'Pass': 'Abracadabra',
|
'Pass': 'Abracadabra',
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
CLIENT_INFO_SERVER = {
|
CLIENT_INFO_SERVER = {
|
||||||
'IP': '10.0.0.10',
|
'IP': '10.0.0.10',
|
||||||
'RegEntry': r'0x10001,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
|
'RegEntry': r'0x10001,0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
|
||||||
'Share': '/srv/ClientInfo',
|
'Share': '/srv/ClientInfo',
|
||||||
'User': 'upload',
|
'User': 'upload',
|
||||||
}
|
}
|
||||||
OFFICE_SERVER = {
|
CRASH_SERVER = {
|
||||||
'IP': OFFICE_SERVER_IP,
|
'Name': 'CrashServer',
|
||||||
'Name': 'ServerOne',
|
'Url': '',
|
||||||
'Mounted': False,
|
'User': '',
|
||||||
'Share': 'Office',
|
'Pass': '',
|
||||||
'User': 'restore',
|
}
|
||||||
'Pass': 'Abracadabra',
|
OFFICE_SERVER = {
|
||||||
}
|
'IP': OFFICE_SERVER_IP,
|
||||||
QUICKBOOKS_SERVER = {
|
'Name': 'ServerOne',
|
||||||
'IP': QUICKBOOKS_SERVER_IP,
|
'Mounted': False,
|
||||||
'Name': 'ServerOne',
|
'Share': 'Office',
|
||||||
'Mounted': False,
|
'User': 'restore',
|
||||||
'Share': 'QuickBooks',
|
'Pass': 'Abracadabra',
|
||||||
'User': 'restore',
|
}
|
||||||
'Pass': 'Abracadabra',
|
QUICKBOOKS_SERVER = {
|
||||||
}
|
'IP': QUICKBOOKS_SERVER_IP,
|
||||||
WINDOWS_SERVER = {
|
'Name': 'ServerOne',
|
||||||
'IP': '10.0.0.10',
|
'Mounted': False,
|
||||||
'Name': 'ServerOne',
|
'Share': 'QuickBooks',
|
||||||
'Mounted': False,
|
'User': 'restore',
|
||||||
'Share': 'Windows',
|
'Pass': 'Abracadabra',
|
||||||
'User': 'restore',
|
}
|
||||||
'Pass': 'Abracadabra',
|
WINDOWS_SERVER = {
|
||||||
}
|
'IP': '10.0.0.10',
|
||||||
|
'Name': 'ServerOne',
|
||||||
if __name__ == '__main__':
|
'Mounted': False,
|
||||||
print("This file is not meant to be called directly.")
|
'Share': 'Windows',
|
||||||
|
'User': 'restore',
|
||||||
|
'Pass': 'Abracadabra',
|
||||||
|
}
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue