# rusty-ping A replacement for [prettyping](https://github.com/denilsonsa/prettyping). A very simple ping utility that tries to be as visual as possible. Tested on Linux only. ## Install ```shell $ git clone https://source.tube/ache/rusty-ping $ cd rusty-ping $ cargo install --path . ``` You can also clone : - https://git.ache.one/rusty-ping.git - Soon https://codeberg.org/ache/rusty-ping/ ## Usage ```shell $ rusty-ping ``` Or before installation : ```shell $ cargo run -- ``` ### Uninstall ```shell $ cargo uninstall rusty-ping ``` ⚠️ Don't forget to remove any shell integration ! ## Shell integration Rusty-ping doesn't use a config file to keep things as simple as possible. The goal, **for me**, is to type `pp` to quickly do a ping. **I will not call this project** `pp` as it may conflict with other CLI tools. So you should set up a shell alias (e.g., `pp`, `rp`, or any name you prefer) via shell integration. I primarily use Fish, so if anything breaks with `bash` or `zsh`, please send me an email. ### Fish I prefer to use [fish abbreviations](https://fishshell.com/docs/current/cmds/abbr.html). In `$HOME/.config/fish/function/pp.fish` or `$HOME/.config/fish/conf.d/pp.fish` : ```fish abbr --add pp rusty-ping --stats --status --default-target 2606:4700:4700::1111 ``` But a function works too. ```fish function pp rusty-ping --stats --status --default-target 2606:4700:4700::1111 end ``` ### Bash / zsh You can just use a function : ```bash function pp { rusty-ping --stats --legend --status --default-target 2606:4700:4700::1111 } ``` ## "User Interface" Here is the full UI and the explanations : ```shell rusty-ping --stats --status --default-target git.ache.one --legend 0 ▁ 30 ▄ 50 ▆ 70 █ 90 ▂ 120 ▅ 150 █ 170 ▂ 190 ▄ 210 ▆ 240 ? <-- The legend (--legend) PING git.ache.one (145.239.86.0) <-- The status line (--status) ▄▄▄▄▄▄▄▄? <-- The ping line 0/9 (0.0%) | ⌊34⌋ ⌈35⌉ [35] [Δ0]ms <-- Statistics on every packet (--stats) 0/9 (0.0%) | ⌊34⌋ ⌈35⌉ [35] [Δ0]ms <-- Statistics on the last 30 packets (--stats) ``` The legend indicates which characters correspond to which RTT in the ping line. On the ping line, each character represents an ICMP packet sent. `?` => Packet not yet received `!` => Packet lost ### The statistics RTT is expressed in miliseconds. ```plain ┏━> Number of packets lost / Total sent (Percentage of packets lost) │ ┏━> Just a separator 0/9 (0.0%) | ⌊36⌋ ⌈56⌉ [40] [Δ4]ms │ │ │ ┕━> The mean absolute difference │ │ │ to the average RTT │ │ ┕━> The average RTT │ ┕━> The maximum RTT ┕━> The minimum RTT ``` ## Technical Notes Rusty-ping does NOT use the `ping` command. It isn't tied to Bash or any specific shell. ### Rust dependencies: - `clap` to parse args. - `ping` crate to actually do the ping. - `term_size` to print the legend on a single line. - `tokio` for `mpsc`, the default mpsc queue seems to be deprecated; ### License CeCILL 2.1 - [fr](http://www.cecill.info/licences/Licence_CeCILL_V2.1-fr.html) - [en](http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html)