From 7f69f4cb64be117bd2140b79891a59587074e453 Mon Sep 17 00:00:00 2001
From: lorenz <stu203404@mail.uni-kiel.de>
Date: Sun, 14 Mar 2021 18:28:37 +0100
Subject: [PATCH] Add shutdown hook

---
 .../kotlin/theodolite/execution/Shutdown.kt   | 29 +++++++++++++++++++
 .../execution/TheodoliteYamlExecutor.kt       |  2 ++
 2 files changed, 31 insertions(+)
 create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/execution/Shutdown.kt

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 000000000..7adeae679
--- /dev/null
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/Shutdown.kt
@@ -0,0 +1,29 @@
+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, "shutdown"),
+                res = Resource(0, "shutdown"),
+                configurationOverrides = benchmarkExecution.configOverrides
+            )
+        logger.info { "Teardown the everything deployed" }
+        deployment.teardown()
+        logger.info { "Teardown completed" }
+
+        // TODO Clear/Reset the kafka lag exporter ?
+    }
+}
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt
index f6c109dac..d5f733387 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" }
-- 
GitLab