#!/bin/sh
#
# Reporte la supervision de Nagios/Centreon dans Hobbit
#
# 0.0	(11-03-10)	Emmanuel Doguet 
#			1ere ebauche pour test
#


# Configuration
BBDISPLAY="hobbit-bsl.emea.sesam.mane.com"
BB="/app/hobbit/server/bin/bb"

BB_OUT=""

URL="http://guest:guest@nagios-bsl.emea.sesam.mane.com/nagios/cgi-bin/status.cgi?host=all&type=detail&hoststatustypes=3&serviceprops=42&servicestatustypes=28"

URL_SERVICE='http://guest:guest@nagios-bsl.emea.sesam.mane.com/nagios/cgi-bin/status.cgi?host=$HOST&type=detail&hoststatustypes=3&serviceprops=42&servicestatustypes=28'

URL_SERVICE_STATUS='http://guest:guest@nagios-bsl.emea.sesam.mane.com/nagios/cgi-bin/extinfo.cgi?type=2&host=$H&service=$S'

DEBUG=1
TMP_FILE=/tmp/bb-centreon2.$$


PATTERN_HOST="<TD align=left valign=center CLASS=.*extinfo.cgi.*host=.*"
PATTERN_SERVICE="<TD ALIGN=LEFT valign=center CLASS=.*extinfo.cgi.*service=.*"

#####################
# Fonction de DEBUG #
#####################
function debug()
{
        if [ "$DEBUG" = "1" ]
        then
                echo -e "$@"
        fi
}



###################################
# Retourne le status d'un service #
###################################
function get_service_status()
{
	H=$1
	S=$2

	S_URL=`eval "echo \"$URL_SERVICE_STATUS\""`

	wget --quiet "$S_URL" -O $TMP_FILE

        ERR=$?
        if [ $ERR -ne 0 ]
	then
        	BB_OUT="Erreur WGET (err: $ERR)\n\n(URL=$S_URL)"
                BB_Send
                exit 0
	fi

	TMP="`cat $TMP_FILE | grep \"<TR><TD CLASS='dataVar'\"`"
	# Rewrite
	TMP=`echo "$TMP" | sed "s/src=images\//src=\/hobbit\/gifs\//g"`
	TMP="<table border=1>$TMP</table>"
	BB_OUT=$BB_OUT"$TMP"
#echo -e"\n**************\n$BB_OUT\n**************\n\n"
}

#######################
# Envoi du message BB #
#######################
function BB_Send()
{
        date=`date`

	BB_COL=`echo "$BB_COL" | sed 's/+/_/'`
	BB_COL=`echo "$BB_COL" | sed 's/\//_/'`

	if [ "$BB_COLOR" != "green" ]
	then
	        line=`echo -e "status $BB_HOST.$BB_COL $BB_COLOR $date\n$BB_OUT\n"`
	else

	        line=`echo -e "drop $BB_HOST $BB_COL\n"`
	fi

        if [ $DEBUG -eq 1 ]
        then
                #echo -e "RUN: $BB $BBDISPLAY \"$line\""
                #echo -e "RUN: $BB $BBDISPLAY status+99w $BB_HOST.$BB_COL $BB_COLOR $date"
                $BB $BBDISPLAY "$line"
        else
                $BB $BBDISPLAY "$line"
        fi

	BB_OUT=""
	BB_HOST=""

}


	##############################
	# On recupere la page Nagios #
	##############################
	wget --quiet "$URL" -O $TMP_FILE
	ERR=$?
	if [ $ERR -ne 0 ]
	then
		BB_OUT="Erreur WGET (err: $ERR)\n\n(URL=$URL)"
		
		BB_Send
		exit 0
	fi

	############################
	# List des HOSTS en alerte #
	############################
	HOST_LIST=`cat $TMP_FILE | grep -E "$PATTERN_HOST" | sed "s/.*title='.*'>\(.*\)<\/A>.*/\1/"`

	# Seulement les Unix pour l'instant
	HOST_LIST=`echo "$HOST_LIST" | grep -i ux | grep -v ux05`
	
#	debug "HOST_LIST: $HOST_LIST"

	#################################################################
	# Repasser au vert  les machines qui ne sont plus dans la liste #
	#################################################################
	for file in `ls "/tmp/bbcentreon,"*`
	do
		flag=`echo "$file" | sed 's/.*,\(.*\),.*/\1/'`
		GREEN=1

		for HOST in $HOST_LIST
		do
			debug "\n* HOST Compare '$flag'/'$HOST'"

			if [ "$flag" = "$HOST" ]
			then
				debug " $HOST est encore en erreur"
				GREEN=0
				break;
			fi
		done

		if [ "$GREEN" = "1" ]
		then
			for file2 in `ls "/tmp/bbcentreon,$flag,"*`
			do
				BB_COL=`echo "$file2" | sed 's/.*,.*,\(.*\)/\1/'`
				debug " $flag.$file2 n'est plus en erreur 2"
				BB_COLOR=green
				BB_HOST=$flag
				BB_Send
				#BB_COL=`echo "$BB_COL" | sed 's/_/+/'`
				/bin/rm /tmp/bbcentreon,$flag,$BB_COL

			done
		fi

	done


	#########################################################
	# Pour chaque host on recupère la liste de ses services #
	#########################################################
	for HOST in $HOST_LIST
	do	
		debug "\n\n********************\nHost: $HOST"

		S_URL=`eval "echo \"$URL_SERVICE\""`

        	wget --quiet "$S_URL" -O $TMP_FILE
	        ERR=$?
        	if [ $ERR -ne 0 ]
	        then
        	        BB_OUT="Erreur WGET (err: $ERR)\n\n(URL=$S_URL)"
                	BB_Send
	                exit 0
       		 fi

        	SERVICE_LIST=`cat $TMP_FILE | grep -E "$PATTERN_SERVICE" | sed "s/.*CLASS='\(.*\)'><A HREF='ext.*'>\(.*\)<\/A>.*/\2|\1/"`
		SERVICE_LIST=`echo "$SERVICE_LIST" | sed 's/ /+/'`
		SERVICE_LIST=`echo "$SERVICE_LIST" | sed 's/\//_/'`


		debug " Service list: $SERVICE_LIST"


		#################################
		# Repasser au vert les services #
		#################################
		
		# Pour chaque flags on verifie si l'erreur est toujours presente 
		debug "* Check des repassages au vert"
		for file in `ls "/tmp/bbcentreon,$HOST"* 2>/dev/null`
		do
			#flag=`echo "$file" | sed 's/.*_\(.*\)/\1/'`
			flag=`echo "$file" |  sed 's/.*,.*,\(.*\)/\1/'`


			debug " HOST: $HOST    Sonde: $flag file: $file"
	
			GREEN=1

			for SERVICE in $SERVICE_LIST
			do
                        	SERVICE_NAME=`echo "$SERVICE" |  cut -d'|' -f1`

				echo "  CMP: $SERVICE_NAME et $flag"
				if [ "$SERVICE_NAME" = "$flag" ]
				then
					debug "   $SERVICE_NAME: L'erreur est encore là"
					GREEN=0
					break
				fi
			done

			if [ "$GREEN" = "1" ]
			then
				debug  "    $SERVICE_NAME: Erreur n'est plus là, greeen ($flag)"
				BB_COLOR="green"
				BB_COL=$flag
	                        BB_HOST=$HOST
				BB_Send	

				#flag=`echo "$BB_COL" | sed 's/_/+/'`
				/bin/rm "/tmp/bbcentreon,$HOST","$flag"
			fi

		done

		##############################
		# Chaque service du HOST ... #
		##############################
		debug "\n* Check des alertes"
		for SERVICE in $SERVICE_LIST
		do

			SERVICE_NAME=`echo "$SERVICE" |  cut -d'|' -f1`
			SERVICE_STATUS=`echo "$SERVICE" |  cut -d'|' -f2`

			#echo "S: $SERVICE_NAME STATUS: $SERVICE_STATUS"

			if [ "$SERVICE_STATUS" = "statusBGCRITICAL" ]
			then
				BB_COLOR="red"
			elif [ "$SERVICE_STATUS" = "statusBGWARNING" ]
			then
				BB_COLOR="yellow"
			else	
				# Unknow?"
				BB_COLOR="red"
			fi


			touch "/tmp/bbcentreon,$HOST","$SERVICE_NAME"

			BB_HOST=$HOST
			BB_COL=$SERVICE_NAME
			get_service_status $HOST $SERVICE_NAME
			BB_Send
		done

		

	done


#	BB_Send

	#echo $TMP_FILE
	rm $TMP_FILE

