+ 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.
+
+ :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_PERF_MSG_INFO, msg)
+ if not groups or groups.lastindex != 20:
+ return msg
+
+ try:
+ data = {
+ u"ndr_low": float(groups.group(1)),
+ u"ndr_low_unit": groups.group(2),
+ u"ndr_low_b": float(groups.group(3)),
+ u"ndr_low_b_unit": groups.group(4),
+ u"ndr_lat_1": groups.group(5),
+ u"ndr_lat_2": groups.group(6),
+ u"ndr_up": float(groups.group(7)),
+ u"ndr_up_unit": groups.group(8),
+ u"ndr_up_b": float(groups.group(9)),
+ u"ndr_up_b_unit": groups.group(10),
+ u"pdr_low": float(groups.group(11)),
+ u"pdr_low_unit": groups.group(12),
+ u"pdr_low_b": float(groups.group(13)),
+ u"pdr_low_b_unit": groups.group(14),
+ u"pdr_lat_1": groups.group(15),
+ u"pdr_lat_2": groups.group(16),
+ u"pdr_up": float(groups.group(17)),
+ u"pdr_up_unit": groups.group(18),
+ u"pdr_up_b": float(groups.group(19)),
+ u"pdr_up_b_unit": groups.group(20)
+ }
+ except (AttributeError, IndexError, ValueError, KeyError):
+ return msg
+
+ def _process_lat(in_str_1, in_str_2):
+ """Extract min, avg, max values from latency string.
+
+ :param in_str_1: Latency string for one direction produced by robot
+ framework.
+ :param in_str_2: Latency string for second direction produced by
+ robot framework.
+ :type in_str_1: str
+ :type in_str_2: str
+ :returns: Processed latency string or original string if a problem
+ occurs.
+ :rtype: str
+ """
+ in_list_1 = in_str_1.split('/', 3)
+ if len(in_list_1) < 3:
+ return u"Min/Avg/Max, -1/-1/-1, -1/-1/-1 uSec."
+
+ in_list_2 = in_str_2.split('/', 3)
+ if len(in_list_2) < 3:
+ return u"Min/Avg/Max, -1/-1/-1, -1/-1/-1 uSec."
+
+ return f"Min/Avg/Max, " \
+ f"{in_list_1[0]}/{in_list_1[1]}/{in_list_1[2]}, " \
+ f"{in_list_2[0]}/{in_list_2[1]}/{in_list_2[2]} uSec."
+
+ try:
+ return (
+ f"NDR Throughput: {(data[u'ndr_low'] / 1e6):.2f} "
+ f"M{data[u'ndr_low_unit']}, "
+ f"{data[u'ndr_low_b']:.2f} {data[u'ndr_low_b_unit']}.\n"
+ f"One-Way Latency at NDR: "
+ f"{_process_lat(data[u'ndr_lat_1'], data[u'ndr_lat_2'])}\n"
+ f"PDR Throughput: {(data[u'pdr_low'] / 1e6):.2f} "
+ f"M{data[u'pdr_low_unit']}, "
+ f"{data[u'pdr_low_b']:.2f} {data[u'pdr_low_b_unit']}.\n"
+ f"One-Way Latency at PDR: "
+ f"{_process_lat(data[u'pdr_lat_1'], data[u'pdr_lat_2'])}"
+ )
+ except (AttributeError, IndexError, ValueError, KeyError):
+ return msg
+