aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/kamon/TraceContext.scala
diff options
context:
space:
mode:
authorIvan Topolnak <ivantopo@gmail.com>2013-06-03 12:46:56 -0300
committerIvan Topolnak <ivantopo@gmail.com>2013-06-03 12:46:56 -0300
commit695b9b6d2bdf55afd7fe420d9a6fc36d3d45ed31 (patch)
treeaff9e74f6b5838f186ba8ef9e6053d9ad4c84ea2 /src/main/scala/kamon/TraceContext.scala
parentcad83e95166d91225e126aa6a0fab493b3baca59 (diff)
parentda47788738055e4fef1485f2721c6ee040c16fd8 (diff)
downloadKamon-695b9b6d2bdf55afd7fe420d9a6fc36d3d45ed31.tar.gz
Kamon-695b9b6d2bdf55afd7fe420d9a6fc36d3d45ed31.tar.bz2
Kamon-695b9b6d2bdf55afd7fe420d9a6fc36d3d45ed31.zip
Merged the aspects-refactor changes
Diffstat (limited to 'src/main/scala/kamon/TraceContext.scala')
-rw-r--r--src/main/scala/kamon/TraceContext.scala37
1 files changed, 19 insertions, 18 deletions
diff --git a/src/main/scala/kamon/TraceContext.scala b/src/main/scala/kamon/TraceContext.scala
index e3582c60..19ebc578 100644
--- a/src/main/scala/kamon/TraceContext.scala
+++ b/src/main/scala/kamon/TraceContext.scala
@@ -1,29 +1,30 @@
package kamon
import java.util.UUID
-import akka.actor.ActorPath
-
-
-case class TraceContext(id: UUID, entries: List[TraceEntry]) {
- def fork = this.copy(entries = Nil)
- def withEntry(entry: TraceEntry) = this.copy(entries = entry :: entries)
+import akka.actor.{ActorSystem, ActorPath}
+import akka.agent.Agent
+import java.util.concurrent.TimeUnit
+import scala.util.{Failure, Success}
+import akka.util.Timeout
+
+
+case class TraceContext(id: UUID, private val entries: Agent[List[TraceEntry]], userContext: Option[Any] = None) {
+ implicit val timeout = Timeout(30, TimeUnit.SECONDS)
+ implicit val as = Kamon.actorSystem.dispatcher
+
+ def append(entry: TraceEntry) = entries send (entry :: _)
+ def close = entries.future.onComplete({
+ case Success(list) => Kamon.publish(FullTransaction(id, list))
+ case Failure(t) => println("WTF!")
+ })
}
object TraceContext {
- private val context = new ThreadLocal[Option[TraceContext]] {
- override def initialValue(): Option[TraceContext] = None
- }
-
- def current = context.get()
-
- def clear = context.remove()
+ def apply()(implicit actorSystem: ActorSystem) = new TraceContext(UUID.randomUUID(), Agent[List[TraceEntry]](Nil))
+}
- def set(ctx: TraceContext) = context.set(Some(ctx))
- def start = set(TraceContext(UUID.randomUUID(), Nil))
-}
trait TraceEntry
-case class MessageExecutionTime(actorPath: ActorPath, initiated: Long, ended: Long)
-case class CodeBlockExecutionTime(blockName: String, begin: Long, end: Long) extends TraceEntry
+case class CodeBlockExecutionTime(name: String, begin: Long, end: Long) extends TraceEntry