From ef927dc672bea427d4de89b8d0ea0bd18bd71285 Mon Sep 17 00:00:00 2001 From: Diego Parra Date: Fri, 8 Jul 2016 11:10:09 -0300 Subject: + Kamon-core: introduce finishWithError(Throwable) for Traces and Segments * + kamon-core: introduce finishWithError(Throwable) for Traces and Segments --- .../src/main/scala/kamon/trace/TraceContext.scala | 35 ++++++++++++---------- 1 file changed, 20 insertions(+), 15 deletions(-) (limited to 'kamon-core/src/main/scala/kamon/trace/TraceContext.scala') diff --git a/kamon-core/src/main/scala/kamon/trace/TraceContext.scala b/kamon-core/src/main/scala/kamon/trace/TraceContext.scala index eee2ec14..6bf82ac1 100644 --- a/kamon-core/src/main/scala/kamon/trace/TraceContext.scala +++ b/kamon-core/src/main/scala/kamon/trace/TraceContext.scala @@ -19,6 +19,7 @@ package kamon.trace import java.io.ObjectStreamException import java.util +import kamon.trace.States.{ Closed, Status } import kamon.trace.TraceContextAware.DefaultTraceContextAware import kamon.util.{ Function, RelativeNanoTimestamp, SameThreadExecutionContext, Supplier } @@ -29,19 +30,16 @@ trait TraceContext { def token: String def isEmpty: Boolean def nonEmpty: Boolean = !isEmpty - def isOpen: Boolean - def isClosed: Boolean = !isOpen - + def isClosed: Boolean = !(States.Open == status) + def status: Status def finish(): Unit + def finishWithError(cause: Throwable): Unit def rename(newName: String): Unit - def startSegment(segmentName: String, category: String, library: String): Segment def startSegment(segmentName: String, category: String, library: String, tags: Map[String, String]): Segment def addMetadata(key: String, value: String) - def addTag(key: String, value: String): Unit def removeTag(key: String, value: String): Boolean - def startTimestamp: RelativeNanoTimestamp def collect[T](f: TraceContext ⇒ T): Option[T] = @@ -90,13 +88,12 @@ trait Segment { def library: String def isEmpty: Boolean def nonEmpty: Boolean = !isEmpty - def isOpen: Boolean - def isClosed: Boolean = !isOpen - + def isClosed: Boolean = !(States.Open == status) + def status: Status def finish(): Unit + def finishWithError(cause: Throwable): Unit def rename(newName: String): Unit def addMetadata(key: String, value: String): Unit - def addTag(key: String, value: String): Unit def removeTag(key: String, value: String): Boolean } @@ -105,9 +102,9 @@ case object EmptyTraceContext extends TraceContext { def name: String = "empty-trace" def token: String = "" def isEmpty: Boolean = true - def isOpen: Boolean = false - + def status: Status = Closed def finish(): Unit = {} + def finishWithError(cause: Throwable): Unit = {} def rename(name: String): Unit = {} def startSegment(segmentName: String, category: String, library: String): Segment = EmptySegment def startSegment(segmentName: String, category: String, library: String, tags: Map[String, String]): Segment = EmptySegment @@ -123,9 +120,9 @@ case object EmptyTraceContext extends TraceContext { val category: String = "empty-category" val library: String = "empty-library" def isEmpty: Boolean = true - def isOpen: Boolean = false - - def finish: Unit = {} + def status: Status = Closed + def finish(): Unit = {} + def finishWithError(cause: Throwable): Unit = {} def rename(newName: String): Unit = {} def addMetadata(key: String, value: String): Unit = {} def addTag(key: String, value: String): Unit = {} @@ -151,6 +148,14 @@ object LevelOfDetail { case object FullTrace extends LevelOfDetail } +object States { + sealed trait Status + case object Open extends Status + case object Closed extends Status + case object FinishedWithError extends Status + case object FinishedSuccessfully extends Status +} + trait TraceContextAware extends Serializable { def traceContext: TraceContext } -- cgit v1.2.3