#!/usr/bin/ksh
#=============================================================================
# Nom            : NetProcX
# Projet         : HP-Openview IT/Operations
# Cree le        : 21/05/1999
# Cree par       : S. GISLAIN
# Objet          : Recherche les processus de l'application X.
# Appel(s)       : HP-OV-ITO Template Net_Proc_#
# Environnements : HP-UX 9.05 10.20
#                : Solaris 5.3 5.4 5.5 5.5.1 5.6
#                : SunOs 4.1.3
#                : Aix 3.x 4.2 4.3
#                : Irix 5.3
# Parametre(s)   : 1 : nom du template d'appel
#                : 2 : numero de l'instance #
# Codes retour   : = 0 => OK
#                : <>0 => KO
#=============================================================================
# Modification(s)
#-----------------------------------------------------------------------------
# JJ/MM/AA - QUI
#	QUOI
# 20/10/1999 - S.GISLAIN
#	Ajout a l'appel d'OPCMON d'un objet
#
# 13/12/2000 - Tibo
#	Prise en compte d un seuil mini et maxi pour le nbr d instance
#	trouvee(s) pour un processus donne.
#
# 15/01/2001 - Tibo
#	le resultat de l execution du monitor est place dans une fichier
#	et sera affiche dans l annotation associee.
#
# 08/03/2001 - S.GISLAIN
#	Corrections.
#
# 19/06/2001 - Jean Philippe BOCQUENET
#	Utilisation de la librairie "librenault" en lieu et place de la
#	redefinition des commandes.
#
#=============================================================================
# Fonctions
#-----------------------------------------------------------------------------
#	DeterminationOS FonctionHPUX FonctionHPUX10 FonctionSunOS
#	FonctionSolaris FonctionAIX FonctionAIX42 FonctionIRIX
#=============================================================================
#
# Verification nombre d'arguments
if [ $# -lt 2 ]
then
	echo "Probleme sur le programme $0." 1>&2
	exit 1
fi

# Recuperation du nom de la template associee
typeset NomTemplate=$1

# Recuperation du numero de l'instance
typeset NumeroInstance=$2

# Environnement ITO
typeset ITO_NET_LOCK=$(eval print \$""ITO_NET_LOCK_${NumeroInstance})
typeset ITO_NET_USER=$(eval print \$""ITO_NET_USER_${NumeroInstance})
typeset ITO_NET_PROC=$(eval print \$""ITO_NET_PROC_${NumeroInstance})
typeset ITO_NET_INST=$(eval print \$""ITO_NET_INST_${NumeroInstance})
typeset TMPFILE="$(basename $0)_${ITO_NET_INST}.out"

# Variable de retour pour OPC NbProcess: Nb de process tournant
typeset NbProcessus=$(print ${ITO_NET_PROC} | wc -w)

# Definition des variables globales locales script:
typeset -i numero=1		# Sert a indexer les variables
typeset -i NBR_ARGUMENT=`print ${ITO_NET_PROC} | awk ' { print NF } '`
typeset -i NbProcess=1		# Nb de processus trouves

#=============================================================================
# FonctionHP-UX FonctionHP-UX10 FonctionSunOS FonctionSolaris FonctionAIX
# FonctionAIX42 FonctionIRIX
# Ces 6 fonctions execute les instructions propres a chaque systeme pour
# obtenir les memes resultats 
# Code retour : 0 => OK
#             : 2 => Erreur
#=============================================================================
function FonctionHPUX
{
	FonctionSolaris
	return 0
}

function FonctionHPUX10
{
	FonctionHPUX
	return 0
}

function FonctionSunOS
{
	FonctionSolaris
	return 0
}

function FonctionSolaris
{
	if [[ -f ${ITO_NET_LOCK} ]]
	then

		if [[ ! -f ${OPCTMP}/${TMPFILE} ]]
		then
			touch ${OPCTMP}/${TMPFILE}
		fi

		# 1ere ETAPE :
		# Construction de la liste des arguments -----------------
		for mot in ${ITO_NET_PROC}
		do
			typeset MOT_${numero}=${mot}
			let numero=numero+1
		done
		let numero=1
		# -------------------- fin construction -------------------

		# 2eme ETAPE :
		# Traitement de la liste ----------------------------------
		# On prend 3 arguments, on verifie si le 2eme est numerique:
		#
		# 1) Si c est le cas, alors le 1er est le nom du process, le 2nd
		#       est le mini et le 3eme est le maxi.
		#
		# 2) Si ce n est pas le cas, alors le 1er est le nom du process,
		#       et on initialise MIN et MAX a 1
		#
		# Ensuite il suffit de sauter a l argument 4 (pour le cas 1) ou
		# l argument 2 (pour le cas 2)
		typeset MIN=1
		typeset MAX=1

		while [ ${numero} -le ${NBR_ARGUMENT} ]
                do
			typeset ARG1=`eval echo \$""MOT_${numero}`

			let numero=numero+1
			typeset ARG2=`eval echo \$""MOT_${numero}`

			let numero=numero+1
			typeset ARG3=`eval echo \$""MOT_${numero}`

			typeset PROCESS=${ARG1}

			if [ `echo ${ARG2} | grep ^[_0-9] | grep -v [a-zA-Z]` ]
			then
				typeset MIN=${ARG2}
				typeset MAX=${ARG3}
			else
				typeset MIN=1
				typeset MAX=1
				let numero=numero-2
			fi

			if [[ -n ${PROCESS} && -n ${MIN} && -n ${MAX} ]]
			# si on a tout, on y va !!!
			then
				if [[ ${MIN} = "_" ]]
				then
					typeset MIN=1
				fi

				if [[ ${MAX} = "_" ]]
				then
                                        typeset MAX=5000
                                fi

				echo "`date '+: %m/%d/%y %H:%M:%S'`: surveillance du processus ${PROCESS} :" >> ${OPCTMP}/${TMPFILE} 2>&1
				typeset Alerte=$(${CommandePsUser} ${ITO_NET_USER} | grep ${ITO_NET_INST} | grep "${PROCESS}" | grep -v grep | awk 'END {print NR}')

				echo "${Alerte} processus present(s) / mini : ${MIN} / maxi : ${MAX}" >> ${OPCTMP}/${TMPFILE} 2>&1

				if [[ ${Alerte} -lt ${MIN} || ${Alerte} -gt ${MAX} ]]
				# le nbr de process n'est pas dans la bonne fourchette
				then
					echo "Erreur !"  >> ${OPCTMP}/${TMPFILE} 2>&1
					NbProcess=0
				fi

				PROCESS=""
				MIN=""
				MAX=""

			fi

			let numero=numero+1
		done
		#--------------- Fin de traitement de la liste -----

	else
	# Le LOCK est absent, on ne verifie pas les process
		NbProcess=1
	fi
	return 0
}

function FonctionAIX
{
	FonctionSolaris
	return 0
}

function FonctionAIX42
{
	FonctionAIX
	return 0
}

function FonctionIRIX
{
	FonctionSolaris
	return 0
}

#=============================================================================
# Partie principale

#

#-{ Determine le repertoire ou se trouve le script appelant }-----------------

PROG=$(which ${0})
CHEMIN=$(cd $(dirname $PROG); pwd)

#-{ Appel de la librairie Renault pour redefinir les variables }--------------

. ${CHEMIN}/../cmds/librenault


#-{ Test le code retour }-

if [ $? -ne 0 ]
then
	echo "Probleme sur le programme $0." 1>&2
	exit 1
fi
	 

#-{ Appel la fonction principale du script }----------------------------------
	 
${ReferenceFonction}


#-{ Test le code retour }-

if [ $? -ne 0 ]
then
	echo "Probleme sur le programme $0." 1>&2
	exit 1
fi


#-{ Renvoie la valeur au template ITO }---------------------------------------
	 
${OPCMON} "${NomTemplate}=${NbProcess}" -object "${ITO_NET_INST}"

if [ $? -ne 0 ]
then
	echo "Probleme sur le programme $0." 1>&2
	exit 1
fi
	 
exit 0

#
# eof
#=============================================================================
