无法在 API 基础上创建计时器播放指标
Unable to create timer play metrics on API basis
我正在 API 基础上创建 Play 指标,因此我有一个过滤器,可以从请求 header 中识别 URL 并根据 URL。但是为了创建计时器指标,我们必须分别在方法的开始和结束处启动和停止上下文。
所以在我的自定义过滤器中,它正在启动上下文,但我需要弄清楚如何停止它,因为 API 调用没有通过过滤器返回响应。只有请求通过过滤器,但响应通过控制器。
需要帮助以了解如何通过播放过滤器在 API 的基础上实现指标。任何线索都会受到称赞。
目前取得的成就:
val getWallets = metrics.defaultRegistry.meter("GetWallets") // val lockWallet = metrics.defaultRegistry.meter("LockWallet")
override def apply(nextFilter: (RequestHeader) => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
requestHeader.uri match {
case IConstant.GET_WALLETS => {
getWallets.mark()
nextFilter(requestHeader)
}
case _ => {
nextFilter(requestHeader)
}
}
}
鉴于 Filter.apply
的签名:
override def apply(nextFilter: (RequestHeader) => Future[Result])(requestHeader: RequestHeader): Future[Result]
此方法将 return 一个 Future[Result]
。
所以您可以 map
在 Future
完成后停止指标,如下所示:
override def apply(nextFilter: (RequestHeader) => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
requestHeader.uri match {
case IConstant.GET_WALLETS => {
getWallets.mark()
nextFilter(requestHeader).map { result =>
// Stop the metric here
result
}
}
case _ => {
nextFilter(requestHeader)
}
}
}
我正在 API 基础上创建 Play 指标,因此我有一个过滤器,可以从请求 header 中识别 URL 并根据 URL。但是为了创建计时器指标,我们必须分别在方法的开始和结束处启动和停止上下文。
所以在我的自定义过滤器中,它正在启动上下文,但我需要弄清楚如何停止它,因为 API 调用没有通过过滤器返回响应。只有请求通过过滤器,但响应通过控制器。
需要帮助以了解如何通过播放过滤器在 API 的基础上实现指标。任何线索都会受到称赞。
目前取得的成就:
val getWallets = metrics.defaultRegistry.meter("GetWallets") // val lockWallet = metrics.defaultRegistry.meter("LockWallet")
override def apply(nextFilter: (RequestHeader) => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
requestHeader.uri match {
case IConstant.GET_WALLETS => {
getWallets.mark()
nextFilter(requestHeader)
}
case _ => {
nextFilter(requestHeader)
}
}
}
鉴于 Filter.apply
的签名:
override def apply(nextFilter: (RequestHeader) => Future[Result])(requestHeader: RequestHeader): Future[Result]
此方法将 return 一个 Future[Result]
。
所以您可以 map
在 Future
完成后停止指标,如下所示:
override def apply(nextFilter: (RequestHeader) => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
requestHeader.uri match {
case IConstant.GET_WALLETS => {
getWallets.mark()
nextFilter(requestHeader).map { result =>
// Stop the metric here
result
}
}
case _ => {
nextFilter(requestHeader)
}
}
}