2 # -*- coding: utf-8 -*-
4 from nepi.core.execute import ExperimentController
18 class PopiExperiment(object):
19 def run(self, duration, xml_filepath, testset, results_dir, iteration):
22 testset_dir = os.path.join(results_dir, testset)
24 # create test results file
25 test_dir = os.path.join(testset_dir, str(iteration))
27 # replace results values in xml
28 replacements = cPickle.loads(os.environ['POPI_REPLACEMENTS'].strip().decode("base64"))
29 file = open(xml_filepath)
30 xml2 = xml = file.read()
33 for key,value in replacements.iteritems():
34 xml2 = xml2.replace("##%s##" % (key,), value)
37 controller = ExperimentController(xml2, results_dir)
44 while (t1-t0) < duration and not controller.is_finished(app_guid):
48 for testbed_guid, guids in controller.traces_info().iteritems():
49 for guid, traces in guids.iteritems():
50 for name, data in traces.iteritems():
51 path = data["filepath"]
52 print >>sys.stderr, "Downloading trace", path
54 filepath = os.path.join(test_dir, path)
57 trace = controller.trace(guid, name)
59 traceback.print_exc(file=sys.stderr)
62 if not os.path.exists(os.path.dirname(filepath)):
63 os.makedirs(os.path.dirname(filepath))
65 traceback.print_exc(file=sys.stderr)
68 if len(trace) >= 2**20:
69 # Bigger than 1M, compress
70 tracefile = gzip.GzipFile(filepath+".gz", "wb")
72 tracefile = open(filepath,"wb")
74 tracefile.write(trace)
78 traceback.print_exc(file=sys.stderr)
91 def results_append(self, file, testset, sta_pcap, ap_pcap):
92 line = "%s %s %s\n" % (testset, sta_pcap, ap_pcap)
95 if __name__ == '__main__':
96 experiment = PopiExperiment()
97 duration = int(sys.argv[1])
98 xml_filepath = sys.argv[2]
100 results_dir = sys.argv[4]
101 iteration = sys.argv[5]
102 experiment.run(duration, xml_filepath, testset, results_dir, iteration)