#!/usr/bin/ksh 
#####################################################################
# TITRE:	CFTSurv	
#--------------------------------------------------------------------
# CREE LE:	12/11/94		Par: Johann CURE HP
#--------------------------------------------------------------------
# OBJET:  	Envoi et reception d'un fichier sur lui meme
#	 	pour verifier le bon fonctionnement de CFT	
# Parametres :
#	 $1 = nom du template
#			
#====================================================================
# Modifie le:	JJ/MM/AA		Par: 
#	Motif: motif ayant justifie la modification et points
#	modifies si besoin
#
# 13/10/95	D.Stoll
# Ajout de la fonction DeterminationHeure (arret de la supervision
# pendant une plage horaire determinee) qui introduit 2 parametres
# supplementaires optionnels :
#	$5 = heure debut
#	$6 = heure fin
#  
# 29/10/96	D.Stoll
# pour gerer les machines sur lesquelles plusieurs CFT ont ete ins-
# talles :
# ajout d'un parametre supplementaire :
#       $2 = nom du repertoire sous lequel est installe CFT
#       (rem : il est presuppose que le compte CFT s'apelle adm'$2')
#
# 18/12/96	V.Garreau
# pour ameliorer la gestion des machines sur lesquelles
# plusieurs CFT ont ete installes :
# nouveaux parametres :
#       $2 = nom du repertoire sous lequel est installe CFT
#       $3 = nom du user d'administration de CFT
#       $4 = nom du partenaire CFT de test en boucle
#
#####################################################################
# REMARQUES: Les entetes des fonctions ont ete allegees pour plus
#            de lisibilite (fonction de petite taille et presque
#            identiques
#
#####################################################################
# CONVENTION DES CODES DE RETOUR (autre aue 0 (Ok) et 1 (erreur)
#
#====================================================================
# ACCES ET DROITS D'APPEL
#	Mode: 0777	Owner: 			Group:
#====================================================================
# PRE-REQUIS EN ENTREE
# Environnement materiel:
#	Machine: 			Constructeur: HP,SUN,IBM,SGI
# Environnement logiciel:
#	OS: hp-ux			Version: 9.05
#	    hp-ux				 10.20
#	    Solaris				 5.3
#	    Solaris				 5.5
#	    SunOs 				 4.1.3
#	    AIX					 3.x
#	    AIX					 4.2
#	    IRIX				 5.3
# Initialisation des variables globales (environnement, reseau...):
#	VARIABLE1	=	
#	VARIABLE2	=
#####################################################################

#####################################################################
# INVENTAIRE DES APPELS EXTERNES
# Script(s) appelant(s) ce script: 
#	Operation Center
#--------------------------------------------------------------------
# Script(s) appele(s) par ce script:
#	Non Applicable	
#--------------------------------------------------------------------
# Fonction(s) appelee(s) par ce script:
# - Systeme:
#	Non Applicable	
# - Internes:
#	Non Applicable
#====================================================================
# Environnement et variables globales
# importes non modifies:
#	Non Applicable
#--------------------------------------------------------------------
# Importes modifies:
#	Non Applicable
#--------------------------------------------------------------------
# Exportes:
#	NOM_VARIABLE= Non Applicable
#####################################################################
# Fonctions internes au script
#	DeterminationOS 
#	FonctionHPUX
#	FonctionHPUX10
#	FonctionSunOS
#	FonctionSolaris
#	FonctionAIX
#	FonctionAIX42
#	FonctionIRIX
#####################################################################

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

# Definition du chemin d'acces :
typeset PATH_CFT=/logiciel/$2/filexe

# Definition du user CFT
typeset User=$3

# Definition du partenaire CFT
typeset CftPart=$4

# Variable de retour pour OPC CftRetourOpc
typeset CftRetourOpc=2
 
# Export de la variable contenant le numero de l'Idt pour les SU
export CFTIDT

# Definition des variables globales locales script:
typeset OPCMON				  # PATH de la commande opcmon
typeset TypeMachine                       # Recuperation de l'OS  	
typeset VersionOS                         # Recuperation de la version de l'OS 
typeset ReferenceFonction		  # Commande differente suivant l'OS

#####################################################################
# FONCTION: 	DeterminationOS	
# CREEE LE:	12/12/94		Par: Johann CURE HP
# OBJET:	Cette fonction permet de connaitre l'OS sur lequel
#		le script se deroule
#====================================================================
# Modifiee le:	12/12/96		Par:  Vincent Garreau HP
#	Motif: prise en compte de nouvelles plate-formes HP, AIX, SOLARIS, IRIX
#####################################################################
# Modifiee le:	JJ/MM/AA		Par: 
#	Motif: motif ayant justifie la modification et points
#	modifies si besoin
#####################################################################
# REMARQUES:
# 
#####################################################################
# CONVENTION DES CODES RETOUR (autres que 0 (Ok) et 2 (Erreur))
#
#====================================================================
# Fonctions DU SCRIPT appelees
#
#####################################################################
function DeterminationOS
{
	TypeMachine=$(uname -s)           # Recuperation de l'OS  	
	VersionOS=$(uname -rv)            # Recuperation de la version de l'OS 

	case ${TypeMachine} in
	HP-UX)
		if [[ "$(echo $VersionOS|cut -d. -f2)" = "10" || "$(echo $VersionOS|cut -d. -f2)" = "11" ]] ; then
			ReferenceFonction=FonctionHPUX10
			OPCMON=/opt/OV/bin/OpC/opcmon
		else
			ReferenceFonction=FonctionHPUX
			OPCMON=/usr/OV/bin/OpC/opcmon
		fi
		;;
	SunOS)
		if [ "$(echo $VersionOS|cut -c1,2)" = "5." ] ; then
				TypeMachine="Solaris"
				ReferenceFonction=FonctionSolaris
				OPCMON=/opt/OV/bin/OpC/opcmon
		else	
				ReferenceFonction=FonctionSunOS
				OPCMON=/usr/OV/bin/OpC/opcmon
		fi
		;;
	AIX)
		if [ "$(echo $VersionOS|cut -c 3,3)" = "4" ] 
			then ReferenceFonction=FonctionAIX42
			else ReferenceFonction=FonctionAIX
		fi
		OPCMON=/usr/lpp/OV/OpC/opcmon
		;;
	IRIX)
		ReferenceFonction=FonctionIRIX
		OPCMON=/opt/OV/bin/OpC/opcmon
		;;

	*)	
		print "$TypeMachine non supporte par ce programme"
		exit 2
		;;
	esac
	return 0
}
####################################################################
# FONCTION:
# On determine si on est dans l'intervalle horaire de surveillance ou non. 
# L'intervalle de surveillance est donne par 2 variables entrees en
# parametres de la forme 2300 0140 pour un arret de la surveillance 
# entre 23H et 1H40. Si aucune  variable n'est passee en parametre
# alors la surveillance est permanente.
#

function DeterminationHeure
{
	# test si l'intervalle ne se chevauche pas sur 2 jours
	if [ $HM1 -gt $HM0 ]; then 
		# test si on est dans l'intervalle
		if [ $HM -gt $HM0 -a $HM -lt $HM1 ]; then 
			# pas de surveillance, on sort du prg
			${OPCMON} "${NomTemplate}=${CftRetourOpc}"
			exit 0
		fi
	else
		# l'intervalle est a cheval sur 2 jours
		if [ $HM -gt $HM0 -o $HM -lt $HM1 ]; then 
			# pas de surveillance, on sort du prg
			${OPCMON} "${NomTemplate}=${CftRetourOpc}"
			exit 0
		fi	
	fi
	return 0
}

#####################################################################
# FONCTION:     FonctionHP-UX
#		FonctionHPUX10
#		FonctionSunOS 
#		FonctionSolaris
#		FonctionAIX
#		FonctionAIX42
#		FonctionIRIX
# CREEE LE:     12/12/94                Par: Johann CURE HP
# OBJET:        Ces 6 fonctions execute les instructions propres a
#		chaque systeme pour obtenir les memes resultats 
#====================================================================
# Modifiee le:  JJ/MM/AA                Par:
#       Motif: motif ayant justifie la modification et points
#       modifies si besoin
#====================================================================
# 28/07/95 	D Stoll
# suppression des fonctions FunctionHP-UX , etc
# ajout fonction commune FunctionCFT :
# cette fct permet de comparer l'identifiant du dernier message recu
# avec celui qu'elle vient d'envoyer, pour determiner si CFT fonctionne.
#====================================================================
# 19/12/96	V Garreau
# Remise en etat des fonctions FunctionHP-UX, etc
# tout en gardant le principe d'avoir une fonction unique de reference
# => FunctionHP-UX
# cela permet d'homogeneiser les scripts et de pouvoir 
# gerer des specificites par OS si besoin
#
# Optimisation des lectures de catalogue avec l'ajout de idf=OUTX
#####################################################################
# REMARQUES:
#
#####################################################################
# CONVENTION DES CODES RETOUR (autres que 0 (Ok) et 2 (Erreur))
#
#====================================================================
# Fonctions DU SCRIPT appelees
#
#####################################################################

function FonctionHPUX
	{
	typeset _CftNb
	typeset _CftIDT
	typeset _CftIDTprec
	#
	# consultation du catalogue
	#
	su - $User -c " $PATH_CFT/CFTUTIL \
                listcat type=all,part=${CftPart},idf=OUTX,direct=recv \
		| tee /tmp/CFTtemp$$ "
	#
	# on determine l'IDT du dernier message recu
	#
	_CftIDTprec=$(cat /tmp/CFTtemp$$ 2>/dev/null \
		| awk ' /OUTX_TESTOPC_CFT/ { print $4 } '| tail -1 )
	#
	# on efface tous les enregistrements precedents 
	#
	su - $User -c " $PATH_CFT/CFTUTIL \
                delete part=${CftPart},idf=OUTX >/dev/null 2>&1 "
	#
	# emision du message
	#
	su - $User -c " $PATH_CFT/CFTUTIL send part=${CftPart},type=message, \
	idm=OUTX,msg=OUTX_TESTOPC_CFT > /dev/null 2>&1 "
	#
	# ajout temporisation 65s correspondant a duree max
	# de prise en compte d'une commande par CFT
	#
	sleep 65
	#
	# consultation du catalogue
	#
	su - $User -c " $PATH_CFT/CFTUTIL \
                listcat type=all,part=${CftPart},idf=OUTX,direct=recv \
		| tee /tmp/CFTtemp$$ "
	#
	# on determine l'IDT du dernier message recu
	#
	_CftIDT=$(cat /tmp/CFTtemp$$ 2>/dev/null \
		| awk ' /OUTX_TESTOPC_CFT/ { print $4 } '| tail -1 )
	#
	# comparaison entre les 2 IDT pour determiner 
	# si le message a bien ete transmis
	#
	if [ $_CftIDT = $_CftIDTprec ] 
	then
		# le message n'a pas ete transmis
		CftRetourOpc=0
	fi
	rm /tmp/CFTtemp$$ 2>/dev/null
	return 0
	}

function FonctionHPUX10
        {
	FonctionHPUX
        return 0
        }

function FonctionSunOS
        {
        FonctionHPUX
        return 0
        }

function FonctionSolaris
        {
	FonctionHPUX
        return 0
        }

function FonctionAIX
        {
	FonctionHPUX
        return 0
        }

function FonctionAIX42
        {
	FonctionHPUX
        return 0
        }

function FonctionIRIX
        {
	FonctionHPUX
        return 0
        }

####################################################################
#			PROGRAMME PRINCIPAL
####################################################################

# Test pour s'assurer de la presence du fichier LOCK
# Si ce dernier est absent pas besoin de continuer le programme
# la base est arretee. Renvoi d'une valeur non generatrice d'erreur.
####################################################################

DeterminationOS

[[ ! -f $PATH_CFT/LOCK ]] && ${OPCMON} "${NomTemplate}=${CftRetourOpc}" && exit 0 

# Modification :
# 13/10/95 	D.Stoll
# Test pour verifier si l'on est dans l'intervalle horaire de surveillance :
# Sinon, on arrete la verification et on renvoie une valeur non generatrice
# d'erreur.
####################################################################
# On teste si 2 parametres horaires ont ete passes, sinon c'est une
# surveillance en continu.
if [ $# -eq 6 ]; then
	typeset HM0=$5 HM1=$6
	HM=`date +%H%M`
	DeterminationHeure
fi

${ReferenceFonction}

${OPCMON}  "${NomTemplate}=${CftRetourOpc}"
if [ $? -ne 0 ]
	then
	echo "Probleme sur le programme CFTSurv." 1>&2
	exit 1
fi

exit  0
