aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Platonov <jozic@live.com>2015-12-01 13:46:02 -0500
committerEugene Platonov <jozic@live.com>2015-12-01 14:15:06 -0500
commitcc620d885fe1f97db719418721ad84757259f371 (patch)
treea2981e3e9aa716cbb445291f2f7cb6264bc763da
parent09f0932a4310f9fa529110c18cd13cbb4eb69e72 (diff)
downloadKamon-cc620d885fe1f97db719418721ad84757259f371.tar.gz
Kamon-cc620d885fe1f97db719418721ad84757259f371.tar.bz2
Kamon-cc620d885fe1f97db719418721ad84757259f371.zip
+ datadog: allow time and memory metrics be scaled before sending to datadog
-rw-r--r--kamon-datadog/src/main/resources/reference.conf10
-rw-r--r--kamon-datadog/src/main/scala/kamon/datadog/Datadog.scala13
2 files changed, 21 insertions, 2 deletions
diff --git a/kamon-datadog/src/main/resources/reference.conf b/kamon-datadog/src/main/resources/reference.conf
index 7da8e645..78b58a6e 100644
--- a/kamon-datadog/src/main/resources/reference.conf
+++ b/kamon-datadog/src/main/resources/reference.conf
@@ -37,6 +37,16 @@ kamon {
# this pattern:
# application.entity-name.metric-name
application-name = "kamon"
+
+ # All time values are collected in nanoseconds,
+ # to scale before sending to datadog set "time-units" to "s" or "ms" or "µs".
+ # Value "ns" is equivalent to omitting the setting
+ # time-units = "ns"
+
+ # All memory values are collected in bytes,
+ # to scale before sending to datadog set "memory-units" to "gb" or "mb" or "kb".
+ # Value "b" is equivalent to omitting the setting
+ # memory-units = "b"
}
modules {
diff --git a/kamon-datadog/src/main/scala/kamon/datadog/Datadog.scala b/kamon-datadog/src/main/scala/kamon/datadog/Datadog.scala
index ab909055..cde80531 100644
--- a/kamon-datadog/src/main/scala/kamon/datadog/Datadog.scala
+++ b/kamon-datadog/src/main/scala/kamon/datadog/Datadog.scala
@@ -27,6 +27,8 @@ import kamon.metric._
import scala.collection.JavaConverters._
import scala.concurrent.duration._
+import kamon.util.NeedToScale
+
object Datadog extends ExtensionId[DatadogExtension] with ExtensionIdProvider {
override def lookup(): ExtensionId[_ <: Extension] = Datadog
override def createExtension(system: ExtendedActorSystem): DatadogExtension = new DatadogExtension(system)
@@ -57,11 +59,18 @@ class DatadogExtension(system: ExtendedActorSystem) extends Kamon.Extension {
assert(flushInterval >= tickInterval, "Datadog flush-interval needs to be equal or greater to the tick-interval")
val metricsSender = system.actorOf(DatadogMetricsSender.props(datadogHost, maxPacketSizeInBytes), "datadog-metrics-sender")
+
+ val decoratedSender = datadogConfig match {
+ case NeedToScale(scaleTimeTo, scaleMemoryTo) =>
+ system.actorOf(MetricScaleDecorator.props(scaleTimeTo, scaleMemoryTo, metricsSender), "datadog-metric-scale-decorator")
+ case _ => metricsSender
+ }
+
if (flushInterval == tickInterval) {
// No need to buffer the metrics, let's go straight to the metrics sender.
- metricsSender
+ decoratedSender
} else {
- system.actorOf(TickMetricSnapshotBuffer.props(flushInterval, metricsSender), "datadog-metrics-buffer")
+ system.actorOf(TickMetricSnapshotBuffer.props(flushInterval, decoratedSender), "datadog-metrics-buffer")
}
}
}