2 # -*- coding: utf-8 -*-
18 sys.path.append(os.path.abspath("../../src"))
20 from nepi.core.execute import ExperimentController
22 class PopiExperiment(object):
23 def run(self, duration, xml_filepath, testset, results_dir, iteration):
26 testset_dir = os.path.join(results_dir, testset)
28 # create test results file
29 test_dir = os.path.join(testset_dir, str(iteration))
31 # replace results values in xml
32 replacements = cPickle.loads(os.environ['POPI_REPLACEMENTS'].strip().decode("base64"))
33 file = open(xml_filepath)
34 xml2 = xml = file.read()
37 for key,value in replacements.iteritems():
38 xml2 = xml2.replace("##%s##" % (key,), value)
41 controller = ExperimentController(xml2, results_dir)
48 while (t1-t0) < duration and not controller.is_finished(app_guid):
52 for testbed_guid, guids in controller.traces_info().iteritems():
53 for guid, traces in guids.iteritems():
54 for name, data in traces.iteritems():
55 path = data["filepath"]
56 print >>sys.stderr, "Downloading trace", path
58 filepath = os.path.join(test_dir, path)
61 trace = controller.trace(guid, name)
63 traceback.print_exc(file=sys.stderr)
66 if not os.path.exists(os.path.dirname(filepath)):
67 os.makedirs(os.path.dirname(filepath))
69 traceback.print_exc(file=sys.stderr)
72 if len(trace) >= 2**20:
73 # Bigger than 1M, compress
74 tracefile = gzip.GzipFile(filepath+".gz", "wb")
76 tracefile = open(filepath,"wb")
78 tracefile.write(trace)
82 traceback.print_exc(file=sys.stderr)
95 def results_append(self, file, testset, sta_pcap, ap_pcap):
96 line = "%s %s %s\n" % (testset, sta_pcap, ap_pcap)
99 if __name__ == '__main__':
100 experiment = PopiExperiment()
101 duration = int(sys.argv[1])
102 xml_filepath = sys.argv[2]
103 testset = sys.argv[3]
104 results_dir = sys.argv[4]
105 iteration = sys.argv[5]
106 experiment.run(duration, xml_filepath, testset, results_dir, iteration)