aboutsummaryrefslogtreecommitdiff
path: root/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala
diff options
context:
space:
mode:
authorIvan Topolnak <ivantopo@gmail.com>2013-11-05 18:38:39 -0300
committerIvan Topolnak <ivantopo@gmail.com>2013-11-05 18:38:39 -0300
commit2b63540e5fffab545d0846cfb3dab5c0e1d0c9e1 (patch)
tree56c4ad1f025c9144376cd4463ad4d4a23e37b571 /kamon-trace/src/main/scala/kamon/trace/TraceContext.scala
parent5127c3bb83cd6fe90e071720d995cfb53d913e6a (diff)
downloadKamon-2b63540e5fffab545d0846cfb3dab5c0e1d0c9e1.tar.gz
Kamon-2b63540e5fffab545d0846cfb3dab5c0e1d0c9e1.tar.bz2
Kamon-2b63540e5fffab545d0846cfb3dab5c0e1d0c9e1.zip
basic separation of concerns between sub-projects
Diffstat (limited to 'kamon-trace/src/main/scala/kamon/trace/TraceContext.scala')
-rw-r--r--kamon-trace/src/main/scala/kamon/trace/TraceContext.scala54
1 files changed, 15 insertions, 39 deletions
diff --git a/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala b/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala
index c3f1f2c2..f8491c12 100644
--- a/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala
+++ b/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala
@@ -4,56 +4,32 @@ import java.util.UUID
import akka.actor._
import java.util.concurrent.atomic.AtomicLong
import scala.concurrent.duration._
+import kamon.Kamon
+import kamon.trace.UowTracing.{Finish, Start}
// TODO: Decide if we need or not an ID, generating it takes time and it doesn't seem necessary.
-case class TraceContext(id: Long, tracer: ActorRef, uow: String = "", userContext: Option[Any] = None)
+protected[kamon] case class TraceContext(private val collector: ActorRef, id: Long, uow: String = "", userContext: Option[Any] = None) {
+ collector ! Start(id)
-object TraceContext {
-
- def apply()(implicit system: ActorSystem) = {
- val n = traceIdCounter.incrementAndGet()
- val actor = system.actorOf(UowTraceAggregator.props(reporter, 30 seconds), s"tracer-${n}")
- actor ! Start()
-
- new TraceContext(n, actor) // TODO: Move to a kamon specific supervisor, like /user/kamon/tracer
+ def finish: Unit = {
+ collector ! Finish(id)
}
-}
-
-class TraceAccumulator extends Actor {
- def receive = {
- case a => println("Trace Accumulated: "+a)
- }
}
-trait TraceEntry
-case class CodeBlockExecutionTime(name: String, begin: Long, end: Long) extends TraceEntry
-case class TransactionTrace(id: UUID, start: Long, end: Long, entries: Seq[TraceEntry])
-
-object Collector
-
-trait TraceEntryStorage {
- def store(entry: TraceEntry): Boolean
+trait ContextAware {
+ def traceContext: Option[TraceContext]
}
-class TransactionContext(val id: UUID, private val storage: TraceEntryStorage) {
- def store(entry: TraceEntry) = storage.store(entry)
-}
-
-object ThreadLocalTraceEntryStorage extends TraceEntryStorage {
-
- private val storage = new ThreadLocal[List[TraceEntry]] {
- override def initialValue(): List[TraceEntry] = Nil
- }
-
- def update(f: List[TraceEntry] => List[TraceEntry]) = storage set f(storage.get)
-
- def store(entry: TraceEntry): Boolean = {
- update(entry :: _)
- true
+object ContextAware {
+ def default: ContextAware = new ContextAware {
+ val traceContext: Option[TraceContext] = Trace.context()
}
}
-
+trait TimedContextAware {
+ def timestamp: Long
+ def traceContext: Option[TraceContext]
+}