birb-integrated-bench/src/Application.kt

72 lines
2.3 KiB
Kotlin
Raw Normal View History

2020-10-21 23:24:29 +02:00
package com.kmlabz.k8s
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import io.ktor.application.*
import io.ktor.client.*
2020-10-22 00:21:19 +02:00
import io.ktor.client.engine.apache.*
2020-10-21 23:24:29 +02:00
import io.ktor.client.request.*
import io.ktor.client.request.forms.*
import io.ktor.http.*
import io.ktor.http.content.*
import io.ktor.util.*
import kotlinx.coroutines.*
import java.io.File
2020-10-22 02:00:45 +02:00
import java.time.Duration
import java.time.Instant
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 {
val cachedFile = File("/app/wave.wav").readBytes()
val gson = GsonBuilder().setPrettyPrinting().create()
2020-10-22 02:00:45 +02:00
val startTime = Instant.now()
var elapsed = Duration.ofSeconds(0)
val targetTime = Duration.ofSeconds(10)
var currIter = 1
val timestamps = LinkedHashMap<Int,Instant>()
var currTimeStamp = Instant.now()
while(elapsed > targetTime){
uploadData(currIter, gson, cachedFile)
currIter+=1
currTimeStamp = Instant.now()
timestamps[currIter] = currTimeStamp
elapsed = Duration.between(startTime, currTimeStamp)
}
2020-10-21 23:24:29 +02:00
}
}
@KtorExperimentalAPI
suspend fun uploadData(currIteration: Int, gson: Gson, inputSound: ByteArray) {
2020-10-22 00:21:19 +02:00
HttpClient(Apache).use { client ->
2020-10-21 23:24:29 +02:00
val parts: List<PartData> = 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()
)
}
client.submitFormWithBinaryData<Unit>(formData = parts) {
2020-10-21 23:39:35 +02:00
url("https://birb.k8s.kmlabz.com/benchmark")
2020-10-21 23:24:29 +02:00
}
}
}
data class InputSvcApi(val date: String, val device_id: Int)