diff options
-rw-r--r-- | kamon-core-tests/src/test/scala/kamon/trace/TracerSpec.scala | 4 | ||||
-rw-r--r-- | kamon-core/src/main/scala/kamon/Kamon.scala | 16 |
2 files changed, 18 insertions, 2 deletions
diff --git a/kamon-core-tests/src/test/scala/kamon/trace/TracerSpec.scala b/kamon-core-tests/src/test/scala/kamon/trace/TracerSpec.scala index 92431470..eec5b428 100644 --- a/kamon-core-tests/src/test/scala/kamon/trace/TracerSpec.scala +++ b/kamon-core-tests/src/test/scala/kamon/trace/TracerSpec.scala @@ -65,7 +65,7 @@ class TracerSpec extends WordSpec with Matchers with SpanBuilding with SpanInspe "automatically take the Span from the current Context as parent" in { val parent = tracer.buildSpan("myOperation").start() - val child = Kamon.withContext(Context.create(Span.ContextKey, parent)) { + val child = Kamon.withSpan(parent) { tracer.buildSpan("childOperation").asChildOf(parent).start() } @@ -76,7 +76,7 @@ class TracerSpec extends WordSpec with Matchers with SpanBuilding with SpanInspe "ignore the span from the current context as parent if explicitly requested" in { val parent = tracer.buildSpan("myOperation").start() - val child = Kamon.withContext(Context.create(Span.ContextKey, parent)) { + val child = Kamon.withSpan(parent) { tracer.buildSpan("childOperation").ignoreParentFromContext().start() } diff --git a/kamon-core/src/main/scala/kamon/Kamon.scala b/kamon-core/src/main/scala/kamon/Kamon.scala index 6e0a260d..1a9dbe95 100644 --- a/kamon-core/src/main/scala/kamon/Kamon.scala +++ b/kamon-core/src/main/scala/kamon/Kamon.scala @@ -122,6 +122,22 @@ object Kamon extends MetricLookup with ReporterRegistry with Tracer { def withContextKey[T, K](key: Key[K], value: K)(f: => T): T = withContext(currentContext().withKey(key, value))(f) + def withSpan[T](span: Span)(f: => T): T = + withSpan(span, true)(f) + + def withSpan[T](span: Span, finishSpan: Boolean)(f: => T): T = { + try { + withContextKey(Span.ContextKey, span)(f) + } catch { + case t: Throwable => + span.addError(t.getMessage, t) + throw t + + } finally { + if(finishSpan) + span.finish() + } + } override def loadReportersFromConfig(): Unit = _reporterRegistry.loadReportersFromConfig() |