aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2017-07-12 12:35:33 +0200
committerGitHub <noreply@github.com>2017-07-12 12:35:33 +0200
commitac3b72e27765ceec4cc3958b0fa7eaba0299f017 (patch)
tree11cfe2100a59ab6af800293707ab6266dd2195ec
parent52c4503b6aea2309feeb550b7db2e5fa627dedc8 (diff)
parent6c0a8fb6395fca11b48f7ad1cd2bd774f90ee7fd (diff)
downloadKamon-ac3b72e27765ceec4cc3958b0fa7eaba0299f017.tar.gz
Kamon-ac3b72e27765ceec4cc3958b0fa7eaba0299f017.tar.bz2
Kamon-ac3b72e27765ceec4cc3958b0fa7eaba0299f017.zip
Merge pull request #479 from mladens/kamon-1.0-develop
Kamon 1.0 develop
-rw-r--r--kamon-core/src/main/scala/kamon/trace/Span.scala16
-rw-r--r--kamon-core/src/test/scala/kamon/trace/SpanMetrics.scala66
2 files changed, 76 insertions, 6 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/Span.scala b/kamon-core/src/main/scala/kamon/trace/Span.scala
index 8149be74..464559e3 100644
--- a/kamon-core/src/main/scala/kamon/trace/Span.scala
+++ b/kamon-core/src/main/scala/kamon/trace/Span.scala
@@ -153,14 +153,18 @@ class Span(spanContext: SpanContext, initialOperationName: String, initialTags:
val elapsedTime = endTimestampMicros - startTimestampMicros
val metricTags = Map("operation" -> operationName) ++ additionalMetricTags
- val latencyHistogram = Span.Metrics.SpanProcessingTimeMetric.refine(metricTags)
- latencyHistogram.record(elapsedTime)
+ val isError = tags.get("error").exists {
+ errorTag => errorTag != null && errorTag.equals(Span.BooleanTagTrueValue)
+ }
- tags.get("error").foreach { errorTag =>
- if(errorTag != null && errorTag.equals(Span.BooleanTagTrueValue)) {
- Span.Metrics.SpanErrorCount.refine(metricTags).increment()
- }
+ val refinedTags = if(isError) {
+ metricTags + ("error" -> Span.BooleanTagTrueValue)
+ } else {
+ metricTags
}
+
+ val latencyHistogram = Span.Metrics.SpanProcessingTimeMetric.refine(refinedTags)
+ latencyHistogram.record(elapsedTime)
}
}
diff --git a/kamon-core/src/test/scala/kamon/trace/SpanMetrics.scala b/kamon-core/src/test/scala/kamon/trace/SpanMetrics.scala
new file mode 100644
index 00000000..a4ce9882
--- /dev/null
+++ b/kamon-core/src/test/scala/kamon/trace/SpanMetrics.scala
@@ -0,0 +1,66 @@
+package kamon.trace
+
+import kamon.Kamon
+import kamon.Kamon.buildSpan
+import kamon.metric._
+import org.scalatest.{Matchers, WordSpecLike}
+
+class SpanMetrics extends WordSpecLike with Matchers {
+ import SpanMetricsTestHelper._
+
+ val errorTag = "error" -> Span.BooleanTagTrueValue
+ val histogramMetric: HistogramMetric = Kamon.histogram("span.elapsed-time")
+
+ "Span Metrics" should {
+ "be recorded for successeful execution" in {
+ val operation = "span-success"
+ val operationTag = "operation" -> operation
+
+ val span = buildSpan(operation).startManual()
+ span.finish()
+
+
+ val histogram = histogramMetric.refine(operationTag)
+ histogram.distribution().count === 1
+
+ val errorHistogram = histogramMetric.refine(operationTag, errorTag).distribution()
+ errorHistogram.count === 0
+
+ }
+
+ "record correctly error latency and count" in {
+ val operation = "span-failure"
+ val operationTag = "operation" -> operation
+
+ val span = buildSpan(operation).startManual()
+ span.setTag("error", Span.BooleanTagTrueValue)
+ span.finish()
+
+ val histogram = histogramMetric.refine(operationTag)
+ histogram.distribution().count === 0
+
+ val errorHistogram = histogramMetric.refine(operationTag, errorTag).distribution()
+ errorHistogram.count === 1
+
+ }
+ }
+
+}
+
+object SpanMetricsTestHelper {
+
+ 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
+ }
+ }
+
+
+
+}
+
+
+