aboutsummaryrefslogtreecommitdiff
path: root/kamon-statsd/src/main/scala/kamon/statsd/StatsdMetricTranslator.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-statsd/src/main/scala/kamon/statsd/StatsdMetricTranslator.scala')
-rw-r--r--kamon-statsd/src/main/scala/kamon/statsd/StatsdMetricTranslator.scala22
1 files changed, 15 insertions, 7 deletions
diff --git a/kamon-statsd/src/main/scala/kamon/statsd/StatsdMetricTranslator.scala b/kamon-statsd/src/main/scala/kamon/statsd/StatsdMetricTranslator.scala
index 6a4c8d56..2cf672b8 100644
--- a/kamon-statsd/src/main/scala/kamon/statsd/StatsdMetricTranslator.scala
+++ b/kamon-statsd/src/main/scala/kamon/statsd/StatsdMetricTranslator.scala
@@ -21,25 +21,33 @@ import kamon.metrics.Subscriptions.TickMetricSnapshot
import kamon.metrics.ActorMetrics.ActorMetricSnapshot
class StatsDMetricTranslator extends Actor {
- //val metricsSender =
+ val config = context.system.settings.config
+ val metricKeyGenerator = new SimpleMetricKeyGenerator(config)
+ val metricSender = context.actorOf(StatsDMetricsSender.props, "metrics-sender")
def receive = {
case TickMetricSnapshot(from, to, metrics) ⇒
+ val translatedMetrics = metrics.collect {
+ case (am @ ActorMetrics(_), snapshot: ActorMetricSnapshot) => transformActorMetric(am, snapshot)
+ }
-
+ metricSender ! StatsD.MetricBatch(translatedMetrics.flatten)
}
def transformActorMetric(actorIdentity: ActorMetrics, snapshot: ActorMetricSnapshot): Vector[StatsD.Metric] = {
- // TODO: Define metrics namespacing.
- roll(actorIdentity.name, snapshot.timeInMailbox, StatsD.Timing)
+ val timeInMailboxKey = metricKeyGenerator.generateKey(actorIdentity, ActorMetrics.TimeInMailbox)
+ val processingTimeKey = metricKeyGenerator.generateKey(actorIdentity, ActorMetrics.ProcessingTime)
+
+ roll(timeInMailboxKey, snapshot.timeInMailbox, StatsD.Timing) ++ roll(processingTimeKey, snapshot.processingTime, StatsD.Timing)
}
- def roll(key: String, snapshot: MetricSnapshotLike, metricBuilder: (String, Long, Double) => StatsD.Metric): Vector[StatsD.Metric] = {
+ def roll(key: String, snapshot: MetricSnapshotLike, metricBuilder: (String, Double, Double) => StatsD.Metric): Vector[StatsD.Metric] = {
val builder = Vector.newBuilder[StatsD.Metric]
for(measurement <- snapshot.measurements) {
val samplingRate = 1D / measurement.count
- builder += metricBuilder.apply(key, measurement.value, samplingRate)
+ val scaledValue = Scale.convert(snapshot.scale, Scale.Milli, measurement.value)
+ builder += metricBuilder.apply(key, scaledValue, samplingRate)
}
builder.result()
@@ -49,5 +57,5 @@ class StatsDMetricTranslator extends Actor {
}
object StatsDMetricTranslator {
- def props: Props = Props(new StatsDMetricTranslator)
+ def props: Props = Props[StatsDMetricTranslator]
}