4 ## Copyright (c) 2010-2017 Intel Corporation
6 ## Licensed under the Apache License, Version 2.0 (the "License");
7 ## you may not use this file except in compliance with the License.
8 ## You may obtain a copy of the License at
10 ## http://www.apache.org/licenses/LICENSE-2.0
12 ## Unless required by applicable law or agreed to in writing, software
13 ## distributed under the License is distributed on an "AS IS" BASIS,
14 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 ## See the License for the specific language governing permissions and
16 ## limitations under the License.
19 from sutstatsconsfile import *
20 from tsstatsconsfile import *
21 from csvwriter import *
27 def addTime(self, val):
28 self.serie.append(val)
32 def __init__(self, testSystemCount):
34 self.tsStatsDump = [];
36 for i in range(testSystemCount):
37 self.tsStatsDump.append("");
38 self.tsTimes.append(TestResult.Times());
40 self.sutStatsDump = None;
41 self.sutTime = TestResult.Times();
44 return len(self.tsTimes)
46 def setTSStatsDump(self, filePaths):
47 self.tsStatsDump = filePaths;
49 def setSUTStatsDump(self, filePath):
50 self.sutStatsDump = filePath;
52 def getTSStatsDump(self):
53 return self.tsStatsDump;
55 def getSUTStatsDump(self):
56 return self.sutStatsDump;
58 def addTimeTS(self, times):
59 for i in range(len(times)):
60 self.tsTimes[i].addTime(times[i])
62 def addTimeSUT(self, time):
63 self.sutTime.addTime(time);
66 class ResultProcessor:
67 def __init__(self, testResult):
68 self._testResults = testResult;
71 self._readStatsConsLogs();
73 self._calcSetupRate();
75 def percentHandled(self):
76 converged_tsc = self._testResults.sutTime.getTime(1) - self._testResults.sutTime.getTime(0)
77 end_tsc = self._testResults.sutTime.getTime(2) - self._testResults.sutTime.getTime(0)
79 converged = converged_tsc/Decimal(self._sutHz)
80 end = end_tsc/Decimal(self._sutHz);
87 for entry in self._sutStats:
89 if (rx_converged == -1):
90 if (timeStamp > converged):
91 rx_converged = entry[0]
92 tx_converged = entry[1] - entry[2]
98 tx_end = entry[1] - entry[2]
100 return (tx_end - tx_converged)/Decimal(rx_end - rx_converged)
102 def toFile(self, fileName):
103 outFile = CsvWriter();
105 outFile.open(fileName)
107 for entry in self._sutStats:
108 timeStamp = round(entry[3], 3);
113 outFile.write([timeStamp, rx, tx, drop, "", ""])
115 for entry in self._tsStats:
116 timeStamp = round(entry[-1], 3);
117 connections = entry[0]
119 outFile.write([timeStamp,"","","", connections, setupRate]);
122 def _readStatsConsLogs(self):
123 print "Reading SUT stats"
124 self._sutStats = self._readSutStats();
125 print "Reading TS stats"
126 self._tsAllStats = self._readAllTSStats();
128 def _mergeTsStats(self):
129 # The first test system is the reference system. The totals
130 # will be accumulated by repeatedly taking the closest
131 # available data from other systems
133 for entry in self._tsAllStats[0]:
136 interSampleTime = ret[1][-1] - ret[0][-1];
138 mergedSampleCount = 0;
139 if (len(self._tsAllStats) == 1):
140 mergedSampleCount = len(ret)
142 for i in range(0, len(self._tsAllStats) - 1):
145 timeStamp = entry[-1]
148 for idx in range(prev, len(self._tsAllStats[i])):
149 diff = abs(self._tsAllStats[i][idx][-1] - timeStamp)
150 if (diff < interSampleTime):
156 entry[0] += self._tsAllStats[i][prev][0]
157 entry[1] += self._tsAllStats[i][prev][1]
158 mergedSampleCount += 1;
162 self._tsStats = ret[0: mergedSampleCount];
164 def _calcSetupRate(self):
165 for i in range(0, len(self._tsStats)):
169 prevCreated = self._tsStats[i - 1][1];
170 prevTime = self._tsStats[i - 1][-1];
171 curCreated = self._tsStats[i][1];
172 curTime = self._tsStats[i][-1];
174 setupRate = (curCreated - prevCreated)/(curTime - prevTime)
176 self._tsStats[i].append(setupRate);
179 def _readSutStats(self):
181 fileName = self._testResults.getSUTStatsDump();
182 beg = self._testResults.sutTime.getTime(0);
183 f = SutStatsConsFile(fileName, beg);
184 entry = f.readNext();
185 self._sutHz = f.getHz();
186 while (entry is not None):
188 entry = f.readNext();
192 def _readAllTSStats(self):
194 for i in range(self._testResults.getTSCount()):
195 fileName = self._testResults.getTSStatsDump()[i]
196 beg = self._testResults.tsTimes[i].getTime(0)
197 tsStat = self._readTSStats(fileName, beg)
198 stats.append(tsStat);
201 def _readTSStats(self, fileName, beg):
203 f = TSStatsConsFile(fileName, beg)
206 while (entry is not None):
208 entry = f.readNext();