#!/bin/sh
#
#  File:        HALDiag.sh
#  Version:     $Revision: 1.40 $
#  Date:        $Date: 2011/05/04 15:50:17 $
#
#  Copyright (c) 2000-2011 Halcyon Monitoring Solutions, Inc.

#  Description:  Halcyon Diagnostic Utility
#
#  Run with the "-d" flag bundles up diagnostic information
#  about the current PrimeAlert/Sun Management Center
#  environment into a single tar file that can be sent to support
#  personnel at Halcyon Monitoring Solutions.
#


ARG2=$2
SCRIPTNAME=$0
ECHO="echo"
OS=`uname -s`
HALTMPDIR=/var/tmp/haltmp
PA_AGENT_PKG=HALpialag
ES_AGENT_PKG=SUNWesagt
ES_SERVER_PKG=SUNWessrv
PAESDIR="/var/opt/SUNWsymon"
PAESROOT="/opt/SUNWsymon"
HALINVFILE="/tmp/HALinv.tsv"
CCAT=ccat
USE_SNMPV2=0
WHOAMI="HALDiag.sh"
HNMS_DATABASES="cmdb msgdb perfdb" 
parseCommandLine ()
{
while [ $# -gt 0 ]
do
case "$1" in
-i)
FUNCTION="Inv"
shift
;;
-iv2)
FUNCTION="Inv"
USE_SNMPV2=1
shift
;;
-k) 
FUNCTION="Kill"
shift
;;
-d)
FUNCTION="Diagnostic"
shift
;;
-n)
if [ "$2" = "" ]
then
usage
fi
CUSTOMER_NAME=`$ECHO $2 | tr \  _`
shift 2
;;
-h)
help1
usage
;;
*)
usage
;;
esac
done
if [ "${CUSTOMER_NAME}" = "" -o "${FUNCTION}" = "" ]
then
usage
fi
HALTARFILE=/var/tmp/${CUSTOMER_NAME}-halcyon-support.tar
}
getUserInfo() {
$ECHO ""
$ECHO "  SNMPv2 communication will be used to gather the information."
$ECHO "  A userid that has login access to SunMC is required."
$ECHO ""
$ECHO "WARNING:"
$ECHO "  The userid and password that you provide will be be visible"
$ECHO "  in the command line arguments while this process is executing."
$ECHO "  It is recommended that you specify a userid that has read-only"
$ECHO "  access to SunMC."
$ECHO ""
user_input=""
while [ "$user_input" != "y" -a "$user_input" != "n" ]
do
$ECHO "Do you wish to continue? (y/n): \c"
read user_input
CheckYN ${user_input}
done
if [ "$user_input" = "n" ]
then
${ECHO} "\nExecution canceled by user.\n"
exit 1
fi
USER=""
while [ "$USER" = "" ]
do
echo
echo "Enter User Id: \c"
read USER
if [ "$USER" = "" ]
then
echo "      ERROR: User Id must be provided."
fi
done
stty -echo
PASSWDOK="n"
while [ "$PASSWDOK" = "n" ]
do
$ECHO
$ECHO "Enter Password: \c"
read PASSWD
$ECHO
$ECHO "Confirm Password: \c"
read CONFIRMPASSWD
$ECHO
if [ "$PASSWD" != "$CONFIRMPASSWD" ]
then
$ECHO "      ERROR: Confirmed password did not match."
elif [ "$PASSWD" = "" ]
then
$ECHO "      ERROR: Password must be provided."
else
PASSWDOK="y"
fi
done
stty echo
}

logError ()
{
$ECHO "\nERROR:  $1"
}
whichEcho ()
{
RESULT=`echo -e xxx`
if [ "$RESULT" = "-e xxx" ]
then
ECHO="echo"
elif [ "$RESULT" = "xxx" ]
then
ECHO="echo -e"
else
echo "Uncertain which echo command is valid on this OS, please"
echo "edit the 'whichEcho' procedure and have it simply set ECHO"
echo "to the appropriate echo command for this platform, or"
echo "contact Halcyon Support."
exit 1
fi
}
usage ()
{
$ECHO ""
$ECHO "Usage: HALDiag.sh -d -n <Customer_Name>"
$ECHO ""
$ECHO "   ex: HALDiag.sh -d -n MyCompany"
$ECHO ""
exit 0
}
help1 ()
{
if [ "$1" != "-i" ]; then
${ECHO} ""
${ECHO} "            --------------------------"
${ECHO} "            Halcyon Diagnostic Utility"
${ECHO} "            --------------------------"
${ECHO} ""
${ECHO} "This script creates a single tar file containing information about"
${ECHO} "your PrimeAlert/Sun Management Center environment. It includes" 
${ECHO} "configuration and logs for only PrimeAlert/Sun Management Center"
${ECHO} "and no other application. The results are written to the following"
${ECHO} "file which can be sent to support personnel at Halcyon Monitoring"
${ECHO} "Solutions to diagnose your problem:"
${ECHO} ""
${ECHO} "            ${HALTARFILE}.<Z|gz|bz2>"
fi
${ECHO} ""
${ECHO} "Please note that this utility is provided 'As Is' without warranty."
${ECHO} "While this utility only captures configuration information for"
${ECHO} "diagnostic purposes, Halcyon Monitoring Solutions accepts no"
${ECHO} "liability for any potential adverse outcome resulting from the"
${ECHO} "execution of this utility."
${ECHO} ""
}
checkRoot ()
{
if [ "`id | cut -d '(' -f 1`" != "uid=0" -a "$TEST" != "YES" ]
then
${ECHO} "\nThis script must be executed by root."
${ECHO} "Aborting...\n"
exit 1
fi
}
InitializeParameters () 
{
case "${OS}" in
SunOS)
PATH=$PATH:/usr/bin:/usr/sbin:/usr/proc/bin ; export PATH
BASEDIR=`/usr/bin/pkgparam SUNWesagt BASEDIR 2> /dev/null`
if [ $? -ne 0 ]; then
${ECHO} "Can't locate Sun Managment Center Agent installation."
else
${ECHO} "Found Sun Managment Center Agent installation."
SUNMC_INSTALLED="TRUE"
PAESROOT="${BASEDIR}/SUNWsymon" 
PAESDIR=/var/opt/SUNWsymon
ESROOT="${PAESROOT}"; export ESROOT
IESROOT="${PAESROOT}"; export IESROOT
CCAT="${PAESROOT}/es-run ccat"
if [ -r ${PAESROOT}/es.profile ]; then
. ${PAESROOT}/es.profile
else
${ECHO} "Error loading Sun Management Center paramaters: "
${ECHO} "${PAESROOT}/es.profile does not exist."
${ECHO} "Aborting ..."
exit 1
fi
fi
BASEDIR=`/usr/bin/pkgparam HALhmfcom BASEDIR 2> /dev/null`
if [ $? -ne 0 ]; then
${ECHO} "Can't locate Halcyon Neuron Management Suite installation."
else
${ECHO} "Found Halcyon Neuron Management Suite installation."
HNMS_INSTALLED="TRUE"
HNMSROOT="${BASEDIR}/HMF"
HNMSLOCALDIR=`/usr/bin/pkgparam HALhmfcom LOCALDIR 2> /dev/null`
fi
BASEDIR=`/usr/bin/pkgparam HALnmaweb BASEDIR 2> /dev/null`
if [ $? -ne 0 ]; then
${ECHO} "Can't locate Neuron Agent installation."
else
${ECHO} "Found Neuron Agent installation."
NA_INSTALLED="TRUE"
NAROOT="${BASEDIR}"
NALOCALDIR=`/usr/bin/pkgparam HALnmaweb LOCALDIR 2> /dev/null`
fi
;;
Linux)    
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin ; export PATH
PAESROOT=`rpm -q --queryformat '%{INSTALLPREFIX}\n' ${PA_AGENT_PKG} 2> /dev/null | grep -iv 'is not installed'`
if [  $? -ne 0  -o "$PAESROOT" = "" ] ; then
$ECHO "Can't locate PrimeAlert Agent installation."
else
${ECHO} "Found PrimeAlert Agent installation."
PA_INSTALLED="TRUE"
PAESDIR=/var/opt/PrimeAlert
fi
BASEDIR=`rpm -q --queryformat '%{INSTALLPREFIX}\n' HALhmfcom 2> /dev/null | grep -iv 'is not installed'`
if [  $? -ne 0  -o "$BASEDIR" = "" ] ; then
$ECHO "Can't locate Halcyon Neuron Management Suite installation."
else
${ECHO} "Found Halcyon Neuron Management Suite installation."
HNMS_INSTALLED="TRUE"
HNMSROOT=${BASEDIR}
HNMSLOCALDIR=/var${BASEDIR}
fi
BASEDIR=`rpm -q --queryformat '%{INSTALLPREFIX}\n' HALnmaweb 2> /dev/null | grep -iv 'is not installed'`
if [  $? -ne 0  -o "$BASEDIR" = "" ] ; then
$ECHO "Can't locate Halcyon Neuron Agent installation."
else
${ECHO} "Found Halcyon Neuron Agent installation."
NA_INSTALLED="TRUE"
NAROOT=${BASEDIR}
NALOCALDIR=/var${BASEDIR}
fi
CCAT="${PAESROOT}/bin/ccat"
;;
*)
$ECHO " OS '$OS' is not supported"    
exit 1
;;
esac
}
checkUtilities ()
{
if [ "${SUNMC_INSTALLED}" = "TRUE" -o "${PA_INSTALLED}" = "TRUE" ]
then
XGET=xget
XPUT=xput
SNMPGET=snmpget

XGET=`find ${PAESROOT} -follow -name ${XGET} 2> /dev/null`
XPUT=`find ${PAESROOT} -follow -name ${XPUT} 2> /dev/null`

if [ "$USE_SNMPV2" -eq 1 ]
then
SNMPGET=$PAESDIR/uninstall/halsnmpgetv2
else 
SNMPGET=`find ${PAESROOT} -follow -name ${SNMPGET} 2> /dev/null`
fi
if [ ! -x "${XGET}" -o ! -x "${XPUT}" -o ! -x "${SNMPGET}" ]
then
${ECHO} "Error: One or more of the following required utilities does not exist."  
${ECHO} "    ${XGET}" 
${ECHO} "    ${XPUT}"
${ECHO} "    ${SNMPGET}"
${ECHO} "Aborting ..."
exit 1
fi
fi
}
checkEnginesFile ()
{
CFGENGINESFILE="${PAESDIR}/cfg/cfgserver-engines.dat"
if [ ! -r "${CFGENGINESFILE}" ]
then
${ECHO} "Error: Required configuration files unavailable."
${ECHO} "       Please ensure this script is being run on a Sun"
${ECHO} "       Management Center Server."
exit 1
fi
}
getLocalAgentConfig ()
{
TRAPSERVER=`${XGET} ${PAESDIR}/cfg/domain-config.x trap.trapServer`
AGENTPORT=`${XGET} ${PAESDIR}/cfg/domain-config.x agent.snmpPort`
LOCALIP=`arp ${TRAPSERVER} | awk '{print $2}'`
if [ $? -ne 0 ]
then
${ECHO} "Error determining local IP or local Agent port." 
${ECHO} "Aborting execution."
exit 1
fi
}
printHeaders ()
{
${ECHO} "IP Address\tAgent Status\tHostname\tDomain\tFamily Type\tRaw Hardware\tHardware Type\tCPU\tMemory (MB)\tOS\tAgent Port\tAgent Type\tModule Name\tModule Version\tModule Loaded" > ${HALINVFILE}
${ECHO} ""
${ECHO} ""
${ECHO} "            ---------------"
${ECHO} "            Halcyon Utility"
${ECHO} "            ---------------"
${ECHO} ""
${ECHO} "Querying Agents..."
${ECHO} ""
${ECHO} "IP Address      Port"
${ECHO} "=============== ===="
}
HOSTNAMEOID="1.3.6.1.4.1.42.2.12.2.1.2.1.1.0"
OSOID="1.3.6.1.4.1.42.2.12.2.1.2.1.3.0"
AGENTVERSIONOID="1.3.6.1.4.1.42.2.12.2.1.2.2.1.1.0"
IPOID="1.3.6.1.4.1.42.2.12.2.1.2.1.5.0"
HARDWAREOID="1.3.6.1.4.1.42.2.12.2.1.2.1.4.0"
FAMILYOID="1.3.6.1.4.1.42.2.12.2.1.2.1.9.0"
INSTALLEDMODULESOID="1.3.6.1.4.1.42.2.12.2.1.2.3.1.1.1"
MINSTALLEDMODULESOID="1.3.6.1.4.1.42.2.12.2.1.2.3.1.1.2"
MODULEVERSIONSOID="1.3.6.1.4.1.42.2.12.2.1.2.3.1.1.4"
SUNLOADEDMODULESOID="1.3.6.1.4.1.42.2.12.2.1.2.3.1.1.6"
HALCYONLOADEDMODULESOID="1.3.6.1.4.1.42.2.12.2.1.2.3.1.1.5"
execSnmpGet () {
host=$1
port=$2
oid=$3
if [ "$USE_SNMPV2" -eq 1 ]
then
KILL_HOST=$host 
export KILL_HOST
KILL_PORT=$port
export KILL_PORT
$SCRIPTNAME -k &
resultFile=/tmp/HALDiag.result
/usr/bin/rm -f $resultFile
/usr/bin/touch $resultFile
val=`${SNMPGET} -h ${host} -p ${port} -v 2u -l auth -n "$USER" -w "$PASSWD" ${oid} > $resultFile 2>&1`

fail=`grep -c Failure: $resultFile` 
if [ "$fail" -eq 0 ]
then
val=`cat $resultFile | tail -1 | grep Data | sed s'/.*Data://g'`
else 
val=""
fi
else
val=`${SNMPGET} -h ${host} -p ${port} ${oid} 2>/dev/null | grep Value | cut -f2- -d" " | sed s'/"//'g`
fi
echo $val
} 
queryAgents ()
{
TEMPVAR=1
CURRENTAGENT=`${XGET} ${CFGENGINESFILE} engineTable.engineEntry.netloc.${TEMPVAR}`
while [ ! -z "${CURRENTAGENT}" ]
do
CURRENTIP="`${ECHO} ${CURRENTAGENT} | awk '{print $1}'`"
PORT=`${ECHO} ${CURRENTAGENT} | awk '{print $2}'`
if [ "(${CURRENTIP})" != "${LOCALIP}" -o "${PORT}" = "${AGENTPORT}" ]
then
${ECHO} "${CURRENTAGENT}"
AGENT=`${ECHO} ${CURRENTAGENT} | awk '{print $1}'`
GENERICHOSTNAME=`execSnmpGet ${AGENT} ${PORT} ${HOSTNAMEOID}`
HOSTNAME="`${ECHO} ${GENERICHOSTNAME} | cut -f1 -d.`"
DOMAIN="`${ECHO} ${GENERICHOSTNAME} | cut -f2- -d.`"
if [ "${HOSTNAME}" = "${DOMAIN}" ]
then
DOMAIN=""
fi    
if [ -z "${HOSTNAME}" ]
then
TEMPVAR=`expr ${TEMPVAR} + 1`
CURRENTAGENT=`${XGET} ${CFGENGINESFILE} engineTable.engineEntry.netloc.${TEMPVAR}`
${ECHO} "${AGENT}\tdown\t\t\t\t\t\t\t\t\t${PORT}\t\t\t\t" >> ${HALINVFILE}
continue
fi
OS=`execSnmpGet ${AGENT} ${PORT} ${OSOID}`
AGENTVERSION=`execSnmpGet ${AGENT} ${PORT} ${AGENTVERSIONOID} | awk '{print $2}'`
IP=`execSnmpGet ${AGENT} ${PORT} ${IPOID}`

GENERICHARDWARE=`execSnmpGet ${AGENT} ${PORT} ${HARDWAREOID}`
FAMILY=`execSnmpGet ${AGENT} ${PORT} ${FAMILYOID}`
HARDWARE="`${ECHO} ${GENERICHARDWARE} | cut -f1 -d,`" 
CPU="`${ECHO} ${GENERICHARDWARE} | cut -f2 -d, | awk '{print $1}'`"
MEMORY="`${ECHO} ${GENERICHARDWARE} | cut -f3 -d, | awk '{print $1}'`"
INSTALLEDMODULES=`execSnmpGet ${AGENT} ${PORT} ${INSTALLEDMODULESOID}`

MODULEVERSIONS=`execSnmpGet ${AGENT} ${PORT} ${MODULEVERSIONSOID}`
HALCYONTEST="`execSnmpGet ${AGENT} ${PORT} ${HALCYONLOADEDMODULESOID} | grep '[SM]'`"

if [ "${HALCYONTEST}" = "" ]
then
LOADEDMODULES=`execSnmpGet ${AGENT} ${PORT} ${HALCYONLOADEDMODULESOID}`
else
LOADEDMODULES=`execSnmpGet ${AGENT} ${PORT} ${SUNLOADEDMODULESOID}`
fi

PREFIXRESULTSTRING="${IP}\tup\t${HOSTNAME}\t${DOMAIN}\t${FAMILY}\t${GENERICHARDWARE}\t${HARDWARE}\t${CPU}\t${MEMORY}\t${OS}\t${PORT}\t${AGENTVERSION}"
WORDCOUNT="`${ECHO} ${INSTALLEDMODULES} | wc -w`"
if [ $WORDCOUNT -eq 0 ]
then
TEMPVAR=`expr ${TEMPVAR} + 1`
CURRENTAGENT=`${XGET} ${CFGENGINESFILE} engineTable.engineEntry.netloc.${TEMPVAR}`
${ECHO} "${PREFIXRESULTSTRING}\tINSTALLED_MODULE_LIST_EMPTY" | sed 's/"//g' >> ${HALINVFILE}
continue
else
LASTMODULE="`expr ${WORDCOUNT} + 1`"
fi       

ANOTHERTEMPVAR=1
while [ "${ANOTHERTEMPVAR}" -lt "${LASTMODULE}" ]
do
MODULE="`${ECHO} ${INSTALLEDMODULES} | sed 's/Value://g' | cut -f${ANOTHERTEMPVAR} -d\" \"`" 
VERSION="`${ECHO} ${MODULEVERSIONS} | cut -f${ANOTHERTEMPVAR} -d\" \"`"
COUNT="`${ECHO} ${LOADEDMODULES} | cut -f${ANOTHERTEMPVAR} -d\" \"`"
if [ "${COUNT}" = "-1" -o "${COUNT}" = "\"-1" -o "${COUNT}" = "-1\"" ]
then
COUNT="1"
fi
ANOTHERTEMPVAR=`expr ${ANOTHERTEMPVAR} + 1`
RESULTSTRING="${PREFIXRESULTSTRING}\t$MODULE\t$VERSION\t$COUNT"
${ECHO} "$RESULTSTRING" | sed 's/"//g' >> ${HALINVFILE}
done
fi
TEMPVAR=`expr ${TEMPVAR} + 1`
CURRENTAGENT=`${XGET} ${CFGENGINESFILE} engineTable.engineEntry.netloc.${TEMPVAR}`
done
${ECHO} "=============== ===="
${ECHO} ""
${ECHO} "Execution complete..."
${ECHO} "The tab seperated results have been stored in:"
${ECHO} "\n        ${HALINVFILE}"
${ECHO} ""
}
CheckYN ()
{
if [ "$1" = "y" -o "$1" = "n" ]
then
$ECHO "... $1"
else
$ECHO "Invalid input - try again.\n"
fi
}
queryUser ()
{
help1 $1
user_input=""
while [ "$user_input" != "y" -a "$user_input" != "n" ]
do
$ECHO "Do you wish to continue? (y/n): \c"
read user_input
CheckYN ${user_input}
done
if [ "$user_input" = "n" ]
then
${ECHO} "\nExecution canceled by user.\n"
exit 1
fi
}
checkStickyBit ()
{
os_version=`uname -r`
os_version=`$ECHO $os_version | sed 's/^5\./2\./'`
os_build=sparc-sun-solaris${os_version}
STICKYBITFILES=`find /opt/SUNWsymon/modules/sbin/ /opt/SUNWsymon/modules/sbin/${os_build}/ /opt/SUNWsymon/base/sbin/${os_build}/ /var/opt/SUNWsymon/bin/HALEventAction/ -type f -perm -2000 -o -perm -4000 2>/dev/null`
if [ "${STICKYBITFILES}" = "" ] 
then
${ECHO} "Sticky Bits:            No" >> $HALTMPDIR/summary.txt
else
${ECHO} "Sticky Bits:            Yes" >> $HALTMPDIR/summary.txt
for STICKYFILE in ${STICKYBITFILES}
do
${ECHO} "  `ls -l ${STICKYFILE} | awk '{print $1,$9}'`" >> $HALTMPDIR/summary.txt
done
fi 
}
checkExecutables ()
{
case "${OS}" in
SunOS)
HALCYONEXECUTABLES=`find ${PAESROOT}/modules/sbin \( -name HAL*sh -a ! -perm -u+x \); find ${PAESROOT}/base/sbin \( -name HAL*sh -a ! -perm -u+x \); find ${PAESDIR}/bin \( -name HAL*sh -a ! -perm -u+x \)`
;;
Linux)
HALCYONEXECUTABLES=`find ${PAESROOT}/sbin \( -name HAL*sh -a ! -perm -u+x \); find ${PAESROOT}/bin \( -name HAL*sh -a ! -perm -u+x \); find ${PAESDIR}/bin \( -name HAL*sh -a ! -perm -u+x \)`
;;    
esac
if [ "${HALCYONEXECUTABLES}" = "" ]
then
${ECHO} "Nonexecutable Scripts:  No" >> $HALTMPDIR/summary.txt
else
${ECHO} "Nonexecutable Scripts:  Yes" >> $HALTMPDIR/summary.txt
for HALCYONEXECUTABLE in ${HALCYONEXECUTABLES}
do
ls -l ${HALCYONEXECUTABLE} | awk '{print "  ", $1, $9}' >> $HALTMPDIR/summary.txt
done
fi
}
checkPAESDIR ()
{
OVERRIDES=`ls ${PAESDIR}/cfg | egrep "\-d.prc$|\-d.flt$|\-d.x$|\-d.rul$|\-d.def$"`
if [ "${OVERRIDES}" = "" ] 
then
${ECHO} "Files in ESDIR:         No" >> $HALTMPDIR/summary.txt
else
${ECHO} "Files in ESDIR:         Yes" >> $HALTMPDIR/summary.txt
for OVERRIDEFILE in ${OVERRIDES}
do
${ECHO} "  ${OVERRIDEFILE}" >> $HALTMPDIR/summary.txt
done
fi 
}
checkLicense ()
{
if [ -f ${PAESDIR}/cfg/halcyon-licenses.dat ]
then
LICENSEFILE=${PAESDIR}/cfg/halcyon-licenses.dat
elif [ -f ${HNMSLOCALDIR}/conf/halcyon-licenses.dat ]
then
LICENSEFILE=${HNMSLOCALDIR}/conf/halcyon-licenses.dat
elif [ -f ${NALOCALDIR}/cfg/halcyon-licenses.dat ]
then
LICENSEFILE=${NALOCALDIR}/cfg/halcyon-licenses.dat
fi
if [ "${LICENSEFILE}" = "" ]
then
${ECHO} "License Installed:      No" >> $HALTMPDIR/summary.txt
else
${ECHO} "License Installed:      Yes (`ls -l ${LICENSEFILE} | awk '{print $1,$3,$4,$5,$6,$7,$8}'`)" >> $HALTMPDIR/summary.txt

for LICENCEDMODULE in `cat ${LICENSEFILE} | awk '{print $2}' | grep ',$' | egrep -v "1900|1801|ON" | sed 's/,/ /g'`
do
${ECHO} "  ${LICENCEDMODULE}" >> $HALTMPDIR/summary.txt
done
fi
}
checkModules ()
{
if [ -f ${PAESDIR}/cfg/base-modules-d.dat ]
then
HALCYONMODULES=`grep "^HAL" ${PAESDIR}/cfg/base-modules-d.dat | cut -f1 -d" " 2>/dev/null | cut -d+ -f 1 | sort | uniq`
if [ "${HALCYONMODULES}" = "" ]
then
${ECHO} "Halcyon Modules Loaded: No" >> $HALTMPDIR/summary.txt
else
${ECHO} "Halcyon Modules Loaded: Yes" >> $HALTMPDIR/summary.txt
for LOADEDMODULE in ${HALCYONMODULES}
do
if [ -f ${PAESROOT}/modules/cfg/${LOADEDMODULE}-m.x ]
then
LOADEDMODULEVERSION=`grep -i "param:version" ${PAESROOT}/modules/cfg/${LOADEDMODULE}-m.x | cut -d= -f 2`
${ECHO} "  ${LOADEDMODULE} ${LOADEDMODULEVERSION}" >> $HALTMPDIR/summary.txt
else
${ECHO} "  ${LOADEDMODULE}" >> $HALTMPDIR/summary.txt
fi
done
fi
else
${ECHO} "Halcyon Modules:   Unable to determine" >> $HALTMPDIR/summary.txt
fi
}
solaris10Services () {
OSVER=`uname -sr`
if [ "$OSVER" = "SunOS 5.10" ]
then
${ECHO} " " >> $HALTMPDIR/summary.txt
${ECHO} "Sun MC Service States" >> $HALTMPDIR/summary.txt
${ECHO} "=====================" >> $HALTMPDIR/summary.txt
${ECHO} " " >> $HALTMPDIR/summary.txt
svcs -a | grep manag | grep -v "webmin:default" | grep -v "dhcpd:default" | grep -v "scs-db:default" | grep -v "cacao: default" >> $HALTMPDIR/summary.txt

${ECHO} " " >> $HALTMPDIR/summary.txt
${ECHO} "Sun MC Service Details" >> $HALTMPDIR/summary.txt
${ECHO} "=====================" >> $HALTMPDIR/summary.txt
${ECHO} " " >> $HALTMPDIR/summary.txt
mkdir $HALTMPDIR/details/servicelogs/
SERVICENAMES=`svcs -a | grep manag | grep -v "webmin:default" | grep -v "dhcpd:default" | grep -v "scs-db:default" | grep -v "cacao: default" | grep -v "cde-calendar-manager" | grep -v "/dmi:default" | awk '{print $3}'`
for SERVICE in $SERVICENAMES
do
svcs -xv $SERVICE > /tmp/haldiag.services.$$.tmp
cat /tmp/haldiag.services.$$.tmp | grep "   See: " | cut -c9- > /tmp/haldiag.services.$$.servicelogs
while read POSSIBLE_FILE 
do
if [ -f "$POSSIBLE_FILE" ]
then
cp "$POSSIBLE_FILE" ${HALTMPDIR}/details/servicelogs/
else
echo "skip - not a logfile, manpage or website reference" > /dev/null
fi
done < /tmp/haldiag.services.$$.servicelogs
cat /tmp/haldiag.services.$$.tmp >> $HALTMPDIR/summary.txt
${ECHO} " " >> $HALTMPDIR/summary.txt
rm -f /tmp/haldiag.services.$$.tmp
rm -f /tmp/haldiag.services.$$.servicelogs
done
fi
}
getInstalledPkgVersion ()
{
ourver="unknown"
ver=`pkgparam $1 VERSION`
ret_code=$?
SOLVER=`uname -r | sed 's/^5\.//'`
if [ "$SOLVER" = "10" ]
then
SOLVER="9"
fi
if [ "$ver" = "3.5,REV=2.6.2004.04.15" ]
then
threefiveoneeh=`showrev -a | grep -- "11838${SOLVER}-03" | wc -l`
if [ "$threefiveoneeh" -eq 1 ]
then
ourver="3.5.1a"
elif [ "$threefiveoneeh" -eq 0 ]
then
ourver="3.5.1"
else
ourver="3.5.1 ?"
fi
elif [ "$ver" = "3.6,REV=2.6.2005.07.12" ]
then
ourver="3.6 beta"
elif [ "$ver" = "3.6,REV=2.6.2005.10.10" ]
then
ourver="3.6"
elif [ "$ver" = "3.6,REV=2.9.2005.10.11" ]
then
ourver="3.6"
elif [ "$ver" = "3.6.1,REV=2.7.2003.08.28" ]
then
ourver="3.6.1"
elif [ "$ver" = "3.6.1,REV=2.9.2006.04.14" ]
then
ourver="3.6.1_"
elif [ "$ver" = "3.5,REV=2.9.2004.04.15" ]
then
threefiveoneeh=`showrev -a | grep -- '11838${SOLVER}-03' | wc -l`
if [ "$threefiveoneeh" -eq 1 ]
then
ourver="3.5.1a _"
elif [ "$threefiveoneeh" -eq 0 ]
then
ourver="3.5.1 _"
else
ourver="3.5.1 _?"
fi
elif [ "$ver" = "3.5,REV=2.6.2003.12.19" ]
then
ourver="3.5 U1 beta"
elif [ "$ver" = "3.5,REV=2.6.2003.05.08" ]
then
ourver="3.5"
elif [ "$ver" = "3.0_Build41,REV=2.6.2000.12.19" ]
then
ourver="3.0"
elif [ "$ver" = "3.0_Build41,REV=2.7.2000.12.19" ]
then
ourver="3.0"
else
echo "do nothing" > /dev/null
fi
if [ "$WHOAMI" = "HALDiag.sh" ]
then
echo "$ver  ($ourver)"
else
echo $ourver
fi
}
checkPatches ()
{
SUNMCVERSION=`pkgparam SUNWesagt | egrep "Build41$|Build39$" | sed 's/_/ /g' | awk '{print $2}'`
OSVERSION=`uname -a | awk '{print $3}'`
PATCHID=""
if [ "${SUNMCVERSION}" = "Build41" ]
then
if [ "${OSVERSION}" = "5.9" -o ${OSVERSION} = "5.8" ]
then
PATCHID="110938"
elif [ "${OSVERSION}" = "5.7" ]
then
PATCHID="110937"
elif [ "${OSVERSION}" = "5.6" ]
then
PATCHID="110936"
else
PATCHID="110862"
fi
else
if [ "${OSVERSION}" = "5.8" ]
then
PATCHID="110973"
elif [ "${OSVERSION}" = "5.7" ]
then
PATCHID="110972"
elif [ "${OSVERSION}" = "5.6" ]
then
PATCHID="110971"
else
PATCHID="110861"
fi
fi

if [ "${PATCHID}" = "" ] || [ "${OSVERSION}" = "5.10" ]
then
PATCHLIST=`showrev -p 2>/dev/null | egrep "Patch: 1239(19|20|21|22|23|24)-" | awk '{print $2}'`
PRMPATCHLIST=`showrev -p 2>/dev/null | egrep "Patch: 12519[01234]-" | awk '{print $2}'`
SCMPATCHLIST=`showrev -p 2>/dev/null | egrep "Patch: 12583[01234]-" | awk '{print $2}'`
${ECHO} "SunMC Patch Version:    ${PATCHLIST}" >> $HALTMPDIR/summary.txt
${ECHO} "  PRM Patch Version:    ${PRMPATCHLIST}" >> $HALTMPDIR/summary.txt
${ECHO} "  SCM Patch Version:    ${SCMPATCHLIST}" >> $HALTMPDIR/summary.txt
else
PATCHLIST=`showrev -p 2>/dev/null | grep "Patch: ${PATCHID}-" | awk '{print $2}' | sort | tail -1`
if [ "${PATCHLIST}" != "" ]
then
${ECHO} "SunMC Patch Version:    ${PATCHLIST}" >> $HALTMPDIR/summary.txt
else
${ECHO} "SunMC Patch Version:    Unknown: recommended patch series not found in showrev -p" >> $HALTMPDIR/summary.txt
fi
fi
if [ "${OSVERSION}" = "5.10" ]
then
ZFILE="$HALTMPDIR/details/zones.txt"
zoneadm list -cv >> $ZFILE
${ECHO} "zoneadm list -cv" >> $ZFILE
${ECHO} " " >> $ZFILE
${ECHO} " " >> $ZFILE
${ECHO} " - If you don't see global listed, if you only see one name, then we're IN a zone." >> $ZFILE
${ECHO} " - If this is a Sun MC Server and we're IN a zone, it must be a whole root zone." >> $ZFILE
${ECHO} " - If it's just an agent and we're IN a zone, remember to ask the customer what type of zone this is." >> $ZFILE
${ECHO} "" >> $ZFILE
fi
}
createTempDir ()
{
HALTMPDIR=$HALTMPDIR
rm -f ${HALTARFILE}*
rm -rf $HALTMPDIR
mkdir -p $HALTMPDIR
mkdir -p $HALTMPDIR/details
}
getCommonDiagInfo ()
{
mkdir -p $HALTMPDIR/details

df -kl > $HALTMPDIR/details/space.txt
${ECHO} "Date:                   `date`"     >> $HALTMPDIR/summary.txt
${ECHO} "uname -a:               `uname -a`" >> $HALTMPDIR/summary.txt
LOCALHOSTNAME=`hostname`
LOCALIP=`arp ${LOCALHOSTNAME} | awk '{print $2}' | sed 's/(//g' | sed 's/)//g'`
$ECHO "Hostname: ${LOCALHOSTNAME} IP: ${LOCALIP}" >> $HALTMPDIR/details/iface.txt
$ECHO "\nInterface Bind Options:\n" >> $HALTMPDIR/details/iface.txt
ifconfig -a >> $HALTMPDIR/details/iface.txt
case "${OS}" in
SunOS)
${ECHO} "  -archiving version info..."
for package in `pkginfo | grep HAL | awk '{print $2}'`
do
PKGVER=`pkgparam $package VERSION 2>/dev/null`
${ECHO} "${package} ${PKGVER}" >> $HALTMPDIR/details/packages.txt
done
showrev -p > $HALTMPDIR/details/patchlevel.txt 2>/dev/null
if [ -x /usr/sbin/prtdiag ]
then
PRTDIAG=/usr/sbin/prtdiag
${PRTDIAG} > $HALTMPDIR/details/prtdiag.txt 2>/dev/null
else
PRTDIAG=`find /usr -name prtdiag -print 2> /dev/null | head -1`
if [ "$PRTDIAG" != "" ]; then
${PRTDIAG} > $HALTMPDIR/details/prtdiag.txt 2>/dev/null
else
PRTDIAG=`find /usr -follow -name prtdiag -print 2> /dev/null | head -1`
if [ "$PRTDIAG" != "" ]; then
${PRTDIAG} > $HALTMPDIR/details/prtdiag.txt 2>/dev/null
fi
fi
fi
${ECHO} "  -archiving framework process configuration..."
${ECHO} "=============================================================" >> $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} "SunMC, Halcyon  PROCESSES:" >> $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} " User     PID  Vsz  Rss  %CPU %Mem Args" >> $HALTMPDIR/details/processes.txt 2>/dev/null
ps -efo user,pid,vsz,rss,pcpu,pmem,args | egrep -i "esd|smcorau|xvfb|jre|HALsmsapj|pad|java|halcyon | egrep -v egrep" >> $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} "=============================================================" >> $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} "NON SunMC, Halcyon  PROCESSES:" >> $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} " User     PID  Vsz  Rss  %CPU %Mem Args" >> $HALTMPDIR/details/processes.txt 2>/dev/null
ps -efo user,pid,vsz,rss,pcpu,pmem,args | egrep -iv "esd|smcorau|xvfb|jre|HALsmsapj|pad|java|halcyon | egrep -v egrep" >> $HALTMPDIR/details/processes.txt 2>/dev/null
ptree >> $HALTMPDIR/details/processes_ptree.txt 2>/dev/null
if [ -x /usr/ucb/ps ]
then
/usr/ucb/ps -auxww > $HALTMPDIR/details/processes_full_args.txt
else
ps auxww > $HALTMPDIR/details/processes_full_args.txt
fi
checkLicense
;;
Linux)
${ECHO} "  -archiving version info..."
rpm -qa | grep HAL > $HALTMPDIR/details/versions.txt 2>&1
${ECHO} "  -archiving processes info..."
${ECHO} "=============================================================" >>  $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} "Halcyon PROCESSES:" >>  $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} " User     PID  Vsz  Rss  %CPU %Mem Args" >> $HALTMPDIR/details/processes.txt 2>/dev/null
ps -e -o "user,pid,vsz,rss,pcpu,pmem,args" | egrep -i "paAgent|pad|halcyon"  | egrep -v "egrep" >> $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} "=============================================================" >>  $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} "NON Halcyon PROCESSES:" >> $HALTMPDIR/details/processes.txt 2>/dev/null
${ECHO} " User     PID  Vsz  Rss  %CPU %Mem Args" >> $HALTMPDIR/details/processes.txt 2>/dev/null
ps -e -o "user,pid,vsz,rss,pcpu,pmem,args" | egrep -iv "paAgent|pad|halcyon"  | egrep -v "egrep" >> $HALTMPDIR/details/processes.txt 2>/dev/null
checkLicense
;;
esac
}
getSunMCDiagInfo ()
{
mkdir -p $HALTMPDIR/SunMC/cfg
mkdir -p $HALTMPDIR/SunMC/log
case "${OS}" in
SunOS)
$ECHO "  -archiving Agent listing..."
cd ${PAESROOT}
find .  > $HALTMPDIR/details/PA-ES-ROOT.listing.txt
ls -lFR ${PAESROOT} > $HALTMPDIR/details/PA-ES-ROOT.dir.listing.txt
cd ${PAESDIR}
find . > $HALTMPDIR/details/PA-ES-DIR.listing.txt
ls -lFR ${PAESDIR} > $HALTMPDIR/details/PA-ES-DIR.dir.listing.txt
cd ${PAESDIR}
${ECHO} "  -archiving Agent configuration..."
cp -p ${PAESDIR}/cfg/* $HALTMPDIR/SunMC/cfg > /dev/null 2>&1
cp -pR ${PAESDIR}/install $HALTMPDIR/SunMC > /dev/null 2>&1
cp -pR ${PAESDIR}/uninstall $HALTMPDIR/SunMC > /dev/null 2>&1
cp -pR ${PAESDIR}/bin $HALTMPDIR/SunMC > /dev/null 2>&1
cd ${PAESDIR}
${ECHO} "  -archiving Agent interface binding..."
DOMAINHOSTNAME=`${XGET} ${PAESDIR}/cfg/domain-config.x agent.agentServer`
DOMAINIP=`arp ${DOMAINHOSTNAME} | awk '{print $2}' | sed 's/(//g' | sed 's/)//g'`
$ECHO "domain-config.x Agent Hostname: ${DOMAINHOSTNAME} IP: ${DOMAINIP}" >> $HALTMPDIR/details/iface.txt
${ECHO} "  -archiving Agent logfiles..."
cd ${PAESDIR}/log
for logfile in `/bin/ls -1 *`
do
if [ -f $logfile ]
then
cp -p $logfile $HALTMPDIR/SunMC/log
fi
done
if [ -d "${PAESDIR}/HALEventGateway" ]
then
${ECHO} "  -archiving EventGateway mib dir..."
mkdir -p "${HALTMPDIR}"    # cp -R copies the named dirs to the target dir, so as long as not conflicts, just need to ensure parent dir exists.
cp -R "${PAESDIR}/HALEventGateway" "${HALTMPDIR}/SunMC"
fi
if [ -d "${PAESDIR}/HALWebPortal" ]
then
${ECHO} "  -archiving WebPortal logfiles..."
mkdir -p $HALTMPDIR/SunMC/HALWebPortal
if [ -d ${PAESDIR}/HALWebPortal/log ]
then
mkdir -p "${HALTMPDIR}/SunMC/HALWebPortal/log"
cd "${PAESDIR}/HALWebPortal/log/"
cp * "$HALTMPDIR/SunMC/HALWebPortal/log/"
fi
if [ -d ${PAESDIR}/HALWebPortal/logs ]
then
mkdir -p "${HALTMPDIR}/SunMC/HALWebPortal/logs"
cd "${PAESDIR}/HALWebPortal/logs"
cp * "${HALTMPDIR}/SunMC/HALWebPortal/logs"
fi
if [ -d ${PAESDIR}/HALWebPortal/webapps/WebPortal/cfg ]
then
mkdir -p $HALTMPDIR/SunMC/HALWebPortal/cfg
cp -Rp ${PAESDIR}/HALWebPortal/webapps/WebPortal/cfg/* $HALTMPDIR/SunMC/HALWebPortal/cfg > /dev/null 2>&1
fi
if [ -f ${PAESROOT}/HALsmsptl/bin/webportal ]
then
cp -p ${PAESROOT}/HALsmsptl/bin/webportal $HALTMPDIR/SunMC/HALWebPortal > /dev/null 2>&1
fi
if [ -d ${PAESDIR}/HALWebPortal/conf ]
then
mkdir -p $HALTMPDIR/SunMC/HALWebPortal/conf
cp -p ${PAESDIR}/HALWebPortal/conf/* $HALTMPDIR/SunMC/HALWebPortal/conf > /dev/null 2>&1
fi
fi
SUNMCVERSION=`getInstalledPkgVersion SUNWesagt`
${ECHO} "SunMC Version:          ${SUNMCVERSION}" >> $HALTMPDIR/summary.txt
checkPatches
${ECHO} "ESROOT KB free space:   `df -kl ${PAESROOT} | grep -iv avail | awk '{print $4, $5}'` used" >> $HALTMPDIR/summary.txt
${ECHO} "ESDIR KB free space:    `df -kl ${PAESDIR} | grep -iv avail | awk '{print $4, $5}'` used" >> $HALTMPDIR/summary.txt
checkStickyBit
checkExecutables
checkPAESDIR
checkModules
solaris10Services
;;
esac
}
getPADiagInfo ()
{
case "${OS}" in
Linux)
$ECHO "  -archiving PrimeAlert Agent listing..."
cd ${PAESROOT}
find .  > $HALTMPDIR/details/PA-ES-ROOT.listing.txt
ls -lFR ${PAESROOT} > $HALTMPDIR/details/PA-ES-ROOT.dir.listing.txt
cd ${PAESDIR}
find . > $HALTMPDIR/details/PA-ES-DIR.listing.txt
ls -lFR ${PAESDIR} > $HALTMPDIR/details/PA-ES-DIR.dir.listing.txt
mkdir -p $HALTMPDIR/PA/cfg
mkdir -p $HALTMPDIR/PA/log
mkdir -p $HALTMPDIR/PA/install
mkdir -p $HALTMPDIR/PA/uninstall
mkdir -p $HALTMPDIR/PA/bin

cd ${PAESDIR}
${ECHO} "  -archiving PrimeAlert Agent configuration..."
cp -p ${PAESDIR}/cfg/* $HALTMPDIR/PA/cfg > /dev/null 2>&1
cp -pR ${PAESDIR}/install $HALTMPDIR/PA > /dev/null 2>&1
cp -pR ${PAESDIR}/uninstall $HALTMPDIR/PA > /dev/null 2>&1
cp -pR ${PAESDIR}/bin $HALTMPDIR/PA > /dev/null 2>&1
cd ${PAESDIR}
${ECHO} "  -archiving PrimeAlert Agent interface binding..."
DOMAINHOSTNAME=`${XGET} ${PAESDIR}/cfg/domain-config.x agent.agentServer`
DOMAINIP=`arp ${DOMAINHOSTNAME} | awk '{print $2}' | sed 's/(//g' | sed 's/)//g'`
$ECHO "domain-config.x Agent Hostname: ${DOMAINHOSTNAME} IP: ${DOMAINIP}" >> $HALTMPDIR/details/iface.txt
${ECHO} "  -archiving PrimeAlert Agent logfiles..."
cd ${PAESDIR}/log
for logfile in `/bin/ls -1 *`
do
if [ -f $logfile ]
then
cp -p $logfile $HALTMPDIR/PA/log
fi
done
${ECHO} "PAROOT KB free space:   `df -kl ${PAESROOT} | grep -iv avail | awk '{print $4, $5}'` used" >> $HALTMPDIR/summary.txt
${ECHO} "PADIR KB free space:    `df -kl ${PAESDIR} | grep -iv avail | awk '{print $4, $5}'` used" >> $HALTMPDIR/summary.txt
checkExecutables
checkPAESDIR
checkModules
;;
esac
}
getHNMSDiagInfo ()
{
${ECHO} "  -gathering diagnostics for Halcyon Neuron Management Suite..."
${ECHO} "${HNMSROOT} KB free space:   `df -kl ${HNMSROOT} | grep -iv avail | awk '{print $4, $5}'` used" >> $HALTMPDIR/summary.txt
${ECHO} "${HNMSLOCALDIR} KB free space:    `df -kl ${HNMSLOCALDIR} | grep -iv avail | awk '{print $4, $5}'` used" >> $HALTMPDIR/summary.txt
mkdir -p $HALTMPDIR/HNMS
mkdir -p $HALTMPDIR/HNMS/db_outputs
mkdir -p $HALTMPDIR/HNMS/install
cp -pR ${HNMSLOCALDIR}/logs $HALTMPDIR/HNMS/logs
cp -p ${HNMSLOCALDIR}/install/*log $HALTMPDIR/HNMS/install/
cp -pR ${HNMSLOCALDIR}/conf $HALTMPDIR/HNMS/conf
if [ -x ${HNMSROOT}/bin/NeuronDiagnostics ]
then
${ECHO} "  -gathering database diagnostics for Halcyon Neuron Management Suite..."
for db in ${HNMS_DATABASES}
do
${HNMSROOT}/bin/NeuronDiagnostics ${db} > $HALTMPDIR/HNMS/db_outputs/${db}.txt
done
else
${ECHO} "  -cannot gather database diagnostics for Halcyon Neuron Management Suite."
touch ${HALTMPDIR}/HNMS/db_outputs/COULD_NOT_GET_DB_DATA
fi
}
getNeuronAgentInfo ()
{
${ECHO} "  -gathering diagnostics for Halcyon Neuron Agent..."
${ECHO} "${NAROOT} KB free space:   `df -kl ${NAROOT} | grep -iv avail | awk '{print $4, $5}'` used" >> $HALTMPDIR/summary.txt
${ECHO} "${NALOCALDIR} KB free space:    `df -kl ${NALOCALDIR} | grep -iv avail | awk '{print $4, $5}'` used" >> $HALTMPDIR/summary.txt
mkdir -p $HALTMPDIR/NA
mkdir -p $HALTMPDIR/NA/install
cp -pR ${NALOCALDIR}/log $HALTMPDIR/NA/log
cp -p ${NALOCALDIR}/install/*log $HALTMPDIR/NA/install/
cp -pR ${NALOCALDIR}/cfg $HALTMPDIR/NA/cfg
cp -pR ${NALOCALDIR}/bin $HALTMPDIR/NA/bin
}
compressAndCleanUp ()
{
${ECHO} "  -creating tar file..."
cd `dirname $HALTMPDIR`
ht=`basename $HALTMPDIR`
tar -cf ${HALTARFILE} $ht 2>/dev/null
${ECHO} "  -compressing tar file..."
GZIP=`which gzip | grep -v  ' no ' | grep -v ' not '`
BZIP2=`which bzip2 | grep -v  ' no ' | grep -v ' not '`
if [ "${BZIP2}" != "" ]; then
${BZIP2} -9 ${HALTARFILE}
EXT="bz2"
elif [ "${GZIP}" != "" ]; then
${GZIP} -9 ${HALTARFILE}
EXT="gz"
else
compress ${HALTARFILE}
EXT="Z"
fi
rm -rf $HALTMPDIR
${ECHO} ""
${ECHO} "Diagnostic completed..."
${ECHO} "Diagnostic information stored in:"
${ECHO} ""
${ECHO} "       ${HALTARFILE}.${EXT}"
${ECHO} ""
${ECHO} "Please upload this archive to http://www.halcyoninc.com/support/upload/ and notify your Halcyon Support Representative."
${ECHO} ""
}
cleanup()
{
if [ -d ${HALTMPDIR} ]
then
${ECHO} "Cleaning up....."
rm -rf ${HALTMPDIR}
fi
}
setDebugChannels() 
{
if [ "${ARG2}" != "on" -a "${ARG2}" != "off" ]; then
${ECHO} "\nDon't know what to do..."
${ECHO} "The second argument should be 'on' or 'off'\n"
return
fi
case "${OS}" in
SunOS)    
INTERFACE_PATH=${PAESDIR}/cfg:${PAESROOT}/base/cfg
export INTERFACE_PATH
defaultChannels=`${XGET} ${PAESROOT}/base/cfg/base-config.x agent.activeChannels`
defaultOutput=`${XGET} ${PAESROOT}/base/cfg/base-config.x agent.defaultOutput`
;;
Linux)
INTERFACE_PATH=${PAESDIR}/cfg
export INTERFACE_PATH
defaultChannels=`${XGET} ${PAESROOT}/cfg/base-config.x agent.activeChannels`
defaultOutput=`${XGET} ${PAESROOT}/cfg/base-config.x agent.defaultOutput`
;;
esac
if [ "$ARG2" = "on" ]; then
activeChannels=`${XGET} ${PAESDIR}/cfg/domain-config.x agent.activeChannels`
${XPUT} ${PAESDIR}/cfg/domain-config.x agent.activeChannelsOld "${activeChannels}"
if [ "${activeChannels}" = "" ]
then
activeChannels="${defaultChannels} debug trace"
else
activeChannels=`$ECHO "${activeChannels}" | sed -e 's/ *debug */ /g' -e 's/ *trace */ /g'`
activeChannels="${activeChannels} debug trace"
fi
${ECHO} "Enabling log channels: ${activeChannels}"
${XPUT} ${PAESDIR}/cfg/domain-config.x agent.activeChannels "${activeChannels}"
output=`${XGET} ${PAESDIR}/cfg/domain-config.x agent.defaultOutput`
${XPUT} ${PAESDIR}/cfg/domain-config.x agent.defaultOutputOld "${output}"
if [ "${output}" = "" ]
then
output="${defaultOutput}"
fi
output=`$ECHO "${output}" | sed -e 's/lines=[0-9]*/lines=5000/'`
${XPUT} ${PAESDIR}/cfg/domain-config.x agent.defaultOutput "${output}"
else
activeChannelsOld=`${XGET} ${PAESDIR}/cfg/domain-config.x agent.activeChannelsOld`
if [ "${activeChannelsOld}" = "" ]
then
activeChannelsOld="${defaultChannels}"
fi
activeChannels=`$ECHO "${activeChannelsOld}" | sed -e 's/ *debug */ /g' -e 's/ *trace */ /g'`
${ECHO} "Enabling log channels: ${activeChannels}"
${XPUT} ${PAESDIR}/cfg/domain-config.x agent.activeChannels "${activeChannels}"
output=`${XGET} ${PAESDIR}/cfg/domain-config.x agent.defaultOutputOld`
if [ "${output}" = "" ]; then
output="${defaultOutput}"
fi
${XPUT} ${PAESDIR}/cfg/domain-config.x agent.defaultOutput "${output}"
fi
}
whichEcho
parseCommandLine $*
checkRoot
trap 'cleanup; exit 1' 1 2 13 14 15 16 17 20 21 22 24 26 27 28 29 32 33 34 35
InitializeParameters
checkUtilities
if [ "${FUNCTION}" = "Kill" ]
then

sleep 5
pids=`/usr/bin/ps -eo pid,args | grep -v grep | grep "halsnmpgetv2 -h $KILL_HOST -p $KILL_PORT" |awk '{print $1}'`
for pid in `echo $pids | awk '{print $1}'`
do
kill -9 $pid
done
exit 0
fi

if [ "${FUNCTION}" = "Diagnostic" ]; then
queryUser -d

createTempDir
getCommonDiagInfo 
if [ "${SUNMC_INSTALLED}" = "TRUE" ]
then
getSunMCDiagInfo
fi
if [ "${PA_INSTALLED}" = "TRUE" ]
then
getPADiagInfo
fi
if [ "${HNMS_INSTALLED}" = "TRUE" ]
then
getHNMSDiagInfo
fi
if [ "${NA_INSTALLED}" = "TRUE" ]
then
getNeuronAgentInfo
fi
compressAndCleanUp
elif [ "${FUNCTION}" = "Inv" ]; then
queryUser -i
if [ "$USE_SNMPV2" -eq 1 ]
then
getUserInfo
fi
checkEnginesFile
getLocalAgentConfig
printHeaders
queryAgents
else
$ECHO "This feature is not supported."
$ECHO "Aborting..."
exit 1    
fi
exit 0

