From 6e82154bd4aad75ea583371a74449177a13299a9 Mon Sep 17 00:00:00 2001 From: Abhay Rana Date: Fri, 18 Oct 2013 20:19:40 +0530 Subject: [PATCH] Updated composer and installed prettyping. --- composer | Bin 802946 -> 912553 bytes prettyping | 655 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 655 insertions(+) create mode 100755 prettyping diff --git a/composer b/composer index a42035105bb6b73e956acf7ed0a0a08f79618a0e..573217bc4b5246e0a6b1db14caef7b971ec19c38 100755 GIT binary patch delta 104400 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 U?=1bzkCpz~ul?HLgIx#zKO??_IsgCw delta 20646 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 diff --git a/prettyping b/prettyping new file mode 100755 index 0000000..aa4e845 --- /dev/null +++ b/prettyping @@ -0,0 +1,655 @@ +#!/bin/bash +# +# Written by Denilson Figueiredo de Sá +# MIT license +# +# Requirements: +# * bash (tested on 4.20, should work on older versions too) +# * gawk (GNU awk, tested on 4.0.1, should work on older versions too) +# * ping (from iputils) + +# TODO: Detect the following kind of message and avoid printing it repeatedly. +# From 192.168.1.11: icmp_seq=4 Destination Host Unreachable +# +# TODO: print the destination (also) at the bottom bar. Useful after leaving +# the script running for quite some time. +# +# TODO: Implement audible ping. +# +# TODO: Autodetect the width of printf numbers, so they will always line up correctly. +# +# TODO: Test the behavior of this script upon receiving out-of-order packets, like these: +# http://www.blug.linux.no/rfc1149/pinglogg.txt +# +# TODO? How will prettyping behave if it receives a duplicate response? + +print_help() { + cat << EOF +Usage: $MYNAME [prettyping parameters] + +This script is a wrapper around the system's "ping" tool. It will substitute +each ping response line by a colored character, giving a very compact overview +of the ping responses. + +prettyping parameters: + --[no]color Enable/disable color output. (default: enabled) + --[no]multicolor Enable/disable multi-color unicode output. Has no effect if + either color or unicode is disabled. (default: enabled) + --[no]unicode Enable/disable unicode characters. (default: enabled) + --[no]terminal Force the output designed to a terminal. (default: auto) + --last Use the last "n" pings at the statistics line. (default: 60) + --columns Override auto-detection of terminal dimensions. + --lines Override auto-detection of terminal dimensions. + --rttmin Minimum RTT represented in the unicode graph. (default: auto) + --rttmax Maximum RTT represented in the unicode graph. (default: auto) + +ping parameters handled by prettyping: + -a Audible ping is not implemented yet. + -f Flood mode is not allowed in prettyping. + -q Quiet output is not allowed in prettyping. + -R Record route mode is not allowed in prettyping. + -v Verbose output seems to be the default mode in ping. + +Tested with Linux ping tool from "iputils" package: +http://www.linuxfoundation.org/collaborate/workgroups/networking/iputils +EOF +} + +# Thanks to people at #bash who pointed me at +# http://bash-hackers.org/wiki/doku.php/scripting/posparams +parse_arguments() { + USE_COLOR=1 + USE_MULTICOLOR=1 + USE_UNICODE=1 + + if [ -t 1 ]; then + IS_TERMINAL=1 + else + IS_TERMINAL=0 + fi + + LAST_N=60 + OVERRIDE_COLUMNS=0 + OVERRIDE_LINES=0 + RTT_MIN=auto + RTT_MAX=auto + + PING_PARAMS=( ) + + while [[ $# != 0 ]] ; do + case "$1" in + -h | -help | --help ) + print_help + exit + ;; + + # Forbidden ping parameters within prettyping: + -f ) + echo "${MYNAME}: You can't use the -f (flood) option." + exit 1 + ;; + -R ) + # -R prints extra information at each ping response. + echo "${MYNAME}: You can't use the -R (record route) option." + exit 1 + ;; + -q ) + echo "${MYNAME}: You can't use the -q (quiet) option." + exit 1 + ;; + -v ) + # -v enables verbose output. However, it seems the output with + # or without this option is the same. Anyway, prettyping will + # strip this parameter. + ;; + # Note: + # Small values for -s parameter prevents ping from being able to + # calculate RTT. + + # New parameters: + -a ) + # TODO: Implement audible ping for responses or for missing packets + ;; + + -color | --color ) USE_COLOR=1 ;; + -nocolor | --nocolor ) USE_COLOR=0 ;; + -multicolor | --multicolor ) USE_MULTICOLOR=1 ;; + -nomulticolor | --nomulticolor ) USE_MULTICOLOR=0 ;; + -unicode | --unicode ) USE_UNICODE=1 ;; + -nounicode | --nounicode ) USE_UNICODE=0 ;; + -terminal | --terminal ) IS_TERMINAL=1 ;; + -noterminal | --noterminal ) IS_TERMINAL=0 ;; + + #TODO: Check if these parameters are numbers. + -last | --last ) LAST_N="$2" ; shift ;; + -columns | --columns ) OVERRIDE_COLUMNS="$2" ; shift ;; + -lines | --lines ) OVERRIDE_LINES="$2" ; shift ;; + -rttmin | --rttmin ) RTT_MIN="$2" ; shift ;; + -rttmax | --rttmax ) RTT_MAX="$2" ; shift ;; + + * ) + PING_PARAMS+=("$1") + ;; + esac + shift + done + + if [[ "${RTT_MIN}" -gt 0 && "${RTT_MAX}" -gt 0 && "${RTT_MIN}" -ge "${RTT_MAX}" ]] ; then + echo "${MYNAME}: Invalid --rttmin and -rttmax values." + exit 1 + fi + + if [[ "${#PING_PARAMS[@]}" = 0 ]] ; then + echo "${MYNAME}: Missing parameters, use --help for instructions." + exit 1 + fi +} + +MYNAME=`basename "$0"` +parse_arguments "$@" + + +export LC_ALL=C + +# Warning! Ugly code ahead! +# The code is so ugly that the comments explaining it are +# bigger than the code itself! +# +# Suppose this: +# +# cmd_a | cmd_b & +# +# I need the PID of cmd_a. How can I get it? +# In bash, $! will give me the PID of cmd_b. +# +# So, I came up with this ugly solution: open a subshell, like this: +# +# ( +# cmd_a & +# echo "This is the PID I want $!" +# wait +# ) | cmd_b + + +# Ignore Ctrl+C here. +# If I don't do this, this shell script is killed before +# ping and gawk can finish their work. +trap '' 2 + +# Now the ugly code. +( + ping "${PING_PARAMS[@]}" & + # Commented out, because it looks like this line is not needed + #trap "kill -2 $! ; exit 1" 2 # Catch Ctrl+C here + wait +) 2>&1 | gawk ' +# Weird that awk does not come with abs(), so I need to implement it. +function abs(x) { + return ( (x < 0) ? -x : x ) +} + +# Ditto for ceiling function. +function ceil(x) { + return (x == int(x)) ? x : int(x) + 1 +} + +# Currently, this function is called once, at the beginning of this +# script, but it is also possible to call this more than once, to +# handle window size changes while this program is running. +# +# Local variables MUST be declared in argument list, else they are +# seen as global. Ugly, but that is how awk works. +function get_terminal_size(SIZE,SIZEA) { + if( HAS_STTY ) { + if( (STTY_CMD | getline SIZE) == 1 ) { + split(SIZE, SIZEA, " ") + LINES = SIZEA[1] + COLUMNS = SIZEA[2] + } else { + HAS_STTY = 0 + } + close(STTY_CMD) + } + if ( int('"${OVERRIDE_COLUMNS}"') ) { COLUMNS = int('"${OVERRIDE_COLUMNS}"') } + if ( int('"${OVERRIDE_LINES}"') ) { LINES = int('"${OVERRIDE_LINES}"') } +} + +############################################################ +# Functions related to cursor handling + +# Function called whenever a non-dotted line is printed. +# +# It will move the cursor to the line next to the statistics and +# restore the default color. +function other_line_is_printed() { + if( IS_PRINTING_DOTS ) { + if( '"${IS_TERMINAL}"' ) { + printf( ESC_DEFAULT ESC_NEXTLINE ESC_NEXTLINE "\n" ) + } else { + printf( ESC_DEFAULT "\n" ) + print_statistics_bar() + } + } + IS_PRINTING_DOTS = 0 + CURR_COL = 0 +} + +# Function called whenever a non-dotted line is repeated. +function other_line_is_repeated() { + if (other_line_times < 2) { + return + } + if( '"${IS_TERMINAL}"' ) { + printf( ESC_DEFAULT ESC_ERASELINE "\r" ) + } + printf( "Last message repeated %d times.", other_line_times ) + if( ! '"${IS_TERMINAL}"' ) { + printf( "\n" ) + } +} + +# Prints the newlines required for the live statistics. +# +# I need to print some newlines and then return the cursor back to its position +# to make sure the terminal will scroll. +# +# If the output is not a terminal, break lines on every LAST_N dots. +function print_newlines_if_needed() { + if( '"${IS_TERMINAL}"' ) { + # COLUMNS-1 because I want to avoid bugs with the cursor at the last column + if( CURR_COL >= COLUMNS-1 ) { + CURR_COL = 0 + } + if( CURR_COL == 0 ) { + if( IS_PRINTING_DOTS ) { + printf( "\n" ) + } + #printf( "\n" "\n" ESC_PREVLINE ESC_PREVLINE ESC_ERASELINE ) + printf( ESC_DEFAULT "\n" "\n" ESC_CURSORUP ESC_CURSORUP ESC_ERASELINE ) + } + } else { + if( CURR_COL >= LAST_N ) { + CURR_COL = 0 + printf( ESC_DEFAULT "\n" ) + print_statistics_bar() + } + } + CURR_COL++ + IS_PRINTING_DOTS = 1 +} + +############################################################ +# Functions related to the data structure of "Last N" statistics. + +# Clears the data structure. +function clear(d) { + d["index"] = 0 # The next position to store a value + d["size"] = 0 # The array size, goes up to LAST_N +} + +# This function stores the value to the passed data structure. +# The data structure holds at most LAST_N values. When it is full, +# a new value overwrite the oldest one. +function store(d, value) { + d[d["index"]] = value + d["index"]++ + if( d["index"] >= d["size"] ) { + if( d["size"] < LAST_N ) { + d["size"]++ + } else { + d["index"] = 0 + } + } +} + +############################################################ +# Functions related to processing the received response + +function process_rtt(rtt) { + # Overall statistics + last_rtt = rtt + total_rtt += rtt + if( last_seq == 0 ) { + min_rtt = max_rtt = rtt + } else { + if( rtt < min_rtt ) min_rtt = rtt + if( rtt > max_rtt ) max_rtt = rtt + } + + # "Last N" statistics + store(lastn_rtt,rtt) +} + +############################################################ +# Functions related to printing the fancy ping response + +# block_index is just a local variable. +function print_response_legend(i) { + if( '"${USE_UNICODE}"' ) { + printf( BLOCK[0] ESC_DEFAULT "%4d ", 0) + for( i=1 ; i= BLOCK_RTT_MAX ) { + block_index = BLOCK_LEN - 1 + } else { + block_index = 1 + int((rtt - BLOCK_RTT_MIN) * (BLOCK_LEN - 2) / BLOCK_RTT_RANGE) + } + printf( BLOCK[block_index] ) + } else { + printf( ESC_GREEN "." ) + } +} + +function print_missing_response(rtt) { + printf( ESC_RED "!" ) +} + +############################################################ +# Functions related to printing statistics + +function print_overall() { + if( '"${IS_TERMINAL}"' ) { + printf( "%2d/%3d (%2d%%) lost; %4.0f/" ESC_BOLD "%4.0f" ESC_DEFAULT "/%4.0fms; last: " ESC_BOLD "%4.0f" ESC_DEFAULT "ms", + lost, + lost+received, + (lost*100/(lost+received)), + min_rtt, + (total_rtt/received), + max_rtt, + last_rtt ) + } else { + printf( "%2d/%3d (%2d%%) lost; %4.0f/" ESC_BOLD "%4.0f" ESC_DEFAULT "/%4.0fms", + lost, + lost+received, + (lost*100/(lost+received)), + min_rtt, + (total_rtt/received), + max_rtt ) + } +} + +function print_last_n(i, sum, min, avg, max, diffs) { + # Calculate and print the lost packets statistics + sum = 0 + for( i=0 ; i max ) max = lastn_rtt[i] + } + avg = sum/lastn_rtt["size"] + + # Calculate mdev (mean absolute deviation) + for( i=0 ; i 0 && int('"${RTT_MAX}"') > 0 ) { + BLOCK_RTT_MIN = int('"${RTT_MIN}"') + BLOCK_RTT_MAX = int('"${RTT_MAX}"') + } else if( int('"${RTT_MIN}"') > 0 ) { + BLOCK_RTT_MIN = int('"${RTT_MIN}"') + BLOCK_RTT_MAX = BLOCK_RTT_MIN * (BLOCK_LEN - 1) + } else if( int('"${RTT_MAX}"') > 0 ) { + BLOCK_RTT_MAX = int('"${RTT_MAX}"') + BLOCK_RTT_MIN = int(BLOCK_RTT_MAX / (BLOCK_LEN - 1)) + } + + BLOCK_RTT_RANGE = BLOCK_RTT_MAX - BLOCK_RTT_MIN + print_response_legend() + } +} + +############################################################ +# Main loop +{ + # Sample line: + # 64 bytes from 8.8.8.8: icmp_seq=1 ttl=49 time=184 ms + if( $0 ~ /^[0-9]+ bytes from .*: icmp_[rs]eq=[0-9]+ ttl=[0-9]+ time=[0-9.]+ *ms/ ) { + if( other_line_times >= 2 ) { + if( '"${IS_TERMINAL}"' ) { + printf( "\n" ) + } else { + other_line_is_repeated() + } + } + other_line = "" + other_line_times = 0 + + # $1 = useless prefix string + # $2 = icmp_seq + # $3 = ttl + # $4 = time + + # This must be called before incrementing the last_seq variable! + rtt = int($4) + process_rtt(rtt) + + seq = int($2) + + while( last_seq < seq - 1 ) { + # Lost a packet + print_newlines_if_needed() + print_missing_response() + + last_seq++ + lost++ + store(lastn_lost, 1) + } + + # Received a packet + print_newlines_if_needed() + print_received_response(rtt) + + last_seq++ + received++ + store(lastn_lost, 0) + + if( '"${IS_TERMINAL}"' ) { + print_statistics_bar() + } + } else if ( $0 == "" ) { + # Do nothing on blank lines. + } else { + other_line_is_printed() + if ( $0 == other_line ) { + other_line_times++ + if( '"${IS_TERMINAL}"' ) { + other_line_is_repeated() + } + } else { + other_line = $0 + other_line_times = 1 + printf( "%s\n", $0 ) + } + } + + # Not needed when the output is a terminal, but does not hurt either. + fflush() +}'