diff options
author | Aram Drevekenin <aram@poor.dev> | 2020-01-14 09:54:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-14 09:54:24 +0100 |
commit | 0edc6c2a9cdf0fbd2a7b295fea646242819677e8 (patch) | |
tree | 424c81bf1b8ffebdc9c022c1354186687dd96ec4 | |
parent | 09b1665370efe84920c71310c1189d75eac1860e (diff) |
fix(ui-state): do not overcalculate bandwidth and connections (#114)
* fix(ui-state): do not overcalculate bandwidth and connections
* fix(ui-state): style and bug
* style(format): make clippy happy
29 files changed, 85 insertions, 73 deletions
diff --git a/src/display/ui_state.rs b/src/display/ui_state.rs index 7a22c6d..cddc622 100644 --- a/src/display/ui_state.rs +++ b/src/display/ui_state.rs @@ -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}; @@ -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; } } @@ -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) @@ -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; @@ -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; } } diff --git a/src/tests/cases/snapshots/raw_mode__no_resolve_mode.snap b/src/tests/cases/snapshots/raw_mode__no_resolve_mode.snap index c4b9877..c4624be 100644 --- a/src/tests/cases/snapshots/raw_mode__no_resolve_mode.snap +++ b/src/tests/cases/snapshots/raw_mode__no_resolve_mode.snap @@ -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 diff --git a/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes.snap b/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes.snap index b5a75c7..526b9f7 100644 --- a/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes.snap +++ b/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes.snap @@ -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 diff --git a/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes_bi_directional.snap b/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes_bi_directional.snap index c4b9877..c4624be 100644 --- a/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes_bi_directional.snap +++ b/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_multiple_processes_bi_directional.snap @@ -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 diff --git a/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_one_process.snap b/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_one_process.snap index b86d4c1..13a327c 100644 --- a/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_one_process.snap +++ b/src/tests/cases/snapshots/raw_mode__sustained_traffic_from_one_process.snap @@ -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 diff --git a/src/tests/cases/snapshots/raw_mode__traffic_with_host_names.snap b/src/tests/cases/snapshots/raw_mode__traffic_with_host_names.snap index bb5f00d..e55d125 100644 --- a/src/tests/cases/snapshots/raw_mode__traffic_with_host_names.snap +++ b/src/tests/cases/snapshots/raw_mode__traffic_with_host_names.snap @@ -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 diff --git a/src/tests/cases/snapshots/ui__bi_directional_traffic-2.snap b/src/tests/cases/snapshots/ui__bi_directional_traffic-2.snap index 8389f58..484bc34 100644 --- a/src/tests/cases/snapshots/ui__bi_directional_traffic-2.snap +++ b/src/tests/cases/snapshots/ui__bi_directional_traffic-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 49Bps / 51Bps + 24Bps / 25Bps diff --git a/src/tests/cases/snapshots/ui__layout_full_width_under_30_height-2.snap b/src/tests/cases/snapshots/ui__layout_full_width_under_30_height-2.snap index 1ffe658..518cc74 100644 --- a/src/tests/cases/snapshots/ui__layout_full_width_under_30_height-2.snap +++ b/src/tests/cases/snapshots/ui__layout_full_width_under_30_height-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 184Bps + 92Bps diff --git a/src/tests/cases/snapshots/ui__layout_under_120_width_full_height-2.snap b/src/tests/cases/snapshots/ui__layout_under_120_width_full_height-2.snap index 7841479..683b7b8 100644 --- a/src/tests/cases/snapshots/ui__layout_under_120_width_full_height-2.snap +++ b/src/tests/cases/snapshots/ui__layout_under_120_width_full_height-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 184Bps + 92Bps diff --git a/src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height-2.snap b/src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height-2.snap index 3bdeb73..38e68c0 100644 --- a/src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height-2.snap +++ b/src/tests/cases/snapshots/ui__layout_under_120_width_under_30_height-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 184Bps + 92Bps diff --git a/src/tests/cases/snapshots/ui__layout_under_150_width_full_height-2.snap b/src/tests/cases/snapshots/ui__layout_under_150_width_full_height-2.snap index 50ce0be..f88d6e4 100644 --- a/src/tests/cases/snapshots/ui__layout_under_150_width_full_height-2.snap +++ b/src/tests/cases/snapshots/ui__layout_under_150_width_full_height-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 184Bps + 92Bps diff --git a/src/tests/cases/snapshots/ui__layout_under_150_width_under_30_height-2.snap b/src/tests/cases/snapshots/ui__layout_under_150_width_under_30_height-2.snap index 54b05f8..b8554a4 100644 --- a/src/tests/cases/snapshots/ui__layout_under_150_width_under_30_height-2.snap +++ b/src/tests/cases/snapshots/ui__layout_under_150_width_under_30_height-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 184Bps + 92Bps diff --git a/src/tests/cases/snapshots/ui__multiple_connections_from_remote_address-2.snap b/src/tests/cases/snapshots/ui__multiple_connections_from_remote_address-2.snap index e8ec78f..53cd255 100644 --- a/src/tests/cases/snapshots/ui__multiple_connections_from_remote_address-2.snap +++ b/src/tests/cases/snapshots/ui__multiple_connections_from_remote_address-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 95Bps + 47Bps diff --git a/src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_different_connections-2.snap b/src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_different_connections-2.snap index 25cd79e..0f27427 100644 --- a/src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_different_connections-2.snap +++ b/src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_different_connections-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 83Bps + 41Bps diff --git a/src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_single_connection-2.snap b/src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_single_connection-2.snap index 29619a5..6538c62 100644 --- a/src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_single_connection-2.snap +++ b/src/tests/cases/snapshots/ui__multiple_packets_of_traffic_from_single_connection-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 91Bps + 45Bps diff --git a/src/tests/cases/snapshots/ui__multiple_processes_with_multiple_connections-2.snap b/src/tests/cases/snapshots/ui__multiple_processes_with_multiple_connections-2.snap index 2f877f7..2609219 100644 --- a/src/tests/cases/snapshots/ui__multiple_processes_with_multiple_connections-2.snap +++ b/src/tests/cases/snapshots/ui__multiple_processes_with_multiple_connections-2.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 184Bps + 92Bps diff --git a/src/tests/cases/snapshots/ui__no_resolve_mode-2.snap b/src/tests/cases/snapshots/ui__no_resolve_mode-2.snap index 1e3df1c..7db3120 100644 --- a/src/tests/cases/snapshots/ui__no_resolve_mode-2.snap +++ b/src/tests/cases/snapshots/ui__no_resolve_mode-2.snap @@ -2,12 +2,12 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[2]" --- - 160Bps / 180Bps + 53 60 - 2 31 2 31 2 - 2 22 27 22 27 + 31 2 31 2 + 22 27 22 27 @@ -30,8 +30,8 @@ expression: "&terminal_draw_events_mirror[2]" - 2 31 2 - 2 22 27 + 31 2 + 22 27 diff --git a/src/tests/cases/snapshots/ui__no_resolve_mode.snap b/src/tests/cases/snapshots/ui__no_resolve_mode.snap index 06e9524..774f2af 100644 --- a/src/tests/cases/snapshots/ui__no_resolve_mode.snap +++ b/src/tests/cases/snapshots/ui__no_resolve_mode.snap @@ -2,7 +2,7 @@ source: src/tests/cases/ui.rs expression: "&terminal_draw_events_mirror[1]" --- - 91Bps / 98Bps + 45Bps / 49Bps |