birb-integrated-bench/src/Application.kt

54 lines
1.9 KiB
Kotlin
Raw Normal View History

2020-10-21 23:24:29 +02:00
package com.kmlabz.k8s
import io.ktor.application.*
import io.ktor.util.*
import kotlinx.coroutines.*
2020-10-22 02:00:45 +02:00
import java.time.Duration
import java.time.Instant
2020-10-22 20:23:51 +02:00
import java.util.*
import kotlin.collections.LinkedHashMap
2020-10-21 23:24:29 +02:00
2020-10-22 00:21:19 +02:00
fun main(args: Array<String>): Unit = io.ktor.server.tomcat.EngineMain.main(args)
2020-10-21 23:24:29 +02:00
@KtorExperimentalAPI
2020-10-22 02:00:45 +02:00
@Suppress("unused")
2020-10-21 23:24:29 +02:00
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
runBlocking {
2020-10-22 19:28:27 +02:00
var startTime: Instant
2020-10-22 20:32:54 +02:00
var currTimeStamp: Instant
2020-10-22 20:23:51 +02:00
var elapsed = Duration.ZERO
2020-10-22 02:24:36 +02:00
val targetTime = Duration.ofSeconds(System.getenv("WAITTIME").toLong())
2020-10-22 19:35:01 +02:00
var currIter = 0
2020-10-22 19:28:27 +02:00
val timestamps = LinkedHashMap<Int, Instant>()
2020-10-22 20:23:51 +02:00
val uploaders = LinkedList<Uploader>()
2020-10-22 02:11:14 +02:00
val processResults = ProcessResults()
2020-10-22 20:46:58 +02:00
var currUploader: Uploader
2020-10-22 02:24:36 +02:00
environment.monitor.subscribe(ApplicationStarted) {
2020-10-22 20:23:51 +02:00
GlobalScope.launch {
2020-10-22 20:56:35 +02:00
println("Starting benchmark setup")
2020-10-22 20:23:51 +02:00
startTime = Instant.now()
while (elapsed < targetTime) {
currIter += 1
2020-10-22 20:46:58 +02:00
currUploader = Uploader()
currUploader.currIteration = currIter
2020-10-22 20:37:08 +02:00
currUploader.buildRequest()
uploaders.add(currUploader)
2020-10-22 20:32:54 +02:00
currTimeStamp = Instant.now()
elapsed = Duration.between(startTime, currTimeStamp)
2020-10-22 02:24:36 +02:00
}
2020-10-22 20:56:35 +02:00
println("Starting benchmark")
2020-10-22 20:23:51 +02:00
for (uploader in uploaders) {
uploader.sendRequest()
}
2020-10-22 20:56:35 +02:00
println("Data scrubbing")
2020-10-22 20:46:58 +02:00
for (uploader in uploaders) {
2020-10-22 20:23:51 +02:00
timestamps[uploader.currIteration] = uploader.respInstant
}
println("Benchmark ended")
processResults.mapToProcess = timestamps
processResults.process()
2020-10-22 02:24:36 +02:00
}
2020-10-22 02:00:45 +02:00
}
2020-10-21 23:24:29 +02:00
}
2020-10-22 02:11:14 +02:00
}