Title: Realtime bandwidth terminal graph visualization
       Author: Solène
       Date: 19 July 2019
       Tags: openbsd ttyplot
       Description: 
       
       If for some reasons you want to visualize your bandwidth traffic on an
       interface (in or out) in a terminal with a nice graph, here is a small
       script
       to do so, involving **ttyplot**, a nice software making graphics in a
       terminal.
       
       The following will works on OpenBSD.
       You can install ttyplot by `pkg_add ttyplot` as root, ttyplot package
       appeared
       since OpenBSD 6.5.
       
       For Linux, the [ttyplot official
       website](https://github.com/tenox7/ttyplot)
       contains tons of examples.
       
       
       ### Example
       
       Output example while updating my packages:
       
                                                     IN Bandwidth in KB/s
             ↑ 1499.2 KB/s#
             │            #
             │            #
             │            #
             │            ##
             │            ##
             │ 1124.4 KB/s##
             │            ##
             │            ##
             │            ##
             │            ##
             │            ##
             │ 749.6 KB/s ##
             │            ##
             │            ##
             │            ##                                                
          #
             │            ##      # #       #                     #         
          ##
             │            ##  #   ###    # ##      #  #  #        ##        
          ##         #         # ##
             │ 374.8 KB/s ## ##  ####  # # ## # # ### ## ##      ###  #     
       ## ###    #   #     #   # ##   #    ##
             │            ## ### ##### ########## #############  ###  # ## 
       ### ##### #### ##    ## ###### ##    ##
             │            ## ### ##### ########## #############  ###  #### 
       ### ##### #### ## ## ## ###### ##   ###
             │            ## ### ##### ########## ############## ###  #### 
       ### ##### #### ## ## ######### ##  ####
             │            ## ### ##### ##############################
       ######### ##### #### ## ## ############  ####
             │            ## ###
       #################################################### #### ##
       #####################
             │            ## ###
       ####################################################
       #############################
            
       └──────────────────────â”
       €â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â
       ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
       ───────────────────────â”
       €â”€â”€â”€â”€â”€â”€â†’
                # last=422.0 min=1.3 max=1499.2 avg=352.8 KB/s                
                   Fri Jul 19 08:30:25 2019
                                                                              
              github.com/tenox7/ttyplot 1.4
       
       In the following command, we will use **trunk0** with INBOUND traffic
       as the
       interface to monitor.
       
       At the end of the article, there is a command for displaying both in
       and out at
       the same time, and also instructions for customizing to your need.
       
       **Article update:** the following command is extremely long and
       complicated, at
       the end of the article you can find a shorter and more efficient
       version,
       removing most of the awk code.
       
       You can copy/paste this command in your OpenBSD system shell, this will
       produce
       a graph of trunk0 inbound traffic.
       
           { while :; do netstat -i -b -n ; sleep 1 ; done } | awk
       'BEGIN{old=-1} /^trunk0/ { if(!index($4,":") && old>=0)  { print
       ($5-old)/1024 ; fflush  ; old = $5 } if(old==-1) { old=$5 } }'  |
       ttyplot -t "IN Bandwidth in KB/s" -u "KB/s" -c "#"
       
       The script will do an infinite loop doing `netstat -ibn` every second
       and
       sending that output to awk.
       You can quit it with **Ctrl+C**.
       
       
       ## Explanations
       
       Netstat output contains total bytes (in or out) since system has
       started so awk
       needs to remember last value and will display the difference between
       two
       output, avoiding first value because it would make a huge spike (aka
       the total
       network transfered since boot time).
       
       If I decompose the awk script, this is a lot more readable.
       Awk is very readable if you take care to format it properly as any
       source code!
       
           #!/bin/sh
           { while :;
             do
                 netstat -i -b -n
                 sleep 1
             done
           } | awk '
               BEGIN {
                   old=-1
               }
               /^trunk0/ { 
                   if(!index($4,":") && old>=0) {
                       print ($5-old)/1024
                       fflush
                       old = $5
                   }
                   if(old==-1) {
                       old = $5
                   }
               }' | ttyplot -t "IN Bandwidth in KB/s" -u "KB/s" -c "#"
       
       
       ### Customization
       
       + replace **trunk0** by your interface name
       + replace both instances of **$5** by **$6** for **OUT** traffic
       + replace **/1024** by **/1048576** for MB/s values
       + remove **/1024** for B/s values
       + replace 1 in **sleep 1** by another value if you want to have the
       value every
         n seconds
       
       
       ### IN/OUT version for both data on the same graph + simpler
       
       Thanks to leot on IRC, netstat can be used in a lot more efficient way
       and remove all the awk parsing!
       ttyplot supports having two graphs at the same time, one being in
       opposite color.
       
           netstat -b -w 1 -I trunk0 | awk 'NR>3 { print $1/1024; print
       $2/1024; fflush }' | ttyplot -2 -t "IN/OUT Bandwidth in KB/s" -u "KB/s"
       -c "#"