From 2f274788aa8c96eed918ef3ddb69de496d5d0346 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Sun, 9 Nov 2014 22:55:43 +0100 Subject: + core,play,spray: allow segments to identify the library they belong to. --- .../src/main/scala/kamon/trace/TraceContext.scala | 24 ++++++++++++---------- .../test/scala/kamon/metric/TraceMetricsSpec.scala | 8 ++++---- .../kamon/trace/TraceContextManipulationSpec.scala | 4 ++-- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/kamon-core/src/main/scala/kamon/trace/TraceContext.scala b/kamon-core/src/main/scala/kamon/trace/TraceContext.scala index 9555daba..5b74e6b2 100644 --- a/kamon-core/src/main/scala/kamon/trace/TraceContext.scala +++ b/kamon-core/src/main/scala/kamon/trace/TraceContext.scala @@ -37,14 +37,15 @@ sealed trait TraceContext { def isClosed: Boolean = !isOpen def isEmpty: Boolean def nonEmpty: Boolean = !isEmpty - def startSegment(segmentName: String, label: String): Segment + def startSegment(segmentName: String, category: String, library: String): Segment def nanoTimestamp: Long } sealed trait Segment { def name: String def rename(newName: String): Unit - def label: String + def category: String + def library: String def finish(): Unit def isEmpty: Boolean } @@ -57,12 +58,13 @@ case object EmptyTraceContext extends TraceContext { def origin: TraceContextOrigin = TraceContextOrigin.Local def isOpen: Boolean = false def isEmpty: Boolean = true - def startSegment(segmentName: String, label: String): Segment = EmptySegment + def startSegment(segmentName: String, category: String, library: String): Segment = EmptySegment def nanoTimestamp: Long = 0L case object EmptySegment extends Segment { val name: String = "empty-segment" - val label: String = "empty-label" + val category: String = "empty-category" + val library: String = "empty-library" def isEmpty: Boolean = true def rename(newName: String): Unit = {} def finish: Unit = {} @@ -99,7 +101,7 @@ class DefaultTraceContext(traceName: String, val token: String, izOpen: Boolean, } } - def startSegment(segmentName: String, segmentLabel: String): Segment = new DefaultSegment(segmentName, segmentLabel) + def startSegment(segmentName: String, category: String, library: String): Segment = new DefaultSegment(segmentName, category, library) @tailrec private def drainFinishedSegments(metricRecorder: TraceMetricRecorder): Unit = { val segment = finishedSegments.poll() @@ -109,8 +111,8 @@ class DefaultTraceContext(traceName: String, val token: String, izOpen: Boolean, } } - private def finishSegment(segmentName: String, label: String, duration: Long): Unit = { - finishedSegments.add(SegmentData(SegmentMetricIdentity(segmentName, label), duration)) + private def finishSegment(segmentName: String, category: String, library: String, duration: Long): Unit = { + finishedSegments.add(SegmentData(SegmentMetricIdentity(segmentName, category, library), duration)) if (isClosed) { metricsExtension.register(TraceMetrics(name), TraceMetrics.Factory).map { traceMetrics ⇒ @@ -119,7 +121,7 @@ class DefaultTraceContext(traceName: String, val token: String, izOpen: Boolean, } } - class DefaultSegment(segmentName: String, val label: String) extends Segment { + class DefaultSegment(segmentName: String, val category: String, val library: String) extends Segment { private val _segmentStartNanoTime = System.nanoTime() @volatile private var _segmentName = segmentName @volatile private var _isOpen = true @@ -130,15 +132,15 @@ class DefaultTraceContext(traceName: String, val token: String, izOpen: Boolean, def finish: Unit = { val segmentFinishNanoTime = System.nanoTime() - finishSegment(name, label, (segmentFinishNanoTime - _segmentStartNanoTime)) + finishSegment(name, category, library, (segmentFinishNanoTime - _segmentStartNanoTime)) } } } -case class SegmentMetricIdentity(name: String, label: String) extends MetricIdentity +case class SegmentMetricIdentity(name: String, category: String, library: String) extends MetricIdentity case class SegmentData(identity: SegmentMetricIdentity, duration: Long) -object SegmentMetricIdentityLabel { +object SegmentCategory { val HttpClient = "http-client" } diff --git a/kamon-core/src/test/scala/kamon/metric/TraceMetricsSpec.scala b/kamon-core/src/test/scala/kamon/metric/TraceMetricsSpec.scala index 6453dd77..cd10f2d3 100644 --- a/kamon-core/src/test/scala/kamon/metric/TraceMetricsSpec.scala +++ b/kamon-core/src/test/scala/kamon/metric/TraceMetricsSpec.scala @@ -53,7 +53,7 @@ class TraceMetricsSpec extends TestKitBase with WordSpecLike with Matchers with "record the elapsed time for segments that occur inside a given trace" in { TraceRecorder.withNewTraceContext("trace-with-segments") { - val segment = TraceRecorder.currentContext.startSegment("test-segment", "test-label") + val segment = TraceRecorder.currentContext.startSegment("test-segment", "test-category", "test-library") segment.finish() TraceRecorder.finish() } @@ -61,12 +61,12 @@ class TraceMetricsSpec extends TestKitBase with WordSpecLike with Matchers with val snapshot = takeSnapshotOf("trace-with-segments") snapshot.elapsedTime.numberOfMeasurements should be(1) snapshot.segments.size should be(1) - snapshot.segments(SegmentMetricIdentity("test-segment", "test-label")).numberOfMeasurements should be(1) + snapshot.segments(SegmentMetricIdentity("test-segment", "test-category", "test-library")).numberOfMeasurements should be(1) } "record the elapsed time for segments that finish after their correspondent trace has finished" in { val segment = TraceRecorder.withNewTraceContext("closing-segment-after-trace") { - val s = TraceRecorder.currentContext.startSegment("test-segment", "test-label") + val s = TraceRecorder.currentContext.startSegment("test-segment", "test-category", "test-library") TraceRecorder.finish() s } @@ -80,7 +80,7 @@ class TraceMetricsSpec extends TestKitBase with WordSpecLike with Matchers with val afterFinishSegmentSnapshot = takeSnapshotOf("closing-segment-after-trace") afterFinishSegmentSnapshot.elapsedTime.numberOfMeasurements should be(0) afterFinishSegmentSnapshot.segments.size should be(1) - afterFinishSegmentSnapshot.segments(SegmentMetricIdentity("test-segment", "test-label")).numberOfMeasurements should be(1) + afterFinishSegmentSnapshot.segments(SegmentMetricIdentity("test-segment", "test-category", "test-library")).numberOfMeasurements should be(1) } } diff --git a/kamon-core/src/test/scala/kamon/trace/TraceContextManipulationSpec.scala b/kamon-core/src/test/scala/kamon/trace/TraceContextManipulationSpec.scala index e2031a72..0875deff 100644 --- a/kamon-core/src/test/scala/kamon/trace/TraceContextManipulationSpec.scala +++ b/kamon-core/src/test/scala/kamon/trace/TraceContextManipulationSpec.scala @@ -78,7 +78,7 @@ class TraceContextManipulationSpec extends TestKitBase with WordSpecLike with Ma "allow creating a segment within a trace" in { val createdContext = TraceRecorder.withNewTraceContext("trace-with-segments") { - val segment = TraceRecorder.currentContext.startSegment("segment-1", "segment-1-label") + val segment = TraceRecorder.currentContext.startSegment("segment-1", "segment-1-category", "segment-library") TraceRecorder.currentContext } @@ -88,7 +88,7 @@ class TraceContextManipulationSpec extends TestKitBase with WordSpecLike with Ma "allow renaming a segment" in { TraceRecorder.withNewTraceContext("trace-with-renamed-segment") { - val segment = TraceRecorder.currentContext.startSegment("original-segment-name", "segment-label") + val segment = TraceRecorder.currentContext.startSegment("original-segment-name", "segment-label", "segment-library") segment.name should be("original-segment-name") segment.rename("new-segment-name") -- cgit v1.2.3