From 6be26899b99b16976283536fa8b9cc6175edaf55 Mon Sep 17 00:00:00 2001
From: Stefan Derkits <stefan@derkits.at>
Date: Thu, 2 May 2013 18:47:03 +0200
Subject: [PATCH] added some Files and comments and methods

---
 src/at/ac/tuwien/lsdc/SchedSimulator.java     | 35 ++++++++++++++++++
 .../ac/tuwien/lsdc/federation/Federation.java | 16 ++++++++
 .../lsdc/management/MachineManager.java       |  8 ++++
 .../tuwien/lsdc/sched/AbstractScheduler.java  | 10 ++---
 src/at/ac/tuwien/lsdc/types/ScenarioData.java | 35 ++++++++++++++++++
 .../ac/tuwien/lsdc/types/SchedulerData.java   | 37 +++++++++++++++++++
 src/at/ac/tuwien/lsdc/util/CSVParser.java     |  8 +++-
 ...CSVLogger.java => CSVScenariosLogger.java} | 11 +++++-
 .../tuwien/lsdc/util/CSVSchedulerLogger.java  | 35 ++++++++++++++++++
 9 files changed, 185 insertions(+), 10 deletions(-)
 create mode 100644 src/at/ac/tuwien/lsdc/management/MachineManager.java
 create mode 100644 src/at/ac/tuwien/lsdc/types/ScenarioData.java
 create mode 100644 src/at/ac/tuwien/lsdc/types/SchedulerData.java
 rename src/at/ac/tuwien/lsdc/util/{CSVLogger.java => CSVScenariosLogger.java} (66%)
 create mode 100644 src/at/ac/tuwien/lsdc/util/CSVSchedulerLogger.java

diff --git a/src/at/ac/tuwien/lsdc/SchedSimulator.java b/src/at/ac/tuwien/lsdc/SchedSimulator.java
index 327b2e7..9495902 100644
--- a/src/at/ac/tuwien/lsdc/SchedSimulator.java
+++ b/src/at/ac/tuwien/lsdc/SchedSimulator.java
@@ -1,15 +1,50 @@
 package at.ac.tuwien.lsdc;
 
+import java.util.LinkedList;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import at.ac.tuwien.lsdc.sched.AbstractScheduler;
+import at.ac.tuwien.lsdc.sched.SchedulerA;
+import at.ac.tuwien.lsdc.sched.SchedulerB;
+import at.ac.tuwien.lsdc.sched.SchedulerC;
+import at.ac.tuwien.lsdc.types.Application;
+import at.ac.tuwien.lsdc.types.ScenarioData;
+import at.ac.tuwien.lsdc.util.CSVParser;
+import at.ac.tuwien.lsdc.util.CSVScenariosLogger;
+
 /**
  * Read config (command line properties) and start Scheduler-Simulation.
  */
 public class SchedSimulator {
 	private static final Logger log = LoggerFactory.getLogger(SchedSimulator.class);
+	
+	private static String schedulerType;
+	private static String inputFile;
+	private static String scenario;
 
 	public static void main(String[] args) throws Exception {
 		log.info("Hello World!");
+		parseCommandLineArgs(args);
+		CSVParser parser = new CSVParser(inputFile);
+		LinkedList<Application> apps = parser.parseFile();
+		AbstractScheduler scheduler;
+		switch (schedulerType) {
+		case "A":
+			scheduler = new SchedulerA();
+		case "B":
+			scheduler = new SchedulerB();
+		default:
+			scheduler = new SchedulerC();
+		}
+		
+		ScenarioData data = scheduler.initAndStart(apps);
+		CSVScenariosLogger logger = new CSVScenariosLogger("out_scen"+scenario+"sched"+schedulerType+".csv");
+		logger.appendScenarioData(data);
+	}
+	
+	private static void parseCommandLineArgs(String[] args) {
+		
 	}
 }
diff --git a/src/at/ac/tuwien/lsdc/federation/Federation.java b/src/at/ac/tuwien/lsdc/federation/Federation.java
index b275bc6..48cd704 100644
--- a/src/at/ac/tuwien/lsdc/federation/Federation.java
+++ b/src/at/ac/tuwien/lsdc/federation/Federation.java
@@ -1,5 +1,21 @@
 package at.ac.tuwien.lsdc.federation;
 
+import at.ac.tuwien.lsdc.types.Application;
+
 public class Federation {
+	
+	private int numPartners;
+	
+	public Federation(int numPartners) {
+		this.numPartners = numPartners;
+	}
+	
+	public boolean doOutsource(Application app) {
+		for (int i=0;i<numPartners;i++) {
+			//do some probability stuff
+			//e.g. every cloudPartner has a 30 % chance of accepting the app
+		}
+		return false;
+	}
 
 }
diff --git a/src/at/ac/tuwien/lsdc/management/MachineManager.java b/src/at/ac/tuwien/lsdc/management/MachineManager.java
new file mode 100644
index 0000000..027d64a
--- /dev/null
+++ b/src/at/ac/tuwien/lsdc/management/MachineManager.java
@@ -0,0 +1,8 @@
+package at.ac.tuwien.lsdc.management;
+
+public class MachineManager {
+	//this class is responsible to start and stop PMs & VMs
+	//also it will be used to put an application on a VM
+	//move an application and get utilization data
+
+}
diff --git a/src/at/ac/tuwien/lsdc/sched/AbstractScheduler.java b/src/at/ac/tuwien/lsdc/sched/AbstractScheduler.java
index 4ac1325..f86a5e8 100644
--- a/src/at/ac/tuwien/lsdc/sched/AbstractScheduler.java
+++ b/src/at/ac/tuwien/lsdc/sched/AbstractScheduler.java
@@ -5,13 +5,11 @@ import java.util.List;
 import java.util.Map;
 
 import at.ac.tuwien.lsdc.types.Application;
+import at.ac.tuwien.lsdc.types.ScenarioData;
 import at.ac.tuwien.lsdc.types.SchedulerEvent;
 
 public abstract class AbstractScheduler {
-
-	// should move to SchedulerType Class later on
 	
-
 	// the following types are only needed for correct
 	// log output
 	protected String schedulerName;
@@ -35,7 +33,7 @@ public abstract class AbstractScheduler {
 
 	// Initialize Scheduler with Data from CSV
 	// CSV will be parsed and sent as List<Application> to Scheduler
-	public String initAndStart(List<Application> apps) {
+	public ScenarioData initAndStart(List<Application> apps) {
 		for (Application a : apps) {
 			// read start timestamp
 			// save as Event in Map
@@ -67,7 +65,7 @@ public abstract class AbstractScheduler {
 
 	// this creates the total summary which should be written to a CSV at the
 	// end
-	protected String doEndLogging() {
-		return "CSV-String";
+	protected ScenarioData doEndLogging() {
+		return new ScenarioData(schedulerName,scenario,1,1,1,1,1,1);
 	}
 }
diff --git a/src/at/ac/tuwien/lsdc/types/ScenarioData.java b/src/at/ac/tuwien/lsdc/types/ScenarioData.java
new file mode 100644
index 0000000..fbb3cd5
--- /dev/null
+++ b/src/at/ac/tuwien/lsdc/types/ScenarioData.java
@@ -0,0 +1,35 @@
+package at.ac.tuwien.lsdc.types;
+
+public class ScenarioData {
+	
+	private String scheduler;
+	private String scenario;
+	private long totalPMs;
+	private long totalVMs;
+	private long totalDuration;
+	private long totalConsumption;
+	private int totalInSourced;
+	private int totalOutSourced;
+	
+	public ScenarioData(String scheduler, String scenario, long totalPMs,
+			long totalVMs, long totalDuration, long totalConsumption,
+			int totalInSourced, int totalOutSourced) {
+		this.scheduler = scheduler;
+		this.scenario = scenario;
+		this.totalPMs = totalPMs;
+		this.totalVMs = totalVMs;
+		this.totalDuration = totalDuration;
+		this.totalConsumption = totalConsumption;
+		this.totalInSourced = totalInSourced;
+		this.totalOutSourced = totalOutSourced;
+	}
+
+	@Override
+	public String toString() {
+		return scheduler + ";" + scenario + ";" + totalPMs + ";" + totalVMs + ";" + totalDuration
+				+ ";" + totalConsumption
+				+ ";" + totalInSourced + ";"
+				+ totalOutSourced;
+	}
+	
+}
diff --git a/src/at/ac/tuwien/lsdc/types/SchedulerData.java b/src/at/ac/tuwien/lsdc/types/SchedulerData.java
new file mode 100644
index 0000000..ca4d14c
--- /dev/null
+++ b/src/at/ac/tuwien/lsdc/types/SchedulerData.java
@@ -0,0 +1,37 @@
+package at.ac.tuwien.lsdc.types;
+
+public class SchedulerData {
+	
+	private long timestamp;
+	private long totalRAM;
+	private long totalCPU;
+	private long totalSize;
+	private long runningPMs;
+	private long runningVMs;
+	private long totalConsumption;
+	private int inSourced;
+	private int outSourced;
+	
+	public SchedulerData(long timestamp, long totalRAM, long totalCPU,
+			long totalSize, long runningPMs, long runningVMs,
+			long totalConsumption, int inSourced, int outSourced) {
+		this.timestamp = timestamp;
+		this.totalRAM = totalRAM;
+		this.totalCPU = totalCPU;
+		this.totalSize = totalSize;
+		this.runningPMs = runningPMs;
+		this.runningVMs = runningVMs;
+		this.totalConsumption = totalConsumption;
+		this.inSourced = inSourced;
+		this.outSourced = outSourced;
+	}
+
+	@Override
+	public String toString() {
+		return timestamp + ";" + totalRAM + ";" + totalCPU + ";"
+				+ totalSize + ";" + runningPMs + ";"
+				+ runningVMs + ";" + totalConsumption
+				+ ";" + inSourced + ";" + outSourced;
+	}
+
+}
diff --git a/src/at/ac/tuwien/lsdc/util/CSVParser.java b/src/at/ac/tuwien/lsdc/util/CSVParser.java
index 284d79d..4d3273e 100644
--- a/src/at/ac/tuwien/lsdc/util/CSVParser.java
+++ b/src/at/ac/tuwien/lsdc/util/CSVParser.java
@@ -2,8 +2,10 @@ package at.ac.tuwien.lsdc.util;
 
 import java.io.FileReader;
 import java.io.IOException;
+import java.util.LinkedList;
 import java.util.List;
 
+import at.ac.tuwien.lsdc.types.Application;
 import au.com.bytecode.opencsv.CSVReader;
 
 public class CSVParser {
@@ -13,9 +15,11 @@ public class CSVParser {
 		this.filename = filename;
 	}
 
-	public List readFile() throws IOException {
+	public LinkedList<Application> parseFile() throws IOException {
 		CSVReader reader = new CSVReader(new FileReader(filename));
-		return reader.readAll();
+		List<String[]> file = reader.readAll();
+		reader.close();
+		return new LinkedList<Application>();
 	}
 
 	
diff --git a/src/at/ac/tuwien/lsdc/util/CSVLogger.java b/src/at/ac/tuwien/lsdc/util/CSVScenariosLogger.java
similarity index 66%
rename from src/at/ac/tuwien/lsdc/util/CSVLogger.java
rename to src/at/ac/tuwien/lsdc/util/CSVScenariosLogger.java
index 82f69ac..ca28f85 100644
--- a/src/at/ac/tuwien/lsdc/util/CSVLogger.java
+++ b/src/at/ac/tuwien/lsdc/util/CSVScenariosLogger.java
@@ -4,15 +4,22 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.util.List;
 
+import at.ac.tuwien.lsdc.types.ScenarioData;
 import au.com.bytecode.opencsv.CSVWriter;
 
-public class CSVLogger {
+public class CSVScenariosLogger {
 	
 	private final String filename;
 
-	public CSVLogger(String filename) {
+	public CSVScenariosLogger(String filename) {
 		this.filename = filename;
 	}
+	
+	public void appendScenarioData( ScenarioData data ) {
+		//check if filename exists
+		//if not create file with header
+		//append line data.toString()
+	}
 
 	public void writeFile(List data) throws IOException {
 		CSVWriter writer = new CSVWriter(new FileWriter(filename), '\t');
diff --git a/src/at/ac/tuwien/lsdc/util/CSVSchedulerLogger.java b/src/at/ac/tuwien/lsdc/util/CSVSchedulerLogger.java
new file mode 100644
index 0000000..b87da9b
--- /dev/null
+++ b/src/at/ac/tuwien/lsdc/util/CSVSchedulerLogger.java
@@ -0,0 +1,35 @@
+package at.ac.tuwien.lsdc.util;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+
+import at.ac.tuwien.lsdc.types.SchedulerData;
+import au.com.bytecode.opencsv.CSVWriter;
+
+public class CSVSchedulerLogger {
+
+	private final String filename;
+
+	public CSVSchedulerLogger(String filename) {
+		this.filename = filename;
+	}
+
+	public void appendSchedulerData(SchedulerData data) {
+		// check if filename exists
+		// if not create file with header
+		// append line data.toString()
+	}
+
+	public void writeFile(List data) throws IOException {
+		CSVWriter writer = new CSVWriter(new FileWriter(filename), '\t');
+		writer.writeAll(data);
+		writer.close();
+	}
+
+	public void writeLine(String[] data) throws IOException {
+		CSVWriter writer = new CSVWriter(new FileWriter(filename), '\t');
+		writer.writeNext(data);
+		writer.close();
+	}
+}
-- 
2.43.0