From f62f099989eb615d12291c546ade2f66fa7e63e2 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Sat, 9 May 2015 11:26:07 +0200 Subject: ! datadog: change the metric naming convention for single instrument entities. --- .../scala/kamon/datadog/DatadogMetricsSender.scala | 26 +++++++++++++++------- .../kamon/datadog/DatadogMetricSenderSpec.scala | 17 ++++++++++++++ 2 files changed, 35 insertions(+), 8 deletions(-) (limited to 'kamon-datadog/src') diff --git a/kamon-datadog/src/main/scala/kamon/datadog/DatadogMetricsSender.scala b/kamon-datadog/src/main/scala/kamon/datadog/DatadogMetricsSender.scala index 4a73f5aa..3fc25f46 100644 --- a/kamon-datadog/src/main/scala/kamon/datadog/DatadogMetricsSender.scala +++ b/kamon-datadog/src/main/scala/kamon/datadog/DatadogMetricsSender.scala @@ -89,19 +89,29 @@ class DatadogMetricsSender(remote: InetSocketAddress, maxPacketSizeInBytes: Long def encodeDatadogCounter(count: Long): String = count.toString + "|c" + def isSingleInstrumentEntity(entity: Entity): Boolean = + SingleInstrumentEntityRecorder.AllCategories.contains(entity.category) + def buildMetricName(entity: Entity, metricKey: MetricKey): String = - if (SingleInstrumentEntityRecorder.AllCategories.contains(entity.category)) - s"$appName.${entity.category}" + if (isSingleInstrumentEntity(entity)) + s"$appName.${entity.category}.${entity.name}" else s"$appName.${entity.category}.${metricKey.name}" def buildIdentificationTag(entity: Entity, metricKey: MetricKey): String = { - val normalizedEntityName = entity.name.replace(" ", "") - if (entity.tags.nonEmpty) { - val tagsString = entity.tags.map { case (k, v) ⇒ k + ":" + v } mkString "," - s"|#${entity.category}:${normalizedEntityName},$tagsString" - } else - s"|#${entity.category}:${normalizedEntityName}" + def tagsString: String = entity.tags.map { case (k, v) ⇒ k + ":" + v } mkString "," + + if (isSingleInstrumentEntity(entity)) { + if (entity.tags.nonEmpty) "|#" + tagsString else "" + + } else { + val normalizedEntityName = entity.name.replace(" ", "") + + if (entity.tags.nonEmpty) { + s"|#${entity.category}:${normalizedEntityName},$tagsString" + } else + s"|#${entity.category}:${normalizedEntityName}" + } } } diff --git a/kamon-datadog/src/test/scala/kamon/datadog/DatadogMetricSenderSpec.scala b/kamon-datadog/src/test/scala/kamon/datadog/DatadogMetricSenderSpec.scala index 22ce1f8e..8818ca3e 100644 --- a/kamon-datadog/src/test/scala/kamon/datadog/DatadogMetricSenderSpec.scala +++ b/kamon-datadog/src/test/scala/kamon/datadog/DatadogMetricSenderSpec.scala @@ -112,6 +112,16 @@ class DatadogMetricSenderSpec extends BaseKamonSpec("datadog-metric-sender-spec" data.utf8String should be(s"kamon.category.metric-two:10|ms|@0.5|#category:datadog,my-cool-tag:some-value") } + "not include the entity-category:entity:name identification tag for single instrument entities" in new UdpListenerFixture { + val (entity, testRecorder) = buildSimpleCounter("example-counter", tags = Map("my-cool-tag" -> "some-value")) + testRecorder.instrument.increment(17) + + val udp = setup(Map(entity -> testRecorder.collect(collectionContext))) + val Udp.Send(data, _, _) = udp.expectMsgType[Udp.Send] + + data.utf8String should be(s"kamon.counter.example-counter:17|c|#my-cool-tag:some-value") + } + } trait UdpListenerFixture { @@ -124,6 +134,13 @@ class DatadogMetricSenderSpec extends BaseKamonSpec("datadog-metric-sender-spec" (entity, recorder) } + def buildSimpleCounter(name: String, tags: Map[String, String] = Map.empty): (Entity, CounterRecorder) = { + val entity = Entity(name, SingleInstrumentEntityRecorder.Counter, tags) + val counter = Kamon.metrics.counter(name, tags) + val recorder = CounterRecorder(CounterKey("counter", UnitOfMeasurement.Unknown), counter) + (entity, recorder) + } + def setup(metrics: Map[Entity, EntitySnapshot]): TestProbe = { val udp = TestProbe() val metricsSender = system.actorOf(Props(new DatadogMetricsSender(new InetSocketAddress(localhostName, 0), testMaxPacketSize) { -- cgit v1.2.3