diff options
Diffstat (limited to 'kamon-trace/src/main/scala/kamon/trace/Tracer.scala')
-rw-r--r-- | kamon-trace/src/main/scala/kamon/trace/Tracer.scala | 33 |
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 { |