X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Ftools%2Fpresentation%2Fgenerator_alerts.py;h=1b40dbbbf9e2dd52a1cef41bd1874d579a296b1c;hb=36b2dffd55dee362d96aae98d563a0c2b475573e;hp=ce5d8035e959c1de55edea7e4232d83e38f19279;hpb=d45c3f997201a6f17b39b3e5ceb82b332852149f;p=csit.git diff --git a/resources/tools/presentation/generator_alerts.py b/resources/tools/presentation/generator_alerts.py index ce5d8035e9..1b40dbbbf9 100644 --- a/resources/tools/presentation/generator_alerts.py +++ b/resources/tools/presentation/generator_alerts.py @@ -19,7 +19,7 @@ from email.mime.multipart import MIMEMultipart from os.path import isdir from collections import OrderedDict -from utils import execute_command +from utils import get_last_completed_build_number from errors import PresentationError @@ -71,8 +71,10 @@ class Alerting(object): # Implemented alerts: self._ALERTS = ("failed-tests", ) + self._spec = spec + try: - self._spec = spec.alerting + self._spec_alert = spec.alerting except KeyError as err: raise AlertingError("Alerting is not configured, skipped.", repr(err), @@ -81,7 +83,7 @@ class Alerting(object): self._path_failed_tests = spec.environment["paths"]["DIR[STATIC,VPP]"] # Verify and validate input specification: - self.configs = self._spec.get("configurations", None) + self.configs = self._spec_alert.get("configurations", None) if not self.configs: raise AlertingError("No alert configuration is specified.") for config_type, config_data in self.configs.iteritems(): @@ -104,7 +106,7 @@ class Alerting(object): raise AlertingError("Alert of type '{0}' is not implemented.". format(config_type)) - self.alerts = self._spec.get("alerts", None) + self.alerts = self._spec_alert.get("alerts", None) if not self.alerts: raise AlertingError("No alert is specified.") for alert, alert_data in self.alerts.iteritems(): @@ -142,19 +144,8 @@ class Alerting(object): """ for alert, alert_data in self.alerts.iteritems(): - if alert_data["way"] == "email": - text, html = self._create_alert_message(alert_data) - conf = self.configs["email"] - self._send_email(server=conf["server"], - addr_from=conf["address-from"], - addr_to=conf["address-to"], - subject=alert_data["title"], - text=text, - html=html) - elif alert_data["way"] == "jenkins": + if alert_data["way"] == "jenkins": self._generate_email_body(alert_data) - # TODO: Remove when not needed - self._generate_files_for_jenkins(alert_data) else: raise AlertingError("Alert with way '{0}' is not implemented.". format(alert_data["way"])) @@ -253,9 +244,10 @@ class Alerting(object): directory = self.configs[alert["way"]]["output-dir"] failed_tests = OrderedDict() + file_path = "{0}/{1}.txt".format(directory, test_set) version = "" try: - with open("{0}/{1}.txt".format(directory, test_set), 'r') as f_txt: + with open(file_path, 'r') as f_txt: for idx, line in enumerate(f_txt): if idx == 0: build = line[:-1] @@ -281,8 +273,9 @@ class Alerting(object): failed_tests[name]["framesizes"].append(framesize) if cores not in failed_tests[name]["cores"]: failed_tests[name]["cores"].append(cores) - except IOError as err: - logging.error(repr(err)) + except IOError: + logging.error("No such file or directory: {file}". + format(file=file_path)) return None, None, None, None if sort: sorted_failed_tests = OrderedDict() @@ -312,6 +305,16 @@ class Alerting(object): build, version, nr, failed_tests = \ self._get_compressed_failed_tests(alert, test_set) if build is None: + ret_code, build_nr, _ = get_last_completed_build_number( + self._spec.environment["urls"]["URL[JENKINS,CSIT]"], + alert["urls"][idx].split('/')[-1]) + if ret_code != 0: + build_nr = '' + text += "\n\nNo input data available for '{set}'. See CSIT " \ + "build {link}/{build} for more information.\n".\ + format(set='-'.join(test_set.split('-')[-2:]), + link=alert["urls"][idx], + build=build_nr) continue text += ("\n\n{topo}-{arch}, " "{nr} tests failed, " @@ -363,24 +366,3 @@ class Alerting(object): except IOError: logging.error("Not possible to write the file '{0}.txt'.". format(file_name)) - - def _generate_files_for_jenkins(self, alert): - """Create the file which is used in the generated alert. - - # TODO: Remove when not needed. - - :param alert: Files are created for this alert. - :type alert: dict - """ - - config = self.configs[alert["way"]] - - zip_file = config.get("zip-output", None) - if zip_file: - logging.info("Writing the file '{0}/{1}' ...". - format(config["output-dir"], zip_file)) - execute_command("tar czvf {dir}/{zip} --directory={dir} " - "{input}.txt". - format(dir=config["output-dir"], - zip=zip_file, - input=config["output-file"]))