From bbf7afd85809f6d43b310290b4bb9102dd36043c Mon Sep 17 00:00:00 2001 From: Ivan Topolnak Date: Wed, 18 Sep 2013 18:43:11 -0300 Subject: basic newrelic reporting --- .../src/main/scala/kamon/trace/UowTracing.scala | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 kamon-core/src/main/scala/kamon/trace/UowTracing.scala (limited to 'kamon-core/src/main/scala/kamon/trace/UowTracing.scala') diff --git a/kamon-core/src/main/scala/kamon/trace/UowTracing.scala b/kamon-core/src/main/scala/kamon/trace/UowTracing.scala new file mode 100644 index 00000000..b38d3d95 --- /dev/null +++ b/kamon-core/src/main/scala/kamon/trace/UowTracing.scala @@ -0,0 +1,45 @@ +package kamon.trace + +import akka.actor.{Props, ActorRef, Actor} +import kamon.trace.UowTracing.{Start, Finish, Rename} +import scala.concurrent.duration.Duration + +sealed trait UowSegment { + def timestamp: Long +} + +trait AutoTimestamp extends UowSegment { + val timestamp = System.nanoTime +} + +object UowTracing { + case class Start() extends AutoTimestamp + case class Finish() extends AutoTimestamp + case class Rename(name: String) extends AutoTimestamp +} + +case class UowTrace(name: String, segments: Seq[UowSegment]) + + +class UowTraceAggregator(reporting: ActorRef, aggregationTimeout: Duration) extends Actor { + context.setReceiveTimeout(aggregationTimeout) + self ! Start() + + var name: Option[String] = None + var segments: Seq[UowSegment] = Nil + + def receive = { + case finish: Finish => segments = segments :+ finish; finishTracing() + case Rename(newName) => name = Some(newName) + case segment: UowSegment => segments = segments :+ segment + } + + def finishTracing(): Unit = { + reporting ! UowTrace(name.getOrElse("UNKNOWN"), segments) + context.stop(self) + } +} + +object UowTraceAggregator { + def props(reporting: ActorRef, aggregationTimeout: Duration) = Props(classOf[UowTraceAggregator], reporting, aggregationTimeout) +} \ No newline at end of file -- cgit v1.2.3