#java #kotlin #amazon-cloudwatch #metrics #ktor
Вопрос:
Я работаю с Java API, построенным с помощью Ktor. Он публикует показатели в CloudWatch с помощью функции микрометрирования. Моя проблема в том, что я создал перехватчик, который загромождает название маршрута в CloudWatch.
Здесь следует перехватчик:
fun Route.test(callback: Route.() -> Unit): Route {
val routeTest = createChild(object : RouteSelector(1.0) {
override fun evaluate(context: RoutingResolveContext, segmentIndex: Int): RouteSelectorEvaluation =
RouteSelectorEvaluation.Constant
})
routeTest.intercept(ApplicationCallPipeline.Call) {
call.response.header("X-Next-Polling-In", pollTime)
}
callback(routeTest)
return routeTest
}
И вот как маршрут запроса /users
, перехваченный предыдущим перехватчиком, отображается в CloudWatch:
/users/my.package.TestInterceptor$test$routeTest$1@6cdas3a85
Есть ли какой-либо способ удалить имя дочернего узла или жестко указать уникальное значение вместо my.package.TestInterceptor$тест$routeTest$1@6cdas3a85?
Ответ №1:
Мне удалось решить эту проблему, переопределив toString
метод RouteSelector
следующим образом:
fun Route.test(callback: Route.() -> Unit): Route {
val routeTest = createChild(object : RouteSelector(1.0) {
override fun evaluate(context: RoutingResolveContext, segmentIndex: Int): RouteSelectorEvaluation =
RouteSelectorEvaluation.Constant
override fun toString() = "customName"
})
routeTest.intercept(ApplicationCallPipeline.Call) {
call.response.header("X-Next-Polling-In", pollTime)
}
callback(routeTest)
return routeTest
}
Это приводит к следующему названию маршрута:
/users/customName