Jorge Bo
04/19/2023, 7:51 PMJorge Bo
04/19/2023, 9:41 PMval 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":[]}}}}""")
)
}
}