diff --git a/run.py b/run.py index 9aa887a..e9d2bdd 100755 --- a/run.py +++ b/run.py @@ -7,6 +7,44 @@ import os import subprocess import workerpool import multiprocessing +import argparse + +###################################################################### +###################################################################### +###################################################################### + +parser = argparse.ArgumentParser(description='Simulation runner') +parser.add_argument('scenarios', metavar='scenario', type=str, nargs='*', + help='Scenario to run') + +parser.add_argument('-l', '--list', dest="list", action='store_true', default=False, + help='Get list of available scenarios') + +parser.add_argument('-s', '--simulate', dest="simulate", action='store_true', default=False, + help='Run simulation and postprocessing (false by default)') + +parser.add_argument('-g', '--no-graph', dest="graph", action='store_false', default=True, + help='Do not build a graph for the scenario (builds a graph by default)') + +args = parser.parse_args() + +if not args.list and len(args.scenarios)==0: + print "ERROR: at least one scenario need to be specified" + parser.print_help() + exit (1) + +if args.list: + print "Available scenarios: " +else: + if args.simulate: + print "Simulating the following scenarios: " + ",".join (args.scenarios) + + if args.graph: + print "Building graphs for the following scenarios: " + ",".join (args.scenarios) + +###################################################################### +###################################################################### +###################################################################### class SimulationJob (workerpool.Job): "Job to simulate things" @@ -18,38 +56,47 @@ class SimulationJob (workerpool.Job): pool = workerpool.WorkerPool(size = multiprocessing.cpu_count()) -class Runner: - # def congestion_zoom (self): - # cmdline = ["./build/congestion-zoom-ndn"] - # job = SimulationJob (cmdline) - # pool.put (job) +class Processor: + def run (self): + if args.list: + print " " + self.name + return - # cmdline = ["./build/congestion-zoom-tcp"] - # job = SimulationJob (cmdline) - # pool.put (job) + if "all" not in args.scenarios and self.name not in args.scenarios: + return - # def congestion_pop (self): - # runs = range(1,101) - # for run in runs: - # cmdline = ["./build/congestion-pop-ndn", - # "--run=%d" % run - # ] - # job = SimulationJob (cmdline) - # pool.put (job) + if args.list: + pass + else: + if args.simulate: + self.simulate () + pool.join () + self.postprocess () + if args.graph: + self.graph () - # cmdline = ["./build/congestion-pop-tcp", - # "--run=%d" % run - # ] - # job = SimulationJob (cmdline) - # pool.put (job) + def graph (self): + subprocess.call ("./graphs/%s.R" % self.name, shell=True) + +class Scenario (Processor): + def __init__ (self, name): + self.name = name + # other initialization, if any + + def simulate (self): + cmdline = ["./build/SCENARIO_TO_RUN"] + job = SimulationJob (cmdline) + pool.put (job) + + def postprocess (self): + # any postprocessing, if any + pass try: - runner = Runner () - # runner.congestion_zoom() - runner.congestion_pop() + # Simulation, processing, and graph building + fig = Scenario (name="NAME_TO_CONFIGURE") + fig.run () finally: + pool.join () pool.shutdown () - pool.wait () - -print "\n\n >>> FINISHED <<< \n\n" diff --git a/wscript b/wscript index 066fb31..3278a52 100644 --- a/wscript +++ b/wscript @@ -47,6 +47,7 @@ def configure(conf): if conf.options.debug: conf.define ('NS3_LOG_ENABLE', 1) + conf.define ('NS3_ASSERT_ENABLE', 1) conf.define ('_DEBUG', 1) conf.env.append_value('CXXFLAGS', ['-O0', '-g3']) else: @@ -57,6 +58,7 @@ def configure(conf): if conf.options.logging: conf.define ('NS3_LOG_ENABLE', 1) + conf.define ('NS3_ASSERT_ENABLE', 1) def build (bld): deps = 'BOOST BOOST_IOSTREAMS' + ' '.join (['ns3_'+dep for dep in ['core', 'network', 'internet', 'ndnSIM', 'topology-read', 'applications', 'mobility', 'visualizer']]).upper ()