我正在以API为基础创建播放指标,因此我有一个过滤器,它将从请求标题中识别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]
此方法将返回Future[Result]
。
因此,您可以在完成Future
上完成map
,以停止度量,如下:
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)
}
}
}