import database
def boot(config, to_database = True):
- try:
- os.mkdir(sf(conf.output_folder))
- except FileExistsError:
- pass
-
- sprc = subprocess.Popen(conf.boot_command, stdout = subprocess.PIPE)
- with open(os.path.join(sf(conf.output_folder), config.cfile), "a") as f:
- for linen in sprc.stdout:
- line = linen.decode('utf-8')
- if conf.boot_output:
- print(line, end="")
- f.write(line)
-
- # Let user script parse double value
+ out = utils.callsubprocess('boot', conf.boot_command, conf.boot_output, True)
value = None
try:
if to_database:
dtb = database.database()
- dtb.add_measure(config.cfile, config.id, value)
-
- return config.cfile
+ dtb.add_measure(out, config.id, value)
return datetime.datetime.now().strftime('%y-%m-%d-%H-%M-%S')
Config = collections.namedtuple('Config', 'id hash config') # Named tuple for configuration
-Measure = collections.namedtuple('Measure', 'id conf_id mfile value') # Named tuple for measurement
+Measure = collections.namedtuple('Measure', 'id conf_id output value') # Named tuple for measurement
class database:
"Class used for accessing PostgreSQL project database."
rtn.append(Config(dt[0], hash, dt[1]))
return rtn
- def add_measure(self, mfile, conf_id, value = None):
+ def add_measure(self, output, conf_id, value = None):
"Add measurement."
ps = self.db.prepare("""INSERT INTO measure
- (conf, mfile, value, mtime, toolgit, linuxgit, measurement)
+ (conf, output, value, mtime, toolgit, linuxgit, measurement)
VALUES
($1, $2, $3, $4, $5, $6, $7);
""")
gt = self.check_toolsgit()
lgt = self.check_linuxgit()
tm = datetime.datetime.now()
- ps(conf_id, mfile, value, tm, gt, lgt, conf.measure_identifier)
+ ps(conf_id, output, value, tm, gt, lgt, conf.measure_identifier)
def update_measure(self, measure_id, value):
"Update measured value"
def get_measures(self, conf_id):
"Get measures for configuration with conf_id id"
- ps = self.db.prepare("""SELECT id, mfile, value FROM measure
+ ps = self.db.prepare("""SELECT id, output, value FROM measure
WHERE conf = $1;
""")
rtn = []
def get_unmeasured(self):
"Returns list of all unmeasured configurations."
- ps = self.db.prepare("""SELECT id, hash, cfile FROM configurations
+ ps = self.db.prepare("""SELECT id, hash, config FROM configurations
WHERE id NOT IN
(SELECT conf FROM measure)
""")
id BIGSERIAL PRIMARY KEY, -- Id
conf BIGINT REFERENCES configurations (id), -- Reference to configuration
measurement TEXT NOT NULL, -- Text identifivator of measuring tool
- mfile TEXT NOT NULL, -- File with measuring output
+ output TEXT NOT NULL, -- Output of boot
value DOUBLE PRECISION DEFAULT null, -- Measured data value
mtime timestamp NOT NULL, -- Time and date of measurement
linuxgit BIGINT REFERENCES linuxgit (id), -- Reference to git version of Linux
def callsubprocess(process_name, process, show_output = True,
return_output = False, env=os.environ, allowed_exit_codes = [0],
- allow_all_exit_codes = False):
+ allow_all_exit_codes = False, stdin = None):
sprc = subprocess.Popen(process, stdout = subprocess.PIPE,
- stderr = subprocess.STDOUT, env = env)
+ stderr = subprocess.STDOUT, stdin = subprocess.PIPE, env = env)
try:
os.mkdir(os.path.join(sf(conf.log_folder), process_name))
except OSError:
pass
+ if stdin != None:
+ sprc.stdin.write(bytes(stdin, sys.getdefaultencoding()))
+
rtn = []
with open(os.path.join(sf(conf.log_folder),
process_name, time.strftime("%y-%m-%d-%H-%M-%S") + ".log"),