aboutsummaryrefslogtreecommitdiff
path: root/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-trace/src/main/scala/kamon/trace/UowTracing.scala')
-rw-r--r--kamon-trace/src/main/scala/kamon/trace/UowTracing.scala22
1 files changed, 16 insertions, 6 deletions
diff --git a/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala b/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala
index c7dd1fb1..009a6da2 100644
--- a/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala
+++ b/kamon-trace/src/main/scala/kamon/trace/UowTracing.scala
@@ -14,7 +14,7 @@ trait AutoTimestamp extends UowSegment {
}
object UowTracing {
- case class Start(id: Long) extends AutoTimestamp
+ case class Start(id: Long, name: String) extends AutoTimestamp
case class Finish(id: Long) extends AutoTimestamp
case class Rename(id: Long, name: String) extends AutoTimestamp
case class WebExternalStart(id: Long, host: String) extends AutoTimestamp
@@ -22,24 +22,34 @@ object UowTracing {
case class WebExternal(id: Long, start: Long, finish: Long, host: String) extends AutoTimestamp
}
-case class UowTrace(name: String, segments: Seq[UowSegment])
+case class UowTrace(name: String, uow: String, start: Long, end: Long, segments: Seq[UowSegment]) {
+ def elapsed: Long = end - start
+}
class UowTraceAggregator(reporting: ActorRef, aggregationTimeout: Duration) extends Actor with ActorLogging {
context.setReceiveTimeout(aggregationTimeout)
- var name: Option[String] = None
+ var name: String = "UNKNOWN"
var segments: Seq[UowSegment] = Nil
var pendingExternal = List[WebExternalStart]()
+ var start = 0L
+ var end = 0L
+
def receive = {
- case finish: Finish => segments = segments :+ finish; finishTracing()
+ case start: Start =>
+ this.start = start.timestamp
+ name = start.name
+ case finish: Finish =>
+ end = finish.timestamp
+ segments = segments :+ finish; finishTracing()
case wes: WebExternalStart => pendingExternal = pendingExternal :+ wes
case finish @ WebExternalFinish(id) => pendingExternal.find(_.id == id).map(start => {
segments = segments :+ WebExternal(finish.id, start.timestamp, finish.timestamp, start.host)
})
- case Rename(id, newName) => name = Some(newName)
+ case Rename(id, newName) => name = newName
case segment: UowSegment => segments = segments :+ segment
case ReceiveTimeout =>
log.warning("Transaction {} did not complete properly, the recorded segments are: {}", name, segments)
@@ -47,7 +57,7 @@ class UowTraceAggregator(reporting: ActorRef, aggregationTimeout: Duration) exte
}
def finishTracing(): Unit = {
- reporting ! UowTrace(name.getOrElse("UNKNOWN"), segments)
+ reporting ! UowTrace(name, "", start, end, segments)
println("Recorded Segments: " + segments)
context.stop(self)
}