如何从发送到 Cloudwatch 的指标中删除子节点名称?
How can I remove the child node name from the metrics sent to Cloudwatch?
我正在使用使用 Ktor 构建的 Java API。它使用 MicrometerMetrics 功能将指标发布到 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@6cdas3a85
有什么方法可以删除子节点名称或硬编码一个唯一值而不是 my.package.TestInterceptor$test$routeTest$1@6cdas3a85?
我通过重写 RouteSelector
上的 toString
方法解决了这个问题,如下所示:
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
我正在使用使用 Ktor 构建的 Java API。它使用 MicrometerMetrics 功能将指标发布到 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@6cdas3a85
有什么方法可以删除子节点名称或硬编码一个唯一值而不是 my.package.TestInterceptor$test$routeTest$1@6cdas3a85?
我通过重写 RouteSelector
上的 toString
方法解决了这个问题,如下所示:
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