Merge "Change PTL informatin in INFO"
[bottlenecks.git] / testsuites / vstf / vstf_scripts / vstf / controller / spirent / common / result_analysis.py
1 ##############################################################################
2 # Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
3 #
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 ##############################################################################
9
10
11 import re
12
13
14 def getResultColumn(data_dict):
15     column_string = data_dict['Columns']
16     return column_string.strip('{}').split()
17
18
19 def getResult(data_dict):
20     result_string = data_dict['Output']
21     result_array = result_string.split('} {')
22     result = []
23     for line in result_array:
24         result.append(line.split())
25     return result
26
27
28 def restrucData(data_string):
29     try:
30         data_dict = {}
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:
38             return False, None
39         return True, data_dict
40     except:
41         print("[ERROR]Find the column name or the output result failed.")
42
43
44 def framelossData(column, perfdata):
45     column_name_dict = {
46         'TrialNumber': 0,
47         'Id': 1,
48         'FrameSize': 3,
49         'TxFrameCount': 9,
50         'RxFrameCount': 10,
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,
58     }
59     # get the column array
60     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)']]
72     ]
73     data_array = []
74     for line in perfdata:
75         line_options = [
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)']]
89         ]
90         data_array.append(line_options)
91     return [column_array, data_array]
92
93
94 class analysis(object):
95
96     def __init__(self):
97         pass
98
99     def analyseResult(self, suite, column, perfdata):
100         """
101         :type self: object
102         """
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)
110         else:
111             return None
112         for line in data_array:
113             print line
114         return [column_array, data_array]
115
116     def throughputData(self, column, perfdata):
117         column_name_dict = {
118             'TrialNumber': 0,
119             'Id': 1,
120             'FrameSize': 3,
121             'Load(%)': 6,
122             'Result': 8,
123             'TxFrameCount': 12,
124             'RxFrameCount': 13,
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
132         }
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)']]}
145         data_array = []
146         for line in perfdata:
147             if line[column_name_dict['Result']] == 'Passed':
148                 line_options = [
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)']]]
164             else:
165                 continue
166             data_array.append(line_options)
167         # delete the redundant test data
168         delete_index = []
169         new_data_array = []
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)
173
174         for num in len(data_array):
175             if num not in delete_index:
176                 new_data_array.append(data_array[num])
177
178         return column_array, new_data_array
179
180     def latencyData(self, column, perfdata):
181         pass
182
183
184 analysis_instance = analysis()