#!/usr/bin/ksh
# ESOTuxServ
# Surveillance de la presence des serveurs TUXEDO
#
# Attention : si des serveurs sont dupliques, on n'en verifie qu'un seul 
#
# parametres 
# $1 : nom du template
# $2 : nom du compte applicatif tuxedo
# $3 : nom de l'instance tuxedo

#
# 03/08/1999 - S.GISLAIN/M.LOBEL
#	Modifications pb de droit sur fichier
#

# Definition des variables globales locales script:
typeset Cmd_tr

function DeterminationOS
{
	typeset TypeMachine           # Recuperation de l'OS  	
	typeset VersionOS             # Recuperation de la version de l'OS 

	TypeMachine=$(uname -s)
	VersionOS=$(uname -rv)

	case ${TypeMachine} in
	HP-UX)
		if [[ "$(echo $VersionOS|cut -d. -f2)" = "10" || "$(echo $VersionOS|cut -d. -f2)" = "11" ]] ; then
			Cmd_tr='tr -ds '
		else
			Cmd_tr='tr -d '
		fi
		;;
	SunOS)
		if [ "$(echo $VersionOS|cut -c1,2)" = "5." ] ; then
			Cmd_tr='tr -d '
		else	
			Cmd_tr='tr -d '
		fi
		;;
	AIX)
		if [ "$(echo $VersionOS|cut -c 3,3)" = "4" ] ;then
			Cmd_tr='tr -d '
		else
			Cmd_tr='tr -d '
		fi
		;;
	IRIX)
		;;

	*)	
		print "$TypeMachine non supporte par ce programme"
		exit 2
		;;
	esac
	return 0
}

if [ -f /logiciel/tuxedo/tuxedo_$3/LOCK ]
then
	OK=1
	# OK = 1 : les serveurs sont presents
	# OK = 0 : au moins un serveur est KO, alerte !

	# on determine les numeros des serveurs Tuxedo a verifier.
	# pour cela, on constitue un fichier contenant tout les paraemtres de la
	# configuration.
	# On en extrait les numeros (SRVID) du WSL et des serveurs applicatifs
	
	DeterminationOS

	su - $2 -c "tmunloadcf > /tmp/tuxlist$3"
	liste=`grep SRVID /tmp/tuxlist$3 | awk ' { print $3 } ' | ${Cmd_tr} "SRVID=" ""`

	# on cherche le nombre de groupes de TMS definis ...
	n_tms=`grep -c TMSNAME /tmp/tuxlist$3`

	# on ecrit les serveurs tuxedo actifs dans le fichier /tmp/tux.inst
	su - $2 -c "tmadmin -r > /tmp/tux.$3 2>&1 << !!
	pclt
	psr
	q
!!
" > /dev/null 2>&1

	#test WSH pas lances (gestion des connections clients)
	if [ "`cat /tmp/tux.$3 | awk '{print $3}' | grep WSH`" = "" ]
	then
	  OK=0
	else 	
	  n_tms_reel=`cat /tmp/tux.$3 | awk '{print $4}'|grep -c 30001`
          if [ $n_tms -ne $n_tms_reel ]
          then
             OK=0
          else
	     for n in 0 $liste
	     do
	        #on teste si le numero $n est dans la liste des actifs
	        serveur_present=0 #0=pas present
	        for nn in `cat /tmp/tux.$3 | awk '{print $4}'`
	        do
	           if [ "$n" = "$nn" ]
      	           then
                       serveur_present=1 
                   fi
	        done 
	        if [ $serveur_present -eq 0 ]
	        then
	           OK=0
	        fi
	     done
	  fi
	fi
	/logiciel/OpC/opcmon $1=$OK
else
	/logiciel/OpC/opcmon $1=1
fi
