X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Ftools%2Fpresentation%2Finput_data_parser.py;h=67c3636aa2083d1cf13d01d075128ce231000c1c;hb=e8b47c3df7529a6c087fb7639684f180dad8c03d;hp=1e2513848b33edaef8b576b201bcc4ce3998aa22;hpb=7b4dc49521908774f9eb2f5d287078cce06d8e49;p=csit.git diff --git a/resources/tools/presentation/input_data_parser.py b/resources/tools/presentation/input_data_parser.py index 1e2513848b..67c3636aa2 100644 --- a/resources/tools/presentation/input_data_parser.py +++ b/resources/tools/presentation/input_data_parser.py @@ -295,6 +295,10 @@ class ExecutionChecker(ResultVisitor): REGEX_TC_PAPI_CLI = re.compile(r'.*\((\d+.\d+.\d+.\d+.) - (.*)\)') + REGEX_SH_RUN_HOST = re.compile( + r'hostname=\"(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\",hook=\"(.*)\"' + ) + def __init__(self, metadata, mapping, ignore, for_output): """Initialisation. @@ -358,7 +362,6 @@ class ExecutionChecker(ResultVisitor): # Dictionary defining the methods used to parse different types of # messages self.parse_msg = { - u"timestamp": self._get_timestamp, u"vpp-version": self._get_vpp_version, u"dpdk-version": self._get_dpdk_version, u"teardown-papi-history": self._get_papi_history, @@ -610,18 +613,6 @@ class ExecutionChecker(ResultVisitor): finally: self._msg_type = None - def _get_timestamp(self, msg): - """Called when extraction of timestamp is required. - - :param msg: Message to process. - :type msg: Message - :returns: Nothing. - """ - - self._timestamp = msg.timestamp[:14] - self._data[u"metadata"][u"generated"] = self._timestamp - self._msg_type = None - def _get_papi_history(self, msg): """Called when extraction of PAPI command history is required. @@ -701,7 +692,7 @@ class ExecutionChecker(ResultVisitor): if self._telemetry_kw_counter > 1: return - if not msg.message.count(u"vpp_runtime_calls"): + if not msg.message.count(u"# TYPE vpp_runtime_calls"): return if u"telemetry-show-run" not in \ @@ -709,23 +700,33 @@ class ExecutionChecker(ResultVisitor): self._data[u"tests"][self._test_id][u"telemetry-show-run"] = dict() self._telemetry_msg_counter += 1 - dut = f"dut{self._telemetry_msg_counter}" + groups = re.search(self.REGEX_SH_RUN_HOST, msg.message) + if not groups: + return + try: + host = groups.group(1) + except (AttributeError, IndexError): + host = u"" + try: + sock = groups.group(2) + except (AttributeError, IndexError): + sock = u"" runtime = { u"source_type": u"node", - u"source_id": dut, + u"source_id": host, u"msg_type": u"metric", u"log_level": u"INFO", u"timestamp": msg.timestamp, u"msg": u"show_runtime", - u"host": dut, # No info, should be host IP - u"socket": u"", # No info + u"host": host, + u"socket": sock, u"data": list() } for line in msg.message.splitlines(): if not line.startswith(u"vpp_runtime_"): continue try: - params, value = line.rsplit(u" ", maxsplit=2)[:-1] + params, value, timestamp = line.rsplit(u" ", maxsplit=2) cut = params.index(u"{") name = params[:cut].split(u"_", maxsplit=2)[-1] labels = eval( @@ -736,17 +737,17 @@ class ExecutionChecker(ResultVisitor): { u"name": name, u"value": value, + u"timestamp": timestamp, u"labels": labels } ) except (TypeError, ValueError, IndexError): continue - - self._data[u'tests'][self._test_id][u'telemetry-show-run'][dut] = \ - copy.copy( + self._data[u'tests'][self._test_id][u'telemetry-show-run']\ + [f"dut{self._telemetry_msg_counter}"] = copy.copy( { - u"host": dut, - u"socket": u"", + u"host": host, + u"socket": sock, u"runtime": runtime } ) @@ -1341,9 +1342,6 @@ class ExecutionChecker(ResultVisitor): elif setup_kw.name.count(u"Install Dpdk Framework On All Duts") and \ not self._version: self._msg_type = u"dpdk-version" - elif setup_kw.name.count(u"Set Global Variable") \ - and not self._timestamp: - self._msg_type = u"timestamp" elif setup_kw.name.count(u"Setup Framework") and not self._testbed: self._msg_type = u"testbed" else: @@ -1530,6 +1528,15 @@ class InputData: ) result.visit(checker) + checker.data[u"metadata"][u"tests_total"] = \ + result.statistics.total.all.total + checker.data[u"metadata"][u"tests_passed"] = \ + result.statistics.total.all.passed + checker.data[u"metadata"][u"tests_failed"] = \ + result.statistics.total.all.failed + checker.data[u"metadata"][u"elapsedtime"] = result.suite.elapsedtime + checker.data[u"metadata"][u"generated"] = result.suite.endtime[:14] + return checker.data def _download_and_parse_build(self, job, build, repeat, pid=10000):