#!/etc/Tivoli/bin/perl
#####################################################################
# TITRE:        TivVcnxEp
#--------------------------------------------------------------------
# CREE LE:      01/04/1999                      Par: V BRION S.GISLAIN
#--------------------------------------------------------------------
# OBJET: Lancement sans parametre ou avec parametre <> 1:
#        renvoie le nombre de nodes non connectes, => pb si > 0.
# Lancement avec parametre = 1: renvoie le nom des nodes non connectes.
# Si le serveur est KO, renvoie juste cette info, sans regarder les nodes.
#
#====================================================================
# Modifie le:   JJ/MM/AA                Par:
#
#####################################################################
# 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 que 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       =
#####################################################################
				# Recuperation Nom de template
$NomTemplate = "";
$NomTemplate = $ARGV[0] if(scalar( @ARGV ) > 0 );

$MaxCpt  = 2;			# Compteur de series de WEP effectuees
$Cpt     = 1;			# Compteur de series de WEP effectuees
$NodeKo  = 0;			# Nombres de nodes KO trouves par WEP
$NbrPing = 5;			# Nombre de PING a effectuer sur chaque node KO
				# NbrPing+4 est le nombre de lignes remontees par un ping OK
@Noeuds  = ();			# Liste des noeuds a tester
$Noeud   = "";			# Noeud en cours de test
@NoeudsKO = ();			# Liste des noeuds KO
$NbKO     = 0;			# Nombre de noeuds KO
$Ind      = 0;
$oldfh = select(STDOUT);
$| = 1;
select( $oldfh );

				# Commande pour obtenir le numero de la TMR
$CmdTmrNumber = ". /etc/Tivoli/setup_env.sh; objcall 0.0.0 get_oserv";

				# Commande pour obtenir la liste des noeuds
$Cmdwlookup   = ". /etc/Tivoli/setup_env.sh; wlookup -ar Endpoint";

				# Commande pour tester le noeud
$Cmdwep     = ". /etc/Tivoli/setup_env.sh; wep";

				# Commande pour tester le reseau
$Cmdping      = "/usr/sbin/ping";

				# Commande pour remonter l'alerte
$Cmdopcmon    = "/logiciel/OpC/opcmon";

#-----------------------------------------------------------------------------
$TmrNumber = `$CmdTmrNumber`;	# Recuperation du numero de la TMR.
$TmrNumber =~ s/[.].*// ;
				# Tableau de tous les noeuds de la TMR.
open( NOEUDS, "$Cmdwlookup | grep $TmrNumber |" ) || die "Erreur commande : $!\n";

while( <NOEUDS> ) {
	chop;
	( $Noeud ) = split( /\t+/ );
	push( @Noeuds, $Noeud );
}

close( NOEUDS );

if ( $NomTemplate eq "" ) {
	print "#------------------------------------------------------------\n";
	printf "\nTMRNumber = %s -> %3d noeuds trouves\n\n", $TmrNumber, scalar( @Noeuds );
}

while( $Cpt <= $MaxCpt ) {
	if ( ($NomTemplate eq "") && (scalar( @Noeuds ) > 0) ) {
		print "#------------------------------------------------------------\n";
		printf " Test numero %d sur $MaxCpt\n\n", $Cpt;
	}

	@NoeudsKO = ();
	$Ind      = 0;

	foreach $Ligne ( @Noeuds ) {
		( $Noeud ) = split( / /, $Ligne );

		$Ind++;

		printf "%3d. %-40s ...\b\b\b", $Ind, $Noeud if ( $NomTemplate eq "" );

		open( WEP, "$Cmdwep $Noeud status 2>&1 |" )
			|| die "Erreur commande : $!\n";
		( $Wep ) = <WEP>;
		close( WEP );

		if ( $Wep !~ /is alive/ ) {
			open( PING, "$Cmdping -s $Noeud 64 $NbrPing 2>&1 |" )
				|| die "Erreur commande : $!\n";
			@Ping = <PING>;
			close( PING );

			if ( scalar( @Ping ) < $NbrPing+4 ) {
				push( @NoeudsKO, "$Noeud ping" );
			} else {
				push( @NoeudsKO, "$Noeud wep" );
			}

			print "?  \n" if ( $NomTemplate eq "" );
		} else {
			print "OK  \n" if ( $NomTemplate eq "" );
		}
	}

	@Noeuds = @NoeudsKO;

	$Cpt++;
	print "\n" if ( $NomTemplate eq "" );
}

@TNoeudsKO = sort( @Noeuds );

if ( $NomTemplate eq "" ) {

	print "#------------------------------------------------------------\n";
	printf "\nTMRNumber = %s -> %3d noeuds KO\n\n", $TmrNumber, scalar( @TNoeudsKO );

	foreach $Noeud ( @TNoeudsKO ) {
		printf " %-40s ", $Noeud;
		print " pb reseau (ping)\n" if ( $Noeud =~ / ping/ );
		print " pb Tivoli (wep)\n" if ( $Noeud =~ / wep/ );
	}

	print "\n#------------------------------------------------------------\n";

} else {
	$NbKO = scalar( @TNoeudsKO );

	`$Cmdopcmon $NomTemplate=$NbKO`;
}

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