]> git.somenet.org - pub/jan/lsdc.git/blob - src/at/ac/tuwien/lsdc/SchedSimulator.java
added CSV logging (still little bit buggy)
[pub/jan/lsdc.git] / src / at / ac / tuwien / lsdc / SchedSimulator.java
1 package at.ac.tuwien.lsdc;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.util.Collections;
6 import java.util.LinkedList;
7
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10
11 import at.ac.tuwien.lsdc.sched.AbstractScheduler;
12 import at.ac.tuwien.lsdc.sched.SchedulerA;
13 import at.ac.tuwien.lsdc.sched.SchedulerB;
14 import at.ac.tuwien.lsdc.sched.SchedulerC;
15 import at.ac.tuwien.lsdc.types.Application;
16 import at.ac.tuwien.lsdc.types.ScenarioData;
17 import at.ac.tuwien.lsdc.types.ScenarioType;
18 import at.ac.tuwien.lsdc.types.SchedulerType;
19 import at.ac.tuwien.lsdc.util.CSVLogger;
20 import at.ac.tuwien.lsdc.util.CSVParser;
21
22 /**
23  * Read config (command line properties) and start Scheduler-Simulation.
24  */
25 public class SchedSimulator {
26
27         private static final String USAGE = "USAGE";
28
29         private static final Logger log = LoggerFactory
30                         .getLogger(SchedSimulator.class);
31
32         private static SchedulerType schedulerType;
33         private static ScenarioType scenario;
34         private static File inputFile;
35         private static File logFile;
36         private static File scenarioLogFile;
37
38         public static void main(String[] args) throws Exception {
39                 if (args.length == 5) {
40                         parseCommandLineArgs(args);
41                 } else if (args.length == 1) {
42                         String[] newArgs = args[0].split(" ");
43                         if (newArgs.length == 5) {
44                                 parseCommandLineArgs(newArgs);
45                         } else {
46                                 log.info(USAGE);
47                                 System.exit(1);
48                         }
49                 }
50                 LinkedList<Application> apps = CSVParser.parseFile(inputFile);
51                 Collections.sort(apps);
52                 AbstractScheduler scheduler;
53                 switch (schedulerType) {
54                 case A:
55                         scheduler = new SchedulerA(logFile,schedulerType,scenario);
56                 case B:
57                         scheduler = new SchedulerB(logFile,schedulerType,scenario);
58                 default:
59                         scheduler = new SchedulerC(logFile,schedulerType,scenario);
60                 }
61                 ScenarioData data = scheduler.initAndStart(apps);
62                 CSVLogger.logScenarioData(scenarioLogFile, data);
63         }
64
65         private static void parseCommandLineArgs(String[] args) {
66                 String scenarioStr = args[0];
67                 String schedulerTypeStr = args[1];
68                 String inputFileStr = args[2];
69                 String logFileStr = args[3];
70                 String scenarioLogFileStr = args[4];
71                 try {
72                         scenario = ScenarioType.valueOf(scenarioStr);
73                         schedulerType = SchedulerType.valueOf(schedulerTypeStr);
74                         inputFile = new File(inputFileStr);
75                         if (!inputFile.canRead())
76                                 throw new IOException("Can not read input file");
77                         logFile = new File(logFileStr);
78                         boolean  logFileOK = false;
79                         if ( logFile.canWrite() ) {
80                                 logFileOK = true;
81                         }
82                         else if (!logFile.exists()) {
83                                 logFile.createNewFile();
84                                 logFileOK = true;
85                         }
86                         if (!logFileOK)
87                                 throw new IOException("Can not write to log file");
88                         boolean fileWriteOK = false;
89                         scenarioLogFile = new File(scenarioLogFileStr);
90                         if (scenarioLogFile.exists()) {
91                                 fileWriteOK = scenarioLogFile.canWrite();
92                                 scenarioLogFile.delete();
93                                 scenarioLogFile.createNewFile();
94                                 System.out.println("Size of Scenariologfile: " + scenarioLogFile.length());
95                         } else {
96                                 scenarioLogFile.createNewFile();
97                                 fileWriteOK = true;
98                         }
99                         if (!fileWriteOK)
100                                 throw new IOException("Can not write to Scenario Log File "
101                                                 + scenarioLogFileStr);
102                 } catch (Exception e) {
103                         e.printStackTrace();
104                         log.info(USAGE);
105                         System.exit(1);
106                 }
107         }
108
109 }