无法根据API创建计时器播放指标



我正在以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)
    }
  }
}

最新更新