aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/metric/NewRelicReporter.scala
blob: 70f3e54a6272e4bb63033137a9ba0675d4e574ec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package kamon.metric

import com.codahale.metrics
import metrics._
import java.util.concurrent.TimeUnit
import java.util
import com.newrelic.api.agent.NewRelic
import scala.collection.JavaConverters._


class NewRelicReporter(registry: MetricRegistry, name: String,filter: MetricFilter, rateUnit: TimeUnit, durationUnit: TimeUnit) extends ScheduledReporter(registry, name, filter, rateUnit, durationUnit) {



  private[NewRelicReporter] def processMeter(name: String, meter: Meter) {
    NewRelic.recordMetric("Custom/Actor/MessagesPerSecond", meter.getMeanRate().toFloat)
  }

  private[NewRelicReporter] def processCounter(name:String, counter:Counter) {
    println(s"Logging to NewRelic: ${counter.getCount}")

  }


/*  def processGauge(name: String, gauge: Gauge[_]) = {
    println(s"the value is: "+gauge.getValue)
    NewRelic.recordMetric("Custom/ActorSystem/activeCount", gauge.getValue.asInstanceOf[Float])
  }*/


  def report(gauges: util.SortedMap[String, Gauge[_]], counters: util.SortedMap[String, Counter], histograms: util.SortedMap[String, metrics.Histogram], meters: util.SortedMap[String, Meter], timers: util.SortedMap[String, Timer]) {
    //Process Meters
    meters.asScala.map{case(name, meter) => processMeter(name, meter)}

    //Process Meters
    counters.asScala.map{case(name, counter) => processCounter(name, counter)}

    // Gauges
    gauges.asScala.foreach{ case (name, gauge) => {
      val measure: Float = gauge.getValue.asInstanceOf[Number].floatValue()
      val fullMetricName = "Custom" + name
      NewRelic.recordMetric(fullMetricName, measure)
    }}
  }


}

object NewRelicReporter {
     def apply(registry: MetricRegistry) = new NewRelicReporter(registry, "NewRelic-reporter", metrics.MetricFilter.ALL, TimeUnit.SECONDS, TimeUnit.MILLISECONDS)
}