aboutsummaryrefslogtreecommitdiff
path: root/src/print.rs
diff options
context:
space:
mode:
authorache <ache@ache.one>2026-08-04 16:53:42 +0200
committerache <ache@ache.one>2026-08-04 17:00:54 +0200
commit1d1736e742e2328d12503ee81ac51e1c2de3e35e (patch)
treed83dd4654b4186414e3c9b144f20b1d9b289957d /src/print.rs
parentAdd stats computing (diff)
Print stats
Diffstat (limited to 'src/print.rs')
-rw-r--r--src/print.rs54
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
+ );
+}