From 5f4f22596a390d9b83a8b6970765a08fce08ed33 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sat, 25 Apr 2015 12:45:53 +0200 Subject: add debounce time to packet statistics --- .../main/scala/vfd/dashboard/MavlinkSocket.scala | 35 +++++++++++++--------- .../src/main/scala/vfd/dashboard/ui/Layout.scala | 22 +++++++++----- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala b/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala index fb1856c..2fe8262 100644 --- a/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala +++ b/vfd-dashboard/src/main/scala/vfd/dashboard/MavlinkSocket.scala @@ -2,29 +2,36 @@ package vfd.dashboard import scala.scalajs.js import scala.scalajs.js.Any.fromFunction1 - import org.mavlink.Packet import org.mavlink.Parser import org.mavlink.Parser.Errors._ import org.mavlink.messages.Message import org.scalajs.dom - -import rx.core.Rx -import rx.core.Var -import rx.ops.RxOps +import scala.concurrent.duration._ +import rx._ +import rx.ops._ +import scala.concurrent.ExecutionContext.Implicits.global class MavlinkSocket(url: String, val remoteSystemId: Int) { + implicit val scheduler = new DomScheduler lazy val packet: Var[Packet] = Var(Packet.empty) lazy val message: Rx[Message] = packet.map{p => Message.unpack(p.messageId, p.payload) } - + object stats { - val crcErrors = Var(0) - val overflows = Var(0) - val wrongIds = Var(0) - val packets = Var(0) + private val DebounceTime = 1.seconds + + private[MavlinkSocket] val _crcErrors = Var(0) + private[MavlinkSocket] val _overflows = Var(0) + private[MavlinkSocket] val _wrongIds = Var(0) + private[MavlinkSocket] val _packets = Var(0) + + val crcErrors = _crcErrors.debounce(DebounceTime) + val overflows = _overflows.debounce(DebounceTime) + val wrongIds = _wrongIds.debounce(DebounceTime) + val packets = _packets.debounce(DebounceTime) val open = Var(false) } @@ -32,13 +39,13 @@ class MavlinkSocket(url: String, val remoteSystemId: Int) { { case pckt@Packet(seq, `remoteSystemId`, compId, msgId, payload) => packet() = pckt - stats.packets() += 1 + stats._packets() += 1 case _ => - stats.wrongIds() += 1 + stats._wrongIds() += 1 }, { - case CrcError => stats.crcErrors() += 1 - case OverflowError => stats.overflows() += 1 + case CrcError => stats._crcErrors() += 1 + case OverflowError => stats._overflows() += 1 }) private val connection = new dom.WebSocket(url) diff --git a/vfd-dashboard/src/main/scala/vfd/dashboard/ui/Layout.scala b/vfd-dashboard/src/main/scala/vfd/dashboard/ui/Layout.scala index b3c9387..8bc35cd 100644 --- a/vfd-dashboard/src/main/scala/vfd/dashboard/ui/Layout.scala +++ b/vfd-dashboard/src/main/scala/vfd/dashboard/ui/Layout.scala @@ -63,7 +63,13 @@ class Layout(socket: MavlinkSocket)(implicit env: Environment) { }) val powerDistribution = new Distribution( socket.message.collect((0.0, 0.0, 0.0, 0.0)) { - case s: ServoOutputRaw => (s.servo1Raw, s.servo2Raw, s.servo3Raw, s.servo4Raw) + case s: ServoOutputRaw => + ( + 1.0 * (s.servo1Raw - 1000) / 1000, + 1.0 * (s.servo2Raw - 1000) / 1000, + 1.0 * (s.servo3Raw - 1000) / 1000, + 1.0 * (s.servo4Raw - 1000) / 1000 + ) } ) val batteryLevel = new Bar( @@ -100,21 +106,21 @@ class Layout(socket: MavlinkSocket)(implicit env: Environment) { tbody( tr( td("OK"), - Rx{td(socket.stats.packets())}, + Rx { td(socket.stats.packets()) }, td("CRC"), - Rx{td(socket.stats.crcErrors())}, + Rx { td(socket.stats.crcErrors()) }, td("OFLW"), - Rx{td(socket.stats.overflows())}, + Rx { td(socket.stats.overflows()) }, td("BID"), - Rx{td(socket.stats.wrongIds())} + Rx { td(socket.stats.wrongIds()) } ), tr( td("Ratio"), - Rx{ + Rx { import socket.stats._ - val sum = packets() + crcErrors() + overflows() + wrongIds() + val sum = packets() + crcErrors() + overflows() + wrongIds() td(1.0 * packets() / sum formatted "%.2f") - }, + }, td(), td(), td(), -- cgit v1.2.3