diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2013-10-30 09:04:25 -0300 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2013-10-30 09:04:25 -0300 |
commit | ca1e93621ddad4b9f2a9028ea183b1c2f4c25a27 (patch) | |
tree | 2f9ce9a7b2f73fd19b5ec2d1af46c4ab43037528 /kamon-trace | |
parent | ab40e0e7f35f97390d180b49d556ee36aac4af18 (diff) | |
download | Kamon-ca1e93621ddad4b9f2a9028ea183b1c2f4c25a27.tar.gz Kamon-ca1e93621ddad4b9f2a9028ea183b1c2f4c25a27.tar.bz2 Kamon-ca1e93621ddad4b9f2a9028ea183b1c2f4c25a27.zip |
move things all over the place
Diffstat (limited to 'kamon-trace')
-rw-r--r-- | kamon-trace/src/main/scala/kamon/trace/TraceContext.scala | 61 | ||||
-rw-r--r-- | kamon-trace/src/main/scala/kamon/trace/Tracer.scala | 16 |
2 files changed, 77 insertions, 0 deletions
diff --git a/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala b/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala new file mode 100644 index 00000000..78db911d --- /dev/null +++ b/kamon-trace/src/main/scala/kamon/trace/TraceContext.scala @@ -0,0 +1,61 @@ +package kamon.trace + +import java.util.UUID +import akka.actor._ +import java.util.concurrent.atomic.AtomicLong +import scala.concurrent.duration._ + +// 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) + +object TraceContext { + val reporter = Kamon.actorSystem.actorOf(Props[NewRelicReporting]) + val traceIdCounter = new AtomicLong + + 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 + } +} + + + +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 +} + +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 + } +} + + diff --git a/kamon-trace/src/main/scala/kamon/trace/Tracer.scala b/kamon-trace/src/main/scala/kamon/trace/Tracer.scala new file mode 100644 index 00000000..e64cfaa6 --- /dev/null +++ b/kamon-trace/src/main/scala/kamon/trace/Tracer.scala @@ -0,0 +1,16 @@ +package kamon.trace + +import scala.util.DynamicVariable + + + +object Tracer { + val traceContext = new DynamicVariable[Option[TraceContext]](None) + + + def context() = traceContext.value + def set(ctx: TraceContext) = traceContext.value = Some(ctx) + + def start = set(newTraceContext) + def newTraceContext(): TraceContext = TraceContext()(Kamon.actorSystem) +} |