aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/kamon/TraceContext.scala
diff options
context:
space:
mode:
authorIvan Topolnak <ivantopo@gmail.com>2013-05-15 18:47:22 -0300
committerIvan Topolnak <ivantopo@gmail.com>2013-05-15 18:47:22 -0300
commit83e51763db4da386fb22b670aab9b0c2beda20d2 (patch)
treeb6bd0f1a63fd02e75208e6a6cec21dc1724b9b55 /src/main/scala/kamon/TraceContext.scala
parentee1b12e22a502308a26208f87132f08d356d1e1e (diff)
downloadKamon-83e51763db4da386fb22b670aab9b0c2beda20d2.tar.gz
Kamon-83e51763db4da386fb22b670aab9b0c2beda20d2.tar.bz2
Kamon-83e51763db4da386fb22b670aab9b0c2beda20d2.zip
wip
Diffstat (limited to 'src/main/scala/kamon/TraceContext.scala')
-rw-r--r--src/main/scala/kamon/TraceContext.scala42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/main/scala/kamon/TraceContext.scala b/src/main/scala/kamon/TraceContext.scala
new file mode 100644
index 00000000..b137168c
--- /dev/null
+++ b/src/main/scala/kamon/TraceContext.scala
@@ -0,0 +1,42 @@
+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)
+}
+
+object TraceContext {
+ val current = new ThreadLocal[TraceContext]
+}
+
+trait TraceEntry
+case class MessageExecutionTime(actorPath: ActorPath, initiated: Long, ended: Long)
+
+case class CodeBlockExecutionTime(blockName: String, begin: Long, end: Long) extends TraceEntry
+
+
+
+
+trait TraceSupport {
+ import TraceContext.current
+
+
+ def trace[T](blockName: String)(f: => T): T = {
+ val before = System.currentTimeMillis
+
+ val result = f
+
+ val after = System.currentTimeMillis
+ swapContext(current.get().withEntry(CodeBlockExecutionTime(blockName, before, after)))
+
+ result
+ }
+
+ def swapContext(newContext: TraceContext) {
+ current.set(newContext)
+ }
+}