From ac4ef4dbda6e215eeb55c27cd4ac1e3ba2d6521b Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Sun, 11 Jun 2017 20:48:27 +0200 Subject: add utilily classes for working with Spans and Continuations --- kamon-core/src/main/scala/kamon/Kamon.scala | 8 ++++ kamon-core/src/main/scala/kamon/trace/Span.scala | 2 +- kamon-core/src/main/scala/kamon/trace/Tracer.scala | 1 - kamon-core/src/main/scala/kamon/util/Mixin.scala | 43 ++++++++++++++++++++++ 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 kamon-core/src/main/scala/kamon/util/Mixin.scala (limited to 'kamon-core') diff --git a/kamon-core/src/main/scala/kamon/Kamon.scala b/kamon-core/src/main/scala/kamon/Kamon.scala index c2ee0b1e..b256cb22 100644 --- a/kamon-core/src/main/scala/kamon/Kamon.scala +++ b/kamon-core/src/main/scala/kamon/Kamon.scala @@ -27,6 +27,8 @@ import kamon.util.MeasurementUnit import scala.concurrent.Future import java.time.Duration +import io.opentracing.ActiveSpan.Continuation + object Kamon extends MetricLookup with ReporterRegistry with io.opentracing.Tracer { private val initialConfig = ConfigFactory.load() @@ -78,6 +80,12 @@ object Kamon extends MetricLookup with ReporterRegistry with io.opentracing.Trac override def makeActive(span: Span): ActiveSpan = kamonTracer.makeActive(span) + def withActiveSpan[T](continuation: Continuation)(code: => T): T = { + val activeSpan = continuation.activate() + val evaluatedCode = code + activeSpan.deactivate() + evaluatedCode + } override def loadReportersFromConfig(): Unit = diff --git a/kamon-core/src/main/scala/kamon/trace/Span.scala b/kamon-core/src/main/scala/kamon/trace/Span.scala index 583c2b35..04b8eaf3 100644 --- a/kamon-core/src/main/scala/kamon/trace/Span.scala +++ b/kamon-core/src/main/scala/kamon/trace/Span.scala @@ -183,4 +183,4 @@ object Span { tags: Map[String, String], logs: Seq[LogEntry] ) -} +} \ No newline at end of file diff --git a/kamon-core/src/main/scala/kamon/trace/Tracer.scala b/kamon-core/src/main/scala/kamon/trace/Tracer.scala index b4ec936f..3aeb968f 100644 --- a/kamon-core/src/main/scala/kamon/trace/Tracer.scala +++ b/kamon-core/src/main/scala/kamon/trace/Tracer.scala @@ -159,5 +159,4 @@ class Tracer(metrics: MetricLookup, reporterRegistry: ReporterRegistryImpl, init private final class TracerMetrics(metricLookup: MetricLookup) { val createdSpans = metricLookup.counter("tracer.spans-created") } - } diff --git a/kamon-core/src/main/scala/kamon/util/Mixin.scala b/kamon-core/src/main/scala/kamon/util/Mixin.scala new file mode 100644 index 00000000..f214e875 --- /dev/null +++ b/kamon-core/src/main/scala/kamon/util/Mixin.scala @@ -0,0 +1,43 @@ +/* ========================================================================================= + * Copyright © 2013-2017 the kamon project + * + * 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 +package util + +import io.opentracing.ActiveSpan +import io.opentracing.ActiveSpan.Continuation + +/** + * Utility trait that marks objects carrying an ActiveSpan.Continuation. + */ +trait HasContinuation { + def continuation: Continuation +} + +object HasContinuation { + private class Default(val continuation: Continuation) extends HasContinuation + + /** + * Construct a HasContinuation instance by capturing a continuation from the provided active span. + */ + def from(activeSpan: ActiveSpan): HasContinuation = + new Default(activeSpan.capture()) + + /** + * Constructs a new HasContinuation instance using Kamon's tracer currently active span. + */ + def fromTracerActiveSpan(): HasContinuation = + new Default(Kamon.activeSpan().capture()) +} -- cgit v1.2.3