1 ##############################################################################
2 # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
14 def getResultColumn(data_dict):
15 column_string = data_dict['Columns']
16 return column_string.strip('{}').split()
19 def getResult(data_dict):
20 result_string = data_dict['Output']
21 result_array = result_string.split('} {')
23 for line in result_array:
24 result.append(line.split())
28 def restrucData(data_string):
31 p = re.compile('-Columns.*-Output')
32 data_dict['Columns'] = p.findall(
33 data_string)[0].strip('-Columns {} -Output')
34 p = re.compile('-Output.*-State')
35 data_dict['Output'] = p.findall(
36 data_string)[0].strip('-Output {} -State')
37 if data_dict['Columns'] is not None or data_dict['Output'] is not None:
39 return True, data_dict
41 print("[ERROR]Find the column name or the output result failed.")
44 def framelossData(column, perfdata):
51 'PercentLoss(%s)': 12,
52 'MinimumLatency(us)': 17,
53 'MaximumLatency(us)': 18,
54 'AverageLatency(us)': 19,
55 'MinimumJitter(us)': 20,
56 'MaximumJitter(us)': 21,
57 'AverageJitter(us)': 22,
59 # get the column array
61 column[column_name_dict['FrameSize']],
62 'ForwardingRate(Mpps)',
63 column[column_name_dict['TxFrameCount']],
64 column[column_name_dict['RxFrameCount']],
65 column[column_name_dict['PercentLoss(%s)']],
66 column[column_name_dict['AverageLatency(us)']],
67 column[column_name_dict['MinimumLatency(us)']],
68 column[column_name_dict['MaximumLatency(us)']],
69 column[column_name_dict['AverageJitter(us)']],
70 column[column_name_dict['MinimumJitter(us)']],
71 column[column_name_dict['MaximumJitter(us)']]
76 # line[column_name_dict['TrialNumber']],
77 # line[column_name_dict['Id']],
78 line[column_name_dict['FrameSize']],
79 str(float(line[column_name_dict['RxFrameCount']]) / 60 / 1000000),
80 line[column_name_dict['TxFrameCount']],
81 line[column_name_dict['RxFrameCount']],
82 line[column_name_dict['PercentLoss(%s)']],
83 line[column_name_dict['AverageLatency(us)']],
84 line[column_name_dict['MinimumLatency(us)']],
85 line[column_name_dict['MaximumLatency(us)']],
86 line[column_name_dict['AverageJitter(us)']],
87 line[column_name_dict['MinimumJitter(us)']],
88 line[column_name_dict['MaximumJitter(us)']]
90 data_array.append(line_options)
91 return [column_array, data_array]
94 class analysis(object):
99 def analyseResult(self, suite, column, perfdata):
103 global data_array, column_array
104 if suite == 'throughput':
105 [column_array, data_array] = self.throughputData(column, perfdata)
106 elif suite == 'frameloss':
107 [column_array, data_array] = self.framelossData(column, perfdata)
108 elif suite == 'latency':
109 self.latencyData(column, perfdata)
112 for line in data_array:
114 return [column_array, data_array]
116 def throughputData(self, column, perfdata):
125 'ForwardingRate(mpps)': 17,
126 'MinimumLatency(us)': 18,
127 'MaximumLatency(us)': 19,
128 'AverageLatency(us)': 20,
129 'MinimumJitter(us)': 21,
130 'MaximumJitter(us)': 22,
131 'AverageJitter(us)': 23
133 column_array = {column[column_name_dict['FrameSize']],
134 column[column_name_dict['Load(%)']],
135 column[column_name_dict['Result']],
136 'ForwardingRate(mpps)',
137 column[column_name_dict['TxFrameCount']],
138 column[column_name_dict['RxFrameCount']],
139 column[column_name_dict['AverageLatency(us)']],
140 column[column_name_dict['MinimumLatency(us)']],
141 column[column_name_dict['MaximumLatency(us)']],
142 column[column_name_dict['AverageJitter(us)']],
143 column[column_name_dict['MinimumJitter(us)']],
144 column[column_name_dict['MaximumJitter(us)']]}
146 for line in perfdata:
147 if line[column_name_dict['Result']] == 'Passed':
149 # line[column_name_dict['TrialNumber']],
150 # line[column_name_dict['Id']],
151 line[column_name_dict['FrameSize']],
152 line[column_name_dict['Load(%)']],
153 line[column_name_dict['Result']],
154 str(float(line[column_name_dict[
155 'ForwardingRate(mpps)']]) / 1000000),
156 line[column_name_dict['TxFrameCount']],
157 line[column_name_dict['RxFrameCount']],
158 line[column_name_dict['AverageLatency(us)']],
159 line[column_name_dict['MinimumLatency(us)']],
160 line[column_name_dict['MaximumLatency(us)']],
161 line[column_name_dict['AverageJitter(us)']],
162 line[column_name_dict['MinimumJitter(us)']],
163 line[column_name_dict['MaximumJitter(us)']]]
166 data_array.append(line_options)
167 # delete the redundant test data
170 for ele in range(len(data_array) - 1):
171 if data_array[ele][0] == data_array[ele + 1][0]:
172 delete_index.append(ele)
174 for num in len(data_array):
175 if num not in delete_index:
176 new_data_array.append(data_array[num])
178 return column_array, new_data_array
180 def latencyData(self, column, perfdata):
184 analysis_instance = analysis()