X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Ftools%2Fpresentation%2Fpal.py;h=06f1eeda59333d26191a1abc9e6c83b43a99bb52;hb=a4458ecdab86886bf938da038e859ec9858d8a97;hp=d06cadaf99e8d2c4479bffa34c915a9ed4eeb154;hpb=0c3e94ed3f70c9dcd41e55ba2c043dd134aa7333;p=csit.git diff --git a/resources/tools/presentation/pal.py b/resources/tools/presentation/pal.py index d06cadaf99..06f1eeda59 100644 --- a/resources/tools/presentation/pal.py +++ b/resources/tools/presentation/pal.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2021 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -11,7 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""CSIT Presentation and analytics layer. +"""CSIT Presentation and Analytics Layer. """ import sys @@ -19,16 +19,20 @@ import argparse import logging from pal_errors import PresentationError -from environment import Environment, clean_environment from specification_parser import Specification +from environment import Environment, clean_environment +from static_content import prepare_static_content from input_data_parser import InputData from generator_tables import generate_tables from generator_plots import generate_plots from generator_files import generate_files -from static_content import prepare_static_content from generator_report import generate_report from generator_cpta import generate_cpta from generator_alerts import Alerting, AlertingError +from convert_xml_json import convert_xml_to_json + + +OUTPUTS = ("none", "report", "trending", "convert-xml-to-json") def parse_args(): @@ -43,58 +47,60 @@ def parse_args(): formatter_class=argparse.RawDescriptionHelpFormatter ) parser.add_argument( - u"-s", u"--specification", + "-s", "--specification", required=True, - type=argparse.FileType(u'r'), - help=u"Specification YAML file." + type=str, + help="Specification YAML file." ) parser.add_argument( - u"-r", u"--release", - default=u"master", + "-r", "--release", + default="master", type=str, - help=u"Release string of the product." + help="Release string of the product." ) parser.add_argument( - u"-w", u"--week", - default=u"1", + "-w", "--week", + default="1", type=str, - help=u"Calendar week when the report is published." + help="Calendar week when the report is published." ) parser.add_argument( - u"-l", u"--logging", - choices=[u"DEBUG", u"INFO", u"WARNING", u"ERROR", u"CRITICAL"], - default=u"ERROR", - help=u"Logging level." + "-l", "--logging", + choices=[ + "NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL" + ], + default="ERROR", + help="Logging level." ) parser.add_argument( - u"-f", u"--force", - action=u"store_true", - help=u"Force removing the old build(s) if present." + "-f", "--force", + action="store_true", + help="Force removing the old build(s) if present." ) parser.add_argument( - u"-o", u"--print-all-oper-data", - action=u"store_true", - help=u"Print all operational data to console. Be careful, the output " - u"can be really long." + "-o", "--print-all-oper-data", + action="store_true", + help="Print all operational data to console. Be careful, the output " + "can be really long." ) parser.add_argument( - u"-i", u"--input-file", + "-i", "--input-file", type=str, - default=u"", - help=u"XML file generated by RobotFramework which will be processed " - u"instead of downloading the data from Nexus and/or Jenkins. In " - u"this case, the section 'input' in the specification file is " - u"ignored." + default="", + help="XML file generated by RobotFramework which will be processed " + "instead of downloading the data from Nexus and/or Jenkins. In " + "this case, the section 'input' in the specification file is " + "ignored." ) parser.add_argument( - u"-d", u"--input-directory", + "-d", "--input-directory", type=str, - default=u"", - help=u"Directory with XML file(s) generated by RobotFramework or with " - u"sub-directories with XML file(s) which will be processed " - u"instead of downloading the data from Nexus and/or Jenkins. In " - u"this case, the section 'input' in the specification file is " - u"ignored." + default="", + help="Directory with XML file(s) generated by RobotFramework or with " + "sub-directories with XML file(s) which will be processed " + "instead of downloading the data from Nexus and/or Jenkins. In " + "this case, the section 'input' in the specification file is " + "ignored." ) return parser.parse_args() @@ -103,40 +109,46 @@ def parse_args(): def main(): """Main function.""" - log_levels = {u"NOTSET": logging.NOTSET, - u"DEBUG": logging.DEBUG, - u"INFO": logging.INFO, - u"WARNING": logging.WARNING, - u"ERROR": logging.ERROR, - u"CRITICAL": logging.CRITICAL} + log_levels = { + "NOTSET": logging.NOTSET, + "DEBUG": logging.DEBUG, + "INFO": logging.INFO, + "WARNING": logging.WARNING, + "ERROR": logging.ERROR, + "CRITICAL": logging.CRITICAL + } args = parse_args() - logging.basicConfig(format=u"%(asctime)s: %(levelname)s: %(message)s", - datefmt=u"%Y/%m/%d %H:%M:%S", - level=log_levels[args.logging]) + logging.basicConfig( + format="%(asctime)s: %(levelname)s: %(message)s", + datefmt="%Y/%m/%d %H:%M:%S", + level=log_levels[args.logging] + ) + + logging.info("Application started.") - logging.info(u"Application started.") try: spec = Specification(args.specification) spec.read_specification() - except PresentationError: - logging.critical(u"Finished with error.") + except PresentationError as err: + logging.critical("Finished with error.") + logging.critical(repr(err)) return 1 - if spec.output[u"output"] not in (u"none", u"report", u"trending"): + if spec.output["output"] not in OUTPUTS: logging.critical( f"The output {spec.output[u'output']} is not supported." ) return 1 - ret_code = 1 + return_code = 1 try: env = Environment(spec.environment, args.force) env.set_environment() prepare_static_content(spec) - data = InputData(spec) + data = InputData(spec, spec.output["output"]) if args.input_file: data.process_local_file(args.input_file) elif args.input_directory: @@ -151,20 +163,22 @@ def main(): generate_plots(spec, data) generate_files(spec, data) - if spec.output[u"output"] == u"report": + if spec.output["output"] == "report": generate_report(args.release, spec, args.week) - elif spec.output[u"output"] == u"trending": + elif spec.output["output"] == "trending": sys.stdout.write(generate_cpta(spec, data)) try: alert = Alerting(spec) alert.generate_alerts() except AlertingError as err: logging.warning(repr(err)) + elif spec.output["output"] == "convert-xml-to-json": + convert_xml_to_json(spec, data) else: logging.info("No output will be generated.") - logging.info(u"Successfully finished.") - ret_code = 0 + logging.info("Successfully finished.") + return_code = 0 except AlertingError as err: logging.critical(f"Finished with an alerting error.\n{repr(err)}") @@ -175,8 +189,8 @@ def main(): finally: if spec is not None: clean_environment(spec.environment) - return ret_code + return return_code -if __name__ == u"__main__": +if __name__ == "__main__": sys.exit(main())