#!/bin/bash
# -*- bash -*-

: << =cut

=head1 NAME

haproxy_responses_frontend -Haproxy responses frontend

=head1 CONFIGURATION

[haproxy*]
  user root
  env.backend backend_name_1 backend_name_2 backend_name_3
  env.frontend frontend_name_1 frontend_name_2 frontend_name_3
  # You can use url o socket option, use one of them, not both!
    env.url  http://user:passwd@IP:port/admin?stats;csv
  #  or
    env.socket /var/lib/haproxy/stats.socket

=head1 AUTHOR

Ricardo Fraile <rfrail3@yahoo.es>

=head1 LICENSE

GPLv2

=head1 MAGICK MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut

. $MUNIN_LIBDIR/plugins/plugin.sh

function parse_url {
	# Modify ifs variable
	OIFS=$IFS;
	IFS=",";
	PXNAME="$1"
	SVNAME="$2"
	VALUE="$3"

        if [ ! -z "$url" ]; then
                LINE1=`curl -s "$url" | head -1 | sed 's/# //'`
                LINE2=`curl -s "$url" | grep "$PXNAME,$SVNAME"`
        fi

        if [ ! -z "$socket" ]; then
                LINE1=`echo 'show stat' | socat unix-connect:"$socket" stdio | head -1 | sed 's/# //'`
                LINE2=`echo 'show stat' | socat unix-connect:"$socket" stdio | grep "$PXNAME,$SVNAME"`
        fi

	ARRAY1=($LINE1);

	# Find values
	for ((i=0; i<${#ARRAY1[@]}; ++i));
	do
        	# Get data
	        if [[ "${ARRAY1[$i]}" == "${VALUE}" ]]; then
	                o=$i;
        	        o=`expr $o + 1`
                	echo ${LINE2} | cut -d" " -f $o
	        fi
	done

	# Reset ifs
	IFS=$OIFS;
}


SVNAME='FRONTEND'
LIST=$frontend

if [ "$1" = "autoconf" ]; then
	echo yes
	exit 0
fi

if [ "$1" = "config" ]; then

	echo "graph_title HTTP Responses ${SVNAME}"
	echo 'graph_args --base 1000 -l 0 '
	echo 'graph_vlabel Responses'
	echo 'graph_scale no'
	echo 'graph_category loadbalancer'
	echo "graph_info HTTP Responses ${SVNAME}"

	for i in ${LIST}; do
	        echo "hrsp_1xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.label HTTP 1xx $i"
        	echo "hrsp_1xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.type DERIVE"
	        echo "hrsp_1xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0"
        	echo "hrsp_1xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.info HTTP responses with 1xx code $i"

	        echo "hrsp_2xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.label HTTP 2xx $i"
        	echo "hrsp_2xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.type DERIVE"
	        echo "hrsp_2xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0"
        	echo "hrsp_2xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.info HTTP responses with 2xx code $i"

	        echo "hrsp_3xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.label HTTP 3xx $i"
        	echo "hrsp_3xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.type DERIVE"
	        echo "hrsp_3xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0"
        	echo "hrsp_3xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.info HTTP responses with 3xx code $i"

	        echo "hrsp_4xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.label HTTP 4xx $i"
        	echo "hrsp_4xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.type DERIVE"
	        echo "hrsp_4xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0"
        	echo "hrsp_4xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.info HTTP responses with 4xx code $i"

	        echo "hrsp_5xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.label HTTP 5xx $i"
        	echo "hrsp_5xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.type DERIVE"
	        echo "hrsp_5xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0"
        	echo "hrsp_5xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.info HTTP responses with 5xx code $i"

	        echo "hrsp_other`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.label HTTP other $i"
        	echo "hrsp_other`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.type DERIVE"
	        echo "hrsp_other`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.min 0"
        	echo "hrsp_other`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.info HTTP responses with other codes $i"


	done

	exit 0
fi
	for i in ${LIST}; do
		H1xx=`parse_url ${i} ${SVNAME} hrsp_1xx`
		H2xx=`parse_url ${i} ${SVNAME} hrsp_2xx`
		H3xx=`parse_url ${i} ${SVNAME} hrsp_3xx`
		H4xx=`parse_url ${i} ${SVNAME} hrsp_4xx`
		H5xx=`parse_url ${i} ${SVNAME} hrsp_5xx`
		Hother=`parse_url ${i} ${SVNAME} hrsp_other`
	        echo "hrsp_1xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.value $H1xx"
	        echo "hrsp_2xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.value $H2xx"
	        echo "hrsp_3xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.value $H3xx"
	        echo "hrsp_4xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.value $H4xx"
	        echo "hrsp_5xx`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.value $H5xx"
	        echo "hrsp_other`echo $i | md5sum | cut -d - -f1 | sed 's/ //g'`.value $Hother"
	done

