Better exception handling for MariaDB sections

This commit is contained in:
2Shirt 2018-12-26 19:31:07 -07:00
parent 7d7cf21263
commit ff715b7a10
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C

View file

@ -21,6 +21,7 @@ class osTicket():
def __init__(self, tests_cpu, tests_disk):
self.db_connection = None
self.db_cursor = None
self.disabled = False
self.errors = False
self.tests_cpu = tests_cpu
self.tests_disk = tests_disk
@ -35,6 +36,10 @@ class osTicket():
'{User}@{Host}'.format(**OSTICKET['SSH']),
]
# Bail if disabled
if self.disabled:
return
# Only open tunnel if one doesn't exist
if self.tunnel_proc is None or self.tunnel_proc.poll() is not None:
self.tunnel_proc = popen_program(cmd)
@ -49,13 +54,24 @@ class osTicket():
database=OSTICKET['Database']['Name'],
)
self.db_cursor = self.db_connection.cursor()
except Exception:
# TODO: Refine exception handling
except mariadb.errors.InterfaceError:
# SSH issue?, try again
pass
except mariadb.errors.Error:
# Bad creds or other SQL error, bail
break
except Exception:
# Unknown error
break
else:
# Connection established
break
# Disable if necessary
if self.db_cursor is None:
self.disabled = True
self.tunnel_proc.kill()
def convert_report(self, name, test):
"""Convert report into an osTicket friendly format, returns list."""
out_report = []
@ -129,13 +145,9 @@ class osTicket():
self.db_cursor.close()
self.db_connection.close()
except Exception:
# TODO: Fix exception handling
# Ignore errors since vars will be reset below
pass
# Reset errors
if reset_errors:
self.errors = False
# Reset vars
self.db_cursor = None
self.db_connection = None
@ -311,17 +323,12 @@ class osTicket():
sql_cmd = "SELECT name FROM `{Ticket}`".format(**OSTICKET['Tables'])
sql_cmd += " WHERE `ticket_id` = {}".format(ticket_id)
sql_cmd += ";"
# TODO: Is the ';' needed above? It wasn't in the prev version??
# Lookup name
# NOTE: If multiple entries are found it will return the last
try:
self.db_cursor.execute(sql_cmd)
for s in self.db_cursor:
name = s[0]
except Exception:
# TODO: Fix exception handling
self.errors = True
self.db_cursor.execute(sql_cmd)
for s in self.db_cursor:
name = s[0]
# Done
return name
@ -331,6 +338,10 @@ class osTicket():
ticket_number = None
self.connect()
# Bail if disabled
if self.disabled:
return None
# Main loop
while ticket_number is None:
print_standard(' ')
@ -347,7 +358,11 @@ class osTicket():
continue
# Valid ID entered, lookup name and verify
_name = self.get_ticket_name(_input)
try:
_name = self.get_ticket_name(_input)
except Exception:
# Ignore and return None below
break
if _name:
print_standard('You have selected ticket #{} {}'.format(
_input, _name))
@ -367,6 +382,10 @@ class osTicket():
"""Post a reply to a ticket in osTicket."""
self.connect()
# Bail if disabled
if self.disabled:
return
# Convert response to string
response = '\n'.join(response)
response = response.replace('`', '')
@ -385,8 +404,8 @@ class osTicket():
# Run SQL cmd
try:
self.db_cursor.execute(sql_cmd)
except Exception:
# TODO: Fix exception handling
except mariadb.errors.Error:
# Set self.errors to enable warning line on results screen
self.errors = True
# Done
@ -410,6 +429,10 @@ class osTicket():
"""Set flag in osTicket."""
self.connect()
# Bail if disabled
if self.disabled:
return
# Build SQL cmd
sql_cmd = "UPDATE `{Name}`.`{Ticket}`".format(
**OSTICKET['Database'], **OSTICKET['Tables'])
@ -421,8 +444,8 @@ class osTicket():
# Run SQL cmd
try:
self.db_cursor.execute(sql_cmd)
except Exception:
# TODO: Fix exception handling
except mariadb.errors.Error:
# Set self.errors to enable warning line on results screen
self.errors = True
# Done