package edu.usc.enl.dynamicmeasurement.process.task; import edu.usc.enl.dynamicmeasurement.algorithms.taskhandler.TaskHandler; import edu.usc.enl.dynamicmeasurement.data.ConfigReader; import edu.usc.enl.dynamicmeasurement.data.FinishPacket; import edu.usc.enl.dynamicmeasurement.data.trace.FilterTraceMapping; import edu.usc.enl.dynamicmeasurement.model.event.*; import edu.usc.enl.dynamicmeasurement.process.EpochPacket; import edu.usc.enl.dynamicmeasurement.util.SimulationConfiguration; import edu.usc.enl.dynamicmeasurement.util.Util; import java.io.File; /** * Created with IntelliJ IDEA. * User: masoud * Date: 9/2/13 * Time: 12:07 AM <br/> * The main script for running multiple configurations. * This can be given the address/addresses of config files or folder that contains config files with name config.xml. * If the first argument is a number it will be used as the maximum number of concurrent threads to be used. */ public class MultiTraceMainScript { public static void main(String[] args) { for (String arg : args) { System.out.println(arg); } try { SimulationConfiguration.threadsNum = Integer.parseInt(args[0]); for (int i = 1; i < args.length; i++) { try { run(args[i]); } catch (Exception e) { e.printStackTrace(); } } } catch (NumberFormatException e) { // if the first argument is not a number for (String filename : args) { try { run(filename); } catch (Exception e1) { e1.printStackTrace(); } } } } private static void run(String filename) throws Exception { //read the configuration file File file = new File(filename); if (file.isDirectory()) { filename = file.getAbsolutePath() + "/config.xml"; } ConfigReader configReader = new ConfigReader(); configReader.read(filename); FilterTraceMapping filterTraceMapping = new FilterTraceMapping(); SimulationConfiguration simulationConfiguration = Util.getSimulationConfiguration(); int epochSize = (int) simulationConfiguration.getEpoch(); // set event runner task handler and traffic transformer handler to allow events to run TaskHandler taskHandler = configReader.getTaskHandler(); for (Event event : configReader.getEvents()) { event.setEpoch(event.getEpoch() / epochSize); if (event instanceof TaskEvent) { ((TaskEvent) event).setHandler(taskHandler); if (event instanceof AddTraceTaskEvent) { ((AddTraceTaskEvent) event).setMapping(filterTraceMapping); } } else if (event instanceof TransformEvent) { ((TransformEvent) event).setHandler(taskHandler); } else if (event instanceof AddTrafficEvent) { ((AddTrafficEvent) event).setHandler(filterTraceMapping); } } taskHandler.createProfiler(); // wrap it by an event runner EventRunner eventRunner = new EventRunner(taskHandler, configReader.getEvents()); //run events int step = 0; long startTime = simulationConfiguration.getStartTime(); while (!eventRunner.isEmpty()) { eventRunner.forceStep(new EpochPacket(step * epochSize + startTime, step++)); //write reports taskHandler.writeLog(step); // System.gc(); taskHandler.writeProfiles(); Util.flushAllControlledWriters(); } //finish taskHandler.finishProfiler(); taskHandler.finish(new FinishPacket(step * epochSize + startTime)); } }