X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Ftools%2Fpresentation%2Finput_data_parser.py;h=f7869d889a43e8c72aac4ef69de68e5c8f1359e5;hb=691f24ec052cc9d48d6abe143bcae95486f94388;hp=5d9234e9413516ade099999eb8db1ed3f59a2cb7;hpb=b47c8f8ed56880eda3f64cf06abd47155ea97db0;p=csit.git diff --git a/resources/tools/presentation/input_data_parser.py b/resources/tools/presentation/input_data_parser.py index 5d9234e941..f7869d889a 100644 --- a/resources/tools/presentation/input_data_parser.py +++ b/resources/tools/presentation/input_data_parser.py @@ -220,6 +220,8 @@ class ExecutionChecker(ResultVisitor): r'Latency at 50% PDR:.*\[\'(.*)\', \'(.*)\'\].*\n' r'Latency at 10% PDR:.*\[\'(.*)\', \'(.*)\'\].*\n' ) + REGEX_MRR_MSG_INFO = re.compile(r'.*\[(.*)\]') + # TODO: Remove when not needed REGEX_NDRPDR_LAT_BASE = re.compile( r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n.*\n' @@ -355,15 +357,34 @@ class ExecutionChecker(ResultVisitor): """ return self._data + def _get_data_from_mrr_test_msg(self, msg): + """Get info from message of MRR performance tests. + + :param msg: Message to be processed. + :type msg: str + :returns: Processed message or original message if a problem occurs. + :rtype: str + """ + + groups = re.search(self.REGEX_MRR_MSG_INFO, msg) + if not groups or groups.lastindex != 1: + return u"Test Failed." + + try: + data = groups.group(1).split(u", ") + except (AttributeError, IndexError, ValueError, KeyError): + return u"Test Failed." + + out_str = u"[" + try: + for item in data: + out_str += f"{(float(item) / 1e6):.2f}, " + return out_str[:-2] + u"]" + except (AttributeError, IndexError, ValueError, KeyError): + return u"Test Failed." + def _get_data_from_perf_test_msg(self, msg): - """Get - - NDR_LOWER - - LATENCY - - NDR_UPPER - - PDR_LOWER - - LATENCY - - PDR_UPPER - from message of NDRPDR performance tests. + """Get info from message of NDRPDR performance tests. :param msg: Message to be processed. :type msg: str @@ -373,7 +394,7 @@ class ExecutionChecker(ResultVisitor): groups = re.search(self.REGEX_PERF_MSG_INFO, msg) if not groups or groups.lastindex != 10: - return msg + return u"Test Failed." try: data = { @@ -389,7 +410,7 @@ class ExecutionChecker(ResultVisitor): u"pdr_lat_10_2": groups.group(10), } except (AttributeError, IndexError, ValueError, KeyError): - return msg + return u"Test Failed." def _process_lat(in_str_1, in_str_2): """Extract min, avg, max values from latency string. @@ -400,65 +421,75 @@ class ExecutionChecker(ResultVisitor): robot framework. :type in_str_1: str :type in_str_2: str - :returns: Processed latency string or empty string if a problem - occurs. - :rtype: tuple(str, str) + :returns: Processed latency string or None if a problem occurs. + :rtype: tuple """ in_list_1 = in_str_1.split('/', 3) in_list_2 = in_str_2.split('/', 3) if len(in_list_1) != 4 and len(in_list_2) != 4: - return u"" + return None in_list_1[3] += u"=" * (len(in_list_1[3]) % 4) try: hdr_lat_1 = hdrh.histogram.HdrHistogram.decode(in_list_1[3]) except hdrh.codec.HdrLengthException: - return u"" + return None in_list_2[3] += u"=" * (len(in_list_2[3]) % 4) try: hdr_lat_2 = hdrh.histogram.HdrHistogram.decode(in_list_2[3]) except hdrh.codec.HdrLengthException: - return u"" + return None if hdr_lat_1 and hdr_lat_2: - hdr_lat_1_50 = hdr_lat_1.get_value_at_percentile(50.0) - hdr_lat_1_90 = hdr_lat_1.get_value_at_percentile(90.0) - hdr_lat_1_99 = hdr_lat_1.get_value_at_percentile(99.0) - hdr_lat_2_50 = hdr_lat_2.get_value_at_percentile(50.0) - hdr_lat_2_90 = hdr_lat_2.get_value_at_percentile(90.0) - hdr_lat_2_99 = hdr_lat_2.get_value_at_percentile(99.0) - - if (hdr_lat_1_50 + hdr_lat_1_90 + hdr_lat_1_99 + - hdr_lat_2_50 + hdr_lat_2_90 + hdr_lat_2_99): - return ( - f"{hdr_lat_1_50} {hdr_lat_1_90} {hdr_lat_1_99} , " - f"{hdr_lat_2_50} {hdr_lat_2_90} {hdr_lat_2_99}" - ) + hdr_lat = ( + hdr_lat_1.get_value_at_percentile(50.0), + hdr_lat_1.get_value_at_percentile(90.0), + hdr_lat_1.get_value_at_percentile(99.0), + hdr_lat_2.get_value_at_percentile(50.0), + hdr_lat_2.get_value_at_percentile(90.0), + hdr_lat_2.get_value_at_percentile(99.0) + ) - return u"" + if all(hdr_lat): + return hdr_lat + + return None try: - pdr_lat_10 = _process_lat(data[u'pdr_lat_10_1'], - data[u'pdr_lat_10_2']) - pdr_lat_50 = _process_lat(data[u'pdr_lat_50_1'], - data[u'pdr_lat_50_2']) - pdr_lat_90 = _process_lat(data[u'pdr_lat_90_1'], - data[u'pdr_lat_90_2']) - pdr_lat_10 = f"\n3. {pdr_lat_10}" if pdr_lat_10 else u"" - pdr_lat_50 = f"\n4. {pdr_lat_50}" if pdr_lat_50 else u"" - pdr_lat_90 = f"\n5. {pdr_lat_90}" if pdr_lat_90 else u"" - - return ( - f"1. {(data[u'ndr_low'] / 1e6):.2f} {data[u'ndr_low_b']:.2f}" - f"\n2. {(data[u'pdr_low'] / 1e6):.2f} {data[u'pdr_low_b']:.2f}" - f"{pdr_lat_10}" - f"{pdr_lat_50}" - f"{pdr_lat_90}" + out_msg = ( + f"1. {(data[u'ndr_low'] / 1e6):5.2f} " + f"{data[u'ndr_low_b']:5.2f}" + f"\n2. {(data[u'pdr_low'] / 1e6):5.2f} " + f"{data[u'pdr_low_b']:5.2f}" + ) + latency = ( + _process_lat(data[u'pdr_lat_10_1'], data[u'pdr_lat_10_2']), + _process_lat(data[u'pdr_lat_50_1'], data[u'pdr_lat_50_2']), + _process_lat(data[u'pdr_lat_90_1'], data[u'pdr_lat_90_2']) ) + if all(latency): + max_len = len(str(max((max(item) for item in latency)))) + max_len = 4 if max_len < 4 else max_len + + for idx, lat in enumerate(latency): + if not idx: + out_msg += u"\n" + out_msg += ( + f"\n{idx + 3}. " + f"{lat[0]:{max_len}d} " + f"{lat[1]:{max_len}d} " + f"{lat[2]:{max_len}d} " + f"{lat[3]:{max_len}d} " + f"{lat[4]:{max_len}d} " + f"{lat[5]:{max_len}d} " + ) + + return out_msg + except (AttributeError, IndexError, ValueError, KeyError): - return msg + return u"Test Failed." def _get_testbed(self, msg): """Called when extraction of testbed IP is required. @@ -947,13 +978,24 @@ class ExecutionChecker(ResultVisitor): replace(u'\r', u'').\ replace(u'[', u' |br| [').\ replace(u' |br| [', u'[', 1) - test_result[u"msg"] = self._get_data_from_perf_test_msg(test.message).\ - replace(u'\n', u' |br| ').\ - replace(u'\r', u'').\ - replace(u'"', u"'") test_result[u"type"] = u"FUNC" test_result[u"status"] = test.status + if test.status == u"PASS": + if u"NDRPDR" in tags: + test_result[u"msg"] = self._get_data_from_perf_test_msg( + test.message).replace(u'\n', u' |br| ').\ + replace(u'\r', u'').replace(u'"', u"'") + elif u"MRR" in tags or u"FRMOBL" in tags or u"BMRR" in tags: + test_result[u"msg"] = self._get_data_from_mrr_test_msg( + test.message).replace(u'\n', u' |br| ').\ + replace(u'\r', u'').replace(u'"', u"'") + else: + test_result[u"msg"] = test.message.replace(u'\n', u' |br| ').\ + replace(u'\r', u'').replace(u'"', u"'") + else: + test_result[u"msg"] = u"Test Failed." + if u"PERFTEST" in tags: # Replace info about cores (e.g. -1c-) with the info about threads # and cores (e.g. -1t1c-) in the long test case names and in the @@ -969,14 +1011,14 @@ class ExecutionChecker(ResultVisitor): tag_tc = tag if tag_count == 1: - self._test_id = re.sub(self.REGEX_TC_NAME_NEW, - f"-{tag_tc.lower()}-", - self._test_id, - count=1) - test_result[u"name"] = re.sub(self.REGEX_TC_NAME_NEW, - f"-{tag_tc.lower()}-", - test_result["name"], - count=1) + self._test_id = re.sub( + self.REGEX_TC_NAME_NEW, f"-{tag_tc.lower()}-", + self._test_id, count=1 + ) + test_result[u"name"] = re.sub( + self.REGEX_TC_NAME_NEW, f"-{tag_tc.lower()}-", + test_result["name"], count=1 + ) else: test_result[u"status"] = u"FAIL" self._data[u"tests"][self._test_id] = test_result