From 4ef79b01d0b9d6cb4628886a8a2a29048d997b13 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Wed, 21 May 2014 09:09:34 -0300 Subject: + datadog: include identification tags and clean up all irrelevant code from StatsD --- .../kamon/datadog/DatadogMetricSenderSpec.scala | 81 ++++++---------------- 1 file changed, 21 insertions(+), 60 deletions(-) (limited to 'kamon-datadog/src/test/scala') diff --git a/kamon-datadog/src/test/scala/kamon/datadog/DatadogMetricSenderSpec.scala b/kamon-datadog/src/test/scala/kamon/datadog/DatadogMetricSenderSpec.scala index 98b36159..c649a044 100644 --- a/kamon-datadog/src/test/scala/kamon/datadog/DatadogMetricSenderSpec.scala +++ b/kamon-datadog/src/test/scala/kamon/datadog/DatadogMetricSenderSpec.scala @@ -17,7 +17,7 @@ package kamon.datadog import akka.testkit.{ TestKitBase, TestProbe } -import akka.actor.{Props, ActorRef, ActorSystem} +import akka.actor.{ Props, ActorRef, ActorSystem } import kamon.metrics.instruments.CounterRecorder import org.scalatest.{ Matchers, WordSpecLike } import kamon.metrics._ @@ -33,21 +33,19 @@ class DatadogMetricSenderSpec extends TestKitBase with WordSpecLike with Matcher ConfigFactory.parseString("kamon.datadog.max-packet-size = 256 bytes")) "the DataDogMetricSender" should { - "flush the metrics data after processing the tick, even if the max-packet-size is not reached" in new UdpListenerFixture { - val testMetricName = "test-metric" - val testMetricKey = buildMetricKey(testMetricName) + "send latency measurements" in new UdpListenerFixture { + val testMetricName = "processing-time" val testRecorder = HdrRecorder(1000L, 2, Scale.Unit) testRecorder.record(10L) val udp = setup(Map(testMetricName -> testRecorder.collect())) val Udp.Send(data, _, _) = udp.expectMsgType[Udp.Send] - data.utf8String should be(s"$testMetricKey:10|ms") + data.utf8String should be(s"kamon.actor.processing-time:10|ms|#actor:user/kamon") } - "include the correspondent sampling rate when rendering multiple occurrences of the same value" in new UdpListenerFixture { - val testMetricName = "test-metric" - val testMetricKey = buildMetricKey(testMetricName) + "include the sampling rate in case of multiple measurements of the same value" in new UdpListenerFixture { + val testMetricName = "processing-time" val testRecorder = HdrRecorder(1000L, 2, Scale.Unit) testRecorder.record(10L) testRecorder.record(10L) @@ -55,59 +53,23 @@ class DatadogMetricSenderSpec extends TestKitBase with WordSpecLike with Matcher val udp = setup(Map(testMetricName -> testRecorder.collect())) val Udp.Send(data, _, _) = udp.expectMsgType[Udp.Send] - data.utf8String should be(s"$testMetricKey:10|ms|@0.5") + data.utf8String should be(s"kamon.actor.processing-time:10|ms|@0.5|#actor:user/kamon") } - "flush the packet when the max-packet-size is reached" in new UdpListenerFixture { - val testMetricName = "test-metric" - val testMetricKey = buildMetricKey(testMetricName) - val testRecorder = HdrRecorder(testMaxPacketSize, 3, Scale.Unit) - - var bytes = 0//testMetricKey.length - var level = 0 - while (bytes <= testMaxPacketSize) { - level += 1 - testRecorder.record(level) - bytes += s"$testMetricKey:$level|ms".length - } + "send only one packet per measurement" in new UdpListenerFixture { + val testMetricName = "processing-time" + val testRecorder = HdrRecorder(1000L, 2, Scale.Unit) + testRecorder.record(10L) + testRecorder.record(10L) + testRecorder.record(20L) val udp = setup(Map(testMetricName -> testRecorder.collect())) - udp.expectMsgType[Udp.Send] // let the first flush pass - val Udp.Send(data, _, _) = udp.expectMsgType[Udp.Send] - data.utf8String should be(s"$testMetricKey:$level|ms") - } - - "render multiple keys in the same packet using newline as separator" in new UdpListenerFixture { - val firstTestMetricName = "first-test-metric" - val firstTestMetricKey = buildMetricKey(firstTestMetricName) - val secondTestMetricName = "second-test-metric" - val secondTestMetricKey = buildMetricKey(secondTestMetricName) - val thirdTestMetricName = "third-test-metric" - val thirdTestMetricKey = buildMetricKey(thirdTestMetricName) - - val firstTestRecorder = HdrRecorder(1000L, 2, Scale.Unit) - val secondTestRecorder = HdrRecorder(1000L, 2, Scale.Unit) - val thirdTestRecorder = CounterRecorder() - - firstTestRecorder.record(10L) - firstTestRecorder.record(10L) - - secondTestRecorder.record(21L) - - thirdTestRecorder.record(1L) - thirdTestRecorder.record(1L) - thirdTestRecorder.record(1L) - thirdTestRecorder.record(1L) - - val t = thirdTestRecorder.collect() - val udp = setup(Map( - firstTestMetricName -> firstTestRecorder.collect(), - secondTestMetricName -> secondTestRecorder.collect(), - thirdTestMetricName -> t)) - val Udp.Send(data, _, _) = udp.expectMsgType[Udp.Send] + val Udp.Send(data1, _, _) = udp.expectMsgType[Udp.Send] + data1.utf8String should be(s"kamon.actor.processing-time:10|ms|@0.5|#actor:user/kamon") - data.utf8String should be(s"$firstTestMetricKey:10|ms|@0.5\n$secondTestMetricKey:21|ms\n$thirdTestMetricKey:4|c") + val Udp.Send(data2, _, _) = udp.expectMsgType[Udp.Send] + data2.utf8String should be(s"kamon.actor.processing-time:20|ms|#actor:user/kamon") } } @@ -115,11 +77,9 @@ class DatadogMetricSenderSpec extends TestKitBase with WordSpecLike with Matcher val localhostName = ManagementFactory.getRuntimeMXBean.getName.split('@')(1) val testMaxPacketSize = system.settings.config.getBytes("kamon.datadog.max-packet-size") - def buildMetricKey(metricName: String): String = s"kamon.$localhostName.test-metric-category.test-group.$metricName" - def setup(metrics: Map[String, MetricSnapshotLike]): TestProbe = { val udp = TestProbe() - val metricsSender = system.actorOf(Props(new DatadogMetricsSender(new InetSocketAddress(localhostName, 0), testMaxPacketSize) { + val metricsSender = system.actorOf(Props(new DatadogMetricsSender(new InetSocketAddress(localhostName, 0)) { override def udpExtension(implicit system: ActorSystem): ActorRef = udp.ref })) @@ -127,10 +87,11 @@ class DatadogMetricSenderSpec extends TestKitBase with WordSpecLike with Matcher udp.expectMsgType[Udp.SimpleSender] udp.reply(Udp.SimpleSenderReady) + // These names are not intented to match the real actor metrics, it's just about seeing more familiar data in tests. val testGroupIdentity = new MetricGroupIdentity { - val name: String = "test-group" + val name: String = "user/kamon" val category: MetricGroupCategory = new MetricGroupCategory { - val name: String = "test-metric-category" + val name: String = "actor" } } -- cgit v1.2.3