#!/usr/bin/ksh
#####################################################################
# TITRE:	SystValSwap	
#--------------------------------------------------------------------
# CREE LE:	12/11/94		Par: Johann CURE HP
#--------------------------------------------------------------------
# OBJET:	Script donnant la taille de la swap utilisee 
#			
#====================================================================
# Modifie le:	JJ/MM/AA		Par: 
#	Motif: motif ayant justifie la modification et points
#	modifies si besoin
#####################################################################
# 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

# Varaible de retour pour OPC TailleSwapUtil: Pourcentage de la Swap utilisee 
typeset TailleSwapUtil=0

# 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:     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
#
# 10/5/95 : D.Stoll	boucle autour de la commande pstat (Sun OS)
#			et /usr/kvm/pstat au lieu de pstat
# 24/7/95 : D.Stoll	/usr/sbin/pstat au lieu de pstat (AIX)
# 			/etc/swapinfo au lieu de swapinfo (HP-UX)
# 			/usr/sbin/swap au lieu de swap (Sun Solaris)
# 13/06/97 : D.Stoll	HP-UX : on regarde le % pris sur l'espace de swap
#			et pas le total mem + swap.
# 04/06/98 : YLC	HP-UX : pour des swap sur plusieurs devices ,on ne
#                       teste que la valeur du premier(car en theorie il y
#                       a repartition de charge)
#			
#####################################################################
# REMARQUES:	Je recupere pour HP directement la valeur de la swap.
#		Pour les autres systemes il me faut recuperer la valeur
#		de la swap utilisee ainsi que de la swap disponible
#		et apres un savant calcul (Used/(Used+Available)
#		grace a la commde bc -l (l'option l pour avoir
#		un nombre avec des chiffres deriere la virgule).
#		Ce chiffre etant compris entre 0 et 1, il faut le 
#		multiplier par 100, puis je ne garde aue la partie
#		entiere, c'est a dire le premier nombre si le resultat
#		est < a 10, 2 chiffres pour un resultat compris entre
#		10 et 99 et 3 chiffre pour un resultat > a 100.
# modif : nettoyage des zeros non significatifs de TailleSwapUtil avec "expr"
#####################################################################
# CONVENTION DES CODES RETOUR (autres que 0 (Ok) et 2 (Erreur))
#
#====================================================================
# Fonctions DU SCRIPT appelees
#
#####################################################################
function FonctionHPUX
	{
	#TailleSwapUtil=$(/etc/swapinfo -t | awk ' /tot/ { print $5 }' | cut -d'%' -f1)
	#TailleSwapUtil=$(/etc/swapinfo | awk ' /dev/ { print $5 }' | cut -d'%' -f1)
	TailleSwapUtil=$(/etc/swapinfo | awk ' /dev/ { print $5 }' | head -1| cut -d'%' -f1)
	return 0
	}

function FonctionHPUX10
	{
	FonctionHPUX
	return 0
	}

function FonctionSunOS
	{
	ret=1
	while [ $ret -ne 0 ]
	do
		/usr/kvm/pstat -T > /tmp/pstat
		sleep 5
		ret=$?
	done	
	TailleSwapUtil=$(cat /tmp/pstat | awk ' /swap/  { print $1 } ')
	TailleSwapUtil=$(print $TailleSwapUtil \* 100 | bc -l) 
	if [ $TailleSwapUtil -lt 10 ]
		then TailleSwapUtil=$(print $TailleSwapUtil | cut -c1)
	fi
	if [ $TailleSwapUtil -ge 10 ] && [ $TailleSwapUtil -lt 100 ]
		then TailleSwapUtil=$(print $TailleSwapUtil | cut -c1,2)
	fi
	if [ $TailleSwapUtil -ge 100 ]
		then TailleSwapUtil=$(print $TailleSwapUtil | cut -c1-3)
	fi
	return 0
	}

function FonctionSolaris
	{
	typeset _TailleSwapUsed
	typeset _TailleSwapTotal
	TailleSwapUtil=$(/usr/sbin/swap -s)
	_TailleSwapUsed=$(print $TailleSwapUtil | cut -d'=' -f2 | cut -d'k' -f1)
	_TailleSwapTotal=$(print $TailleSwapUtil | cut -d',' -f2 | cut -d'k' -f1)
	_TailleSwapTotal=$(print $_TailleSwapUsed "+" $_TailleSwapTotal | bc -l)
	TailleSwapUtil=$(print "$_TailleSwapUsed / $_TailleSwapTotal" | bc -l | cut -c2,3 )
	TailleSwapUtil=$(expr $TailleSwapUtil + 0)
	if [ $TailleSwapUtil -lt 10 ]
		then TailleSwapUtil=$(print $TailleSwapUtil | cut -c1)
	fi
	if [ $TailleSwapUtil -ge 10 ] && [ $TailleSwapUtil -lt 100 ]
		then TailleSwapUtil=$(print $TailleSwapUtil | cut -c1,2)
	fi
	if [ $TailleSwapUtil -ge 100 ]
		then TailleSwapUtil=$(print $TailleSwapUtil | cut -c1-3)
	fi
	return 0
	}

function FonctionAIX
	{
	typeset _TailleSwapTotal ret=1
        while [ $ret -ne 0 ]
        do
                /usr/sbin/pstat -s > /tmp/pstat ; sleep 5 ; ret=$?
        done

	TailleSwapUtil=$(cat /tmp/pstat | awk ' { if (NR==4) print $0 } ')
	_TailleSwapTotal=$(expr $(print $TailleSwapUtil | awk ' { print $1 " + " $2 }'))
	TailleSwapUtil=$(print $TailleSwapUtil | awk ' { print $1} ')
	TailleSwapUtil=$(bc <<!!
	$TailleSwapUtil * 100 / $_TailleSwapTotal
	quit
	!!)
	return 0
	}

function FonctionAIX42
	{
	FonctionAIX
	return 0
	}

function FonctionIRIX
	{
	typeset _TailleSwapUsed
	typeset _TailleSwapTotal
	TailleSwapUtil=$(/sbin/swap -s)
	_TailleSwapUsed=$(print $TailleSwapUtil | cut -d'=' -f2 | cut -d'm' -f1 | cut -d'k' -f1)
	_TailleSwapTotal=$(print $TailleSwapUtil | cut -d',' -f2 | cut -d'm' -f1 |cut -d'k' -f1)
	_TailleSwapTotal=$(print $_TailleSwapUsed "+" $_TailleSwapTotal | bc -l)
	TailleSwapUtil=$(print "$_TailleSwapUsed / $_TailleSwapTotal" | bc -l | cut -c2,3 )
	TailleSwapUtil=$(expr $TailleSwapUtil + 0)
	if [ $TailleSwapUtil -lt 10 ]
		then TailleSwapUtil=$(print $TailleSwapUtil | cut -c1)
	fi
	if [ $TailleSwapUtil -ge 10 ] && [ $TailleSwapUtil -lt 100 ]
		then TailleSwapUtil=$(print $TailleSwapUtil | cut -c1,2)
	fi
	if [ $TailleSwapUtil -ge 100 ]
		then TailleSwapUtil=$(print $TailleSwapUtil | cut -c1-3)
	fi
	return 0
	}

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

DeterminationOS

${ReferenceFonction}

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

exit 0
