diff --git a/theodolite-quarkus/.dockerignore b/theodolite-quarkus/.dockerignore index 4361d2fb38ddc889a2c68222aa5b600fbcfbf6f9..d95caadc42523460fa9d78cf17629c8ee231acc9 100644 --- a/theodolite-quarkus/.dockerignore +++ b/theodolite-quarkus/.dockerignore @@ -2,4 +2,5 @@ !build/*-runner !build/*-runner.jar !build/lib/* -!build/quarkus-app/* \ No newline at end of file +!build/quarkus-app/* +!config/* \ No newline at end of file diff --git a/theodolite-quarkus/build.gradle b/theodolite-quarkus/build.gradle index 1ceb0937776299e6fc9a3c0ec470c9e320e6790f..7f32c0c5bab25b1d62b6cd9aa6f5db5eb6d78e47 100644 --- a/theodolite-quarkus/build.gradle +++ b/theodolite-quarkus/build.gradle @@ -25,6 +25,7 @@ dependencies { implementation 'org.slf4j:slf4j-simple:1.7.29' implementation 'io.github.microutils:kotlin-logging:1.12.0' implementation 'io.fabric8:kubernetes-client:5.0.0-alpha-2' + implementation 'io.quarkus:quarkus-kubernetes-client' implementation 'org.apache.kafka:kafka-clients:2.7.0' implementation 'khttp:khttp:1.0.0' } diff --git a/theodolite-quarkus/build_jvm.sh b/theodolite-quarkus/build_jvm.sh index f3970d08e62ac3661dac038148b011b774276ceb..95e2e44427a894a0513e6358b439d23e3eea834b 100755 --- a/theodolite-quarkus/build_jvm.sh +++ b/theodolite-quarkus/build_jvm.sh @@ -1,7 +1,6 @@ -./gradlew build +./gradlew build -x test docker build -f src/main/docker/Dockerfile.jvm -t quarkus/theodolite-quarkus-jvm . - docker run -i --rm -p 8080:8080 quarkus/theodolite-quarkus-jvm diff --git a/theodolite-quarkus/build_native.sh b/theodolite-quarkus/build_native.sh index 8b663f6edd909554acf4e53c5ff3304f7c8f150b..1effa3268ce5b863a680c6f4bdc6b4b632b2d4c6 100755 --- a/theodolite-quarkus/build_native.sh +++ b/theodolite-quarkus/build_native.sh @@ -1,6 +1,5 @@ -./gradlew build -Dquarkus.package.type=native - +./gradlew build -Dquarkus.package.type=native -x test docker build -f src/main/docker/Dockerfile.native -t quarkus/theodolite-quarkus . diff --git a/theodolite-quarkus/src/main/resources/yaml/BenchmarkExecution.yaml b/theodolite-quarkus/config/BenchmarkExecution.yaml similarity index 100% rename from theodolite-quarkus/src/main/resources/yaml/BenchmarkExecution.yaml rename to theodolite-quarkus/config/BenchmarkExecution.yaml diff --git a/theodolite-quarkus/src/main/resources/yaml/BenchmarkType.yaml b/theodolite-quarkus/config/BenchmarkType.yaml similarity index 100% rename from theodolite-quarkus/src/main/resources/yaml/BenchmarkType.yaml rename to theodolite-quarkus/config/BenchmarkType.yaml diff --git a/theodolite-quarkus/src/main/resources/yaml/aggregation-service.yaml b/theodolite-quarkus/config/aggregation-service.yaml similarity index 100% rename from theodolite-quarkus/src/main/resources/yaml/aggregation-service.yaml rename to theodolite-quarkus/config/aggregation-service.yaml diff --git a/theodolite-quarkus/src/main/resources/yaml/jmx-configmap.yaml b/theodolite-quarkus/config/jmx-configmap.yaml similarity index 100% rename from theodolite-quarkus/src/main/resources/yaml/jmx-configmap.yaml rename to theodolite-quarkus/config/jmx-configmap.yaml diff --git a/theodolite-quarkus/src/main/resources/yaml/uc1-service-monitor.yaml b/theodolite-quarkus/config/service-monitor.yaml similarity index 100% rename from theodolite-quarkus/src/main/resources/yaml/uc1-service-monitor.yaml rename to theodolite-quarkus/config/service-monitor.yaml diff --git a/theodolite-quarkus/src/main/resources/yaml/uc1-kstreams-deployment.yaml b/theodolite-quarkus/config/uc1-kstreams-deployment.yaml similarity index 100% rename from theodolite-quarkus/src/main/resources/yaml/uc1-kstreams-deployment.yaml rename to theodolite-quarkus/config/uc1-kstreams-deployment.yaml diff --git a/theodolite-quarkus/src/main/resources/yaml/uc1-load-generator-deployment.yaml b/theodolite-quarkus/config/uc1-load-generator-deployment.yaml similarity index 100% rename from theodolite-quarkus/src/main/resources/yaml/uc1-load-generator-deployment.yaml rename to theodolite-quarkus/config/uc1-load-generator-deployment.yaml diff --git a/theodolite-quarkus/src/main/resources/yaml/uc1-load-generator-service.yaml b/theodolite-quarkus/config/uc1-load-generator-service.yaml similarity index 100% rename from theodolite-quarkus/src/main/resources/yaml/uc1-load-generator-service.yaml rename to theodolite-quarkus/config/uc1-load-generator-service.yaml diff --git a/theodolite-quarkus/config/uc1-service-monitor.yaml b/theodolite-quarkus/config/uc1-service-monitor.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4e7e758cacb5086305efa26292ddef2afc958096 --- /dev/null +++ b/theodolite-quarkus/config/uc1-service-monitor.yaml @@ -0,0 +1,14 @@ +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + app: titan-ccp-aggregation + appScope: titan-ccp + name: titan-ccp-aggregation +spec: + selector: + matchLabels: + app: titan-ccp-aggregation + endpoints: + - port: metrics + interval: 10s diff --git a/theodolite-quarkus/src/main/docker/Dockerfile.jvm b/theodolite-quarkus/src/main/docker/Dockerfile.jvm index d6a4e05cdef5c8c1e25337b3d5a312e1e98a641a..6733d5d441e8292e02547cf59131c706575e9d86 100644 --- a/theodolite-quarkus/src/main/docker/Dockerfile.jvm +++ b/theodolite-quarkus/src/main/docker/Dockerfile.jvm @@ -44,6 +44,7 @@ RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \ ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" COPY build/lib/* /deployments/lib/ COPY build/*-runner.jar /deployments/app.jar +COPY config/ /deployments/config/ EXPOSE 8080 USER 1001 diff --git a/theodolite-quarkus/src/main/docker/Dockerfile.native b/theodolite-quarkus/src/main/docker/Dockerfile.native index 4a6d4147c2c098a0c5f181cc96c9916eede64c97..37a5a4bd8472a358194dbb14a5fce61df94804d3 100644 --- a/theodolite-quarkus/src/main/docker/Dockerfile.native +++ b/theodolite-quarkus/src/main/docker/Dockerfile.native @@ -20,6 +20,7 @@ RUN chown 1001 /work \ && chmod "g+rwX" /work \ && chown 1001:root /work COPY --chown=1001:root build/*-runner /work/application +COPY config/ /work/config/ EXPOSE 8080 USER 1001 diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/Benchmark.kt b/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/Benchmark.kt index fb343a0fa594c3f0d46125ca0debc7d0a6c223d8..df92ed111206bb58f50a589a612d6f598575244b 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/Benchmark.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/Benchmark.kt @@ -1,9 +1,11 @@ package theodolite.benchmark +import io.quarkus.runtime.annotations.RegisterForReflection import theodolite.util.ConfigurationOverride import theodolite.util.LoadDimension import theodolite.util.Resource +@RegisterForReflection interface Benchmark { fun buildDeployment( load: LoadDimension, diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/BenchmarkExecution.kt b/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/BenchmarkExecution.kt index 72895a42c7e52b6e15cdff01b2805af130e441aa..a2d649ab38f4c0fda31d7c99d687cc253efe1ea8 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/BenchmarkExecution.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/BenchmarkExecution.kt @@ -4,13 +4,12 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize import io.fabric8.kubernetes.api.model.KubernetesResource import io.fabric8.kubernetes.api.model.Namespaced import io.fabric8.kubernetes.client.CustomResource +import io.quarkus.runtime.annotations.RegisterForReflection import theodolite.util.ConfigurationOverride -import java.lang.System.exit -import kotlin.concurrent.thread import kotlin.properties.Delegates -import kotlin.system.exitProcess @JsonDeserialize +@RegisterForReflection class BenchmarkExecution : CustomResource(), Namespaced { lateinit var name: String lateinit var benchmark: String @@ -21,6 +20,7 @@ class BenchmarkExecution : CustomResource(), Namespaced { lateinit var configOverrides: List<ConfigurationOverride?> @JsonDeserialize + @RegisterForReflection class Execution : KubernetesResource { lateinit var strategy: String var duration by Delegates.notNull<Long>() @@ -29,7 +29,8 @@ class BenchmarkExecution : CustomResource(), Namespaced { } @JsonDeserialize - class Slo : KubernetesResource{ + @RegisterForReflection + class Slo : KubernetesResource { lateinit var sloType: String var threshold by Delegates.notNull<Int>() lateinit var prometheusUrl: String @@ -38,14 +39,17 @@ class BenchmarkExecution : CustomResource(), Namespaced { var warmup by Delegates.notNull<Int>() } + @JsonDeserialize - class LoadDefinition : KubernetesResource{ + @RegisterForReflection + class LoadDefinition : KubernetesResource { lateinit var loadType: String lateinit var loadValues: List<Int> } @JsonDeserialize - class ResourceDefinition : KubernetesResource{ + @RegisterForReflection + class ResourceDefinition : KubernetesResource { lateinit var resourceType: String lateinit var resourceValues: List<Int> } diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/KubernetesBenchmark.kt b/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/KubernetesBenchmark.kt index 7da65427f7124a451d208f208863dd3c4f86c6d5..d0640cd7b3e5d39823f9a2254a93aef66435c18b 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/KubernetesBenchmark.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/KubernetesBenchmark.kt @@ -4,17 +4,17 @@ import io.fabric8.kubernetes.api.model.KubernetesResource import io.fabric8.kubernetes.api.model.Namespaced import io.fabric8.kubernetes.client.CustomResource import io.fabric8.kubernetes.client.DefaultKubernetesClient +import io.quarkus.runtime.annotations.RegisterForReflection import mu.KotlinLogging import theodolite.k8s.K8sResourceLoader import theodolite.patcher.PatcherFactory import theodolite.util.* private val logger = KotlinLogging.logger {} - private var DEFAULT_NAMESPACE = "default" - -class KubernetesBenchmark : Benchmark , CustomResource(), Namespaced { +@RegisterForReflection +class KubernetesBenchmark : Benchmark, CustomResource(), Namespaced { lateinit var name: String lateinit var appResource: List<String> lateinit var loadGenResource: List<String> @@ -22,9 +22,9 @@ class KubernetesBenchmark : Benchmark , CustomResource(), Namespaced { lateinit var loadTypes: List<TypeName> lateinit var kafkaConfig: KafkaConfig lateinit var namespace: String + lateinit var path: String private fun loadKubernetesResources(resources: List<String>): List<Pair<String, KubernetesResource>> { - val basePath = "./../../../resources/main/yaml/" val parser = YamlParser() namespace = System.getenv("NAMESPACE") ?: DEFAULT_NAMESPACE @@ -33,7 +33,7 @@ class KubernetesBenchmark : Benchmark , CustomResource(), Namespaced { val loader = K8sResourceLoader(DefaultKubernetesClient().inNamespace(namespace)) return resources .map { resource -> - val resourcePath = "$basePath/$resource" + val resourcePath = "$path/$resource" val kind = parser.parse(resourcePath, HashMap<String, String>()::class.java)?.get("kind")!! val k8sResource = loader.loadK8sResource(kind, resourcePath) Pair(resource, k8sResource) @@ -49,13 +49,20 @@ class KubernetesBenchmark : Benchmark , CustomResource(), Namespaced { val patcherFactory = PatcherFactory() // patch the load dimension the resources - load.getType().forEach { patcherDefinition -> patcherFactory.createPatcher(patcherDefinition, resources).patch(load.get().toString()) } - res.getType().forEach{ patcherDefinition -> patcherFactory.createPatcher(patcherDefinition, resources).patch(res.get().toString()) } + load.getType().forEach { patcherDefinition -> + patcherFactory.createPatcher(patcherDefinition, resources).patch(load.get().toString()) + } + res.getType().forEach { patcherDefinition -> + patcherFactory.createPatcher(patcherDefinition, resources).patch(res.get().toString()) + } // Patch the given overrides - configurationOverrides.forEach { override -> override?.let { patcherFactory.createPatcher(it.patcher, resources).patch(override.value) } } - - + configurationOverrides.forEach { override -> + override?.let { + patcherFactory.createPatcher(it.patcher, resources).patch(override.value) + } + } + return KubernetesBenchmarkDeployment( namespace = namespace, resources = resources.map { r -> r.second }, diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/KubernetesBenchmarkDeployment.kt b/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/KubernetesBenchmarkDeployment.kt index 35d7cc79ba8aafa17584d392d94443e59a7fa590..238cb17071c5b48fc883808b4334b79dada7ee32 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/KubernetesBenchmarkDeployment.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/benchmark/KubernetesBenchmarkDeployment.kt @@ -2,10 +2,12 @@ package theodolite.benchmark import io.fabric8.kubernetes.api.model.KubernetesResource import io.fabric8.kubernetes.client.DefaultKubernetesClient +import io.quarkus.runtime.annotations.RegisterForReflection import org.apache.kafka.clients.admin.NewTopic import theodolite.k8s.K8sManager import theodolite.k8s.TopicManager +@RegisterForReflection class KubernetesBenchmarkDeployment( val namespace: String, val resources: List<KubernetesResource>, diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutorImpl.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutorImpl.kt index fa435df36d01d37131b3d233bd40a921d34a6f6d..26836c46b27c547479a2984d6a9109b87f2481ec 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutorImpl.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutorImpl.kt @@ -1,6 +1,6 @@ package theodolite.execution -import mu.KotlinLogging +import io.quarkus.runtime.annotations.RegisterForReflection import theodolite.benchmark.Benchmark import theodolite.benchmark.BenchmarkExecution import theodolite.evaluation.AnalysisExecutor @@ -10,8 +10,7 @@ import theodolite.util.Resource import theodolite.util.Results import java.time.Duration -private val logger = KotlinLogging.logger {} - +@RegisterForReflection class BenchmarkExecutorImpl( benchmark: Benchmark, results: Results, diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt index 6293868a5c5a2a29b8e13bdad7fbbe19c10402d4..67cad64e4cb82d2f68fbcb2cfab715f4a564d245 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteYamlExecutor.kt @@ -16,12 +16,22 @@ object TheodoliteYamlExecutor { fun main(args: Array<String>) { logger.info { "Theodolite started" } + val executionPath = System.getenv("THEODOLITE_EXECUTION") ?: "./config/BenchmarkExecution.yaml" + val benchmarkPath = System.getenv("THEODOLITE_BENCHMARK") ?: "./config/BenchmarkType.yaml" + val appResource = System.getenv("THEODOLITE_APP_RESOURCES") ?: "./config" + + logger.info { "Using $executionPath for BenchmarkExecution" } + logger.info { "Using $benchmarkPath for BenchmarkType" } + logger.info { "Using $appResource for Resources" } + + // load the BenchmarkExecution and the BenchmarkType val parser = YamlParser() val benchmarkExecution = - parser.parse("./../../../resources/main/yaml/BenchmarkExecution.yaml", BenchmarkExecution::class.java)!! + parser.parse(path = executionPath, E = BenchmarkExecution::class.java)!! val benchmark = - parser.parse("./../../../resources/main/yaml/BenchmarkType.yaml", KubernetesBenchmark::class.java)!! + parser.parse(path = benchmarkPath, E = KubernetesBenchmark::class.java)!! + benchmark.path = appResource val shutdown = Shutdown(benchmarkExecution, benchmark) Runtime.getRuntime().addShutdownHook(thread { shutdown.run()}) diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/patcher/Patcher.kt b/theodolite-quarkus/src/main/kotlin/theodolite/patcher/Patcher.kt index 82c562572de4acd932997d71e53138ecf2865462..55cde39f5a6d7bb4cacd1e539593fc0538d108af 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/patcher/Patcher.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/patcher/Patcher.kt @@ -1,5 +1,8 @@ package theodolite.patcher +import io.quarkus.runtime.annotations.RegisterForReflection + +@RegisterForReflection interface Patcher { fun <T> patch(value: T) } diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/RestrictionStrategy.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/RestrictionStrategy.kt index b2e09a0cc2ce03bb735a00994c7f7f109527a56b..75c7e86b57e3b3afb0121eab628f2872458efe74 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/RestrictionStrategy.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/RestrictionStrategy.kt @@ -1,5 +1,6 @@ package theodolite.strategies.restriction +import io.quarkus.runtime.annotations.RegisterForReflection import theodolite.util.LoadDimension import theodolite.util.Resource import theodolite.util.Results @@ -8,6 +9,7 @@ import theodolite.util.Results * A "Restriction Strategy" restricts a list of resources based on the current * results of all previously performed benchmarks. */ +@RegisterForReflection abstract class RestrictionStrategy(val results: Results) { /** * Next Restrict the given resource list for the given load based on the result object. diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/CompositeStrategy.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/CompositeStrategy.kt index 8ffca54fa8b6e1359f60dbfe9394b348ef5e71c4..01d841c91b2de6fb70208ef4f8da12ab75361818 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/CompositeStrategy.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/CompositeStrategy.kt @@ -1,10 +1,12 @@ package theodolite.strategies.searchstrategy +import io.quarkus.runtime.annotations.RegisterForReflection import theodolite.execution.BenchmarkExecutor import theodolite.strategies.restriction.RestrictionStrategy import theodolite.util.LoadDimension import theodolite.util.Resource +@RegisterForReflection class CompositeStrategy( benchmarkExecutor: BenchmarkExecutor, private val searchStrategy: SearchStrategy, diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt index d57246ca4337290ab3502192e3b3b0dc275c6596..888a58585b08cd02b116ee1d2e275138f5f690e8 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt @@ -1,9 +1,11 @@ package theodolite.strategies.searchstrategy +import io.quarkus.runtime.annotations.RegisterForReflection import theodolite.execution.BenchmarkExecutor import theodolite.util.LoadDimension import theodolite.util.Resource +@RegisterForReflection abstract class SearchStrategy(val benchmarkExecutor: BenchmarkExecutor) { /** * Find smallest suitable resource from the specified resource list for the given load. diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/Config.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/Config.kt index a6120564c8a69f50461acdc857b02ac2198cafc8..15defa6c7127bc82d6ea2b13abe51076e44bd5a9 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/Config.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/Config.kt @@ -1,7 +1,9 @@ package theodolite.util +import io.quarkus.runtime.annotations.RegisterForReflection import theodolite.strategies.searchstrategy.CompositeStrategy +@RegisterForReflection data class Config( val loads: List<LoadDimension>, val resources: List<Resource>, diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/ConfigurationOverride.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/ConfigurationOverride.kt index 4d290eab95648064a0a4efb19961ae29b92f8688..c4801dfbab0beb01cab025200cceab17efb0053d 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/ConfigurationOverride.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/ConfigurationOverride.kt @@ -1,8 +1,10 @@ package theodolite.util import com.fasterxml.jackson.databind.annotation.JsonDeserialize +import io.quarkus.runtime.annotations.RegisterForReflection @JsonDeserialize +@RegisterForReflection class ConfigurationOverride { lateinit var patcher: PatcherDefinition lateinit var value: String diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaConfig.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaConfig.kt index 2a54dc3b16abe6171eb90a99d87dab4810ab2333..cb94c8b7bfac4c3bc043e04a67d673ccaddea3c5 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaConfig.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/KafkaConfig.kt @@ -1,9 +1,11 @@ package theodolite.util import com.fasterxml.jackson.databind.annotation.JsonDeserialize +import io.quarkus.runtime.annotations.RegisterForReflection import org.apache.kafka.clients.admin.NewTopic import kotlin.properties.Delegates +@RegisterForReflection @JsonDeserialize class KafkaConfig { lateinit var bootstrapServer: String @@ -13,6 +15,7 @@ class KafkaConfig { return topics.map { topic -> NewTopic(topic.name, topic.numPartitions, topic.replicationFactor) } } + @RegisterForReflection class TopicWrapper { lateinit var name: String var numPartitions by Delegates.notNull<Int>() diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/LoadDimension.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/LoadDimension.kt index 43cb861b2d6bbbe457a61d6f98f42487aad1d216..4f092e5f9dd8fed8f4a6229eecf4f8a26a2e7e76 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/LoadDimension.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/LoadDimension.kt @@ -1,5 +1,9 @@ package theodolite.util +import io.quarkus.runtime.annotations.RegisterForReflection + + +@RegisterForReflection data class LoadDimension(private val number: Int, private val type: List<PatcherDefinition>) { fun get(): Int { return this.number diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/PatcherDefinition.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/PatcherDefinition.kt index fedcc0459a18b43a53e9980517da91c004a5ed97..e78048cd7691f8bfd14f663d401384ae6c329d4b 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/PatcherDefinition.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/PatcherDefinition.kt @@ -1,8 +1,10 @@ package theodolite.util import com.fasterxml.jackson.databind.annotation.JsonDeserialize +import io.quarkus.runtime.annotations.RegisterForReflection @JsonDeserialize +@RegisterForReflection class PatcherDefinition { lateinit var type: String lateinit var resource: String diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/PrometheusResponse.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/PrometheusResponse.kt index e512bd7efb534c705afa3fe17dbc77396a8741db..ca26ad117034b160e48dc950e80062100a1c68d8 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/PrometheusResponse.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/PrometheusResponse.kt @@ -1,20 +1,26 @@ package theodolite.util +import io.quarkus.runtime.annotations.RegisterForReflection + +@RegisterForReflection data class PrometheusResponse( var status: String? = null, var data: PromData? = null ) +@RegisterForReflection data class PromData( var resultType: String? = null, var result: List<PromResult>? = null ) +@RegisterForReflection data class PromResult( var metric: PromMetric? = null, var values: List<Any>? = null ) +@RegisterForReflection data class PromMetric( var group: String? = null ) diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/Resource.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/Resource.kt index 094e89ebb0d4566499068331ca2fc890f3335597..59acf175e31b2707b236b421d2055bb14a49ca1a 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/Resource.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/Resource.kt @@ -1,6 +1,10 @@ package theodolite.util +import io.quarkus.runtime.annotations.RegisterForReflection + +@RegisterForReflection data class Resource(private val number: Int, private val type: List<PatcherDefinition>) { + fun get(): Int { return this.number } diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt index c827e8303f5c08f4f612476a1069ecefc0a7308b..a8a902ff69742bbb617685ac5cd24bf6c419c370 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/Results.kt @@ -1,5 +1,8 @@ package theodolite.util +import io.quarkus.runtime.annotations.RegisterForReflection + +@RegisterForReflection class Results { private val results: MutableMap<Pair<LoadDimension, Resource>, Boolean> = mutableMapOf() diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/util/TypeName.kt b/theodolite-quarkus/src/main/kotlin/theodolite/util/TypeName.kt index 0ee8a18982ae2a59d022a5c45bfa9c843db6a5f0..20758466c5d5efbcb999bf0bf9c4edbe63ea1032 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/util/TypeName.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/util/TypeName.kt @@ -1,7 +1,9 @@ package theodolite.util import com.fasterxml.jackson.databind.annotation.JsonDeserialize +import io.quarkus.runtime.annotations.RegisterForReflection +@RegisterForReflection @JsonDeserialize class TypeName { lateinit var typeName: String diff --git a/theodolite-quarkus/src/main/resources/application.properties b/theodolite-quarkus/src/main/resources/application.properties index 32eef7a25d994df7e67bbb61f550903d83f8594b..318ce68ff1ae344f44288bfaacfbc43538211f50 100644 --- a/theodolite-quarkus/src/main/resources/application.properties +++ b/theodolite-quarkus/src/main/resources/application.properties @@ -1 +1,4 @@ -quarkus.package.main-class=TheodoliteOperator \ No newline at end of file +quarkus.package.main-class=TheodoliteYamlExecutor +quarkus.native.additional-build-args=\ + --initialize-at-run-time=io.fabric8.kubernetes.client.internal.CertUtils,\ + --report-unsupported-elements-at-runtime \ No newline at end of file