From 9663660519d5c967ed88f34ad1ff76d7e138b3bd Mon Sep 17 00:00:00 2001 From: Torma Date: Thu, 22 Oct 2020 20:23:51 +0200 Subject: [PATCH] new concept --- src/Application.kt | 34 +++++++++++++++------------ src/Uploader.kt | 58 +++++++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 41 deletions(-) diff --git a/src/Application.kt b/src/Application.kt index 425750b..0e06697 100644 --- a/src/Application.kt +++ b/src/Application.kt @@ -5,6 +5,8 @@ import io.ktor.util.* import kotlinx.coroutines.* import java.time.Duration import java.time.Instant +import java.util.* +import kotlin.collections.LinkedHashMap fun main(args: Array): Unit = io.ktor.server.tomcat.EngineMain.main(args) @@ -14,28 +16,30 @@ fun main(args: Array): Unit = io.ktor.server.tomcat.EngineMain.main(args fun Application.module(testing: Boolean = false) { runBlocking { var startTime: Instant - var elapsed = Duration.ofSeconds(0) + var elapsed = Duration.ZERO val targetTime = Duration.ofSeconds(System.getenv("WAITTIME").toLong()) var currIter = 0 val timestamps = LinkedHashMap() - var currTimeStamp: Instant - val uploader = Uploader() + val uploaders = LinkedList() val processResults = ProcessResults() environment.monitor.subscribe(ApplicationStarted) { - println("Starting benchmark") - startTime = Instant.now() - while (elapsed < targetTime) { - currIter += 1 - GlobalScope.launch { - uploader.uploadData(currIter) - currTimeStamp = Instant.now() - timestamps[currIter] = currTimeStamp - elapsed = Duration.between(startTime, currTimeStamp) + GlobalScope.launch { + println("Starting benchmark") + startTime = Instant.now() + while (elapsed < targetTime) { + currIter += 1 + uploaders.add(Uploader(currIter)) } + for (uploader in uploaders) { + uploader.sendRequest() + } + for (uploader in uploaders){ + timestamps[uploader.currIteration] = uploader.respInstant + } + println("Benchmark ended") + processResults.mapToProcess = timestamps + processResults.process() } - println("Benchmark ended") - processResults.mapToProcess = timestamps - processResults.process() } } } \ No newline at end of file diff --git a/src/Uploader.kt b/src/Uploader.kt index 8ef669e..aac72b9 100644 --- a/src/Uploader.kt +++ b/src/Uploader.kt @@ -6,39 +6,45 @@ import io.ktor.client.* import io.ktor.client.engine.apache.* import io.ktor.client.request.* import io.ktor.client.request.forms.* +import io.ktor.client.statement.* import io.ktor.http.* import io.ktor.http.content.* import io.ktor.util.* import java.io.File +import java.time.Instant -class Uploader(){ +class Uploader(currIteration: Int) { private val gson = GsonBuilder().setPrettyPrinting().create() private val inputSound = File("/app/wave.wav").readBytes() - val parts: List = formData { - val headersBuilder = HeadersBuilder() - headersBuilder[HttpHeaders.ContentType] = "audio/wave" - headersBuilder[HttpHeaders.ContentDisposition] = "filename=csirip.wav" - this.append( - "file", - inputSound, - headersBuilder.build() - ) - val inputSvcApi = InputSvcApi("2020-02-02T02:02:02", 1) - val jsonHeadersBuilder = HeadersBuilder() - jsonHeadersBuilder[HttpHeaders.ContentType] = "application/json" - this.append( - "description", - gson.toJson(inputSvcApi), - jsonHeadersBuilder.build() - ) - } - @KtorExperimentalAPI - suspend fun uploadData(currIteration: Int) { - HttpClient(Apache).use { client -> - - client.submitFormWithBinaryData(formData = parts) { - url(System.getenv("URL") ?: "https://birb.k8s.kmlabz.com/benchmark") - } + private lateinit var parts: List + var respInstant : Instant = Instant.now() + var currIteration : Int = 0 + fun buildRequest() { + parts = formData { + val headersBuilder = HeadersBuilder() + headersBuilder[HttpHeaders.ContentType] = "audio/wave" + headersBuilder[HttpHeaders.ContentDisposition] = "filename=csirip.wav" + this.append( + "file", + inputSound, + headersBuilder.build() + ) + val inputSvcApi = InputSvcApi("2020-02-02T02:02:02", currIteration) + val jsonHeadersBuilder = HeadersBuilder() + jsonHeadersBuilder[HttpHeaders.ContentType] = "application/json" + this.append( + "description", + gson.toJson(inputSvcApi), + jsonHeadersBuilder.build() + ) } } + + @KtorExperimentalAPI + suspend fun sendRequest() { + HttpClient(Apache).post(System.getenv("URL") ?: "https://birb.k8s.kmlabz.com/benchmark") { + body = parts + } + respInstant = Instant.now() + } } \ No newline at end of file