无法基于API创建计时器播放指标

时间:2018-02-13 06:05:32

标签: scala playframework codahale-metrics

我正在基于API创建Play指标,因此我有一个过滤器,它将根据请求标头识别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)
    }
  }
}

1 个答案:

答案 0 :(得分:2)

鉴于Filter.apply的签名:

override def apply(nextFilter: (RequestHeader) => Future[Result])(requestHeader: RequestHeader): Future[Result]

此方法将返回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)
    }
  }
}