def executeExperiment(self, params, XensToVms):
		for key, value in XensToVms.iteritems():	
			vms = value
			for vm in vms:
				self.NodeToFile[vm].write("round(N)\t\t\tavgCPU(%)\t\t\tvarCPU(%)\t\t\tdevstdCPU(%)\t\t\tavgTS(%)\t\t\tjitter(ms)\t\t\tloss(%)\n")
		rate = params[1]
		interval = params[2]
		length = (params[0])*(interval*2)
		delay = params[3]
		
		consec_error = 0
		exper_error = 0
		limit_consec = int(self.nround/4)
		limit_exper = int(self.nround/2)
	
		for server in self.servers:
				print "Starting Server %s" % server.host
				server.start()		

		print "Max Sporadic Errors %s - Consecutive Errors %s" %(limit_exper, limit_consec)
		i = 0
		while i < self.nround:
			if (consec_error == limit_consec or exper_error == limit_exper):
				print "Exit...Reach Limit"
				break	
			XensToPollers = {}
			for client in self.clients:			
				print "Client %s vs Server %s: Run %s - Rate %sm" % (client.host, client.server, (i+1), params[1])
				client.start(str(length), rate)
			for xen, vms in XensToVms.iteritems():
				XensToPollers[xen]=(XentopPoller(params[0], interval, vms, xen, delay))
			for xen, poller in XensToPollers.iteritems():
				poller.start()
			for xen, poller in XensToPollers.iteritems():
				poller.join()
			for client in self.clients:
				client.join()
			jitter = "N/A"
			loss = "N/A"
			jitter = self.getClientsJitter()
			loss = self.getClientsLoss()
			for key, value in XensToVms.iteritems():	
				vms = value
				for vm in vms:
					self.NodeToFile[vm].write("%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s\n" %(i+1, XensToPollers[key].getAvgCPU(vm),  XensToPollers[key].getVarCPU(vm),  XensToPollers[key].getDEVCPU(vm),  XensToPollers[key].getAvgTS(vm), jitter, loss))
			if (isNumber(loss) and float(loss) < 2.0):
				consec_error = 0
				i = i + 1
			else:
				print "Error Too Loss %s Repeat Run - After %s Consecutive Error Or %s Sporadic Error The Experiment Stops" %(loss, limit_consec, limit_exper)
				consec_error = consec_error + 1
				exper_error = exper_error + 1	
			sleep(2)
		for key, value in XensToVms.iteritems():	
			vms = value
			for vm in vms:
				self.NodeToFile[vm].close()
	def executeExperiment(self, params, VMs):
		for VM in VMs:
			self.NodeToFile[VM].write("round(N)\t\t\tavgCPU(%)\t\t\tvarCPU(%)\t\t\tdevstdCPU(%)\t\t\tavgTS(%)\t\t\tjitter(ms)\t\t\tloss(%)\n")

		rate = params[1]
		interval = params[2]
		length = (params[0] + params[3])*(interval*2)
		delay = params[3]		
		consec_error = 0
		exper_error = 0
		limit_consec = int(self.nround/4) + 1
		limit_exper = int(self.nround/2) + 1
	
		for server in self.servers:
				print "Starting Server %s" % server.host
				server.start()		

		print "Max Sporadic Errors %s - Consecutive Errors %s" %(limit_exper, limit_consec)
		i = 0
		while i < self.nround:
			if (consec_error == limit_consec or exper_error == limit_exper):
				print "Exit...Reach Limit"
				break	
			for client in self.clients:			
				print "Client %s vs Server %s: Run %s - Rate %sm" % (client.host, client.server, (i+1), params[1])
				client.start(str(length), rate)
			poller = ZabbixPoller(params[0], interval, VMs, delay)
			poller.start()
			poller.join()
			for client in self.clients:
				client.join()
			jitter = "N/A"
			loss = "N/A"
			jitter = self.getClientsJitter()
			loss = self.getClientsLoss()
			for VM in VMs:
				self.NodeToFile[VM].write("%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s\t\t\t\t%s\n" %(i+1, poller.getAvgCPU(VM),  poller.getVarCPU(VM),  poller.getDEVCPU(VM),  poller.getAvgTS(VM), jitter, loss))
				print "Poller retrieve %s samples for %s: %s" % (len(poller.cpu_perc[VM]), VM, poller.cpu_perc[VM])
			if (isNumber(loss) and float(loss) < 2.0):
				consec_error = 0
				i = i + 1
			else:
				print "Error Too Loss %s Repeat Run - After %s Consecutive Error Or %s Sporadic Error The Experiment Stops" %(loss, limit_consec, limit_exper)
				consec_error = consec_error + 1
				exper_error = exper_error + 1	
			sleep(2)
		for VM in VMs:
			self.NodeToFile[VM].close()