diff options
Diffstat (limited to 'opendc-experiments/opendc-experiments-base')
| -rw-r--r-- | opendc-experiments/opendc-experiments-base/build.gradle.kts | 36 | ||||
| -rw-r--r-- | opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioCli.kt | 65 | ||||
| -rw-r--r-- | opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt (renamed from opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioHelpers.kt) | 0 |
3 files changed, 101 insertions, 0 deletions
diff --git a/opendc-experiments/opendc-experiments-base/build.gradle.kts b/opendc-experiments/opendc-experiments-base/build.gradle.kts index 30510785..303517aa 100644 --- a/opendc-experiments/opendc-experiments-base/build.gradle.kts +++ b/opendc-experiments/opendc-experiments-base/build.gradle.kts @@ -27,6 +27,7 @@ plugins { `kotlin-library-conventions` `testing-conventions` `jacoco-conventions` + distribution kotlin("plugin.serialization") version "1.9.22" } @@ -35,6 +36,8 @@ dependencies { api(projects.opendcCompute.opendcComputeService) api(projects.opendcCompute.opendcComputeSimulator) + implementation(libs.clikt) + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0") implementation(libs.progressbar) implementation(project(mapOf("path" to ":opendc-simulator:opendc-simulator-core"))) @@ -48,3 +51,36 @@ dependencies { runtimeOnly(libs.log4j.core) runtimeOnly(libs.log4j.slf4j) } + +val createScenarioApp by tasks.creating(CreateStartScripts::class) { + dependsOn(tasks.jar) + + applicationName = "OpenDCScenarioRunner" + mainClass.set("org.opendc.experiments.base.ScenarioCLI") + classpath = tasks.jar.get().outputs.files + configurations["runtimeClasspath"] + outputDir = project.buildDir.resolve("scripts") +} + +// Create custom Scenario distribution +distributions { + main { + distributionBaseName.set("OpenDCScenarioRunner") + + contents { + from("README.md") + from("LICENSE.txt") + from("../../LICENSE.txt") { + rename { "LICENSE-OpenDC.txt" } + } + + into("bin") { + from(createScenarioApp) + } + + into("lib") { + from(tasks.jar) + from(configurations["runtimeClasspath"]) + } + } + } +} diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioCli.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioCli.kt new file mode 100644 index 00000000..abf9ad46 --- /dev/null +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioCli.kt @@ -0,0 +1,65 @@ +/* + * 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.base.runner + +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.scenario.getScenarios +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 = false, canBeFile = true) + .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 scenarios = getScenarios(scenarioPath) + runScenarios(scenarios, parallelism) + + // TODO: implement outputResults(scenario) // this will take the results, from a folder, and output them visually + } +} diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioHelpers.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt index 970754b0..970754b0 100644 --- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioHelpers.kt +++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt |
