diff options
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace/Tracer.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/Tracer.scala | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/kamon-core/src/main/scala/kamon/trace/Tracer.scala b/kamon-core/src/main/scala/kamon/trace/Tracer.scala index 3e857f00..ad7ffbed 100644 --- a/kamon-core/src/main/scala/kamon/trace/Tracer.scala +++ b/kamon-core/src/main/scala/kamon/trace/Tracer.scala @@ -99,6 +99,7 @@ object Tracer { private var initialMetricTags = Map.empty[String, String] private var useParentFromContext = true private var trackMetrics = true + private var providedTraceID = IdentityProvider.NoIdentifier def asChildOf(parent: Span): SpanBuilder = { if(parent != Span.Empty) this.parentSpan = parent @@ -158,6 +159,11 @@ object Tracer { this } + def withTraceID(identifier: IdentityProvider.Identifier): SpanBuilder = { + this.providedTraceID = identifier + this + } + def start(): Span = { val spanFrom = if(from == Instant.EPOCH) clock.instant() else from @@ -199,13 +205,21 @@ object Tracer { else parent.context().createChild(tracer._identityProvider.spanIdGenerator().generate(), samplingDecision) - private def newSpanContext(samplingDecision: SamplingDecision): SpanContext = + private def newSpanContext(samplingDecision: SamplingDecision): SpanContext = { + val traceID = + if(providedTraceID != IdentityProvider.NoIdentifier) + providedTraceID + else + tracer._identityProvider.traceIdGenerator().generate() + + SpanContext( - traceID = tracer._identityProvider.traceIdGenerator().generate(), + traceID, spanID = tracer._identityProvider.spanIdGenerator().generate(), parentID = IdentityProvider.NoIdentifier, samplingDecision = samplingDecision ) + } } private final class TracerMetrics(metricLookup: MetricLookup) { |