--- /dev/null
+#!/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