Is there any plugin to measure the time it takes t...
# ktor
j
Is there any plugin to measure the time it takes to make an httpclient request/response? or should i override ktor-client-logging pluggin?
I’m implemeting the following plugin but need to fix how to read the response so that it can be latter processed by the application.
Copy code
val ResponseTimePlugin = createClientPlugin("ResponseTimePlugin") {
    val logger: org.slf4j.Logger = LoggerFactory.getLogger(this::class.java)

    val onCallTimeKey = AttributeKey<Long>("onCallTimeKey")
    val requestBodyKey = AttributeKey<String>("requestBody")
    val requestMethodKey = AttributeKey<String>("requestMethod")
    val requestUrlKey = AttributeKey<String>("requestUrl")

    on(SendingRequest) { request, content ->
        val onCallTime = System.currentTimeMillis()
        request.attributes.put(onCallTimeKey, onCallTime)
        request.attributes.put(requestMethodKey, request.method.value.trimIndent())
        request.attributes.put(requestUrlKey, request.url.buildString().trimIndent())
        request.attributes.put(requestBodyKey, (request.body as TextContent).text.trimIndent())
    }

    onResponse { response ->
        val onCallTime = response.call.attributes[onCallTimeKey]
        val requestBody = response.call.attributes[requestBodyKey]
        val requestMethod = response.call.attributes[requestMethodKey]
        val requestUrl = response.call.attributes[requestUrlKey]

        val onCallReceiveTime = System.currentTimeMillis()

        <http://logger.info|logger.info>(
            "Loggin request",
            StructuredArguments.keyValue("method", requestMethod),
            StructuredArguments.keyValue("url", requestUrl),
            StructuredArguments.keyValue("status", response.call.response.status.value),
            StructuredArguments.keyValue("durationMs", onCallReceiveTime - onCallTime),
            StructuredArguments.keyValue("requestBody", requestBody),
            StructuredArguments.keyValue("responseBody", """{"data":{"viewer":{"flights":{"edges":[]}}}}""")
        )
    }
}