blob: 9127690d7160c355cf26480be203e6d64415eb36 [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 BENCHUser = main.params[ 'BENCH' ][ 'user' ]
cameron@onlab.us1201bc42015-04-01 16:30:05 -070032 maxNodes = int(main.params[ 'availableNodes' ])
cameron@onlab.us1201bc42015-04-01 16:30:05 -070033 skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070034 cellName = main.params[ 'ENV' ][ 'cellName' ]
cameron@onlab.us1201bc42015-04-01 16:30:05 -070035
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070036 # -- INIT SECTION, ONLY RUNS ONCE -- #
37 if init == False:
38 init = True
39 global clusterCount #number of nodes running
40 global ONOSIp #list of ONOS IP addresses
41 global scale
42 global commit
cameron@onlab.us1201bc42015-04-01 16:30:05 -070043
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070044 clusterCount = 0
45 ONOSIp = [ 0 ]
46 scale = (main.params[ 'SCALE' ]).split(",")
47 clusterCount = int(scale[0])
cameron@onlab.us1201bc42015-04-01 16:30:05 -070048
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070049 #Populate ONOSIp with ips from params
jenkins15b2b132015-06-23 14:04:09 -070050 ONOSIp = [0]
51 ONOSIp.extend(main.ONOSbench.getOnosIps())
jenkins15b2b132015-06-23 14:04:09 -070052
53 print("-----------------" + str(ONOSIp))
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070054 #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
55 if skipMvn != "yes":
56 mvnResult = main.ONOSbench.cleanInstall()
cameron@onlab.us1201bc42015-04-01 16:30:05 -070057
cameron@onlab.us1201bc42015-04-01 16:30:05 -070058 #git
59 main.step( "Git checkout and pull " + checkoutBranch )
60 if gitPull == 'on':
61 checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
62 pullResult = main.ONOSbench.gitPull()
63
64 else:
65 checkoutResult = main.TRUE
66 pullResult = main.TRUE
67 main.log.info( "Skipped git checkout and pull" )
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070068
69 commit = main.ONOSbench.getVersion()
70 commit = (commit.split(" "))[1]
cameron@onlab.us1201bc42015-04-01 16:30:05 -070071
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070072 resultsDB = open("IntentRerouteLatDB", "w+")
73 resultsDB.close()
cameron@onlab.us1201bc42015-04-01 16:30:05 -070074
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070075 # -- END OF INIT SECTION --#
76
77 clusterCount = int(scale[0])
78 scale.remove(scale[0])
jenkins8f8f4f32015-06-24 14:05:04 -070079
80 MN1Ip = ONOSIp[len(ONOSIp)-1]
81 BENCHIp = ONOSIp[len(ONOSIp)-2]
82
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070083 #kill off all onos processes
84 main.log.step("Safety check, killing all ONOS processes")
85 main.log.step("before initiating enviornment setup")
86 for node in range(1, maxNodes + 1):
87 main.ONOSbench.onosDie(ONOSIp[node])
cameron@onlab.us1201bc42015-04-01 16:30:05 -070088
cameron@onlab.usc80a8c82015-04-15 14:57:37 -070089 #Uninstall everywhere
90 main.log.step( "Cleaning Enviornment..." )
91 for i in range(1, maxNodes + 1):
92 main.log.info(" Uninstalling ONOS " + str(i) )
93 main.ONOSbench.onosUninstall( ONOSIp[i] )
94
95 #construct the cell file
cameron@onlab.us1201bc42015-04-01 16:30:05 -070096 main.log.info("Creating cell file")
cameron@onlab.us1201bc42015-04-01 16:30:05 -070097 cellIp = []
98 for node in range (1, clusterCount + 1):
99 cellIp.append(ONOSIp[node])
jenkins15b2b132015-06-23 14:04:09 -0700100
101 print "Cell ip" + str(cellIp)
102 print cellName
103 print MN1Ip
104 print Apps
105
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700106
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700107 main.ONOSbench.createCellFile(BENCHIp,cellName,MN1Ip,str(Apps), *cellIp)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700108
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700109 main.step( "Set Cell" )
110 main.ONOSbench.setCell(cellName)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700111
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700112 main.step( "Creating ONOS package" )
113 packageResult = main.ONOSbench.onosPackage()
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700114
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700115 main.step( "verify cells" )
116 verifyCellResult = main.ONOSbench.verifyCell()
117
118 main.log.report( "Initializing " + str( clusterCount ) + " node cluster." )
119 for node in range(1, clusterCount + 1):
120 main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
121 main.ONOSbench.onosInstall( ONOSIp[node])
122
123 for node in range(1, clusterCount + 1):
124 for i in range( 2 ):
125 isup = main.ONOSbench.isup( ONOSIp[node] )
126 if isup:
127 main.log.info("ONOS " + str(node) + " is up\n")
128 break
129 if not isup:
130 main.log.report( "ONOS " + str(node) + " didn't start!" )
131 main.log.info("Startup sequence complete")
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700132
133 deviceMastership = (main.params[ 'TEST' ][ "s" + str(clusterCount) ]).split(",")
134 print("Device mastership list: " + str(deviceMastership))
135
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700136 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders deviceCount 8 " """)
137 main.ONOSbench.handle.expect(":~")
138 print repr(main.ONOSbench.handle.before)
139 time.sleep(3)
140 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders topoShape reroute" """)
141 main.ONOSbench.handle.expect(":~")
142 print repr(main.ONOSbench.handle.before)
143 time.sleep(3)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700144
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700145 time.sleep(10)
146
147 once = True
148 for attempt in range(0,10):
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700149 main.ONOSbench.handle.sendline("onos $OC1 summary")
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700150 main.ONOSbench.handle.expect(":~")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700151 x = main.ONOSbench.handle.before
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700152 main.log.info("Initial setup. ONOS summary response: \n" + x + "\n")
153
154 if "devices=8" in x and "links=16," in x:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700155 break
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700156 else:
157 if once == False:
158 main.log.error("Null provider start failed, retrying..")
159 once = False
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700160 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled false" """)
161 main.ONOSbench.handle.expect(":~")
162 time.sleep(3)
163 main.ONOSbench.handle.sendline("""onos $OC1 "cfg set org.onosproject.provider.nil.NullProviders enabled true" """)
164 main.ONOSbench.handle.expect(":~")
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700165 time.sleep(8)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700166
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700167 index = 1
168 for node in deviceMastership:
169 for attempt in range(0,10):
170 cmd = ( "onos $OC" + node + """ "device-role null:000000000000000""" + str(index) + " " + ONOSIp[int(node)] + """ master" """)
171 main.log.info("assigning mastership of device " + str(index) + " to node " + node + ": \n " + cmd + "\n")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700172 main.ONOSbench.handle.sendline(cmd)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700173 main.ONOSbench.handle.expect(":~")
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700174 time.sleep(4)
175
176 cmd = ( "onos $OC" + node + " roles|grep 00000" + str(index))
177 main.log.info(cmd)
178 main.ONOSbench.handle.sendline(cmd)
179 main.ONOSbench.handle.expect(":~")
180 check = main.ONOSbench.handle.before
181 main.log.info("CHECK:\n" + check)
182 if ("master=" + ONOSIp[int(node)]) in check:
183 break
184 index += 1
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700185
jenkinsb4e0bb92015-06-19 13:37:47 -0700186 main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700187
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700188 def CASE2( self, main ):
189
190 import time
191 import numpy
192 import datetime
193 #from scipy import stats
194
195 ts = time.time()
196 date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')
197
198 sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ])
199 warmUp = int(main.params[ 'TEST' ][ 'warmUp' ])
200 intentsList = (main.params[ 'TEST' ][ 'intents' ]).split(",")
201 debug = main.params[ 'TEST' ][ 'debug' ]
202 for i in range(0,len(intentsList)):
203 intentsList[i] = int(intentsList[i])
204
205 timestampMetrics = []
206 if main.params['METRICS']['Submitted'] == "1":
207 timestampMetrics.append("Submitted")
208 if main.params['METRICS']['Installed'] == "1":
209 timestampMetrics.append("Installed")
210 if main.params['METRICS']['Failed'] == "1":
211 timestampMetrics.append("Failed")
212 if main.params['METRICS']['Withdraw'] == "1":
213 timestampMetrics.append("Withdraw")
214 if main.params['METRICS']['Withdrawn'] == "1":
215 timestampMetrics.append("Withdrawn")
216 if debug: main.log.info(timestampMetrics)
217
218 if debug == "True":
219 debug = True
220 else:
221 debug = False
222
223 ingress = "null:0000000000000001"
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700224 egress = "null:0000000000000007"
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700225
226 for intents in intentsList:
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700227 main.log.report("Intent Batch size: " + str(intents) + "\n ")
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700228 myResult = [["latency", "lastNode"] for x in range(sampleSize)]
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700229
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700230 for run in range(0, (warmUp + sampleSize)):
231 if run > warmUp:
232 main.log.info("Starting test iteration " + str(run-warmUp))
233
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700234 cmd = """onos $OC1 "push-test-intents -i """
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700235 cmd += ingress + "/0 "
236 cmd += egress + "/0 "
237 cmd += str(intents) +""" 1" """
238 if debug: main.log.info(cmd)
239
240 withdrawCmd = cmd.replace("intents -i", "intents -w ")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700241
242 #push-test-intents
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700243 main.ONOSbench.handle.sendline(cmd)
244 main.ONOSbench.handle.expect(":~")
245 myRawResult = main.ONOSbench.handle.before
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700246
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700247 for i in range(0, 40):
248 main.ONOSbench.handle.sendline("onos $OC1 summary")
249 main.ONOSbench.handle.expect(":~")
250 linkCheck = main.ONOSbench.handle.before
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700251 if ("links=16,") in linkCheck and ("flows=" + str(intents*7) + ","):
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700252 break
253 if i == 39:
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700254 main.log.error("Flow/link count incorrect, data invalid."+ linkCheck)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700255
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700256
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700257 #collect timestamp from link cut
258 cmd = """onos $OC1 null-link "null:0000000000000004/1 null:0000000000000003/2 down" """
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700259 if debug: main.log.info("COMMAND: " + str(cmd))
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700260 main.ONOSbench.handle.sendline(cmd)
jenkinsb4e0bb92015-06-19 13:37:47 -0700261 main.ONOSbench.handle.expect(":~")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700262
263 cmd = "onos-ssh $OC1 cat /opt/onos/log/karaf.log | grep TopologyManager| tail -1"
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700264 for i in range(0,10):
265 main.ONOSbench.handle.sendline(cmd)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700266 time.sleep(2)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700267 main.ONOSbench.handle.expect(":~")
268 raw = main.ONOSbench.handle.before
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700269 #if "NullLinkProvider" in raw and "links=14" in raw:
270 if "links=14" in raw:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700271 break
272 if i >= 9:
273 main.log.error("Expected output not being recieved... continuing")
274 main.log.info(raw)
275 break
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700276 time.sleep(2)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700277
278 temp = raw.splitlines()
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700279 for line in temp:
280 if str(date) in line:
281 temp = line
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700282 break
283
284 cutTimestamp = (temp.split(" "))[0] + " " + (temp.split(" "))[1]
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700285 if debug: main.log.info("Cut timestamp: " + cutTimestamp)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700286
287 #validate link count and flow count
288 for i in range(0, 40):
289 main.ONOSbench.handle.sendline("onos $OC1 summary")
290 main.ONOSbench.handle.expect(":~")
291 linkCheck = main.ONOSbench.handle.before
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700292 #if "links=" + str(7*intents)+ "," in linkCheck and ("flows=" + str(7*intents) + ",") in linkCheck:
293 if "links=14," in linkCheck and ("flows=" + str(8*intents) + ",") in linkCheck:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700294 break
295 if i == 39:
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700296 main.log.error("Link or flow count incorrect, data invalid." + linkCheck)
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700297
298 time.sleep(5) #trying to avoid negative values
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.us42f5a5b2015-05-06 13:55:34 -0700304 cmd = "onos $OC" + str(node) + """ "intents-events-metrics"|grep Timestamp """
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700305 raw = ""
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700306 while "epoch)" not in raw:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700307 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
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700311 print(raw)
312
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700313 intentsTimestamps = {}
314 rawTimestamps = raw.splitlines()
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700315 for line in rawTimestamps:
316 if "Timestamp" in line and "grep" not in line:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700317 metricKey = (line.split(" "))[1]
318 metricTimestamp = (line.split(" ")[len(line.split(" ")) -1]).replace("epoch)=","")
319 metricTimestamp = float(metricTimestamp)
320 metricTimestamp = numpy.divide(metricTimestamp, 1000)
321 if debug: main.log.info(repr(metricTimestamp))
322 intentsTimestamps[metricKey] = metricTimestamp
323 if metricKey == "Installed":
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700324 installedTemp[node] = metricTimestamp
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700325
326 main.log.info("Node: " + str(node) + " Timestamps: " + str(intentsTimestamps))
327 IEMtimestamps[node] = intentsTimestamps
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700328
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700329 myMax = max(installedTemp)
330 indexOfMax = installedTemp.index(myMax)
331
332 #number crunch
333 for metric in timestampMetrics: #this is where we sould add support for computing other timestamp metrics
334 if metric == "Installed":
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700335 if run >= warmUp:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700336 main.log.report("link cut timestamp: " + cutTimestamp)
337 #readableInstalledTimestamp = str(intentsTimestamps["Installed"])
338 readableInstalledTimestamp = str(myMax)
339
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700340 #main.log.report("Intent Installed timestamp: " + str(intentsTimestamps["Installed"]))
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700341 main.log.report("Intent Installed timestamp: " + str(myMax))
342
343 cutEpoch = time.mktime(time.strptime(cutTimestamp, "%Y-%m-%d %H:%M:%S,%f"))
344 if debug: main.log.info("cutEpoch=" + str(cutEpoch))
345 #rerouteLatency = float(intentsTimestamps["Installed"] - cutEpoch)
346 rerouteLatency = float(myMax - cutEpoch)
347
348 rerouteLatency = numpy.divide(rerouteLatency, 1000)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700349 main.log.report("Reroute latency:" + str(rerouteLatency) + " (seconds)\n ")
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700350 myResult[run-warmUp][0] = rerouteLatency
351 myResult[run-warmUp][1] = indexOfMax
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700352 if debug: main.log.info("Latency: " + str(myResult[run-warmUp][0]))
353 if debug: main.log.info("last node: " + str(myResult[run-warmUp][1]))
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700354
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700355 cmd = """ onos $OC1 null-link "null:0000000000000004/1 null:0000000000000003/2 up" """
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(":~")
jenkinsb4e0bb92015-06-19 13:37:47 -0700359
360
361
362 #wait for intent withdraw
363 main.ONOSbench.handle.sendline(withdrawCmd)
364 main.log.info(withdrawCmd)
365 main.ONOSbench.handle.expect(":~")
366 if debug: main.log.info(main.ONOSbench.handle.before)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700367 main.ONOSbench.handle.sendline("onos $OC1 intents|grep WITHDRAWN|wc -l")
368 main.ONOSbench.handle.expect(":~")
369 intentWithdrawCheck = main.ONOSbench.handle.before
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700370 if (str(intents)) in intentWithdrawCheck:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700371 main.log.info("intents withdrawn")
372 if debug: main.log.info(intentWithdrawCheck)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700373
374 # wait for links to be reestablished
375 for i in range(0, 10):
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700376 main.ONOSbench.handle.sendline("onos $OC1 summary")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700377 main.ONOSbench.handle.expect(":~")
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700378 linkCheck = main.ONOSbench.handle.before
379 if "links=16," in linkCheck:
380 break
381 time.sleep(1)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700382 if i == 9:
383 main.log.info("Links Failed to reconnect, next iteration of data invalid." + linkCheck)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700384
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700385 if run < warmUp:
386 main.log.info("Warm up run " + str(run+1) + " completed")
387
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700388 if debug: main.log.info(myResult)
389 latTemp = []
390 nodeTemp = []
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700391 for i in myResult:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700392 latTemp.append(i[0])
393 nodeTemp.append(i[1])
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700394
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700395 mode = {}
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700396 for i in nodeTemp:
397 if i in mode:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700398 mode[i] += 1
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700399 else:
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700400 mode[i] = 1
401
402 for i in mode.keys():
403 if mode[i] == max(mode.values()):
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700404 nodeMode = i
405
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700406 average = numpy.average(latTemp)
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700407 stdDev = numpy.std(latTemp)
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700408
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700409 average = numpy.multiply(average, 1000)
410 stdDev = numpy.multiply(stdDev, 1000)
411
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700412 main.log.report("Scale: " + str(clusterCount) + " \tIntent batch: " + str(intents))
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700413 main.log.report("Latency average:................" + str(average))
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700414 main.log.report("Latency standard deviation:....." + str(stdDev))
415 main.log.report("Mode of last node to respond:..." + str(nodeMode))
416 main.log.report("________________________________________________________")
417
cameron@onlab.us42f5a5b2015-05-06 13:55:34 -0700418 resultsDB = open("IntentRerouteLatDB", "a")
cameron@onlab.usc80a8c82015-04-15 14:57:37 -0700419 resultsDB.write("'" + commit + "',")
420 resultsDB.write(str(clusterCount) + ",")
421 resultsDB.write(str(intents) + ",")
422 resultsDB.write(str(average) + ",")
423 resultsDB.write(str(stdDev) + "\n")
424 resultsDB.close()
cameron@onlab.us1201bc42015-04-01 16:30:05 -0700425
jenkinsb4e0bb92015-06-19 13:37:47 -0700426 main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
427