aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/legacy-test/scala/kamon/metric/TraceMetricsSpec.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core/src/legacy-test/scala/kamon/metric/TraceMetricsSpec.scala')
-rw-r--r--kamon-core/src/legacy-test/scala/kamon/metric/TraceMetricsSpec.scala121
1 files changed, 121 insertions, 0 deletions
diff --git a/kamon-core/src/legacy-test/scala/kamon/metric/TraceMetricsSpec.scala b/kamon-core/src/legacy-test/scala/kamon/metric/TraceMetricsSpec.scala
new file mode 100644
index 00000000..4c44dc07
--- /dev/null
+++ b/kamon-core/src/legacy-test/scala/kamon/metric/TraceMetricsSpec.scala
@@ -0,0 +1,121 @@
+/*
+ * =========================================================================================
+ * Copyright © 2013-2016 the kamon project <http://kamon.io/>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language governing permissions
+ * and limitations under the License.
+ * =========================================================================================
+ */
+
+package kamon.metric
+
+import akka.testkit.ImplicitSender
+import com.typesafe.config.ConfigFactory
+import kamon.testkit.BaseKamonSpec
+import kamon.trace.Tracer
+import kamon.metric.instrument.Histogram
+
+import scala.util.control.NoStackTrace
+
+class TraceMetricsSpec extends BaseKamonSpec("trace-metrics-spec") with ImplicitSender {
+
+ "the TraceMetrics" should {
+ "record the elapsed time between a trace creation and finish" in {
+ for (repetitions ← 1 to 10) {
+ Tracer.withContext(newContext("record-elapsed-time")) {
+ Tracer.currentContext.finish()
+ }
+ }
+
+ val snapshot = takeSnapshotOf("record-elapsed-time", "trace")
+ snapshot.histogram("elapsed-time").get.numberOfMeasurements should be(10)
+ }
+
+ "record the elapsed time for segments that occur inside a given trace" in {
+ Tracer.withContext(newContext("trace-with-segments")) {
+ val segment = Tracer.currentContext.startSegment("test-segment", "test-category", "test-library")
+ segment.finish()
+ Tracer.currentContext.finish()
+ }
+
+ val snapshot = takeSnapshotOf("test-segment", "trace-segment",
+ tags = Map(
+ "trace" → "trace-with-segments",
+ "category" → "test-category",
+ "library" → "test-library"
+ ))
+
+ snapshot.histogram("elapsed-time").get.numberOfMeasurements should be(1)
+ }
+
+ "record the elapsed time for segments that finish after their correspondent trace has finished" in {
+ val segment = Tracer.withContext(newContext("closing-segment-after-trace")) {
+ val s = Tracer.currentContext.startSegment("test-segment", "test-category", "test-library")
+ Tracer.currentContext.finish()
+ s
+ }
+
+ val beforeFinishSegmentSnapshot = takeSnapshotOf("closing-segment-after-trace", "trace")
+ beforeFinishSegmentSnapshot.histogram("elapsed-time").get.numberOfMeasurements should be(1)
+
+ intercept[NoSuchElementException] {
+ // The segment metric should not exist before we it has finished.
+
+ takeSnapshotOf("test-segment", "trace-segment",
+ tags = Map(
+ "trace" → "closing-segment-after-trace",
+ "category" → "test-category",
+ "library" → "test-library"
+ ))
+ }
+
+ segment.finish()
+
+ val afterFinishSegmentSnapshot = takeSnapshotOf("test-segment", "trace-segment",
+ tags = Map(
+ "trace" → "closing-segment-after-trace",
+ "category" → "test-category",
+ "library" → "test-library"
+ ))
+
+ afterFinishSegmentSnapshot.histogram("elapsed-time").get.numberOfMeasurements should be(1)
+ }
+
+ "record the elapsed time between a trace creation and finish with an error" in {
+ for (repetitions ← 1 to 10) {
+ Tracer.withContext(newContext("record-elapsed-time-with-error")) {
+ Tracer.currentContext.finishWithError(new RuntimeException("awesome-trace-error") with NoStackTrace)
+ }
+ }
+
+ val snapshot = takeSnapshotOf("record-elapsed-time-with-error", "trace")
+ snapshot.histogram("elapsed-time").get.numberOfMeasurements should be(10)
+ snapshot.counter("errors").get.count should be(10)
+ }
+
+ "record the elapsed time for segments that finish with an error and that occur inside a given trace" in {
+ Tracer.withContext(newContext("trace-with-segments")) {
+ val segment = Tracer.currentContext.startSegment("test-segment-with-error", "test-category", "test-library")
+ segment.finishWithError(new RuntimeException("awesome-segment-error") with NoStackTrace)
+ Tracer.currentContext.finish()
+ }
+
+ val snapshot = takeSnapshotOf("test-segment-with-error", "trace-segment",
+ tags = Map(
+ "trace" → "trace-with-segments",
+ "category" → "test-category",
+ "library" → "test-library"
+ ))
+
+ snapshot.histogram("elapsed-time").get.numberOfMeasurements should be(1)
+ snapshot.counter("errors").get.count should be(1)
+ }
+ }
+} \ No newline at end of file