| #!/bin/bash |
| |
| ## contrib by prizee.com |
| |
| socket='/var/run/haproxy.stat' |
| |
| if ! type socat >/dev/null 2>&1 ; then |
| echo "can't find socat in PATH" 1>&2 |
| exit 1 |
| fi |
| |
| printUsage () |
| { |
| echo -e "Usage : $(basename $0) [options] -s section |
| --section -s section\t: section to use ( --list format) |
| Options : |
| --socket -S [socket]\t: socket to use (default: /var/run/haproxy.stat) |
| --list -l\t\t: print available sections |
| --help -h\t\t: print this message" |
| } |
| |
| getRawStat () |
| { |
| if [ ! -S $socket ] ; then |
| echo "$socket socket unavailable" 1>&2 |
| exit 1 |
| fi |
| |
| if ! printf "show stat\n" | socat unix-connect:${socket} stdio | grep -v "^#" ; then |
| echo "cannot read $socket" 1>&2 |
| exit 1 |
| fi |
| } |
| |
| getStat () |
| { |
| stats=$(getRawStat | grep $1 | awk -F "," '{print $5" "$8}') |
| export cumul=$(echo $stats | cut -d " " -f2) |
| export current=$(echo $stats | cut -d " " -f1) |
| } |
| |
| showList () |
| { |
| getRawStat | awk -F "," '{print $1","$2}' |
| } |
| |
| set -- `getopt -u -l socket:,section:,list,help -- s:S:lh "$@"` |
| |
| while true ; do |
| case $1 in |
| --socket|-S) socket=$2 ; shift 2 ;; |
| --section|-s) section=$2 ; shift 2 ;; |
| --help|-h) printUsage ; exit 0 ;; |
| --list|-l) showList ; exit 0 ;; |
| --) break ;; |
| esac |
| done |
| |
| if [ "$section" = "" ] ; then |
| echo "section not specified, run '$(basename $0) --list' to know available sections" 1>&2 |
| printUsage |
| exit 1 |
| fi |
| |
| cpt=0 |
| totalrate=0 |
| while true ; do |
| getStat $section |
| if [ "$cpt" -gt "0" ] ; then |
| sessionrate=$(($cumul-$oldcumul)) |
| totalrate=$(($totalrate+$sessionrate)) |
| averagerate=$(($totalrate/$cpt)) |
| printf "$sessionrate sessions/s (avg: $averagerate )\t$current concurrent sessions\n" |
| fi |
| oldcumul=$cumul |
| sleep 1 |
| cpt=$(($cpt+1)) |
| done |