aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2017-11-23 01:43:34 +0100
committerIvan Topolnjak <ivantopo@gmail.com>2017-11-23 01:43:34 +0100
commit114918ea3932e5d45416e894838097208cce7c2c (patch)
treeedc1bff1e90ed6ab2fa89fb35f285c351fb5e2f3
parenta71f5bc53a3c540cb839c3709eb3a114470dbcd4 (diff)
downloadKamon-114918ea3932e5d45416e894838097208cce7c2c.tar.gz
Kamon-114918ea3932e5d45416e894838097208cce7c2c.tar.bz2
Kamon-114918ea3932e5d45416e894838097208cce7c2c.zip
add utility apis for easier usage of Spans in the current context
-rw-r--r--kamon-core-tests/src/test/scala/kamon/trace/TracerSpec.scala4
-rw-r--r--kamon-core/src/main/scala/kamon/Kamon.scala16
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()