diff options
author | Ivan Topolnak <ivantopo@gmail.com> | 2013-09-18 18:43:11 -0300 |
---|---|---|
committer | Ivan Topolnak <ivantopo@gmail.com> | 2013-09-18 18:43:11 -0300 |
commit | 5168621c256d25d388fb990a5bbc080a35e07b46 (patch) | |
tree | 5ebdbbf2286072bbd47b8e2e9482add5ccf382ad /kamon-core/src/main/scala/kamon/trace/UowTracing.scala | |
parent | d8305b781aaf454cec558bfb86a366682e9f5eab (diff) | |
download | Kamon-5168621c256d25d388fb990a5bbc080a35e07b46.tar.gz Kamon-5168621c256d25d388fb990a5bbc080a35e07b46.tar.bz2 Kamon-5168621c256d25d388fb990a5bbc080a35e07b46.zip |
basic newrelic reporting
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace/UowTracing.scala')
-rw-r--r-- | kamon-core/src/main/scala/kamon/trace/UowTracing.scala | 45 |
1 files changed, 45 insertions, 0 deletions
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 |