diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentConfig.kt b/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentConfig.kt new file mode 100644 index 0000000000000000000000000000000000000000..5b2fb22c0fd88bf63a942c9b68a8a3042946ecd7 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentConfig.kt @@ -0,0 +1,26 @@ +package theodolite + +import theodolite.strategies.SearchAlgorithm + +data class ExperimentConfig( + val useCase: Int, + val expId: Int, + val dimValues: Array<Int>, + val replicass: Array<Int>, + val partitions: Int, + val cpuLimit: String, + val memoryLimit: String, + val executionMinutes: Float, + val prometheusBaseUrl: String, + val reset: Boolean, + val namespace: String, + val resultPath: String, + val configurations: Any, + val restrictionStrategy: SearchAlgorithm, + val searchStrategy: SearchStrategy, + val benchmark: Any, // TODO + val sloChecker: Any // TODO +) { + + +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentExecutor.kt new file mode 100644 index 0000000000000000000000000000000000000000..9c68ca5cf69843d77d9376e2007b35fc01785f92 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentExecutor.kt @@ -0,0 +1,9 @@ +package theodolite + +class ExperimentExecutor( + val config: ExperimentConfig +) { + fun run() { + this.config.restrictionStrategy.restrictResource(); + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt b/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt index cf6a7cb5d1fa028e0841d58839b674800f251edc..d606aedd87a2f5a2a3ad71fbf805589ba90c1e4d 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt @@ -6,9 +6,29 @@ import io.quarkus.runtime.annotations.QuarkusMain object Main { @JvmStatic fun main(args: Array<String>) { - println("Running main method") + println("Starting Benchmarks") + val config: ExperimentConfig = ExperimentConfig( + exp_id = 0, + use_case = 1, + dim_values = arrayOf(1,2,3), + configurations = TODO(), + domain_restriction_strategy = TODO(), + cpu_limit = "1000m", + execution_minutes = 5f, + memory_limit = "4gb", + namespace = "default", + partitions = 10, + prometheus_base_url = "http://localhost:9090", + replicass = arrayOf(1,2,3), + reset = false, + result_path = "./results", + search_strategy = TODO(), + subexperiment_evaluator = TODO(), + subexperiment_executor = TODO() + ) - //Quarkus.run() + val executor: ExperimentExecutor = ExperimentExecutor(config) + executor.run() } } diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/BinarySearch.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/BinarySearch.kt new file mode 100644 index 0000000000000000000000000000000000000000..c9fd0f498d88fe89eaaa06655a3e3dd40b7c2d00 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/BinarySearch.kt @@ -0,0 +1,10 @@ +package theodolite.strategies + +import theodolite.strategies.searchstrategy.Benchmark +import theodolite.strategies.searchstrategy.SearchStrategy + +class BinarySearch(benchmark: Benchmark) : SearchStrategy(benchmark) { + override fun findSuitableResources(load: Int, resources: List<Int>): Int { + + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/EvenResourcesRestriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/EvenResourcesRestriction.kt new file mode 100644 index 0000000000000000000000000000000000000000..24078a23dce707aad2758f1e86395beac5682717 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/EvenResourcesRestriction.kt @@ -0,0 +1,12 @@ +package theodolite.strategies + +import theodolite.strategies.restriction.CompositeRestriction +import theodolite.strategies.restriction.Restriction + +class EvenResourcesRestriction(childRestriction: Restriction) : CompositeRestriction(childRestriction) { + override fun restrict(loads: List<Int>, resources: List<Int>) { + val filteredResources: List<Int> = resources.filter { x -> x % 2 == 0 }; + this.childRestriction.restrict(loads, filteredResources); + } + +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LinearSearch.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LinearSearch.kt new file mode 100644 index 0000000000000000000000000000000000000000..79938f7fa20a710a7289979c841658bfb2dcf640 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LinearSearch.kt @@ -0,0 +1,14 @@ +package theodolite.strategies + +import theodolite.strategies.searchstrategy.Benchmark +import theodolite.strategies.searchstrategy.SearchStrategy + +class LinearSearch(benchmark: Benchmark) : SearchStrategy(benchmark) { + + override fun findSuitableResources(load: Int, resources: List<Int>): Int { + for (res in resources) { + if (this.benchmark.execute(load, res)) return resources.indexOf(res); + } + return resources.size; + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LowerBoundRestriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LowerBoundRestriction.kt new file mode 100644 index 0000000000000000000000000000000000000000..157281a4c8c6da073a29e2ec802bb059cc5ecd7d --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LowerBoundRestriction.kt @@ -0,0 +1,16 @@ +package theodolite.strategies + +import theodolite.strategies.restriction.PrimitiveRestriction +import theodolite.strategies.searchstrategy.SearchStrategy + +class LowerBoundRestriction(searchStrategy: SearchStrategy) : PrimitiveRestriction(searchStrategy) { + override fun restrict(loads: List<Int>, resources: List<Int>): List<Int> { + val lowerBounds: MutableList<Int> = ArrayList<Int>(); + var lowerBound = 0; + for (load in loads) { + lowerBound = this.searchStrategy.findSuitableResources(load, resources.subList(lowerBound, resources.size)); + lowerBounds.add(lowerBound); + } + return lowerBounds; + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/CompositeRestriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/CompositeRestriction.kt new file mode 100644 index 0000000000000000000000000000000000000000..6f61dc2ad0c7210001007510b999523c137ee501 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/CompositeRestriction.kt @@ -0,0 +1,4 @@ +package theodolite.strategies.restriction + +abstract class CompositeRestriction(val childRestriction: Restriction): Restriction { +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/PrimitiveRestriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/PrimitiveRestriction.kt new file mode 100644 index 0000000000000000000000000000000000000000..0e1873ec232316b0e535bcbeba47a3158dc54265 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/PrimitiveRestriction.kt @@ -0,0 +1,7 @@ +package theodolite.strategies.restriction + +import theodolite.strategies.searchstrategy.SearchStrategy + +abstract class PrimitiveRestriction(val searchStrategy: SearchStrategy): Restriction { + +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/Restriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/Restriction.kt new file mode 100644 index 0000000000000000000000000000000000000000..4dc5ca5246b6f75852e15b1a8ab25265961a983b --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/Restriction.kt @@ -0,0 +1,5 @@ +package theodolite.strategies.restriction + +interface Restriction { + fun restrict(loads: List<Int>, resources: List<Int>): List<Int>; +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/Benchmark.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/Benchmark.kt new file mode 100644 index 0000000000000000000000000000000000000000..eb3e22a362b61510bab97b4e518864d64fa0582a --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/Benchmark.kt @@ -0,0 +1,7 @@ +package theodolite.strategies.searchstrategy + +class Benchmark { + fun execute(load: Int, res: Int): Boolean { + return true; + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt new file mode 100644 index 0000000000000000000000000000000000000000..b42e78c9edb01b32bcb5be61c385296f9ac71c95 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt @@ -0,0 +1,5 @@ +package theodolite.strategies.searchstrategy + +abstract class SearchStrategy(val benchmark: Benchmark) { + abstract fun findSuitableResources(load: Int, resources: List<Int>): Int; +} \ No newline at end of file