diff options
author | Aram Drevekenin <aram@poor.dev> | 2019-11-05 20:33:12 +0100 |
---|---|---|
committer | Aram Drevekenin <aram@poor.dev> | 2019-11-05 20:33:12 +0100 |
commit | 53d165b2a033615e2cce7ab5cc42ff2bf85e50da (patch) | |
tree | 1506e6e227d2d2fe622a73539480ec38bfb61c2d /src/display/ui.rs | |
parent | db0f4d109403da54574a6469fe676f167c97e2c6 (diff) |
feat(raw): machine friendly output
Diffstat (limited to 'src/display/ui.rs')
-rw-r--r-- | src/display/ui.rs | 58 |
1 files changed, 51 insertions, 7 deletions
diff --git a/src/display/ui.rs b/src/display/ui.rs index feacc5e..e23843e 100644 --- a/src/display/ui.rs +++ b/src/display/ui.rs @@ -5,10 +5,12 @@ use ::tui::Terminal; use crate::display::components::{Layout, Table, TotalBandwidth}; use crate::display::UIState; -use crate::network::{Connection, Utilization}; +use crate::network::{Connection, Utilization, display_connection_string, display_ip_or_host}; use ::std::net::Ipv4Addr; +use chrono::prelude::*; + pub struct Ui<B> where B: Backend, @@ -26,10 +28,52 @@ where let mut terminal = Terminal::new(terminal_backend).unwrap(); terminal.clear().unwrap(); terminal.hide_cursor().unwrap(); - Ui { - terminal, - state: Default::default(), - ip_to_host: Default::default(), + Ui { + terminal: terminal, + state: Default::default(), + ip_to_host: Default::default(), + } + } + pub fn output_text(&mut self, write_to_stdout: &mut Box<dyn FnMut(String) + Send>) { + let state = &self.state; + let ip_to_host = &self.ip_to_host; + let local_time: DateTime<Local> = Local::now(); + let timestamp = local_time.timestamp(); + for (process, process_network_data) in &state.processes { + write_to_stdout( + format!( + "process: <{}> \"{}\" up/down Bps: {}/{} connections: {}", + timestamp, + process, + process_network_data.total_bytes_uploaded, + process_network_data.total_bytes_downloaded, + process_network_data.connection_count + ) + ); + } + for (connection, connection_network_data) in &state.connections { + write_to_stdout( + format!( + "connection: <{}> {} up/down Bps: {}/{} process: \"{}\"", + timestamp, + display_connection_string(connection, ip_to_host), + connection_network_data.total_bytes_uploaded, + connection_network_data.total_bytes_downloaded, + connection_network_data.process_name + ) + ); + } + for (remote_address, remote_address_network_data) in &state.remote_addresses { + write_to_stdout( + format!( + "remote_address: <{}> {} up/down Bps: {}/{} connections: {}", + timestamp, + display_ip_or_host(*remote_address, ip_to_host), + remote_address_network_data.total_bytes_uploaded, + remote_address_network_data.total_bytes_downloaded, + remote_address_network_data.connection_count + ) + ); } } pub fn draw(&mut self) { @@ -40,11 +84,11 @@ where let size = frame.size(); let connections = Table::create_connections_table(&state, &ip_to_host); let processes = Table::create_processes_table(&state); - let remote_ips = Table::create_remote_ips_table(&state, &ip_to_host); + let remote_addresses = Table::create_remote_addresses_table(&state, &ip_to_host); let total_bandwidth = TotalBandwidth { state: &state }; let layout = Layout { header: total_bandwidth, - children: vec![processes, connections, remote_ips], + children: vec![processes, connections, remote_addresses], }; layout.render(&mut frame, size); }) |