]> git.somenet.org - pub/jan/lsdc.git/blob - src/at/ac/tuwien/lsdc/JobGenerator.java
implemented main logic of JobGenerator (add header to file,decide which type applicat...
[pub/jan/lsdc.git] / src / at / ac / tuwien / lsdc / JobGenerator.java
1 package at.ac.tuwien.lsdc;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.util.Random;
7
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10
11 import au.com.bytecode.opencsv.CSVWriter;
12
13 public class JobGenerator {
14         private static final Logger log = LoggerFactory
15                         .getLogger(JobGenerator.class);
16         private static final String USAGE = "JobGenerator needs exactly 3 parameters: Szenario, count, targetFile";
17
18         private enum ScenarioType {
19                 A, B, C
20         };
21
22         private static ScenarioType scenario;
23         private static int count;
24         private static File targetFile;
25
26         private static int numWBA;
27         private static int numHPA;
28
29         private static CSVWriter writer;
30
31         public static void main(String[] args) throws Exception {
32                 if (args.length == 3) {
33                         doArgumentHandling(args);
34                 } else if (args.length == 1) {
35                         String[] newArgs = args[0].split(" ");
36                         if (newArgs.length == 3) {
37                                 doArgumentHandling(newArgs);
38                         } else {
39                                 log.info(USAGE);
40                                 System.exit(1);
41                         }
42                 }
43                 writer = new CSVWriter(new FileWriter(targetFile), ';',
44                                 CSVWriter.NO_QUOTE_CHARACTER);
45                 writeCSVHeader();
46                 int timestamp = 1;
47                 for (int i = 0; i < count;i++) {
48                         timestamp = timestamp + calculateNextTimestamp();
49                         switch (scenario) {
50                         case A:
51                                 generateWBA(timestamp);
52                                 break;
53                         case B:
54                                 generateHPA(timestamp);
55                                 break;
56                         case C:
57                                 generateWBAorHPA(timestamp);
58                                 break;
59                         }
60                 }
61                 log.info("Created CSV " + targetFile.getName() + " for Scenario "
62                                 + scenario.toString());
63                 log.info("Total: " + (numWBA + numHPA) + " Expected: " + count);
64                 log.info("WBA: " + numWBA + " HPA: " + numHPA);
65                 writer.close();
66         }
67
68         private static void doArgumentHandling(String[] args) {
69                 log.info("handling args");
70                 String scenarioStr = args[0];
71                 String countStr = args[1];
72                 String targetFileStr = args[2];
73                 scenario = ScenarioType.valueOf(scenarioStr);
74                 try {
75                         boolean fileWriteOK = false;
76                         count = Integer.parseInt(countStr);
77                         targetFile = new File(targetFileStr);
78                         if (targetFile.exists()) {
79                                 fileWriteOK = targetFile.canWrite();
80                                 targetFile.delete();
81                                 targetFile.createNewFile();
82                         } else {
83                                 targetFile.createNewFile();
84                                 fileWriteOK = true;
85                         }
86                         if (!fileWriteOK)
87                                 throw new IOException("Can not write to File " + targetFileStr);
88                 } catch (Exception e) {
89                         e.printStackTrace();
90                         log.info(USAGE);
91                         System.exit(1);
92                 }
93         }
94
95         private static void writeCSVHeader() {
96                 String[] header = new String[] { "Timestamp", "Size", "RAM", "CPU",
97                                 "Duration" };
98                 writer.writeNext(header);
99         }
100
101         private static int calculateNextTimestamp() {
102                 // TODO: insert more random logic here ;)
103                 return 1;
104         }
105
106         private static void generateWBA(int timestamp) {
107                 //TODO: generate Application & write to CSV
108                 numWBA++;
109         }
110
111         private static void generateHPA(int timestamp) {
112                 //TODO: generate Application & write to CSV
113                 numHPA++;
114         }
115
116         private static void generateWBAorHPA(int timestamp) {
117                 Random r = new Random();
118                 boolean wba = r.nextBoolean();
119                 if (wba && (numWBA < (count / 2))) {
120                         generateWBA(timestamp);
121                 } else if (numHPA < (count / 2)) {
122                         generateHPA(timestamp);
123                 }
124         }
125 }