From 7d7cf2126333c57707147e6dcd6a6f5f9a17faf8 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Wed, 26 Dec 2018 18:22:34 -0700 Subject: [PATCH] Show volume report if all disk tests are run * Enable CoreStorage mounting only if all tests were CS, N/A, or OVERRIDE --- .bin/Scripts/functions/osticket.py | 83 ++++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 17 deletions(-) diff --git a/.bin/Scripts/functions/osticket.py b/.bin/Scripts/functions/osticket.py index a2142e1d..1911727d 100644 --- a/.bin/Scripts/functions/osticket.py +++ b/.bin/Scripts/functions/osticket.py @@ -2,6 +2,7 @@ import mysql.connector as mariadb +from functions.data import * from functions.io_graph import * from settings.osticket import * @@ -122,6 +123,23 @@ class osTicket(): # Done return out_report + def disconnect(self, reset_errors=False): + """Close osTicket connection.""" + try: + self.db_cursor.close() + self.db_connection.close() + except Exception: + # TODO: Fix exception handling + pass + + # Reset errors + if reset_errors: + self.errors = False + + # Reset vars + self.db_cursor = None + self.db_connection = None + def generate_report(self, dev, ticket_id): """Generate device report for osTicket, returns list.""" report = [] @@ -163,10 +181,10 @@ class osTicket(): report.append(' ') # Volumes - if results['Dev Type'] == 'Disk': - # TODO: Mount all volumes and extend report + if results['Dev Type'] == 'Disk' and results['Full Diag']: + # Mount all volumes and extend report report.append('Volumes:') - report.append('TODO') + report.extend(self.generate_volume_report(dev, results)) report.append(' ') # Asterisk @@ -176,31 +194,56 @@ class osTicket(): # Done return report - def disconnect(self, reset_errors=False): - """Close osTicket connection.""" - try: - self.db_cursor.close() - self.db_connection.close() - except Exception: - # TODO: Fix exception handling - pass + def generate_volume_report(self, dev, results): + """Mount all volumes for dev and generate report, returns list.""" + report = [] + mount_report = mount_volumes( + all_devices=False, + device_path='{}'.format(dev.path), + core_storage=results['Core']) - # Reset errors - if reset_errors: - self.errors = False + # Format report + for v_path, v_data in sorted(mount_report.items()): + label = v_data.get('label', '') + if label: + label = '"{}"'.format(label) + else: + # Ensure string type + label = '' + size = v_data.get('size', '') + if size: + size = '{} {}B'.format(size[:-1], size[-1:]).upper() + else: + size = 'UNKNOWN' + size_used = v_data.get('size_used', 'UNKNOWN').upper() + size_avail = v_data.get('size_avail', 'UNKNOWN').upper() + v_data = [v_path, label, size, size_used, size_avail] + v_data = [v.strip().replace(' ', '_') for v in v_data] + for i in range(len(v_data)): + pad = 8 + if i < 2: + pad += 4 * (2 - i) + v_data[i] = pad_with_dots( + '{s:<{p}}'.format(s=v_data[i], p=pad), + pad_right=True) + v_data[-1] = re.sub(r'\.*$', '', v_data[-1]) + v_data = [v.replace('_', ' ') for v in v_data] + report.append( + '{}..{}..Total..{}..(Used..{}..Free..{})'.format(*v_data)) - # Reset vars - self.db_cursor = None - self.db_connection = None + # Done + return report def get_device_overall_results(self, dev): """Get overall results from tests for device, returns dict.""" results = { + 'Core': False, 'Dev Type': self.get_device_type(dev), 'Full Diag': False, 'Asterisk': None, 'Failed': 0, 'N/A': 0, + 'OVERRIDE': 0, 'Passed': 0, 'Status': 'Unknown', } @@ -228,6 +271,8 @@ class osTicket(): results['Passed'] += 1 if 'N/A' in test.status: results['N/A'] += 1 + if 'OVERRIDE' in test.status: + results['OVERRIDE'] += 1 # Set overall status if results['Failed'] > 0: @@ -242,6 +287,10 @@ class osTicket(): results['Asterisk'] = True results['Status'] += '*' + # Enable CoreStorage searches + results['Core'] = (results['Full Diag'] and + results['Passed']+results['N/A']+results['OVERRIDE'] == len(test_list)) + # Done return results