diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2017-08-15 14:35:17 +0200 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2017-08-15 14:35:17 +0200 |
commit | db0f66e0f0508a6565738bb19520710eddd0398c (patch) | |
tree | f92d57a29e457c66e1f0a617c9daf16c01e2c438 /kamon-core-tests | |
parent | 7361fde5f06692a0e1b83d53756bb536627f2d02 (diff) | |
download | Kamon-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.scala | 2 | ||||
-rw-r--r-- | kamon-core-tests/src/test/scala/kamon/trace/SpanMetrics.scala | 94 |
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 + } +} |