aboutsummaryrefslogtreecommitdiff
path: root/kamon-trace/src/main/scala/kamon/trace/Tracer.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-trace/src/main/scala/kamon/trace/Tracer.scala')
-rw-r--r--kamon-trace/src/main/scala/kamon/trace/Tracer.scala33
1 files changed, 33 insertions, 0 deletions
diff --git a/kamon-trace/src/main/scala/kamon/trace/Tracer.scala b/kamon-trace/src/main/scala/kamon/trace/Tracer.scala
index e64cfaa6..4ea89850 100644
--- a/kamon-trace/src/main/scala/kamon/trace/Tracer.scala
+++ b/kamon-trace/src/main/scala/kamon/trace/Tracer.scala
@@ -1,7 +1,40 @@
package kamon.trace
+import kamon.Kamon
import scala.util.DynamicVariable
+import akka.actor._
+import scala.Some
+import kamon.trace.Trace.Register
+import scala.concurrent.duration._
+object Trace extends ExtensionId[TraceExtension] with ExtensionIdProvider {
+ def lookup(): ExtensionId[_ <: Extension] = Trace
+ def createExtension(system: ExtendedActorSystem): TraceExtension = new TraceExtension(system)
+
+
+ /*** Protocol */
+ case object Register
+}
+
+class TraceExtension(system: ExtendedActorSystem) extends Kamon.Extension {
+ def manager: ActorRef = ???
+}
+
+class TraceManager extends Actor {
+ var listeners: Seq[ActorRef] = Seq.empty
+
+ def receive = {
+ case Register => listeners = sender +: listeners
+ case segment: UowSegment =>
+ context.child(segment.id.toString) match {
+ case Some(agreggator) => agreggator ! segment
+ case None => context.actorOf(UowTraceAggregator.props(self, 30 seconds))
+ }
+
+ case trace: UowTrace =>
+ listeners foreach(_ ! trace)
+ }
+}
object Tracer {