import json, re, sys, os, glob from os import path def eprint(*args, **kwargs): print(*args, file=sys.stderr, flush=True, **kwargs) def process_run(tree, runPath): ctf_mode = {} with open(".garlic/time_mode_runtime.csv", "r") as f: ctf_mode['runtime'] = float(f.readline()) with open(".garlic/time_mode_dead.csv", "r") as f: ctf_mode['dead'] = float(f.readline()) with open(".garlic/time_mode_task.csv", "r") as f: ctf_mode['task'] = float(f.readline()) tree['ctf_mode'] = ctf_mode with open("stdout.log", "r") as f: lines = [line.strip() for line in f.readlines()] time_line = None for line in lines: if re.match(r'^ ?time .*', line): time_line = line break if time_line is None: eprint("missing time line, aborting") eprint("stdout file = {}/stdout.log".format(runPath)) exit(1) time_str = time_line.split()[1] tree['time'] = float(time_str) print(json.dumps(tree)) def process_result_tree(resultTree): eprint("processing resultTree: " + resultTree) os.chdir(resultTree) experiments = glob.glob(resultTree + "/*-experiment") for exp in glob.glob("*-experiment"): eprint("found experiment: " + exp) expPath = path.join(resultTree, exp) os.chdir(expPath) for unit in glob.glob("*-unit"): eprint("found unit: " + unit) unitPath = path.join(resultTree, exp, unit) os.chdir(unitPath) with open('garlic_config.json') as json_file: garlic_conf = json.load(json_file) tree = {"exp":exp, "unit":unit, "config":garlic_conf} for i in range(garlic_conf['loops']): run = str(i + 1) runPath = path.join(resultTree, exp, unit, run) if path.isdir(runPath) == False: eprint("missing run {}, aborting".format(run)) exit(1) tree["run"] = run os.chdir(runPath) process_run(tree, runPath) if len(sys.argv) != 2: eprint("usage: python {} ".format(argv[0])) exit(1) process_result_tree(sys.argv[1])