diff options
author | Ivan Topolnak <ivantopo@gmail.com> | 2013-05-15 18:47:22 -0300 |
---|---|---|
committer | Ivan Topolnak <ivantopo@gmail.com> | 2013-05-15 18:47:22 -0300 |
commit | 83e51763db4da386fb22b670aab9b0c2beda20d2 (patch) | |
tree | b6bd0f1a63fd02e75208e6a6cec21dc1724b9b55 /src/main/scala/kamon/TraceContext.scala | |
parent | ee1b12e22a502308a26208f87132f08d356d1e1e (diff) | |
download | Kamon-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.scala | 42 |
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) + } +} |