Commit Diff


commit - 5078b3d01584d786d632eca19fa6ccdd57813fdb
commit + e1a93e31476b246bf5441e71ed1898da757959c3
blob - 5d7a590bcafa165dfc90e4c281cf91f92f0101fc
blob + 1a53c1dd8f0a7ceec6928e50052b03960fb4a47c
--- src/main.rs
+++ src/main.rs
@@ -23,6 +23,7 @@ static STATE: Lazy<Mutex<ThroughputState>> = Lazy::new
 struct ThroughputState {
     time_passed: Instant,
     write_len: usize,
+    total_write_len: usize,
     next_seq: u8,
     packets_missed: usize,
 }
@@ -32,6 +33,7 @@ impl ThroughputState {
         Self {
             time_passed: Instant::now(),
             write_len: 0,
+            total_write_len: 0,
             next_seq: 0,
             packets_missed: 0,
         }
@@ -53,15 +55,24 @@ impl ThroughputState {
 
     pub fn add_write_len(&mut self, len: usize) {
         self.write_len += len;
+        self.total_write_len += len;
     }
 
     pub fn get_write_len(&self) -> usize {
         self.write_len
     }
 
+    pub fn get_total_write_len(&self) -> usize {
+        self.total_write_len
+    }
+
     pub fn get_packets_missed(&self) -> usize {
         self.packets_missed
     }
+
+    pub fn reset_write_len(&mut self) {
+        self.write_len = 0;
+    }
 }
 
 fn handle_buffer_write(payload: Vec<u8>) {
@@ -119,19 +130,23 @@ fn main() {
     loop {
         // TODO: can't handle different connections (will reuse previous STATE)
         if let Some(state) = once_cell::sync::Lazy::get(&STATE) {
-            let s = state.lock().unwrap();
-            let passed = s.get_time_passed().as_secs().max(1);
-            let len = s.get_write_len();
+            let mut s = state.lock().unwrap();
+            let passed = s.get_time_passed().as_secs();
+            let total_len = s.get_total_write_len();
+            let momentary_len = s.get_write_len();
             let lost = s.get_packets_missed();
+            s.reset_write_len();
             drop(s);
 
-            log::info!(
-                "Throughput: {} kbit/s ({} bit/{} s) ({} packets lost)",
-                (len * 8) / 1000 / passed as usize,
-                len,
-                passed,
-                lost
-            );
+            if passed > 0 {
+                log::info!(
+                    "Throughput: {} kbit/s ({} kbit/s momentary) (running {}s, {} packets lost)",
+                    (total_len * 8) / 1000 / passed as usize,
+                    (momentary_len * 8) / 1000,
+                    passed,
+                    lost
+                );
+            }
         } else {
             log::info!("Not connected");
         }