diff --git a/build.gradle b/build.gradle index e921d22c4193f01455edd845c2f9ee28e7e98da0..768aa9c204794067a9c687ed7db5333fabfc238d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,64 +1,64 @@ apply plugin: "com.github.psxpaul.execfork" apply plugin: 'com.github.johnrengelman.shadow' -ext{ +ext { tocciVersion = '1.0.1' - docciVersion = '1.0.1' + docciVersion = '1.0.4' cocciVersion = '1.0.0' } buildscript { - repositories { - maven { - url "https://plugins.gradle.org/m2/" - } - } - dependencies { - classpath "gradle.plugin.com.github.psxpaul:gradle-execfork-plugin:0.1.8" - classpath "com.github.jengelman.gradle.plugins:shadow:4.0.3" - } + repositories { + maven { + url "https://plugins.gradle.org/m2/" + } + } + dependencies { + classpath "gradle.plugin.com.github.psxpaul:gradle-execfork-plugin:0.1.8" + classpath "com.github.jengelman.gradle.plugins:shadow:4.0.3" + } } allprojects { apply plugin: 'java' - apply plugin: 'eclipse' - apply plugin: 'maven' - + apply plugin: 'eclipse' + apply plugin: 'maven' + sourceCompatibility = 1.8 targetCompatibility = 1.8 - + repositories { - mavenCentral() - maven { - url "https://nexus.informatik.uni-goettingen.de/content/repositories/thirdparty/" - } - maven { - url "https://nexus.informatik.uni-goettingen.de/content/repositories/rwm/" - } - } - - javadoc { - source = sourceSets.main.allJava - classpath = configurations.compile - failOnError = true - } - - test { - testLogging.showStandardStreams = true + mavenCentral() + maven { + url "https://nexus.informatik.uni-goettingen.de/content/repositories/thirdparty/" + } + maven { + url "https://nexus.informatik.uni-goettingen.de/content/repositories/rwm/" + } + } + + javadoc { + source = sourceSets.main.allJava + classpath = configurations.compile + failOnError = true + } + + test { + testLogging.showStandardStreams = true testLogging { - exceptionFormat = 'full' - } - } + exceptionFormat = 'full' + } + } } configure([project(':de.ugoe.cs.rwm.mocci.connector'), project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject]) { apply plugin: 'checkstyle' apply plugin: 'findbugs' apply plugin: 'jacoco' - - checkstyle { + + checkstyle { toolVersion = '8.2' configFile = rootProject.file('config/checkstyle/checkstyle.xml') configProperties = [ @@ -67,104 +67,105 @@ configure([project(':de.ugoe.cs.rwm.mocci.connector'), project(':de.ugoe.cs.rwm. ignoreFailures = false showViolations = true } - + findbugs { - sourceSets = [sourceSets.main] - ignoreFailures = true - } - - tasks.withType(FindBugs) { - reports { - xml.enabled false - html.enabled true - } - } - - test.finalizedBy jacocoTestReport - - jacoco { - toolVersion = "0.8.1" - } - - jacocoTestReport { - additionalSourceDirs = files(sourceSets.main.allSource.srcDirs) - sourceDirectories = files(sourceSets.main.allSource.srcDirs) - classDirectories = files(sourceSets.main.output) - reports { - xml.enabled false - csv.enabled false - } - } + sourceSets = [sourceSets.main] + ignoreFailures = true + } + + tasks.withType(FindBugs) { + reports { + xml.enabled false + html.enabled true + } + } + + test.finalizedBy jacocoTestReport + + jacoco { + toolVersion = "0.8.1" + } + + jacocoTestReport { + additionalSourceDirs = files(sourceSets.main.allSource.srcDirs) + sourceDirectories = files(sourceSets.main.allSource.srcDirs) + classDirectories = files(sourceSets.main.output) + reports { + xml.enabled false + csv.enabled false + } + } } sourceSets { - startMartServer { - resources { - srcDir 'src/test/resources' + startMartServer { + resources { + srcDir 'src/test/resources' + } } - } } -eclipse.classpath.file.beforeMerged{ classpath -> classpath.entries.clear() } - -dependencies { - //occiware - compile group: 'org.eclipse.cmf.occi', name: 'core', version: '1.0.0' - compile group: 'org.eclipse.cmf.occi', name: 'infrastructure', version: '1.0.0' - compile group: 'org.eclipse.cmf.occi', name: 'crtp', version: '1.0.0' - - compile group: 'org.modmacao', name: 'core', version: '1.0.0' - compile group: 'org.modmacao', name: 'placement', version: '1.0.0' - compile group: 'org.modmacao.occi', name: 'platform', version: '1.0.0' - compile group: 'org.modmacao.openstack', name: 'runtime', version: '1.0.0' - compile group: 'org.modmacao.openstack.swe', name: 'runtime', version: '1.0.0' - compile group: 'org.modmacao', name: 'ansible', version: '1.0.0' - - - //own - compile group: 'de.ugoe.cs.rwm', name: 'cocci', version: cocciVersion - compile group: 'de.ugoe.cs.rwm', name: 'docci', version: docciVersion - compile group: 'de.ugoe.cs.rwm', name: 'tocci', version: tocciVersion - compile group: 'de.ugoe.cs.rwm.pog', name: 'model', version: '1.0.0' - //compile group: 'de.ugoe.cs.rwm.mocci', name: 'model', version: '1.0.0' - compile project(':de.ugoe.cs.rwm.mocci.model') - - //maven - compile group: 'log4j', name: 'log4j', version: '1.2.17' - compile group: 'com.google.guava', name: 'guava', version: '25.1-jre' - compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.0' - compile "org.eclipse.core:org.eclipse.core.runtime:3.7.0" - compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' - compile group: 'com.jcraft', name: 'jsch', version: '0.1.54' - - //Nexus - compile "org.eclipse.uml2:org.eclipse.uml2.uml:4.1.2" - //runtime? - compile "org.eclipse.uml2:org.eclipse.uml2.types:1.1.0" - compile "org.eclipse.uml2:org.eclipse.uml2.common:1.8.2" - compile group: 'org.eclipse.ocl', name: 'pivot', version: '1.3.0' - - testCompile group: 'junit', name: 'junit', version: '4.12' -} +eclipse.classpath.file.beforeMerged { classpath -> classpath.entries.clear() } +dependencies { + //occiware + compile group: 'org.eclipse.cmf.occi', name: 'core', version: '1.0.0' + compile group: 'org.eclipse.cmf.occi', name: 'infrastructure', version: '1.0.0' + compile group: 'org.eclipse.cmf.occi', name: 'crtp', version: '1.0.0' + compile group: 'org.modmacao', name: 'core', version: '1.0.0' + compile group: 'org.modmacao', name: 'placement', version: '1.0.0' + compile group: 'org.modmacao.occi', name: 'platform', version: '1.0.0' + compile group: 'org.modmacao.openstack', name: 'runtime', version: '1.0.1' + compile group: 'org.modmacao.openstack.swe', name: 'runtime', version: '1.0.0' + compile group: 'org.modmacao', name: 'ansible', version: '1.0.0' + compile group: 'org.eclipse.cmf.occi', name: 'docker', version: '1.0.0' -project(':de.ugoe.cs.rwm.mocci.model.edit') { - dependencies { + + //own + compile group: 'de.ugoe.cs.rwm.domain', name: 'workload', version: '1.0.1' + compile group: 'de.ugoe.cs.rwm', name: 'cocci', version: cocciVersion + compile group: 'de.ugoe.cs.rwm', name: 'docci', version: docciVersion + compile group: 'de.ugoe.cs.rwm', name: 'tocci', version: tocciVersion + compile group: 'de.ugoe.cs.rwm.pog', name: 'model', version: '1.0.0' + //compile group: 'de.ugoe.cs.rwm.mocci', name: 'model', version: '1.0.0' compile project(':de.ugoe.cs.rwm.mocci.model') - } + + //maven + compile group: 'log4j', name: 'log4j', version: '1.2.17' + compile group: 'com.google.guava', name: 'guava', version: '25.1-jre' + compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.11.0' + compile "org.eclipse.core:org.eclipse.core.runtime:3.7.0" + compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' + compile group: 'com.jcraft', name: 'jsch', version: '0.1.54' + + //Nexus + compile "org.eclipse.uml2:org.eclipse.uml2.uml:4.1.2" + //runtime? + compile "org.eclipse.uml2:org.eclipse.uml2.types:1.1.0" + compile "org.eclipse.uml2:org.eclipse.uml2.common:1.8.2" + compile group: 'org.eclipse.ocl', name: 'pivot', version: '1.3.0' + + testCompile group: 'junit', name: 'junit', version: '4.12' } -project(':de.ugoe.cs.rwm.mocci.connector') { - dependencies { - compile project(':de.ugoe.cs.rwm.mocci.model') - } + +project(':de.ugoe.cs.rwm.mocci.model.edit') { + dependencies { + compile project(':de.ugoe.cs.rwm.mocci.model') + } } -project(':de.ugoe.cs.rwm.mocci.connector.dummy') { - dependencies { - compile project(':de.ugoe.cs.rwm.mocci.model') - } +project(':de.ugoe.cs.rwm.mocci.connector') { + dependencies { + compile project(':de.ugoe.cs.rwm.mocci.model') + } +} + +project(':de.ugoe.cs.rwm.mocci.connector.dummy') { + dependencies { + compile project(':de.ugoe.cs.rwm.mocci.model') + } } jar { @@ -198,7 +199,7 @@ task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) { dependsOn = subprojects.test additionalSourceDirs = files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].sourceSets.main.allSource.srcDirs) sourceDirectories = files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].sourceSets.main.allSource.srcDirs) - classDirectories = files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].sourceSets.main.output) + classDirectories = files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].sourceSets.main.output) executionData = files([project(':de.ugoe.cs.rwm.mocci.connector.dummy'), rootProject].jacocoTestReport.executionData) reports { xml.enabled false @@ -208,17 +209,17 @@ task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) { uploadArchives { repositories { - mavenDeployer { - repository(url: "https://nexus.informatik.uni-goettingen.de/content/repositories/rwm/") { - authentication(userName: System.getenv('NEXUSUSER'), password: System.getenv('NEXUSPASSWORD')) + mavenDeployer { + repository(url: "https://nexus.informatik.uni-goettingen.de/content/repositories/rwm/") { + authentication(userName: System.getenv('NEXUSUSER'), password: System.getenv('NEXUSPASSWORD')) + } + if (System.getenv('VERSION') != null) { + pom.version = System.getenv('VERSION') + println "Version is set to: " + System.getenv('VERSION') } - if (System.getenv('VERSION') != null) { - pom.version = System.getenv('VERSION') - println "Version is set to: " + System.getenv('VERSION') - } - pom.version = "SNAPSHOT" - pom.artifactId = "mocci" - pom.groupId = "de.ugoe.cs.rwm" - } + pom.version = "SNAPSHOT" + pom.artifactId = "mocci" + pom.groupId = "de.ugoe.cs.rwm" + } } } diff --git a/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java b/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java new file mode 100644 index 0000000000000000000000000000000000000000..00642fe38263378d518137bfda8073bbb61c4397 --- /dev/null +++ b/src/main/java/de/ugoe/cs/rwm/mocci/UpScalerSpark.java @@ -0,0 +1,260 @@ +/** + * Copyright (c) 2018-2019 University of Goettingen + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * - Johannes Erbel <johannes.erbel@cs.uni-goettingen.de> + */ + +package de.ugoe.cs.rwm.mocci; + +import java.nio.file.Path; + +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.Container; +import org.eclipse.cmf.occi.docker.DockerFactory; +import org.eclipse.cmf.occi.infrastructure.Compute; +import org.eclipse.cmf.occi.infrastructure.ComputeStatus; +import org.eclipse.emf.ecore.resource.Resource; +import org.modmacao.occi.platform.Application; +import org.modmacao.occi.platform.Component; +import org.modmacao.occi.platform.Componentlink; +import org.modmacao.placement.Placementlink; + +import de.ugoe.cs.rwm.docci.ModelUtility; +import de.ugoe.cs.rwm.docci.connector.Connector; +import de.ugoe.cs.rwm.domain.workload.Componentsim; +import de.ugoe.cs.rwm.domain.workload.Computesim; +import de.ugoe.cs.rwm.domain.workload.Sensorsim; +import de.ugoe.cs.rwm.domain.workload.WorkloadFactory; +import monitoring.*; + +public class UpScalerSpark extends AbsScaler { + + public UpScalerSpark(Connector conn, Path runtimePath) { + this.conn = conn; + this.runtimePath = runtimePath; + } + + @SuppressWarnings("unused") + public Resource upScaleNodes() { + runtimeModel = ModelUtility.loadOCCIintoEMFResource(conn.loadRuntimeModel(runtimePath)); + Configuration config = ((Configuration) runtimeModel.getContents().get(0)); + + Compute comp = addCompute(config); + Component worker = addWorkerComponent(config, comp); + Sensor sens = addSensor(config, comp); + Resultprovider rp = addResultProvider(config, comp, sens); + + config.getResources().add(comp); + config.getResources().add(worker); + config.getResources().add(sens); + config.getResources().add(rp); + + return runtimeModel; + } + + private Compute addCompute(Configuration config) { + System.out.println(" Adding Compute Node to Model"); + Compute comp = iFactory.createCompute(); + comp.setOcciComputeState(ComputeStatus.ACTIVE); + Container cont = DockerFactory.eINSTANCE.createContainer(); + + comp.setKind(cont.getKind()); + + AttributeState state = factory.createAttributeState(); + state.setName("occi.compute.state"); + state.setValue("active"); + comp.getAttributes().add(state); + config.getResources().add(comp); + + comp.setTitle("Hadoop-Worker-additional"); + + AttributeState hostname = factory.createAttributeState(); + hostname.setName("occi.compute.hostname"); + hostname.setValue("Hadoop-Worker-additional"); + comp.getAttributes().add(hostname); + + Computesim sim = WorkloadFactory.eINSTANCE.createComputesim(); + comp.getParts().add(sim); + + return comp; + } + + private Component addWorkerComponent(Configuration config, Compute comp) { + System.out.println(" Adding Worker Component to Model"); + Component worker = pFactory.createComponent(); + worker.setTitle("hWorker"); + // worker.setOcciComponentState(Status.ACTIVE); + config.getResources().add(worker); + + AttributeState attr = factory.createAttributeState(); + attr.setName("occi.core.id"); + attr.setValue(worker.getId()); + worker.getAttributes().add(attr); + + MixinBase mBase = factory.createMixinBase(); + mBase.setMixin(getMixin("hadoop-worker", config)); + worker.getParts().add(mBase); + + Placementlink pLink = placeFactory.createPlacementlink(); + pLink.setSource(worker); + pLink.setTarget(comp); + + Componentlink compLink = pFactory.createComponentlink(); + compLink.setSource(getResourceById(config.getResources(), getApplicationId(config))); + compLink.setTarget(worker); + + Componentsim sim = WorkloadFactory.eINSTANCE.createComponentsim(); + worker.getParts().add(sim); + + MAPE.newComp = worker; + return worker; + } + + private String getApplicationId(Configuration config) { + for (org.eclipse.cmf.occi.core.Resource res : config.getResources()) { + if (res instanceof Application) { + if (res.getTitle().toLowerCase().contains("hadoop")) { + return res.getId(); + } + } + } + return ""; + } + + 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); + + AttributeState attr = factory.createAttributeState(); + attr.setName("occi.core.id"); + attr.setValue(sens.getId()); + sens.getAttributes().add(attr); + + Monitorableproperty mp = mFactory.createMonitorableproperty(); + mp.setTitle("monProp"); + mp.setMonitoringProperty("CPU"); + AttributeState attrProp = factory.createAttributeState(); + attrProp.setName("monitoring.property"); + attrProp.setValue("CPU"); + mp.getAttributes().add(attrProp); + mp.setSource(sens); + mp.setTarget(comp); + + Sensorsim sim = WorkloadFactory.eINSTANCE.createSensorsim(); + sim.setSimChangeRate(3000); + sim.setSimMonitoringResults("None, None, High, Critical"); + sens.getParts().add(sim); + + return sens; + } + + private Datagatherer addDataGatherer(Configuration config, Compute comp, Sensor sens) { + System.out.println(" Adding Datagatherer to Model"); + Datagatherer dg = mFactory.createDatagatherer(); + dg.setTitle("CPUGatherer"); + config.getResources().add(dg); + + AttributeState attr = factory.createAttributeState(); + attr.setName("occi.core.id"); + attr.setValue(dg.getId()); + dg.getAttributes().add(attr); + + MixinBase mBase = factory.createMixinBase(); + mBase.setMixin(getMixin("cpugatherer", config)); + dg.getParts().add(mBase); + + Componentlink c1 = pFactory.createComponentlink(); + c1.setSource(sens); + c1.setTarget(dg); + + Placementlink pl = placeFactory.createPlacementlink(); + pl.setSource(dg); + pl.setTarget(comp); + + return dg; + } + + private Dataprocessor addDataProcessor(Configuration config, Compute comp, Sensor sens, Datagatherer dg) { + System.out.println(" Adding Dataprocessor to Model"); + Dataprocessor dp = mFactory.createDataprocessor(); + dp.setTitle("CPUProcessor"); + config.getResources().add(dp); + + AttributeState attr = factory.createAttributeState(); + attr.setName("occi.core.id"); + attr.setValue(dp.getId()); + dp.getAttributes().add(attr); + + MixinBase mBase = factory.createMixinBase(); + mBase.setMixin(getMixin("cpuprocessorlocal", config)); + dp.getParts().add(mBase); + + Componentlink c2 = pFactory.createComponentlink(); + c2.setSource(sens); + c2.setTarget(dp); + Placementlink pl = placeFactory.createPlacementlink(); + pl.setSource(dp); + pl.setTarget(comp); + Componentlink cl = pFactory.createComponentlink(); + cl.setSource(dp); + cl.setTarget(dg); + return dp; + } + + private Resultprovider addResultProvider(Configuration config, Compute comp, Sensor sens) { + System.out.println(" Adding Resultprovider to Model"); + Resultprovider rp = mFactory.createResultprovider(); + rp.setTitle("CPUProvider"); + config.getResources().add(rp); + + Occiresultprovider orp = mFactory.createOcciresultprovider(); + orp.setResultProviderEndpoint("localhost:8080"); + AttributeState attrOP = factory.createAttributeState(); + attrOP.setName("result.provider.endpoint"); + attrOP.setValue("localhost:8080"); + rp.getAttributes().add(attrOP); + + rp.getParts().add(orp); + + MixinBase mBase = factory.createMixinBase(); + mBase.setMixin(getMixin("cpupublisher", config)); + rp.getParts().add(mBase); + + AttributeState attr = factory.createAttributeState(); + attr.setName("occi.core.id"); + attr.setValue(rp.getId()); + rp.getAttributes().add(attr); + + Componentlink c3 = pFactory.createComponentlink(); + c3.setSource(sens); + c3.setTarget(rp); + + Placementlink pl = placeFactory.createPlacementlink(); + pl.setSource(rp); + pl.setTarget(comp); + + Componentsim sim = WorkloadFactory.eINSTANCE.createComponentsim(); + rp.getParts().add(sim); + + return rp; + } + + private Mixin getMixin(String string, Configuration config) { + for (Mixin mix : config.getMixins()) { + if (mix.getTerm().equals(string)) { + return mix; + } + } + return null; + } +}