blob: 84d5c0377745b01968b6349a7b90061e3d6594c2 [file] [log] [blame]
cameron@onlab.usc80a8c82015-04-15 14:57:37 -07001# ScaleOutTemplate
cameron@onlab.us1201bc42015-04-01 16:30:05 -07002#
3# CASE1 starts number of nodes specified in param file
4#
5# cameron@onlab.us
6
7import sys
8import os.path
9
10
11class IntentRerouteLat:
12
13 def __init__( self ):
14 self.default = ''
15
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070016 def CASE1( self, main ):
17
18 import time
19 global init
20 try:
21 if type(init) is not bool:
22 init = False
23 except NameError:
24 init = False
25
cameron@onlab.us1201bc42015-04-01 16:30:05 -070026 #Load values from params file
27 checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
28 gitPull = main.params[ 'GIT' ][ 'autopull' ]
29 cellName = main.params[ 'ENV' ][ 'cellName' ]
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070030 Apps = main.params[ 'ENV' ][ 'cellApps' ]
cameron@onlab.us1201bc42015-04-01 16:30:05 -070031 BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
32 BENCHUser = main.params[ 'BENCH' ][ 'user' ]
33 MN1Ip = main.params[ 'MN' ][ 'ip1' ]
34 maxNodes = int(main.params[ 'availableNodes' ])
cameron@onlab.us1201bc42015-04-01 16:30:05 -070035 skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070036 cellName = main.params[ 'ENV' ][ 'cellName' ]
cameron@onlab.us1201bc42015-04-01 16:30:05 -070037
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070038 # -- INIT SECTION, ONLY RUNS ONCE -- #
39 if init == False:
40 init = True
41 global clusterCount #number of nodes running
42 global ONOSIp #list of ONOS IP addresses
43 global scale
44 global commit
cameron@onlab.us1201bc42015-04-01 16:30:05 -070045
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070046 clusterCount = 0
47 ONOSIp = [ 0 ]
48 scale = (main.params[ 'SCALE' ]).split(",")
49 clusterCount = int(scale[0])
cameron@onlab.us1201bc42015-04-01 16:30:05 -070050
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070051 #Populate ONOSIp with ips from params
52 for i in range(1, maxNodes + 1):
53 ipString = 'ip' + str(i)
54 ONOSIp.append(main.params[ 'CTRL' ][ ipString ])
55
56 #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
57 if skipMvn != "yes":
58 mvnResult = main.ONOSbench.cleanInstall()
cameron@onlab.us1201bc42015-04-01 16:30:05 -070059
cameron@onlab.us1201bc42015-04-01 16:30:05 -070060 #git
61 main.step( "Git checkout and pull " + checkoutBranch )
62 if gitPull == 'on':
63 checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
64 pullResult = main.ONOSbench.gitPull()
65
66 else:
67 checkoutResult = main.TRUE
68 pullResult = main.TRUE
69 main.log.info( "Skipped git checkout and pull" )
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070070
71 commit = main.ONOSbench.getVersion()
72 commit = (commit.split(" "))[1]
cameron@onlab.us1201bc42015-04-01 16:30:05 -070073
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070074 resultsDB = open("IntentRerouteLatDB", "w+")
75 resultsDB.close()
cameron@onlab.us1201bc42015-04-01 16:30:05 -070076
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070077 # -- END OF INIT SECTION --#
78
79 clusterCount = int(scale[0])
80 scale.remove(scale[0])
81
cameron@onlab.us1201bc42015-04-01 16:30:05 -070082 switchParams = ("scale" + str(clusterCount) + "switches")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070083 switchCount = (main.params[ 'ENV' ][ switchParams ]).split(",")
cameron@onlab.us1201bc42015-04-01 16:30:05 -070084
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070085 #kill off all onos processes
86 main.log.step("Safety check, killing all ONOS processes")
87 main.log.step("before initiating enviornment setup")
88 for node in range(1, maxNodes + 1):
89 main.ONOSbench.onosDie(ONOSIp[node])
cameron@onlab.us1201bc42015-04-01 16:30:05 -070090
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070091 #Uninstall everywhere
92 main.log.step( "Cleaning Enviornment..." )
93 for i in range(1, maxNodes + 1):
94 main.log.info(" Uninstalling ONOS " + str(i) )
95 main.ONOSbench.onosUninstall( ONOSIp[i] )
96
97 #construct the cell file
cameron@onlab.us1201bc42015-04-01 16:30:05 -070098 main.log.info("Creating cell file")
cameron@onlab.us1201bc42015-04-01 16:30:05 -070099 cellIp = []
100 for node in range (1, clusterCount + 1):
101 cellIp.append(ONOSIp[node])
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700102
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700103 main.ONOSbench.createCellFile(BENCHIp,cellName,MN1Ip,str(Apps), *cellIp)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700104
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700105 main.step( "Set Cell" )
106 main.ONOSbench.setCell(cellName)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700107
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700108 if clusterCount == 1:
109 temp = "one"
110 if clusterCount == 3:
111 temp = "three"
112 if clusterCount == 5:
113 temp = "five"
114 if clusterCount == 7:
115 temp = "seven"
116
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700117 main.step( "Creating ONOS package" )
118 packageResult = main.ONOSbench.onosPackage()
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700119
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700120 main.step( "verify cells" )
121 verifyCellResult = main.ONOSbench.verifyCell()
122
123 main.log.report( "Initializing " + str( clusterCount ) + " node cluster." )
124 for node in range(1, clusterCount + 1):
125 main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
126 main.ONOSbench.onosInstall( ONOSIp[node])
127
128 for node in range(1, clusterCount + 1):
129 for i in range( 2 ):
130 isup = main.ONOSbench.isup( ONOSIp[node] )
131 if isup:
132 main.log.info("ONOS " + str(node) + " is up\n")
133 break
134 if not isup:
135 main.log.report( "ONOS " + str(node) + " didn't start!" )
136 main.log.info("Startup sequence complete")
137
138 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders deviceCount 8 " """)
139 main.ONOSbench.handle.expect(":~")
140 print repr(main.ONOSbench.handle.before)
141 time.sleep(3)
142 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders topoShape reroute" """)
143 main.ONOSbench.handle.expect(":~")
144 print repr(main.ONOSbench.handle.before)
145 time.sleep(3)
146 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled true" """)
147 main.ONOSbench.handle.expect(":~")
148 print repr(main.ONOSbench.handle.before)
149
150 while True:
151 main.ONOSbench.handle.sendline("onos $OC1 summary")
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700152 main.ONOSbench.handle.expect(":~")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700153 x = main.ONOSbench.handle.before
154 if "devices=8" in x:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700155 break
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700156 else:
157 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled false" """)
158 main.ONOSbench.handle.expect(":~")
159 time.sleep(3)
160 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled true" """)
161 main.ONOSbench.handle.expect(":~")
162 main.log.error("Null provider start failed, retrying..")
163 time.sleep(8)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700164
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700165 main.ONOSbench.handle.sendline("""onos $OC1 "null-simulation start" """)
166 main.ONOSbench.handle.expect(":~")
167 print main.ONOSbench.handle.before
168 time.sleep(10)
169 main.ONOSbench.handle.sendline("""onos $OC1 "balance-masters" """)
170 main.ONOSbench.handle.expect(":~")
171
172 temp = 1
173 for node in range(1, clusterCount + 1):
174 for switch in range (0, int(switchCount[node-1])):
175 cmd = ("""onos $OC1 "device-role null:000000000000000""" + str(temp) + " " + ONOSIp[node] + """ master" """)
176 main.ONOSbench.handle.sendline(cmd)
177 main.log.info( cmd )
178 main.ONOSbench.handle.expect(":~")
179 temp += 1
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700180
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700181
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700182 # cmd = ( """onos $OC1 "device-role null:0000000000000008 10.128.5.52 master" """)
183 #if clusterCount == 7:
184 # cmd = ( """onos $OC1 "device-role null:0000000000000008 10.128.5.53 master" """)
185
186 #main.ONOSbench.handle.sendline(cmd)
187 #main.log.info( cmd )
188 #main.ONOSbench.handle.expect(":~")
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700189
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700190 #print "sleeping"
191 #time.sleep(120)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700192
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700193 def CASE2( self, main ):
194
195 import time
196 import numpy
197 import datetime
198 #from scipy import stats
199
200 ts = time.time()
201 date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')
202
203 sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ])
204 warmUp = int(main.params[ 'TEST' ][ 'warmUp' ])
205 intentsList = (main.params[ 'TEST' ][ 'intents' ]).split(",")
206 debug = main.params[ 'TEST' ][ 'debug' ]
207 for i in range(0,len(intentsList)):
208 intentsList[i] = int(intentsList[i])
209
210 timestampMetrics = []
211 if main.params['METRICS']['Submitted'] == "1":
212 timestampMetrics.append("Submitted")
213 if main.params['METRICS']['Installed'] == "1":
214 timestampMetrics.append("Installed")
215 if main.params['METRICS']['Failed'] == "1":
216 timestampMetrics.append("Failed")
217 if main.params['METRICS']['Withdraw'] == "1":
218 timestampMetrics.append("Withdraw")
219 if main.params['METRICS']['Withdrawn'] == "1":
220 timestampMetrics.append("Withdrawn")
221 if debug: main.log.info(timestampMetrics)
222
223 if debug == "True":
224 debug = True
225 else:
226 debug = False
227
228 ingress = "null:0000000000000001"
229 egress = "null:0000000000000008"
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700230
231 for intents in intentsList:
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700232 main.log.report("Intent Batch size: " + str(intents) + "\n ")
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700233 myResult = [["latency", "lastNode"] for x in range(sampleSize)]
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700234
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700235 for run in range(0, (warmUp + sampleSize)):
236 if run > warmUp:
237 main.log.info("Starting test iteration " + str(run-warmUp))
238
239 cmd = """onos $OC1 push-test-intents -i" """
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700240 cmd += ingress + "/0 "
241 cmd += egress + "/0 "
242 cmd += str(intents) +""" 1" """
243 if debug: main.log.info(cmd)
244
245 withdrawCmd = cmd.replace("intents -i", "intents -w ")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700246
247 #push-test-intents
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700248 main.ONOSbench.handle.sendline(cmd)
249 main.ONOSbench.handle.expect(":~")
250 myRawResult = main.ONOSbench.handle.before
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700251
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700252 for i in range(0, 40):
253 main.ONOSbench.handle.sendline("onos $OC1 summary")
254 main.ONOSbench.handle.expect(":~")
255 linkCheck = main.ONOSbench.handle.before
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700256 if ("flows=16,") in linkCheck:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700257 break
258 if i == 39:
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700259 main.log.error("Flow count incorrect, data invalid."+ linkCheck)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700260
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700261
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700262 #collect timestamp from link cut
263 cmd = """onos $OC1 null-link "null:0000000000000004/1 null:0000000000000003/2 down" """
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700264 if debug: main.log.info("COMMAND: " + str(cmd))
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700265 main.ONOSbench.handle.sendline(cmd)
266
267 cmd = "onos-ssh $OC1 cat /opt/onos/log/karaf.log | grep TopologyManager| tail -1"
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700268 for i in range(0,10):
269 main.ONOSbench.handle.sendline(cmd)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700270 time.sleep(2)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700271 main.ONOSbench.handle.expect(":~")
272 raw = main.ONOSbench.handle.before
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700273 if "NullLinkProvider" in raw and "links=14" in raw:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700274 break
275 if i >= 9:
276 main.log.error("Expected output not being recieved... continuing")
277 main.log.info(raw)
278 break
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700279 time.sleep(2)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700280
281 temp = raw.splitlines()
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700282 for line in temp:
283 if str(date) in line:
284 temp = line
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700285 break
286
287 cutTimestamp = (temp.split(" "))[0] + " " + (temp.split(" "))[1]
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700288 if debug: main.log.info("Cut timestamp: " + cutTimestamp)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700289
290 #validate link count and flow count
291 for i in range(0, 40):
292 main.ONOSbench.handle.sendline("onos $OC1 summary")
293 main.ONOSbench.handle.expect(":~")
294 linkCheck = main.ONOSbench.handle.before
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700295 if "links=" + str(7*intents)+ "," in linkCheck and ("flows=" + str(7*intents) + ",") in linkCheck:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700296 break
297 if i == 39:
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700298 main.log.error("Link or flow count incorrect, data invalid." + linkCheck)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700299
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700300 #intents events metrics installed timestamp
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700301 IEMtimestamps = [0]*(clusterCount + 1)
302 installedTemp = [0]*(clusterCount + 1)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700303 for node in range(1, clusterCount +1):
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700304 cmd = "onos $OC" + str(node) + " intents-events-metrics|grep Timestamp"
305 raw = ""
306 while "Timestamp" not in raw:
307 main.ONOSbench.handle.sendline(cmd)
308 main.ONOSbench.handle.expect(":~")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700309 raw = main.ONOSbench.handle.before
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700310
311 intentsTimestamps = {}
312 rawTimestamps = raw.splitlines()
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700313 for line in rawTimestamps:
314 if "Timestamp" in line and "grep" not in line:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700315 metricKey = (line.split(" "))[1]
316 metricTimestamp = (line.split(" ")[len(line.split(" ")) -1]).replace("epoch)=","")
317 metricTimestamp = float(metricTimestamp)
318 metricTimestamp = numpy.divide(metricTimestamp, 1000)
319 if debug: main.log.info(repr(metricTimestamp))
320 intentsTimestamps[metricKey] = metricTimestamp
321 if metricKey == "Installed":
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700322 installedTemp[node] = metricTimestamp
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700323
324 main.log.info("Node: " + str(node) + " Timestamps: " + str(intentsTimestamps))
325 IEMtimestamps[node] = intentsTimestamps
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700326
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700327 myMax = max(installedTemp)
328 indexOfMax = installedTemp.index(myMax)
329
330 #number crunch
331 for metric in timestampMetrics: #this is where we sould add support for computing other timestamp metrics
332 if metric == "Installed":
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700333 if run >= warmUp:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700334 main.log.report("link cut timestamp: " + cutTimestamp)
335 #readableInstalledTimestamp = str(intentsTimestamps["Installed"])
336 readableInstalledTimestamp = str(myMax)
337
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700338 #main.log.report("Intent Installed timestamp: " + str(intentsTimestamps["Installed"]))
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700339 main.log.report("Intent Installed timestamp: " + str(myMax))
340
341 cutEpoch = time.mktime(time.strptime(cutTimestamp, "%Y-%m-%d %H:%M:%S,%f"))
342 if debug: main.log.info("cutEpoch=" + str(cutEpoch))
343 #rerouteLatency = float(intentsTimestamps["Installed"] - cutEpoch)
344 rerouteLatency = float(myMax - cutEpoch)
345
346 rerouteLatency = numpy.divide(rerouteLatency, 1000)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700347 main.log.report("Reroute latency:" + str(rerouteLatency) + " (seconds)\n ")
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700348 myResult[run-warmUp][0] = rerouteLatency
349 myResult[run-warmUp][1] = indexOfMax
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700350 if debug: main.log.info("Latency: " + str(myResult[run-warmUp][0]))
351 if debug: main.log.info("last node: " + str(myResult[run-warmUp][1]))
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700352
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700353 cmd = """ onos $OC1 null-link "null:0000000000000004/1 null:0000000000000003/2 up" """
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700354
355 #wait for intent withdraw
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700356 if debug: main.log.info(cmd)
357 main.ONOSbench.handle.sendline(cmd)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700358 main.ONOSbench.handle.expect(":~")
359 main.ONOSbench.handle.sendline("onos $OC1 intents|grep WITHDRAWN|wc -l")
360 main.ONOSbench.handle.expect(":~")
361 intentWithdrawCheck = main.ONOSbench.handle.before
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700362 if (str(intents)) in intentWithdrawCheck:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700363 main.log.info("intents withdrawn")
364 if debug: main.log.info(intentWithdrawCheck)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700365
366 # wait for links to be reestablished
367 for i in range(0, 10):
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700368 main.ONOSbench.handle.sendline("onos $OC1 summary")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700369 main.ONOSbench.handle.expect(":~")
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700370 linkCheck = main.ONOSbench.handle.before
371 if "links=16," in linkCheck:
372 break
373 time.sleep(1)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700374 if i == 9:
375 main.log.info("Links Failed to reconnect, next iteration of data invalid." + linkCheck)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700376
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700377 if run < warmUp:
378 main.log.info("Warm up run " + str(run+1) + " completed")
379
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700380 if debug: main.log.info(myResult)
381 latTemp = []
382 nodeTemp = []
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700383 for i in myResult:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700384 latTemp.append(i[0])
385 nodeTemp.append(i[1])
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700386
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700387 mode = {}
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700388 for i in nodeTemp:
389 if i in mode:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700390 mode[i] += 1
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700391 else:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700392 mode[i] = 1
393
394 for i in mode.keys():
395 if mode[i] == max(mode.values()):
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700396 nodeMode = i
397
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700398 average = numpy.average(latTemp)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700399 stdDev = numpy.std(latTemp)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700400
401 main.log.report("Scale: " + str(clusterCount) + " \tIntent batch: " + str(intents))
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700402 main.log.report("Latency average:................" + str(average))
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700403 main.log.report("Latency standard deviation:....." + str(stdDev))
404 main.log.report("Mode of last node to respond:..." + str(nodeMode))
405 main.log.report("________________________________________________________")
406
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700407 resultsDB = open("IntentRerouteLatDB", "w+")
408 resultsDB.write("'" + commit + "',")
409 resultsDB.write(str(clusterCount) + ",")
410 resultsDB.write(str(intents) + ",")
411 resultsDB.write(str(average) + ",")
412 resultsDB.write(str(stdDev) + "\n")
413 resultsDB.close()
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700414