diff --git a/tester.py b/tester.py index 7128c63c7d105a06bb60423ae04ec0ce0ce82fc1..5d9cb94b9e53e3ebff6997cbf35f8b1ba7a3bc35 100755 --- a/tester.py +++ b/tester.py @@ -15,6 +15,10 @@ import glob import utils from utils import log +OUT_OF_SUPPORT_TEXT = '''\033[93mWarning: +The system is out of support, UbiCast will not be notified if errors are detected. +Please contact UbiCast sales team (sales@ubicast.eu) to renew the support contract.\033[0m''' + class Logger(object): def __init__(self, stream, log_buffer): @@ -40,6 +44,20 @@ def strip_colors(text): return re.sub(r'\033\[[\d;]+m', '', text) +def escape(text): + html = text.strip() + html = html.replace('<', '<') + html = html.replace('>', '>') + html = html.replace('\033[90m', '<span style="color: gray;">') + html = html.replace('\033[91m', '<span style="color: red;">') + html = html.replace('\033[92m', '<span style="color: green;">') + html = html.replace('\033[93m', '<span style="color: orange;">') + html = html.replace('\033[94m', '<span style="color: blue;">') + html = html.replace('\033[95m', '<span style="color: purple;">') + html = strip_colors(html) + return html + + def raid_idle(): idle = True devs = glob.glob('/sys/block/md*/md/sync_action') @@ -246,6 +264,7 @@ class Tester(): total_duration = None report_rows = [('Test', 'Criticality', 'Result', 'Duration', 'Description')] report_rows_length = [len(t) for t in report_rows[0]] + out_of_support = False for name, criticality, description, command in tests: log('\033[1;95m-- Test "%s" --\033[0;0m' % name) start_date = datetime.datetime.utcnow() @@ -254,9 +273,12 @@ class Tester(): p = subprocess.Popen(command, stdin=sys.stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate() if out: - log(out.decode('utf-8').strip()) + out = out.decode('utf-8').strip() + out_of_support = out_of_support or 'out of support' in out + log(out) if err: - log(err.decode('utf-8').strip()) + err = err.decode('utf-8').strip() + log(err) if p.returncode == 0: status = '\033[92msuccess\033[0m' successes += 1 @@ -296,6 +318,8 @@ class Tester(): nb_sp = report_rows_length[i] - len(strip_colors(val)) log_report += ' %s%s' % (val, ' ' * nb_sp) log_report += '\n' + '-' * 50 + if out_of_support: + log_report = OUT_OF_SUPPORT_TEXT + '\n' + log_report log(log_report.strip()) log('Total tests duration: %s.\n' % total_duration) # results as html @@ -304,16 +328,11 @@ class Tester(): html_cell = 'th' if not html_report else 'td' html_report += '\n <tr>' for i, val in enumerate(row): - html_report += ' <%s>%s</%s>' % (html_cell, val, html_cell) + html_report += ' <%s>%s</%s>' % (html_cell, escape(val), html_cell) html_report += ' </tr>' html_report = '<table border="1">%s\n</table>' % html_report - html_report = html_report.replace('\033[90m', '<span style="color: gray;">') - html_report = html_report.replace('\033[91m', '<span style="color: red;">') - html_report = html_report.replace('\033[92m', '<span style="color: green;">') - html_report = html_report.replace('\033[93m', '<span style="color: orange;">') - html_report = html_report.replace('\033[94m', '<span style="color: blue;">') - html_report = html_report.replace('\033[95m', '<span style="color: purple;">') - html_report = html_report.replace('\033[0m', '</span>') + if out_of_support: + html_report = '<p>' + escape(OUT_OF_SUPPORT_TEXT) + '</p>\n' + html_report # Store locally results now = datetime.datetime.utcnow() log_dir = os.path.join(self.root_dir, 'log') @@ -377,7 +396,7 @@ class Tester(): log(consecutive_msg) html_report += '\n<br/>' + consecutive_msg.replace('\n', '\n<br/>') if send_email: - recipients = utils.get_conf('EMAIL_ADMINS') + recipients = utils.get_conf('EMAIL_ADMINS') or '' system_domain = utils.get_conf('MS_SERVER_NAME') system_type = 'MediaServer' if system_domain == 'mediaserver': @@ -390,8 +409,12 @@ class Tester(): system_domain = 'Server' system_type = '-' if utils.get_conf('PREMIUM_SUPPORT') != '0': - system_domain = "[PREMIUM] %s" % system_domain - recipients += ',premium-support@ubicast.eu' + system_domain = '[PREMIUM] %s' % system_domain + if not out_of_support: + recipients += ',premium-support@ubicast.eu' + if out_of_support: + recipients = recipients.replace('sysadmin@ubicast.eu', '').replace(',,', ',') + recipients = recipients.strip(',') if not recipients: log('No recipients defined for email sending. Set a value for EMAIL_ADMINS.') return 1 @@ -406,7 +429,7 @@ Content-type: multipart/related; boundary="%(boundary)s" Content-Type: text/html; charset=UTF-8 Content-transfer-encoding: utf-8 -<b>Date: %(date)s UTC</b><br/><br/> +<p><b>Date: %(date)s UTC</b></p> %(report)s --%(boundary)s