From b97f4dee7b3e6433b944d4ce2252a1ed90941a9c Mon Sep 17 00:00:00 2001
From: erbel <johannes.erbel@cs.uni-goettingen.de>
Date: Wed, 31 Mar 2021 16:08:47 +0200
Subject: [PATCH] Improve sensor sim managemnt

---
 .../rwm/mocci/connector/SensorConnector.java  |  8 +++++
 .../java/de/ugoe/cs/rwm/mocci/DownScaler.java |  2 +-
 src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java  | 34 ++++++++++++++++---
 .../de/ugoe/cs/rwm/mocci/UpScalerSpark.java   | 32 +++++++++++++----
 4 files changed, 65 insertions(+), 11 deletions(-)

diff --git a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/SensorConnector.java b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/SensorConnector.java
index 8fc99ba..220f7af 100644
--- a/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/SensorConnector.java
+++ b/de.ugoe.cs.rwm.mocci.connector/src-gen/de/ugoe/cs/rwm/mocci/connector/SensorConnector.java
@@ -85,6 +85,14 @@ public class SensorConnector extends monitoring.impl.SensorImpl {
 	@Override
 	public void occiUpdate() {
 		LOGGER.debug("occiUpdate() called on " + this);
+		if (simulation != null) {
+			simulation.stop();
+			System.out.println("Restarting Sensor Simulation after attribute update!");
+			SensorSimulation sim = new SensorSimulation(this);
+			simulation = new Thread(sim);
+			simulation.start();
+
+		}
 		// TODO: Implement this callback or remove this method.
 	}
 	// End of user code
diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java b/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java
index b06c2a3..aea7d1e 100644
--- a/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java
+++ b/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java
@@ -95,7 +95,7 @@ public class DownScaler extends AbsScaler {
 		int count = 0;
 		for (org.eclipse.cmf.occi.core.Resource res : config.getResources()) {
 			if (res instanceof Compute) {
-				if (res.getTitle().contains("worker")) {
+				if (res.getTitle().toLowerCase().contains("worker")) {
 					count++;
 				}
 			}
diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java b/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java
index 1cfc449..91d086d 100644
--- a/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java
+++ b/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java
@@ -13,6 +13,7 @@ package de.ugoe.cs.rwm.mocci;
 
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Scanner;
 
 import org.eclipse.emf.ecore.resource.Resource;
 import org.json.JSONArray;
@@ -41,6 +42,7 @@ public class MAPE {
 	static Resource runtimeModel;
 	static Component newComp;
 	static int interval = 5000;
+	static boolean manualMode = false;
 
 	/**
 	 * Making javadoc happy.
@@ -51,11 +53,36 @@ public class MAPE {
 		System.out.println("Starting MAPE loop");
 		RegistryAndLoggerSetup.setup();
 
+		for (String arg : args) {
+			if (arg.matches("\\d+")) {
+				System.out.println("Cycle argument set to: " + arg);
+				interval = Integer.parseInt(arg);
+			}
+			if (arg.matches("manual")) {
+				System.out.println("Manual mode enabled!");
+				manualMode = true;
+			}
+		}
+
+		if (args.length == 0) {
+			System.out.println("No argument given. Using default cycle of: " + interval);
+		}
+
 		while (true) {
 			try {
-				System.out.println("\n--------------------Waiting for new MAPE-K Cycle: Sleeping " + interval
-						+ "--------------------");
-				Thread.sleep(interval);
+				if (manualMode) {
+					System.out.println("Press Enter to trigger next cycle or write exit to stop the loop.");
+					Scanner scanner = new Scanner(System.in);
+					String line = scanner.nextLine();
+					if (line.equals("exit")) {
+						return;
+					}
+					System.out.println("Next Cycle triggered");
+				} else {
+					System.out.println("\n--------------------Waiting for new MAPE-K Cycle: Sleeping " + interval
+							+ "--------------------");
+					Thread.sleep(interval);
+				}
 
 				Monitor monitor = monitor();
 				String analysis = analyze(monitor);
@@ -64,7 +91,6 @@ public class MAPE {
 			} catch (InterruptedException e) {
 				e.printStackTrace();
 			}
-
 		}
 	}
 
diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java b/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java
index 00642fe..5cf2c45 100644
--- a/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java
+++ b/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java
@@ -74,11 +74,11 @@ public class UpScalerSpark extends AbsScaler {
 		comp.getAttributes().add(state);
 		config.getResources().add(comp);
 
-		comp.setTitle("Hadoop-Worker-additional");
+		comp.setTitle("Hadoop-worker-additional");
 
 		AttributeState hostname = factory.createAttributeState();
 		hostname.setName("occi.compute.hostname");
-		hostname.setValue("Hadoop-Worker-additional");
+		hostname.setValue("Hadoop-worker-additional");
 		comp.getAttributes().add(hostname);
 
 		Computesim sim = WorkloadFactory.eINSTANCE.createComputesim();
@@ -132,8 +132,21 @@ public class UpScalerSpark extends AbsScaler {
 	private Sensor addSensor(Configuration config, Compute comp) {
 		System.out.println("         Adding Sensor to Model");
 		Sensor sens = mFactory.createSensor();
-		sens.setTitle("CPUSensor");
-		config.getResources().add(sens);
+		sens.setTitle("sensor");
+		AttributeState attrName = factory.createAttributeState();
+		attrName.setName("occi.app.name");
+		attrName.setValue("sensor");
+		sens.getAttributes().add(attrName);
+
+		AttributeState attrContext = factory.createAttributeState();
+		attrContext.setName("occi.app.context");
+		attrContext.setValue("http://www.de");
+		sens.getAttributes().add(attrContext);
+
+		AttributeState attrUrl = factory.createAttributeState();
+		attrUrl.setName("occi.app.url");
+		attrUrl.setValue("http://www.de");
+		sens.getAttributes().add(attrUrl);
 
 		AttributeState attr = factory.createAttributeState();
 		attr.setName("occi.core.id");
@@ -151,10 +164,17 @@ public class UpScalerSpark extends AbsScaler {
 		mp.setTarget(comp);
 
 		Sensorsim sim = WorkloadFactory.eINSTANCE.createSensorsim();
+		String simString = "None, None, High, Critical";
 		sim.setSimChangeRate(3000);
-		sim.setSimMonitoringResults("None, None, High, Critical");
+		sim.setSimMonitoringResults(simString);
+		AttributeState attrRes = factory.createAttributeState();
+		attrRes.setName("sim.monitoring.results");
+		attrRes.setValue(simString);
+		sim.getAttributes().add(attrRes);
 		sens.getParts().add(sim);
 
+		config.getResources().add(sens);
+
 		return sens;
 	}
 
@@ -214,7 +234,7 @@ public class UpScalerSpark extends AbsScaler {
 	private Resultprovider addResultProvider(Configuration config, Compute comp, Sensor sens) {
 		System.out.println("             Adding Resultprovider to Model");
 		Resultprovider rp = mFactory.createResultprovider();
-		rp.setTitle("CPUProvider");
+		// rp.setTitle("CPUProvider");
 		config.getResources().add(rp);
 
 		Occiresultprovider orp = mFactory.createOcciresultprovider();
-- 
GitLab