aboutsummaryrefslogtreecommitdiff
path: root/kamon-core-tests
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2017-08-15 14:35:17 +0200
committerIvan Topolnjak <ivantopo@gmail.com>2017-08-15 14:35:17 +0200
commitdb0f66e0f0508a6565738bb19520710eddd0398c (patch)
treef92d57a29e457c66e1f0a617c9daf16c01e2c438 /kamon-core-tests
parent7361fde5f06692a0e1b83d53756bb536627f2d02 (diff)
downloadKamon-db0f66e0f0508a6565738bb19520710eddd0398c.tar.gz
Kamon-db0f66e0f0508a6565738bb19520710eddd0398c.tar.bz2
Kamon-db0f66e0f0508a6565738bb19520710eddd0398c.zip
add optional span scoping to the span metrics
Diffstat (limited to 'kamon-core-tests')
-rw-r--r--kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala2
-rw-r--r--kamon-core-tests/src/test/scala/kamon/trace/SpanMetrics.scala94
2 files changed, 71 insertions, 25 deletions
diff --git a/kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala b/kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala
index 11be85a7..242c3345 100644
--- a/kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala
+++ b/kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala
@@ -14,5 +14,5 @@ class ContextCodecSpec extends WordSpec with Matchers {
}
}
- val ContextCodec = new Codec(Kamon.identityProvider, Kamon.config())
+ val ContextCodec = new Codec(Kamon.config())
}
diff --git a/kamon-core-tests/src/test/scala/kamon/trace/SpanMetrics.scala b/kamon-core-tests/src/test/scala/kamon/trace/SpanMetrics.scala
index 9ecffb24..ae0c7795 100644
--- a/kamon-core-tests/src/test/scala/kamon/trace/SpanMetrics.scala
+++ b/kamon-core-tests/src/test/scala/kamon/trace/SpanMetrics.scala
@@ -3,16 +3,15 @@ package kamon.trace
import kamon.Kamon
import kamon.Kamon.buildSpan
import kamon.metric._
+import kamon.testkit.{MetricInspection, Reconfigure}
import org.scalatest.{Matchers, WordSpecLike}
-class SpanMetrics extends WordSpecLike with Matchers {
- import SpanMetricsTestHelper._
+class SpanMetrics extends WordSpecLike with Matchers with MetricInspection with Reconfigure {
- val errorTag = "error" -> "true"
- val histogramMetric: HistogramMetric = Kamon.histogram("span.elapsed-time")
+ sampleAlways()
"Span Metrics" should {
- "be recorded for successeful execution" in {
+ "be recorded for successful execution" in {
val operation = "span-success"
val operationTag = "operation" -> operation
@@ -20,11 +19,11 @@ class SpanMetrics extends WordSpecLike with Matchers {
.start()
.finish()
- val histogram = histogramMetric.refine(operationTag)
- histogram.distribution().count === 1
+ val histogram = Span.Metrics.ProcessingTime.refine(Map(operationTag, noErrorTag))
+ histogram.distribution().count shouldBe 1
- val errorHistogram = histogramMetric.refine(Map(operationTag, errorTag)).distribution()
- errorHistogram.count === 0
+ val errorHistogram = Span.Metrics.ProcessingTime.refine(Map(operationTag, errorTag))
+ errorHistogram.distribution().count shouldBe 0
}
@@ -37,28 +36,75 @@ class SpanMetrics extends WordSpecLike with Matchers {
.addSpanTag("error", true)
.finish()
- val histogram = histogramMetric.refine(operationTag)
- histogram.distribution().count === 0
+ val histogram = Span.Metrics.ProcessingTime.refine(Map(operationTag, noErrorTag))
+ histogram.distribution().count shouldBe 0
+
+ val errorHistogram = Span.Metrics.ProcessingTime.refine(Map(operationTag, errorTag))
+ errorHistogram.distribution().count shouldBe 1
+ }
- val errorHistogram = histogramMetric.refine(operationTag, errorTag).distribution()
- errorHistogram.count === 1
+ "add a parentOperation tag to the metrics if span metrics scoping is enabled" in {
+ val parent = buildSpan("parent").start()
+ val parentOperationTag = "parentOperation" -> "parent"
+
+ val operation = "span-with-parent"
+ val operationTag = "operation" -> operation
+
+ buildSpan(operation)
+ .asChildOf(parent)
+ .start()
+ .addSpanTag("error", false)
+ .finish()
+ buildSpan(operation)
+ .asChildOf(parent)
+ .start()
+ .addSpanTag("error", true)
+ .finish()
+
+ val histogram = Span.Metrics.ProcessingTime.refine(Map(operationTag, noErrorTag, parentOperationTag))
+ histogram.distribution().count shouldBe 1
+
+ val errorHistogram = Span.Metrics.ProcessingTime.refine(Map(operationTag, errorTag, parentOperationTag))
+ errorHistogram.distribution().count shouldBe 1
}
- }
-}
+ "not add any parentOperation tag to the metrics if span metrics scoping is disabled" in withoutSpanScopingEnabled {
+ val parent = buildSpan("parent").start()
+ val parentOperationTag = "parentOperation" -> "parent"
-object SpanMetricsTestHelper {
+ val operation = "span-with-parent"
+ val operationTag = "operation" -> operation
+
+ buildSpan(operation)
+ .asChildOf(parent)
+ .start()
+ .addSpanTag("error", false)
+ .finish()
- implicit class HistogramMetricSyntax(histogram: Histogram) {
- def distribution(resetState: Boolean = true): Distribution =
- histogram match {
- case hm: HistogramMetric => hm.refine(Map.empty[String, String]).distribution(resetState)
- case h: AtomicHdrHistogram => h.snapshot(resetState).distribution
- case h: HdrHistogram => h.snapshot(resetState).distribution
- }
+ buildSpan(operation)
+ .asChildOf(parent)
+ .start()
+ .addSpanTag("error", true)
+ .finish()
+
+ val histogram = Span.Metrics.ProcessingTime.refine(Map(operationTag, noErrorTag, parentOperationTag))
+ histogram.distribution().count shouldBe 0
+
+ val errorHistogram = Span.Metrics.ProcessingTime.refine(Map(operationTag, errorTag, parentOperationTag))
+ errorHistogram.distribution().count shouldBe 0
+ }
}
-}
+ val errorTag = "error" -> "true"
+ val noErrorTag = "error" -> "false"
+
+ private def withoutSpanScopingEnabled[T](f: => T): T = {
+ disableSpanMetricScoping()
+ val evaluated = f
+ enableSpanMetricScoping()
+ evaluated
+ }
+}