diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/Shutdown.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/Shutdown.kt new file mode 100644 index 0000000000000000000000000000000000000000..9ca7e70f6ecd5ed30120940be8de965c73f79a6a --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/Shutdown.kt @@ -0,0 +1,27 @@ +package theodolite.execution + +import mu.KotlinLogging +import theodolite.benchmark.BenchmarkExecution +import theodolite.benchmark.KubernetesBenchmark +import theodolite.util.LoadDimension +import theodolite.util.Resource + +private val logger = KotlinLogging.logger {} + +class Shutdown(private val benchmarkExecution: BenchmarkExecution, private val benchmark: KubernetesBenchmark) : + Thread() { + + override fun run() { + // Build Configuration to teardown + logger.info { "Received shutdown signal -> Shutting down" } + val deployment = + benchmark.buildDeployment( + load = LoadDimension(0, emptyList()), + res = Resource(0, emptyList()), + configurationOverrides = benchmarkExecution.configOverrides + ) + logger.info { "Teardown the everything deployed" } + deployment.teardown() + logger.info { "Teardown completed" } + } +} diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt index 89a3fb4fe5e0f81aa12aa566c9dbb2630c9b9bfe..689c07fc6419f8d8a63c2c0fe5f2d5961e15e374 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt @@ -21,8 +21,13 @@ class TheodoliteExecutor( val strategyFactory = StrategyFactory() val executionDuration = Duration.ofSeconds(config.execution.duration) - val resourcePatcherDefinition = PatcherDefinitionFactory().createPatcherDefinition(config.resources.resourceType, this.kubernetesBenchmark.resourceTypes) - val loadDimensionPatcherDefinition = PatcherDefinitionFactory().createPatcherDefinition(config.load.loadType, this.kubernetesBenchmark.loadTypes) + + val resourcePatcherDefinition = PatcherDefinitionFactory().createPatcherDefinition( + config.resources.resourceType, + this.kubernetesBenchmark.resourceTypes + ) + val loadDimensionPatcherDefinition = + PatcherDefinitionFactory().createPatcherDefinition(config.load.loadType, this.kubernetesBenchmark.loadTypes) val executor = BenchmarkExecutorImpl( @@ -35,7 +40,12 @@ class TheodoliteExecutor( return Config( loads = config.load.loadValues.map { load -> LoadDimension(load, loadDimensionPatcherDefinition) }, - resources = config.resources.resourceValues.map { resource -> Resource(resource, resourcePatcherDefinition) }, + resources = config.resources.resourceValues.map { resource -> + Resource( + resource, + resourcePatcherDefinition + ) + }, compositeStrategy = CompositeStrategy( benchmarkExecutor = executor, searchStrategy = strategyFactory.createSearchStrategy(executor, config.execution.strategy), diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt index f6c109dac52ea4a4faeb30b8041329bc86812552..d5f73338718af26c49ff86d63c16a4fa5a903646 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt @@ -22,6 +22,8 @@ object TheodoliteYamlExecutor { val benchmark = parser.parse("./../../../resources/main/yaml/BenchmarkType.yaml", KubernetesBenchmark::class.java)!! + Runtime.getRuntime().addShutdownHook(Shutdown(benchmarkExecution, benchmark)) + val executor = TheodoliteExecutor(benchmarkExecution, benchmark) executor.run() logger.info { "Theodolite finished" }