blob: a4ce98822f4cd5650e75ffc2f66373789b5b6c7a (
plain) (
tree)
|
|
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
}
}
}
|