From 9e672e4061f71e8ad8114e0de7bd6471d439ee2a Mon Sep 17 00:00:00 2001
From: Marcel Becker <stu117960@mail.uni-kiel.de>
Date: Tue, 22 Feb 2022 13:43:46 +0100
Subject: [PATCH] Implemented review suggestions

---
 .../execution/TheodoliteExecutor.kt           | 25 +++++++---
 .../InitialGuessSearchStrategy.kt             | 16 ++----
 .../searchstrategy/SearchStrategy.kt          | 23 +++++----
 .../main/kotlin/theodolite/util/Results.kt    | 49 ++++++++++---------
 4 files changed, 56 insertions(+), 57 deletions(-)

diff --git a/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt b/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
index 77ebd099d..3879e6723 100644
--- a/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
+++ b/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
@@ -128,12 +128,21 @@ class TheodoliteExecutor(
                 config.searchStrategy.benchmarkExecutor.results,
                 "${resultsFolder}exp${this.config.executionId}-result"
             )
-            // Create expXYZ_demand.csv file
-            ioHandler.writeToCSVFile(
-                "${resultsFolder}exp${this.config.executionId}_demand",
-                calculateDemandMetric(config.loads, config.searchStrategy.benchmarkExecutor.results),
-                listOf("load","resources")
-            )
+            // Create expXYZ_demand.csv file or expXYZ_capacity.csv depending on metric
+            when(config.metric) {
+                Metric.DEMAND ->
+                    ioHandler.writeToCSVFile(
+                        "${resultsFolder}exp${this.config.executionId}_demand",
+                        calculateMetric(config.loads, config.searchStrategy.benchmarkExecutor.results),
+                        listOf("load","resources")
+                    )
+                Metric.CAPACITY ->
+                    ioHandler.writeToCSVFile(
+                        "${resultsFolder}exp${this.config.executionId}_capacity",
+                        calculateMetric(config.resources, config.searchStrategy.benchmarkExecutor.results),
+                        listOf("resource", "loads")
+                    )
+            }
         }
         kubernetesBenchmark.teardownInfrastructure()
     }
@@ -148,8 +157,8 @@ class TheodoliteExecutor(
         return executionID
     }
 
-    private fun calculateDemandMetric(loads: List<Int>, results: Results): List<List<String>> {
-        return loads.map { listOf(it.toString(), results.getOptYDimensionValue(it).toString()) }
+    private fun calculateMetric(xValues: List<Int>, results: Results): List<List<String>> {
+        return xValues.map { listOf(it.toString(), results.getOptYDimensionValue(it).toString()) }
     }
 
 }
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt
index 7a7100189..bd7fa71a2 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt
@@ -19,12 +19,7 @@ class InitialGuessSearchStrategy(benchmarkExecutor: BenchmarkExecutor, guessStra
 
     override fun findSuitableResource(load: Int, resources: List<Int>): Int? {
 
-        if(resources.isEmpty()) {
-            logger.info { "You need to specify resources to be checked for the InitialGuessSearchStrategy to work." }
-            return null
-        }
-
-        if(guessStrategy == null){
+        if(this.guessStrategy == null){
             logger.info { "Your InitialGuessSearchStrategy doesn't have a GuessStrategy. This is not supported." }
             return null
         }
@@ -86,14 +81,9 @@ class InitialGuessSearchStrategy(benchmarkExecutor: BenchmarkExecutor, guessStra
         return null
     }
 
-    override fun findSuitableLoad(resource: Int, loads: List<Int>): Int? {
-
-        if(loads.isEmpty()) {
-            logger.info { "You need to specify resources to be checked for the InitialGuessSearchStrategy to work." }
-            return null
-        }
+    override fun findSuitableLoad(resource: Int, loads: List<Int>): Int?{
 
-        if(guessStrategy == null){
+        if(this.guessStrategy == null){
             logger.info { "Your InitialGuessSearchStrategy doesn't have a GuessStrategy. This is not supported." }
             return null
         }
diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
index 85453934f..bd380f25a 100644
--- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
+++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt
@@ -27,20 +27,19 @@ abstract class SearchStrategy(val benchmarkExecutor: BenchmarkExecutor, val gues
      */
     fun applySearchStrategyByMetric(loads: List<Int>, resources: List<Int>, metric: Metric) {
 
-        if (metric.value == "demand") {
-            // demand metric
-            for (load in loads) {
-                if (benchmarkExecutor.run.get()) {
-                    this.findSuitableResource(load, resources)
+        when(metric) {
+            Metric.DEMAND ->
+                for (load in loads) {
+                    if (benchmarkExecutor.run.get()) {
+                        this.findSuitableResource(load, resources)
+                    }
                 }
-            }
-        } else {
-            // capacity metric
-            for (resource in resources) {
-                if (benchmarkExecutor.run.get()) {
-                    this.findSuitableLoad(resource, loads)
+            Metric.CAPACITY ->
+                for (resource in resources) {
+                    if (benchmarkExecutor.run.get()) {
+                        this.findSuitableLoad(resource, loads)
+                    }
                 }
-            }
         }
     }
 
diff --git a/theodolite/src/main/kotlin/theodolite/util/Results.kt b/theodolite/src/main/kotlin/theodolite/util/Results.kt
index 3d56e0129..b255ec73c 100644
--- a/theodolite/src/main/kotlin/theodolite/util/Results.kt
+++ b/theodolite/src/main/kotlin/theodolite/util/Results.kt
@@ -27,30 +27,31 @@ class Results (val metric: Metric) {
     fun setResult(experiment: Pair<Int, Int>, successful: Boolean) {
         this.results[experiment] = successful
 
-        if(metric.value == "demand" && optInstances.containsKey(experiment.first)){
-
-            if (optInstances[experiment.first]!! > experiment.second){
-                optInstances[experiment.first] = experiment.second
-            }
-        }
-        else if(metric.value == "demand" && !optInstances.containsKey(experiment.first)){
-            if(!successful){
-                optInstances[experiment.first] = Int.MAX_VALUE
-            }else {
-                optInstances[experiment.first] = experiment.second
-            }
-        }
-        else if(metric.value == "capacity" && optInstances.containsKey(experiment.second)){
-            if (optInstances[experiment.second]!! < experiment.first){
-                optInstances[experiment.second] = experiment.first
-            }
-        }
-        else if(metric.value == "capacity" && !optInstances.containsKey(experiment.second)){
-            if(!successful){
-                optInstances[experiment.second] = Int.MIN_VALUE
-            } else {
-                optInstances[experiment.second] = experiment.first
-            }
+        when (metric) {
+            Metric.DEMAND ->
+                if (optInstances.containsKey(experiment.first)) {
+                    if(optInstances[experiment.first]!! > experiment.second) {
+                        optInstances[experiment.first] = experiment.second
+                    }
+                } else {
+                    if(!successful){
+                        optInstances[experiment.first] = Int.MAX_VALUE
+                    }else {
+                        optInstances[experiment.first] = experiment.second
+                    }
+                }
+            Metric.CAPACITY ->
+                if (optInstances.containsKey(experiment.second)) {
+                    if (optInstances[experiment.second]!! < experiment.first){
+                        optInstances[experiment.second] = experiment.first
+                    }
+                } else {
+                    if(!successful){
+                        optInstances[experiment.second] = Int.MIN_VALUE
+                    } else {
+                        optInstances[experiment.second] = experiment.first
+                    }
+                }
         }
     }
 
-- 
GitLab