 ##############################################################
 ### Pascalou45200@gmail.com								###
 ### V1.1 -> 01/11/2009										###
 ###--------------------------------------------------------###
 ###  				LISTE DES PARAMETRES 					###
 ###  -u/-U 	user 										###
 ###  -p/-P 	Password 									###
 ###  -l/-L		Listener(� distance) 						###
 ###			ou ORACLE_SID(En Local)						###
 ###  -t/-T		Nom du tablespace							###
 ###--------------------------------------------------------###
 ###  -m/-M		a vide (Optionel)							###
 ###  -m pour checker tous les DBF du TBS en parametre		###
 ###  -m Utilise la requete check_autoextend_multi.sql		###
 ###  sinon Utilise la requete check_autoextend.sql			###
 ###--------------------------------------------------------###
 ##############################################################
typeset -i NB_PARAM=$#
LISTE_PARAM=$*
User="";
MDP="";
Listener=""
typeset -i WARNING=0
typeset -i CRITICAL=0
typeset -i TauxOccup=0 
TBS="" 
typeset -i ResultatEntier=100 
typeset -i ResultatDecimal=0
Message=""
RcOk=0
RcWarning=1
RcCritique=2
RcUnknown=3
Rc=$RcOk
CheminSql=$(dirname $0)
RequeteSql="check_autoextend.sql"
FicResultat=$CheminSql/result.log
Multi=0
NbreErreur=0
Message_OK=""
Message_Warning=""
Message_critical=""

usage(){
clear
echo "
#########################################################
###          LISTE DES PARAMETRES                     ###
###  -u/-U  user                                      ###
###  -p/-P  Password                                  ###
###  -l/-L  Listener(� distance)                      ###
###         ou ORACLE_SID(En Local)                   ###
###  -t/-T  Nom du tablespace                         ###
###---------------------------------------------------###
###  -m/-M  (Optionel)                                ###
###  -m pour checker tous les DBF du TBS en parametre ###
###  -m Utilise la requete check_autoextend_multi.sql ###
###  sinon Utilise la requete check_autoextend.sql    ###
#########################################################"
exit 0

}
##############################
### Gestion des param�tres ###
##############################

listeParam(){
for i in $LISTE_PARAM
do
 case "$i" in
  -C*|-c* ) CRITICAL=`echo $i | cut -c 3-`
  ;;
  -W*|-w* ) WARNING=`echo $i | cut -c 3-`
  ;;
  -U*|-u* ) User=`echo $i | cut -c 3-`
  ;;
  -L*|-l* ) Listener=`echo $i | cut -c 3-`
  ;;
  -P*|-p* ) MDP=`echo $i | cut -c 3-`
  ;;  
  -T*|-t* ) TBS=`echo $i | cut -c 3-`
  ;;  
  -M*|-m* ) RequeteSql="check_autoextend_multi.sql"; Multi=1
  ;;  
  -H*|-h* ) usage
  ;;
 esac
done
}


ExecuteRequete(){

echo "$ORACLE_HOME/bin/sqlplus -s $User/$MDP@$Listener @$CheminSql/$RequeteSql $FicResultat $TBS" > $CheminSql/Commande.ksh
chmod 777 $CheminSql/Commande.ksh
$CheminSql/Commande.ksh
if [ -f  $CheminSql/Commande.ksh ]
then 
	rm -Rf $CheminSql/Commande.ksh
fi	

}

####  Lecture du resultat de la requete
LitResultat (){
Compteur=0
while read LigneTexte;
do
	Caractere=$(echo $LigneTexte | cut -b 1)
	case $Caractere in
		/ ) Compteur=`expr $Compteur + 1`
			CheminCompletFichier=$(echo $LigneTexte | tr -s " " | cut -d" " -f1)
			RepertoireFichier=$(dirname $CheminCompletFichier)
			NomFichierDBF=$(basename $CheminCompletFichier)
			Valeur=$(echo $LigneTexte | tr -s " " | cut -d" " -f2)
			typeset -i ValEntiere=$(echo $Valeur | cut -d"." -f1)
			typeset -i ValDecimale=$(echo $Valeur | cut -d"." -f2)
			Pourcentage=$ValEntiere","$ValDecimale"%"
			#echo 'Rc: '$Rc' ; ValEntiere : '$ValEntiere' ; WARNING : '$WARNING' CRITICAL : '$CRITICAL' NomFichierDBF : '$NomFichierDBF
			#############################################
			#### Construction du message pour nagios ####			
			#############################################
			################
			### Est ce OK ?
			################
			if [ $ValEntiere -lt $WARNING ]
			then
				Message_OK=$(echo 'OK : Tous les DBF Autoextend du tablespace '$TBS' sont OK')
			fi	
			#####################
			# Est ce un Warning ?
			#####################
			if [[ $ValEntiere -ge $WARNING ]]
			then
				case $Multi in  
				1)
					if [[ $ValEntiere -lt $CRITICAL ]]
					then
						
						if [[ $Rc -ge $RcOk ]]
						then 
							# Message_Warning=$(echo $Message_Warning " Warning : Le DBF "$NomFichierDBF" est occupe a "$Pourcentage " ; ")
						# else
						#	echo 'Rc: '$Rc' ; ValEntiere : '$ValEntiere' ; CRITICAL : '$CRITICAL'WARNING : '$WARNING
							 Message_Warning=$(echo " Warning : Le DBF "$NomFichierDBF" est occupe a "$Pourcentage " ; " $Message_Warning)
							 if [[ $Rc -lt $RcCritique ]]
							 then
								Rc=$RcWarning
							 fi	
						fi 
					fi	
				;;
				0)	
				if [[ $ValEntiere -lt $CRITICAL ]]
					then
						
						if [[ $Rc -ge $RcOk ]]
						then 
							Message_Warning=$(echo 'Warning : Augmentation des fichiers Autoextend du TBS '$TBS' � '$Pourcentage)
							Rc=$RcWarning
							 if [[ $Rc -lt $RcCritique ]]
							 then
								Rc=$RcWarning
							 fi	
						fi 
					fi	
							
				;;
				esac
			fi
			######################
			# est ce un critical ?
			######################
			if [ $ValEntiere -ge $CRITICAL ]
			then
				case $Multi in  
				1)	
					Message_Critical=$(echo 'KO : Le DBF '$NomFichierDBF' est occupe a '$Pourcentage ' ; '$Message_Critical )
					Rc=$RcCritique
				;;
				0)
					Message_Critical=$(echo 'KO : Augmentation des fichiers autoextend du TBS '$TBS' � '$Pourcentage' ; ')
					Rc=$RcCritique
				;;
				esac
			fi

		;;
		* ) ;;## On ignore les autres lignes	
	esac
done < $FicResultat

case $Rc in
	$RcOk)Message=$(echo $Message_OK)
	;;
	$RcWarning)Message=$(echo $Message_Warning)
	;;
	$RcCritique) Message=$(echo $Message_Critical"  "$Message_Warning)
	;;
esac

# est ce une erreur dans les seuils ?
if [ $CRITICAL -lt $WARNING ]
then
	case $CRITICAL in
	0)
		Message="Unknown : Le Seuil Critique n'a pas ete renseigne"
	;;	
	*)
		Message="Unknown : Le Seuil Critique est inf�rieur au seuil Warning"
	;;	
	esac
	Rc=$RcUnknown
fi 

if [[ -f $CheminSql/result.log ]]
then
	rm $CheminSql/result.log
fi	
}

listeParam 	
ExecuteRequete
LitResultat
echo $Message
exit $Rc

