aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/main/scala/kamon/trace
diff options
context:
space:
mode:
authorIvan Topolnak <ivantopo@gmail.com>2013-09-18 18:43:11 -0300
committerIvan Topolnak <ivantopo@gmail.com>2013-09-18 18:43:11 -0300
commit5168621c256d25d388fb990a5bbc080a35e07b46 (patch)
tree5ebdbbf2286072bbd47b8e2e9482add5ccf382ad /kamon-core/src/main/scala/kamon/trace
parentd8305b781aaf454cec558bfb86a366682e9f5eab (diff)
downloadKamon-5168621c256d25d388fb990a5bbc080a35e07b46.tar.gz
Kamon-5168621c256d25d388fb990a5bbc080a35e07b46.tar.bz2
Kamon-5168621c256d25d388fb990a5bbc080a35e07b46.zip
basic newrelic reporting
Diffstat (limited to 'kamon-core/src/main/scala/kamon/trace')
-rw-r--r--kamon-core/src/main/scala/kamon/trace/UowTracing.scala45
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