summaryrefslogtreecommitdiffstats
path: root/src/display/ui.rs
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2019-11-05 20:33:12 +0100
committerAram Drevekenin <aram@poor.dev>2019-11-05 20:33:12 +0100
commit53d165b2a033615e2cce7ab5cc42ff2bf85e50da (patch)
tree1506e6e227d2d2fe622a73539480ec38bfb61c2d /src/display/ui.rs
parentdb0f4d109403da54574a6469fe676f167c97e2c6 (diff)
feat(raw): machine friendly output
Diffstat (limited to 'src/display/ui.rs')
-rw-r--r--src/display/ui.rs58
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);
})