diff options
Diffstat (limited to 'src/print.rs')
| -rw-r--r-- | src/print.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/print.rs b/src/print.rs index 9d71a78..89acffa 100644 --- a/src/print.rs +++ b/src/print.rs @@ -1,6 +1,7 @@ // src/print.rs use crate::state::State; +use crate::stats::Stats; struct SymbolTableElement { fg: &'static str, @@ -84,6 +85,32 @@ pub fn print_ping_line(states: &Vec<State>) { println!(""); } +pub fn print_last_ping_line(states: &[State], count: usize) { + let start_idx = if states.len() > count { states.len() - count } else { 0 }; + let slice = &states[start_idx..]; + for state in slice { + match state { + State::Received { rtt, .. } => { + let (fg, bg, symbol) = get_symbol_and_colors_for_rrt(*rtt); + print!("{}{}{}{}", fg, bg, symbol, "\x1b[0m"); + } + State::Lost => { + let (fg, bg, symbol) = get_symbol_and_colors_for_rrt(250); + print!("{}{}{}{}", fg, bg, symbol, "\x1b[0m"); + } + State::NotYetReceived { .. } => { + // fg grey, bg black + print!("\x1b[35;40m?\x1b[0m"); + } + State::SendError => { + print!("!"); + } + } + } + + println!(""); +} + fn get_symbol_and_colors_for_rrt(rrt: u64) -> (&'static str, &'static str, &'static str) { let index: usize = if rrt >= 240 { 24 @@ -94,3 +121,30 @@ fn get_symbol_and_colors_for_rrt(rrt: u64) -> (&'static str, &'static str, &'sta (fg, bg, character) } + +pub fn print_stats(stats: &Stats) { + let total = stats.lost + stats.received; + let percent_lost = if total > 0 { + (stats.lost as f64 / total as f64) * 100.0 + } else { + 0.0 + }; + + let mad_rtt_rounded = stats.mad_rtt.round() as u64; + let mean_rtt_round = stats.avg_rtt.round() as u32; + let mean_ttl_round = stats.avg_ttl.round() as u32; + + println!( + "{}/{} ({:.1}%) | ⌊{}⌋ ⌈{}⌉ [{}] [Δ{}]ms / ⌊{}⌋ ⌈{}⌉ [{}]", + stats.lost, + total, + percent_lost, + stats.min_rtt, + stats.max_rtt, + mean_rtt_round, + mad_rtt_rounded, + stats.min_ttl, + stats.max_ttl, + mean_ttl_round + ); +} |