Как я могу удалить имя дочернего узла из метрик, отправленных в Cloudwatch?

#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