# 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
- https://codeberg.org/ache/rusty-ping/
## Usage
```shell
$ rusty-ping <host>
```
Or before installation :
```shell
$ cargo run -- <host>
```
### 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
```
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
│ │ │ 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)