diff --git a/.bin/Scripts/functions/osticket.py b/.bin/Scripts/functions/osticket.py index 1911727d..dc97c88f 100644 --- a/.bin/Scripts/functions/osticket.py +++ b/.bin/Scripts/functions/osticket.py @@ -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