blob: 751b13ae0fbbaad8510e853549a5bf94bb4eef77 [file] [log] [blame]
'''
Created on Apr 7, 2017
@author: jf9860
'''
import time
import os
from loadtest.RunEte import RunEte
from loadtest.TestConfig import TestConfig
import logging
class TestController(object):
'''
classdocs
'''
threads = {}
threadid = 0
soaksubfolder = 'soak_' + str(os.getpid())
test_number = 0
def __init__(self, options):
'''
Constructor
'''
self.config = TestConfig(duration=options.duration)
logging.info(self.config.to_string())
def execute(self):
starttime = time.time()
endtime = starttime + self.config.duration
profileindex = 0
currenttime = time.time()
logging.info("{}:{}:{}".format(starttime, endtime, currenttime))
while currenttime < endtime:
if (profileindex >= len(self.config.profile)):
profileindex = 0
profile = self.config.profile[profileindex]
sleeptime = profile[0]
currenttime = time.time()
if ((currenttime + sleeptime) < endtime):
time.sleep(sleeptime)
self.schedule(profile)
profileindex = profileindex + 1
currenttime = time.time()
else:
currenttime = endtime
for threadname in self.threads:
logging.info("TestController waiting on " + threadname)
t = self.threads[threadname]
t.join()
logging.info("Soak test completed")
def schedule(self, profile):
self.remove_completed_threads()
tests = profile[1]
for test in tests:
self.schedule_one(test)
def schedule_one(self, test):
self.test_number = self.test_number + 1
self.threadid = self.threadid + 1
threadname = "RunEte_" + str(self.threadid)
''' test for max threads '''
t = RunEte(test, self.soaksubfolder, str(self.test_number))
t.setName(threadname)
t.start()
self.threads[threadname] = t
def remove_completed_threads(self):
toremove = []
for threadname in self.threads:
t = self.threads[threadname]
if (t.isAlive() == False):
toremove.append(threadname)
for threadname in toremove:
logging.info("Removing " + threadname)
del(self.threads[threadname])