blob: 3ba008313a86f599d74b0622f26b98f38402cc4e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
'''
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, cyclelength=options.cyclelength, json=options.profile)
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])
|