【发布时间】:2017-07-21 18:19:06
【问题描述】:
请注意:虽然这个问题与流行的 Dropwizard Metrics 库及其类似的 Scala API Metrics Scala 有关,但从本质上讲,这是一个严格的 Scala 问题。因此,我相信任何知识渊博的 Scala 开发人员都可以回答这个问题!
我对 Scala 还很陌生,我正在尝试构建一个简单的应用程序,该应用程序将利用这个 Metrics-Scala 库(这也是 DW Metrics 的 Scala API)。我发现了一个非常有用的 GitHub 项目,展示了如何在现实世界中设置 Metrics-Scala,以及我在can be found here 下方引用的源文件。
为了说明我的问题,我将该源文件切割成更小、更简单的版本:
object Metrics extends App {
val metricRegistry = new com.codahale.metrics.MetricRegistry()
val healthCheckRegistry = new com.codahale.metrics.health.HealthCheckRegistry()
ConsoleReporter.forRegistry(metricRegistry)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build().start(10, TimeUnit.SECONDS)
run()
while(true){}
def run() {
new TimerExample().longRunningInstrumentedMethod()
spawn {
val gaugeExample = new RandomNumberGaugeExample()
while (true) {
Thread.sleep(500)
gaugeExample.fetchingRandomNumber()
}
}
}
}
trait Instrumented extends InstrumentedBuilder {
val metricRegistry = Metrics.metricRegistry
}
class RandomNumberGaugeExample() extends Instrumented {
def fetchingRandomNumber(): Int = {
metrics.gauge("random-number") {
Math.abs(new Random().nextInt() % 1000)
}.value
}
}
我担心这个神秘的metrics 对象及其用法。
我知道RandomNumberGaugeExample 继承了metricsRegistry 实例,因为它扩展了Instrumented。但我没有看到 metrics 实例在哪里定义、它是什么类型以及 RandomNumberGaugeExample 如何访问它。 RandomNumberGaugeExample 不能访问metricsRegistry 吗?!
这又是什么鬼东西:
metrics.gauge("random-number") {
Math.abs(new Random().nextInt() % 1000)
}.value
metrics.guage如何返回整数值?
【问题讨论】:
标签: scala dropwizard metrics