aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/kamon/TraceContext.scala
diff options
context:
space:
mode:
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)
+ }
+}