From 84a9e71ad5239899f56236c34a4125853fb74733 Mon Sep 17 00:00:00 2001
From: erbel <johannes.erbel@cs.uni-goettingen.de>
Date: Sun, 7 Mar 2021 17:48:14 +0100
Subject: [PATCH] Add upscaler for spark

---
 .../java/de/ugoe/cs/rwm/mocci/DownScaler.java | 36 ++++++++++++++-----
 src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java  | 20 +++++------
 .../cs/rwm/mocci/RegistryAndLoggerSetup.java  | 32 ++++++++++++-----
 .../java/de/ugoe/cs/rwm/mocci/UpScaler.java   |  9 ++---
 4 files changed, 62 insertions(+), 35 deletions(-)

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 0303043..b06c2a3 100644
--- a/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java
+++ b/src/main/java/de/ugoe/cs/rwm/mocci/DownScaler.java
@@ -42,25 +42,29 @@ public class DownScaler extends AbsScaler {
 	}
 
 	public Resource downScaleNodes() {
+
 		CachedResourceSet.getCache().clear();
 		runtimeModel = ModelUtility.loadOCCIintoEMFResource(conn.loadRuntimeModel(runtimePath));
+
 		Configuration config = ((Configuration) runtimeModel.getContents().get(0));
 		boolean downScale = false;
 
 		for (org.eclipse.cmf.occi.core.Resource res : config.getResources()) {
 			if (res instanceof Compute) {
 				Compute comp = (Compute) res;
-				if (comp.getTitle().contains("hadoop-worker-additional")) {
+				if (comp.getTitle().contains("worker")) {
 					Monitorableproperty monProp = getAttachedCPUMonProp(comp);
 					if (monProp != null && monProp.getMonitoringResult() != null) {
 						if (monProp.getMonitoringResult().equals("None")) {
-							System.out.println("      VM with None CPU utilization found: " + comp.getId());
-							addConnectedLinksAndComponents(comp);
-							resourcesToDelete.add(comp);
-							System.out.println(
-									"      Delete Entities Around: " + comp.getTitle() + " (" + comp.getId() + ")");
-							downScale = true;
-							break;
+							if (atLeastTwoWorkers(config)) {
+								System.out.println("      VM with None CPU utilization found: " + comp.getId());
+								addConnectedLinksAndComponents(comp);
+								resourcesToDelete.add(comp);
+								System.out.println(
+										"      Delete Entities Around: " + comp.getTitle() + " (" + comp.getId() + ")");
+								downScale = true;
+								break;
+							}
 						}
 					}
 				}
@@ -87,6 +91,22 @@ public class DownScaler extends AbsScaler {
 
 	}
 
+	private boolean atLeastTwoWorkers(Configuration config) {
+		int count = 0;
+		for (org.eclipse.cmf.occi.core.Resource res : config.getResources()) {
+			if (res instanceof Compute) {
+				if (res.getTitle().contains("worker")) {
+					count++;
+				}
+			}
+		}
+		if (count >= 2) {
+			return true;
+		}
+		return false;
+
+	}
+
 	private Monitorableproperty getAttachedCPUMonProp(Compute comp) {
 		for (Link link : comp.getRlinks()) {
 			if (link instanceof Monitorableproperty) {
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 03431ed..b07b59a 100644
--- a/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java
+++ b/src/main/java/de/ugoe/cs/rwm/mocci/MAPE.java
@@ -15,7 +15,6 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 
 import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
 import org.json.JSONArray;
 import org.modmacao.occi.platform.Component;
 
@@ -46,8 +45,7 @@ public class MAPE {
 	/**
 	 * Making javadoc happy.
 	 *
-	 * @param args
-	 *            Making javadoc happy.
+	 * @param args Making javadoc happy.
 	 */
 	public static void main(String[] args) {
 		System.out.println("Starting MAPE loop");
@@ -98,7 +96,7 @@ public class MAPE {
 		switch (analysis) {
 		case "upScale":
 			System.out.println("Plan: upScale!");
-			UpScaler upscaler = new UpScaler(conn, RUNTIMEPATH);
+			UpScalerSpark upscaler = new UpScalerSpark(conn, RUNTIMEPATH);
 			return upscaler.upScaleNodes();
 		case "downScale":
 			System.out.println("Plan: downScale!");
@@ -106,9 +104,13 @@ public class MAPE {
 			return downscaler.downScaleNodes();
 		}
 		return null;
+
 	}
 
 	public static void execute(Resource runtimeModel) {
+		if (runtimeModel == null) {
+			System.out.println("Execute: Skipped as no scaling planned");
+		}
 		System.out.println("Execute: Deploying adjusted Model");
 		Path occiPath = RUNTIMEPATH;
 
@@ -116,14 +118,8 @@ public class MAPE {
 		trans2.setTransformationProperties(RegistryAndLoggerSetup.manNWRuntimeId, RegistryAndLoggerSetup.sshKey,
 				RegistryAndLoggerSetup.userData, RegistryAndLoggerSetup.manNWid);
 
-		try {
-			trans2.transform(runtimeModel, occiPath);
-		} catch (EolRuntimeException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-
-		runtimeModel = ModelUtility.loadOCCIintoEMFResource(occiPath);
+		// trans2.transform(runtimeModel, occiPath);
+		// runtimeModel = ModelUtility.loadOCCIintoEMFResource(occiPath);
 
 		MartDeployer deployer;
 		if (conn instanceof MartConnector) {
diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/RegistryAndLoggerSetup.java b/src/main/java/de/ugoe/cs/rwm/mocci/RegistryAndLoggerSetup.java
index f4fc1f7..4b1adc9 100644
--- a/src/main/java/de/ugoe/cs/rwm/mocci/RegistryAndLoggerSetup.java
+++ b/src/main/java/de/ugoe/cs/rwm/mocci/RegistryAndLoggerSetup.java
@@ -16,6 +16,7 @@ import org.apache.log4j.Logger;
 import org.eclipse.cmf.occi.core.OCCIPackage;
 import org.eclipse.cmf.occi.core.util.OcciRegistry;
 import org.eclipse.cmf.occi.crtp.CrtpPackage;
+import org.eclipse.cmf.occi.docker.DockerPackage;
 import org.eclipse.cmf.occi.infrastructure.InfrastructurePackage;
 import org.modmacao.ansibleconfiguration.AnsibleconfigurationPackage;
 import org.modmacao.occi.platform.PlatformPackage;
@@ -29,6 +30,7 @@ import de.ugoe.cs.rwm.docci.deprovisioner.Deprovisioner;
 import de.ugoe.cs.rwm.docci.executor.Executor;
 import de.ugoe.cs.rwm.docci.provisioner.Provisioner;
 import de.ugoe.cs.rwm.docci.retriever.ModelRetriever;
+import de.ugoe.cs.rwm.domain.workload.WorkloadPackage;
 import de.ugoe.cs.rwm.tocci.Transformator;
 import modmacao.ModmacaoPackage;
 import monitoring.MonitoringPackage;
@@ -48,7 +50,7 @@ public class RegistryAndLoggerSetup {
 	}
 
 	private static void loggerSetup() {
-		Logger.getLogger(Transformator.class.getName()).setLevel(Level.OFF);
+		Logger.getLogger(Transformator.class.getName()).setLevel(Level.INFO);
 		Logger.getLogger(Connector.class.getName()).setLevel(Level.OFF);
 		Logger.getLogger(ModelRetriever.class.getName()).setLevel(Level.OFF);
 		Logger.getLogger(Comparator.class.getName()).setLevel(Level.OFF);
@@ -60,7 +62,6 @@ public class RegistryAndLoggerSetup {
 	}
 
 	private static void registrySetup() {
-
 		InfrastructurePackage.eINSTANCE.eClass();
 		OCCIPackage.eINSTANCE.eClass();
 		ModmacaoPackage.eINSTANCE.eClass();
@@ -72,20 +73,25 @@ public class RegistryAndLoggerSetup {
 		MonitoringPackage.eINSTANCE.eClass();
 		PlatformPackage.eINSTANCE.eClass();
 		CrtpPackage.eINSTANCE.eClass();
+		WorkloadPackage.eINSTANCE.eClass();
+		DockerPackage.eINSTANCE.eClass();
+
+		OcciRegistry.getInstance().registerExtension("http://schemas.ugoe.cs.rwm/domain/workload#",
+				OCCIPackage.class.getClassLoader().getResource("model/workload.occie").toString());
 
 		OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/occi/platform#",
-				PlatformPackage.class.getClassLoader().getResource("model/platform.occie").toString());
+				OCCIPackage.class.getClassLoader().getResource("model/platform.occie").toString());
 
 		OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/modmacao#",
-				ModmacaoPackage.class.getClassLoader().getResource("model/modmacao.occie").toString());
+				OCCIPackage.class.getClassLoader().getResource("model/modmacao.occie").toString());
 		OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/openstack/runtime#",
-				OpenstackruntimePackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString());
+				OCCIPackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString());
 		OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/openstack/swe#",
-				OssweruntimePackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString());
+				OCCIPackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString());
 		OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/placement#",
-				PlacementPackage.class.getClassLoader().getResource("model/placement.occie").toString());
+				OCCIPackage.class.getClassLoader().getResource("model/placement.occie").toString());
 		OcciRegistry.getInstance().registerExtension("http://schemas.ogf.org/occi/infrastructure#",
-				InfrastructurePackage.class.getClassLoader().getResource("model/Infrastructure.occie").toString());
+				OCCIPackage.class.getClassLoader().getResource("model/Infrastructure.occie").toString());
 		OcciRegistry.getInstance().registerExtension("http://schemas.ogf.org/occi/core#",
 				OCCIPackage.class.getClassLoader().getResource("model/Core.occie").toString());
 		OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/openstack/swe#",
@@ -93,10 +99,18 @@ public class RegistryAndLoggerSetup {
 		OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/occi/ansible#",
 				OCCIPackage.class.getClassLoader().getResource("model/ansibleconfiguration.occie").toString());
 		OcciRegistry.getInstance().registerExtension("http://schemas.ugoe.cs.rwm/monitoring#",
-				MonitoringPackage.class.getClassLoader().getResource("model/monitoring.occie").toString());
+				OCCIPackage.class.getClassLoader().getResource("model/monitoring.occie").toString());
 		OcciRegistry.getInstance().registerExtension("http://schemas.ogf.org/occi/infrastructure/compute/template/1.1#",
 				OCCIPackage.class.getClassLoader().getResource("model/crtp.occie").toString());
 
+		OcciRegistry.getInstance().registerExtension("http://occiware.org/occi/docker#",
+				OCCIPackage.class.getClassLoader().getResource("model/docker.occie").toString());
+
+		for (String ext : OcciRegistry.getInstance().getRegisteredExtensions()) {
+			System.out.println(ext);
+		}
+
+		System.out.println(OcciRegistry.getInstance().getFileURI("http://schemas.ugoe.cs.rwm/domain/workload#"));
 		// Registry.INSTANCE.getExtensionToFactoryMap().put("*", new
 		// OCCIResourceFactoryImpl());
 
diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/UpScaler.java b/src/main/java/de/ugoe/cs/rwm/mocci/UpScaler.java
index ff915e8..2297525 100644
--- a/src/main/java/de/ugoe/cs/rwm/mocci/UpScaler.java
+++ b/src/main/java/de/ugoe/cs/rwm/mocci/UpScaler.java
@@ -17,6 +17,7 @@ import org.eclipse.cmf.occi.core.AttributeState;
 import org.eclipse.cmf.occi.core.Configuration;
 import org.eclipse.cmf.occi.core.Mixin;
 import org.eclipse.cmf.occi.core.MixinBase;
+import org.eclipse.cmf.occi.docker.DockerFactory;
 import org.eclipse.cmf.occi.infrastructure.Compute;
 import org.eclipse.cmf.occi.infrastructure.ComputeStatus;
 import org.eclipse.cmf.occi.infrastructure.Ipnetworkinterface;
@@ -28,12 +29,7 @@ import org.modmacao.placement.Placementlink;
 
 import de.ugoe.cs.rwm.docci.ModelUtility;
 import de.ugoe.cs.rwm.docci.connector.Connector;
-import monitoring.Datagatherer;
-import monitoring.Dataprocessor;
-import monitoring.Monitorableproperty;
-import monitoring.Occiresultprovider;
-import monitoring.Resultprovider;
-import monitoring.Sensor;
+import monitoring.*;
 import ossweruntime.Ubuntu_xenialxerus;
 
 public class UpScaler extends AbsScaler {
@@ -64,6 +60,7 @@ public class UpScaler extends AbsScaler {
 		System.out.println("         Adding Compute Node to Model");
 		Compute comp = iFactory.createCompute();
 		comp.setOcciComputeState(ComputeStatus.ACTIVE);
+		comp.setKind(DockerFactory.eINSTANCE.createContainer().getKind());
 
 		AttributeState state = factory.createAttributeState();
 		state.setName("occi.compute.state");
-- 
GitLab