Skip to content

Commit

Permalink
fix(ui-state): do not overcalculate bandwidth and connections (#114)
Browse files Browse the repository at this point in the history
* fix(ui-state): do not overcalculate bandwidth and connections

* fix(ui-state): style and bug

* style(format): make clippy happy
  • Loading branch information
imsnif authored Jan 14, 2020
1 parent 09b1665 commit 0edc6c2
Show file tree
Hide file tree
Showing 29 changed files with 85 additions and 73 deletions.
40 changes: 26 additions & 14 deletions src/display/ui_state.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use ::std::collections::{BTreeMap, HashMap, VecDeque};
use ::std::collections::{BTreeMap, HashMap, HashSet, VecDeque};
use ::std::net::{IpAddr, Ipv4Addr, Ipv6Addr};

use crate::network::{Connection, LocalSocket, Utilization};
Expand Down Expand Up @@ -26,16 +26,16 @@ pub struct ConnectionData {
}

impl NetworkData {
pub fn divide_by(&mut self, amount: usize) {
self.total_bytes_downloaded /= amount as u128;
self.total_bytes_uploaded /= amount as u128;
pub fn divide_by(&mut self, amount: u128) {
self.total_bytes_downloaded /= amount;
self.total_bytes_uploaded /= amount;
}
}

impl ConnectionData {
pub fn divide_by(&mut self, amount: usize) {
self.total_bytes_downloaded /= amount as u128;
self.total_bytes_uploaded /= amount as u128;
pub fn divide_by(&mut self, amount: u128) {
self.total_bytes_downloaded /= amount;
self.total_bytes_uploaded /= amount;
}
}

Expand Down Expand Up @@ -110,10 +110,13 @@ impl UIState {
let mut connections: BTreeMap<Connection, ConnectionData> = BTreeMap::new();
let mut total_bytes_downloaded: u128 = 0;
let mut total_bytes_uploaded: u128 = 0;

let mut seen_connections = HashSet::new();
for state in self.utilization_data.iter().rev() {
let connections_to_procs = &state.connections_to_procs;
let network_utilization = &state.network_utilization;
for (connection, connection_info) in &network_utilization.connections {
let connection_previously_seen = !seen_connections.insert(connection);
let connection_data = connections.entry(connection.clone()).or_default();
let data_for_remote_address = remote_addresses
.entry(connection.remote_socket.ip)
Expand All @@ -125,7 +128,9 @@ impl UIState {
connection_info.total_bytes_downloaded;
data_for_remote_address.total_bytes_uploaded +=
connection_info.total_bytes_uploaded;
data_for_remote_address.connection_count += 1;
if !connection_previously_seen {
data_for_remote_address.connection_count += 1;
}
total_bytes_downloaded += connection_info.total_bytes_downloaded;
total_bytes_uploaded += connection_info.total_bytes_uploaded;

Expand All @@ -136,26 +141,33 @@ impl UIState {
data_for_process.total_bytes_downloaded +=
connection_info.total_bytes_downloaded;
data_for_process.total_bytes_uploaded += connection_info.total_bytes_uploaded;
data_for_process.connection_count += 1;
if !connection_previously_seen {
data_for_process.connection_count += 1;
}
connection_data.process_name = process_name.clone();
} else {
connection_data.process_name = String::from("<UNKNOWN>");
}
}
}
let divide_by = if self.utilization_data.is_empty() {
1 as u128
} else {
self.utilization_data.len() as u128
};
for (_, network_data) in processes.iter_mut() {
network_data.divide_by(self.utilization_data.len())
network_data.divide_by(divide_by)
}
for (_, network_data) in remote_addresses.iter_mut() {
network_data.divide_by(self.utilization_data.len())
network_data.divide_by(divide_by)
}
for (_, connection_data) in connections.iter_mut() {
connection_data.divide_by(self.utilization_data.len())
connection_data.divide_by(divide_by)
}
self.processes = processes;
self.remote_addresses = remote_addresses;
self.connections = connections;
self.total_bytes_downloaded = total_bytes_downloaded;
self.total_bytes_uploaded = total_bytes_uploaded;
self.total_bytes_downloaded = total_bytes_downloaded / divide_by;
self.total_bytes_uploaded = total_bytes_uploaded / divide_by;
}
}
8 changes: 4 additions & 4 deletions src/tests/cases/snapshots/raw_mode__no_resolve_mode.snap
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ connection: <TIMESTAMP_REMOVED> <interface_name>:443 => 1.1.1.1:12345 (tcp) up/d
connection: <TIMESTAMP_REMOVED> <interface_name>:4435 => 3.3.3.3:1337 (tcp) up/down Bps: 17/18 process: "5"
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 28/30 connections: 1
remote_address: <TIMESTAMP_REMOVED> 3.3.3.3 up/down Bps: 17/18 connections: 1
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 31/32 connections: 2
process: <TIMESTAMP_REMOVED> "5" up/down Bps: 22/27 connections: 2
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 31/32 connections: 1
process: <TIMESTAMP_REMOVED> "5" up/down Bps: 22/27 connections: 1
connection: <TIMESTAMP_REMOVED> <interface_name>:443 => 1.1.1.1:12345 (tcp) up/down Bps: 31/32 process: "1"
connection: <TIMESTAMP_REMOVED> <interface_name>:4435 => 3.3.3.3:1337 (tcp) up/down Bps: 22/27 process: "5"
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 31/32 connections: 2
remote_address: <TIMESTAMP_REMOVED> 3.3.3.3 up/down Bps: 22/27 connections: 2
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 31/32 connections: 1
remote_address: <TIMESTAMP_REMOVED> 3.3.3.3 up/down Bps: 22/27 connections: 1

Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ connection: <TIMESTAMP_REMOVED> <interface_name>:443 => 1.1.1.1:12345 (tcp) up/d
connection: <TIMESTAMP_REMOVED> <interface_name>:4435 => 3.3.3.3:1337 (tcp) up/down Bps: 0/19 process: "5"
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 0/22 connections: 1
remote_address: <TIMESTAMP_REMOVED> 3.3.3.3 up/down Bps: 0/19 connections: 1
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 0/35 connections: 2
process: <TIMESTAMP_REMOVED> "5" up/down Bps: 0/30 connections: 2
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 0/35 connections: 1
process: <TIMESTAMP_REMOVED> "5" up/down Bps: 0/30 connections: 1
connection: <TIMESTAMP_REMOVED> <interface_name>:443 => 1.1.1.1:12345 (tcp) up/down Bps: 0/35 process: "1"
connection: <TIMESTAMP_REMOVED> <interface_name>:4435 => 3.3.3.3:1337 (tcp) up/down Bps: 0/30 process: "5"
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 0/35 connections: 2
remote_address: <TIMESTAMP_REMOVED> 3.3.3.3 up/down Bps: 0/30 connections: 2
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 0/35 connections: 1
remote_address: <TIMESTAMP_REMOVED> 3.3.3.3 up/down Bps: 0/30 connections: 1

Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ connection: <TIMESTAMP_REMOVED> <interface_name>:443 => 1.1.1.1:12345 (tcp) up/d
connection: <TIMESTAMP_REMOVED> <interface_name>:4435 => 3.3.3.3:1337 (tcp) up/down Bps: 17/18 process: "5"
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 28/30 connections: 1
remote_address: <TIMESTAMP_REMOVED> 3.3.3.3 up/down Bps: 17/18 connections: 1
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 31/32 connections: 2
process: <TIMESTAMP_REMOVED> "5" up/down Bps: 22/27 connections: 2
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 31/32 connections: 1
process: <TIMESTAMP_REMOVED> "5" up/down Bps: 22/27 connections: 1
connection: <TIMESTAMP_REMOVED> <interface_name>:443 => 1.1.1.1:12345 (tcp) up/down Bps: 31/32 process: "1"
connection: <TIMESTAMP_REMOVED> <interface_name>:4435 => 3.3.3.3:1337 (tcp) up/down Bps: 22/27 process: "5"
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 31/32 connections: 2
remote_address: <TIMESTAMP_REMOVED> 3.3.3.3 up/down Bps: 22/27 connections: 2
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 31/32 connections: 1
remote_address: <TIMESTAMP_REMOVED> 3.3.3.3 up/down Bps: 22/27 connections: 1

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ expression: formatted
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 0/22 connections: 1
connection: <TIMESTAMP_REMOVED> <interface_name>:443 => 1.1.1.1:12345 (tcp) up/down Bps: 0/22 process: "1"
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 0/22 connections: 1
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 0/31 connections: 2
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 0/31 connections: 1
connection: <TIMESTAMP_REMOVED> <interface_name>:443 => 1.1.1.1:12345 (tcp) up/down Bps: 0/31 process: "1"
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 0/31 connections: 2
remote_address: <TIMESTAMP_REMOVED> 1.1.1.1 up/down Bps: 0/31 connections: 1

Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ connection: <TIMESTAMP_REMOVED> <interface_name>:443 => one.one.one.one:12345 (t
connection: <TIMESTAMP_REMOVED> <interface_name>:4435 => three.three.three.three:1337 (tcp) up/down Bps: 17/18 process: "5"
remote_address: <TIMESTAMP_REMOVED> one.one.one.one up/down Bps: 28/30 connections: 1
remote_address: <TIMESTAMP_REMOVED> three.three.three.three up/down Bps: 17/18 connections: 1
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 31/32 connections: 2
process: <TIMESTAMP_REMOVED> "5" up/down Bps: 22/27 connections: 2
process: <TIMESTAMP_REMOVED> "1" up/down Bps: 31/32 connections: 1
process: <TIMESTAMP_REMOVED> "5" up/down Bps: 22/27 connections: 1
connection: <TIMESTAMP_REMOVED> <interface_name>:443 => one.one.one.one:12345 (tcp) up/down Bps: 31/32 process: "1"
connection: <TIMESTAMP_REMOVED> <interface_name>:4435 => three.three.three.three:1337 (tcp) up/down Bps: 22/27 process: "5"
remote_address: <TIMESTAMP_REMOVED> one.one.one.one up/down Bps: 31/32 connections: 2
remote_address: <TIMESTAMP_REMOVED> three.three.three.three up/down Bps: 22/27 connections: 2
remote_address: <TIMESTAMP_REMOVED> one.one.one.one up/down Bps: 31/32 connections: 1
remote_address: <TIMESTAMP_REMOVED> three.three.three.three up/down Bps: 22/27 connections: 1

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
49Bps / 51Bps
24Bps / 25Bps



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
184Bps
92Bps



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
184Bps
92Bps



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
184Bps
92Bps



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
184Bps
92Bps



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
184Bps
92Bps



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
95Bps
47Bps



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
83Bps
41Bps



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
91Bps
45Bps



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
source: src/tests/cases/ui.rs
expression: "&terminal_draw_events_mirror[1]"
---
184Bps
92Bps



Expand Down
Loading

0 comments on commit 0edc6c2

Please sign in to comment.