Prometheus:播放控制器未显示计数器结果

时间:2018-09-29 13:05:56

标签: scala playframework prometheus

我是Prometheus的新手,正在使用play framework 2.4我在这里使用计数器作为我的代码

object CounterDemo {
  val requestTotal = Counter.build()
 .name("requests_total")
 .help("Total number of requests")
 .register();  
}

object MyController extends Controller {
   def counter() = Action {
   val responseWriter = new StringWriter();
   val result = TextFormat.write004(responseWriter, CollectorRegistry.defaultRegistry.metricFamilySamples()) 
   log.info("result is "+result)
   responseWriter.close()
   Ok("result"+result)  
   }

  def getAllDirectUser = Action {
    CounterDemo.requestTotal.inc()
    //other functionality 
  }
}

这是路由文件

GET    /pom-metric                             controllers.MyController.counter

GET    /direct-user/list                                controllers.MyController.getAllDirectUser

我点击了路由直接用户/列表和/ pom-metric路由,其返回的值“ result”为空 我是普罗米修斯的初学者,请在我犯错的地方提供帮助

1 个答案:

答案 0 :(得分:2)

类型可以帮助您。查看result的类型。是Unit(又叫作空)!

很显然,TextFormat.write004的返回类型也是Unit,这就是为什么Scala编译器推断result变量的类型也必须是Unit的原因。 / p>

这意味着TextFormat.write004不是纯函数,即。它具有副作用,并且不返回 any 值。如果您打印类型为Unit的变量,则会得到()

此外,您构造一个StringWriter,将其移交给TextFormat,但从不查看其内容。

TextFormat.write004(
  responseWriter, CollectorRegistry.defaultRegistry.metricFamilySamples())

responseWriter.close()

val result = responseWriter.getBuffer.toString

Ok("result" + result)