summaryrefslogtreecommitdiff
path: root/opendc-experiments/opendc-experiments-scenario/src/main/kotlin
diff options
context:
space:
mode:
authorDante Niewenhuis <d.niewenhuis@hotmail.com>2024-03-19 20:26:04 +0100
committerGitHub <noreply@github.com>2024-03-19 20:26:04 +0100
commitdff30fa60809c018101052f395b09cf17cb83ccb (patch)
tree2c5f67b9424547061aaa0c6b6b85af9a125ec263 /opendc-experiments/opendc-experiments-scenario/src/main/kotlin
parent960b3d8a13c67ac4b7f479d5764b0b618fc9ea09 (diff)
Scenario and Portfolio update (#209)
* Initial commit * Implemented a new systems of defining and running scenarios / portfolios. Scenarios and Portfolios can now be defined using JSON files similar to topologies. This allows user to define experiments without changing any KotLin code. * Ran spotlessApply
Diffstat (limited to 'opendc-experiments/opendc-experiments-scenario/src/main/kotlin')
-rw-r--r--opendc-experiments/opendc-experiments-scenario/src/main/kotlin/org/opendc/experiments/scenario/ScenarioCli.kt64
1 files changed, 64 insertions, 0 deletions
diff --git a/opendc-experiments/opendc-experiments-scenario/src/main/kotlin/org/opendc/experiments/scenario/ScenarioCli.kt b/opendc-experiments/opendc-experiments-scenario/src/main/kotlin/org/opendc/experiments/scenario/ScenarioCli.kt
new file mode 100644
index 00000000..b2603375
--- /dev/null
+++ b/opendc-experiments/opendc-experiments-scenario/src/main/kotlin/org/opendc/experiments/scenario/ScenarioCli.kt
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2022 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+@file:JvmName("ScenarioCli")
+
+package org.opendc.experiments.scenario
+
+import com.github.ajalt.clikt.core.CliktCommand
+import com.github.ajalt.clikt.parameters.options.default
+import com.github.ajalt.clikt.parameters.options.defaultLazy
+import com.github.ajalt.clikt.parameters.options.option
+import com.github.ajalt.clikt.parameters.types.file
+import com.github.ajalt.clikt.parameters.types.int
+import org.opendc.experiments.base.models.scenario.getScenario
+import org.opendc.experiments.base.runner.runScenario
+import java.io.File
+
+/**
+ * Main entrypoint of the application.
+ */
+public fun main(args: Array<String>): Unit = ScenarioCommand().main(args)
+
+/**
+ * Represents the command for the Scenario experiments.
+ */
+internal class ScenarioCommand : CliktCommand(name = "scenario") {
+ /**
+ * The path to the environment directory.
+ */
+ private val scenarioPath by option("--scenario-path", help = "path to scenario file")
+ .file(canBeDir = true, canBeFile = false)
+ .defaultLazy { File("resources/scenario.json") }
+
+ /**
+ * The number of threads to use for parallelism.
+ */
+ private val parallelism by option("-p", "--parallelism", help = "number of worker threads")
+ .int()
+ .default(Runtime.getRuntime().availableProcessors() - 1)
+
+ override fun run() {
+ val scenario = getScenario(scenarioPath)
+ runScenario(scenario, parallelism)
+ }
+}