730 lines
19 KiB
Bash
Executable File
730 lines
19 KiB
Bash
Executable File
#! /sbin/sh
|
|
#
|
|
#ident "$Revision: 1.2 $"
|
|
#
|
|
# This script should not be executed after boot because it
|
|
# may report system reboot and cause confusion.
|
|
#
|
|
|
|
#
|
|
# availmon/amstart uses /var/adm/avail directory,
|
|
# and /var/adm/avail/availlog for logging info
|
|
#
|
|
|
|
CMD=$0
|
|
AMRVERSIONNUM=2.1
|
|
AVAILDIR=/var/adm/avail
|
|
SAVEDIR=$AVAILDIR/.save
|
|
CONFIGDIR=$AVAILDIR/config
|
|
USRETCDIR=/usr/etc
|
|
OPTIONS=`cat /etc/config/savecore.options 2> /dev/null`
|
|
CRASHDIR=""
|
|
if [ "$OPTIONS" != "" ] ; then
|
|
for DIR in $OPTIONS ; do
|
|
if [ -d "$DIR" ] ; then
|
|
CRASHDIR=$DIR
|
|
fi
|
|
done
|
|
if [ "$CRASHDIR" = "" ] ; then
|
|
CRASHDIR=/var/adm/crash
|
|
fi
|
|
else
|
|
CRASHDIR=/var/adm/crash
|
|
fi
|
|
|
|
AMREGISTER=$USRETCDIR/amregister
|
|
AMCONFIG=$USRETCDIR/amconfig
|
|
AMSYSINFO=$USRETCDIR/amsysinfo
|
|
AMNOTIFY=$USRETCDIR/amnotify
|
|
AMSYSLOG=$USRETCDIR/amsyslog
|
|
AMTIME1970=$USRETCDIR/amtime1970
|
|
AMTICKERD=$USRETCDIR/amtickerd
|
|
|
|
TICKFILE=$AVAILDIR/lasttick
|
|
TICKDURATION=300
|
|
|
|
AMSYSLOGFILE=$CRASHDIR/syslog
|
|
SYSLOGDCONF=/etc/syslog.conf
|
|
|
|
if [ -f "$SYSLOGDCONF" ] ; then
|
|
SYSLOGFILE=`cat $SYSLOGDCONF | grep -v "^#" | grep amfilter | tail -1 | awk '{print $NF}' 2>/dev/null`
|
|
if [ "z$SYSLOGFILE" = "z" -o ! -f "$SYSLOGFILE" ] ; then
|
|
SYSLOGFILE=/var/adm/SYSLOG
|
|
fi
|
|
else
|
|
SYSLOGFILE=/var/adm/SYSLOG
|
|
fi
|
|
|
|
# Use SYSLOGFILE to generate OSYSLOGFILE
|
|
OSYSLOGFILE=`dirname $SYSLOGFILE`\/o`basename $SYSLOGFILE`
|
|
LASTSYSLOG=$SAVEDIR/lastsyslog
|
|
|
|
LOGFILE=$AVAILDIR/availlog
|
|
PREVSTARTFILE=$SAVEDIR/prevstart
|
|
EVENTFILE=$SAVEDIR/event
|
|
SUEVENTFILE=$SAVEDIR/suevent
|
|
SCRATCHFILE=$AVAILDIR/init.scratch
|
|
CRASHLOGFILE=$CRASHDIR/crashlog
|
|
|
|
SINCE1970=`$AMTIME1970`
|
|
SINCE1970DATE=`$AMTIME1970 -d $SINCE1970`
|
|
BOUND=-1
|
|
|
|
AUTOEMAIL=$CONFIGDIR/autoemail
|
|
TICKERDFILE=$CONFIGDIR/tickerd
|
|
AUTOEMAILLIST=$CONFIGDIR/autoemail.list
|
|
|
|
AVAILREPFILE=$CRASHDIR/availreport
|
|
DIAGREPFILE=$CRASHDIR/diagreport
|
|
PAGERREPFILE=$CRASHDIR/pagerreport
|
|
|
|
TMPFILE=$CRASHDIR/tmpfile
|
|
DIFFFILE=$CRASHDIR/difffile
|
|
TMPSORTFILE=$CRASHDIR/tmpsortfile
|
|
|
|
PLATFORM=`uname -m`
|
|
SERIALNUM=""
|
|
if $AMCONFIG hinvupdate ; then
|
|
HINVUPDATE=1
|
|
else
|
|
HINVUPDATE=0
|
|
fi
|
|
|
|
comparefile() {
|
|
# arg: $1 = saved configuration file
|
|
# $2 = configuration file to be compared
|
|
# ret: 0 = files are different
|
|
# 1 = $1 missing or files are the same
|
|
|
|
if [ ! -f $SAVEDIR/$1 ] ; then
|
|
return 1
|
|
fi
|
|
|
|
if [ ! -f $2 ] ; then
|
|
echo "System configuration file $2 is missing!!"
|
|
echo "Please try re-installing it"
|
|
logger -t availmon -p err -i availmon config file $2 is missing
|
|
return 1
|
|
fi
|
|
|
|
diff $SAVEDIR/$1 $2 > /dev/null
|
|
if [ $? -ne 0 ] ; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
compareandsavefile() {
|
|
# arg: $1 = saved configuration file
|
|
# $2 = configuration file to be compared
|
|
# ret: 0 = files are different
|
|
# 1 = files are the same
|
|
|
|
diff $SAVEDIR/$1 $2 > $DIFFFILE
|
|
if [ $? -ne 0 ] ; then
|
|
cp $2 $SAVEDIR/$1
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
checkandappend() {
|
|
# due to hinv's bug that cannot generate hinv output in a special
|
|
# order, availmon needs to sort hinv's output and then compare with
|
|
# saved sorted data
|
|
|
|
if [ "$1" = "hinv" ] ; then
|
|
if [ -x $3 ] ; then
|
|
if [ ! -f $SAVEDIR/$1 ] ; then
|
|
touch $SAVEDIR/$1
|
|
fi
|
|
if [ ! -f $SAVEDIR/$1.sort ] ; then
|
|
touch $SAVEDIR/$1.sort
|
|
fi
|
|
$3 $4 $5 $6 $7 > $TMPFILE
|
|
sort $TMPFILE > $TMPSORTFILE
|
|
if compareandsavefile $1.sort $TMPSORTFILE ; then
|
|
NOINSTE=0
|
|
diff $SAVEDIR/$1 $TMPFILE > $DIFFFILE
|
|
cp $TMPFILE $SAVEDIR/$1
|
|
echo "$2|Begin" >> $DIAGREPFILE
|
|
cat $TMPFILE >> $DIAGREPFILE
|
|
echo "$2|End" >> $DIAGREPFILE
|
|
echo "$2|Begin" >> $LOGFILE
|
|
cat $DIFFFILE >> $LOGFILE
|
|
echo "$2|End" >> $LOGFILE
|
|
fi
|
|
fi
|
|
elif [ -x $3 ] ; then
|
|
if [ ! -f $SAVEDIR/$1 ] ; then
|
|
touch $SAVEDIR/$1
|
|
fi
|
|
$3 $4 $5 $6 $7 > $TMPFILE
|
|
if compareandsavefile $1 $TMPFILE ; then
|
|
NOINSTE=0
|
|
echo "$2|Begin" >> $DIAGREPFILE
|
|
cat $TMPFILE >> $DIAGREPFILE
|
|
echo "$2|End" >> $DIAGREPFILE
|
|
echo "$2|Begin" >> $LOGFILE
|
|
cat $DIFFFILE >> $LOGFILE
|
|
echo "$2|End" >> $LOGFILE
|
|
fi
|
|
fi
|
|
}
|
|
|
|
#
|
|
# generate diag report
|
|
#
|
|
gendiagrep() {
|
|
NOINSTE=1
|
|
if [ $BOUND -ge 0 ] ; then
|
|
NOINSTE=0
|
|
if [ -f $CRASHDIR/analysis.$BOUND ] ; then
|
|
echo "ICRASH|Begin" >> $DIAGREPFILE
|
|
cat $CRASHDIR/analysis.$BOUND >> $DIAGREPFILE
|
|
echo "ICRASH|End" >> $DIAGREPFILE
|
|
fi
|
|
echo "SYSLOG|Begin" >> $DIAGREPFILE
|
|
if [ -f $AMSYSLOGFILE ] ; then
|
|
tail -700 $AMSYSLOGFILE >> $DIAGREPFILE
|
|
else
|
|
$AMSYSLOG -S $SYSLOGFILE -O $OSYSLOGFILE >> $AMSYSLOGFILE
|
|
tail -700 $AMSYSLOGFILE >> $DIAGREPFILE
|
|
fi
|
|
echo "SYSLOG|End" >> $DIAGREPFILE
|
|
elif [ $EVENTCODE -eq -5 -o $EVENTCODE -eq -6 -o $EVENTCODE -eq -14 ] ; then
|
|
NOINSTE=0
|
|
echo "SYSLOG|Begin" >> $DIAGREPFILE
|
|
if [ -f $AMSYSLOGFILE ] ; then
|
|
tail -1000 $AMSYSLOGFILE >> $DIAGREPFILE
|
|
else
|
|
$AMSYSLOG -S $SYSLOGFILE -O $OSYSLOGFILE >> $AMSYSLOGFILE
|
|
tail -1000 $AMSYSLOGFILE >> $DIAGREPFILE
|
|
fi
|
|
echo "SYSLOG|End" >> $DIAGREPFILE
|
|
fi
|
|
|
|
set `/sbin/stat -mq /var/inst/hist $SAVEDIR/versions 2>/dev/null` >/dev/null
|
|
if [ ! -r $SAVEDIR/versions -o \( "$2" -a "$1" -gt "$2" \) ] ; then
|
|
checkandappend versions VERSIONS /usr/sbin/versions -n eoe.sw.base support.sw.fru "patchSG*"
|
|
touch $SAVEDIR/versions
|
|
fi
|
|
if [ $HINVUPDATE -eq 1 ] ; then
|
|
checkandappend hinv HINV /usr/bin/hinv -mvv
|
|
checkandappend gfxinfo GFXINFO /usr/gfx/gfxinfo -vv
|
|
else
|
|
echo "HINV|Begin\nunknown\nHINV|End" >> $DIAGREPFILE
|
|
echo "GFXINFO|Begin\nunknown\nGFXINFO|End" >> $DIAGREPFILE
|
|
fi
|
|
return $NOINSTE
|
|
}
|
|
|
|
getid() {
|
|
OLDID=""
|
|
HOSTNAME=`$AMSYSINFO -n`
|
|
if [ "$HOSTNAME" = "unknown" ] ; then
|
|
logger -t availmon -p err -i cannot get hostname
|
|
if [ -f $SAVEDIR/hostname ] ; then
|
|
HOSTNAME=`cat $SAVEDIR/hostname`
|
|
fi
|
|
else
|
|
if [ -f $SAVEDIR/hostname ] ; then
|
|
HOSTNAME1=`cat $SAVEDIR/hostname`
|
|
if [ "$HOSTNAME" != "$HOSTNAME1" ] ; then
|
|
echo "$HOSTNAME" > $SAVEDIR/hostname
|
|
if [ "$HOSTNAME1" != "unknown" ] ; then
|
|
OLDID="OLDHOSTNAME|$HOSTNAME1"
|
|
fi
|
|
fi
|
|
else
|
|
echo "$HOSTNAME" > $SAVEDIR/hostname
|
|
fi
|
|
fi
|
|
|
|
SERIALNUM=`$AMSYSINFO -s`
|
|
if [ "$SERIALNUM" = "unknown" ] ; then
|
|
case $PLATFORM in
|
|
IP19 | IP21 | IP22 | IP25 | IP26 | IP27 | IP28 | IP30 | IP32)
|
|
echo -n "$CMD: Warning: the machine-readable serial number,"
|
|
echo "$SERIALNUM, is invalid."
|
|
echo "Please contact SGI support to correct it."
|
|
logger -t availmon -p err -i the machine-readable serial number is invalid
|
|
;;
|
|
esac
|
|
if [ -f $SAVEDIR/serialnum ] ; then
|
|
SERIALNUM=`cat $SAVEDIR/serialnum`
|
|
$AMSYSINFO -s $SERIALNUM > /dev/null
|
|
if [ $? -ne 0 ] ; then
|
|
echo "$CMD: Warning: the saved serial number, $SERIALNUM,"
|
|
echo " is invalid."
|
|
logger -t availmon -p warning -i the saved serial number is invalid
|
|
fi
|
|
fi
|
|
else
|
|
if [ $HINVUPDATE -eq 1 ] ; then
|
|
if [ -f $SAVEDIR/serialnum ] ; then
|
|
SERIALNUM1=`cat $SAVEDIR/serialnum`
|
|
if [ "$SERIALNUM" != "$SERIALNUM1" ] ; then
|
|
if $AMSYSINFO -s $SERIALNUM1 > /dev/null ; then
|
|
echo -n "$CMD: Warning: the saved serial number,"
|
|
echo "$SERIALNUM1, is different from"
|
|
echo " the machine-readable serial number, $SERIALNUM."
|
|
echo "Use the machine-readable one."
|
|
logger -t availmon -p warning -i the saved serial number is different from the machine-readable one
|
|
else
|
|
echo -n "$CMD: Warning: the saved serial number,"
|
|
echo "$SERIALNUM1, is invalid."
|
|
echo "Use the machine-readable serial number, $SERIALNUM."
|
|
echo "$SERIALNUM" > $SAVEDIR/serialnum
|
|
logger -t availmon -p warning -i the saved serial number is invalid
|
|
fi
|
|
echo "$SERIALNUM" > $SAVEDIR/serialnum
|
|
if [ "$SERIALNUM1" != "unknown" ] ; then
|
|
if [ "$OLDID" != "" ] ; then
|
|
OLDID="OLDSERIALNUM|$SERIALNUM1\n$OLDID"
|
|
else
|
|
OLDID="OLDSERIALNUM|$SERIALNUM1"
|
|
fi
|
|
fi
|
|
fi
|
|
else
|
|
echo "$SERIALNUM" > $SAVEDIR/serialnum
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ "$OLDID" != "" ] ; then
|
|
echo "SERIALNUM|$SERIALNUM" > $AVAILREPFILE
|
|
echo "HOSTNAME|$HOSTNAME" >> $AVAILREPFILE
|
|
echo "AMRVERSION|$AMRVERSIONNUM" >> $AVAILREPFILE
|
|
echo "UNAME|`uname -Ra`" >> $AVAILREPFILE
|
|
echo "EVENT|-18|$SINCE1970|$SINCE1970DATE" >> $AVAILREPFILE
|
|
echo "EVENT|-18|$SINCE1970|$SINCE1970DATE" >> $LOGFILE
|
|
echo "$OLDID" >> $AVAILREPFILE
|
|
echo "$OLDID" >> $LOGFILE
|
|
MSG="SUMMARY|Begin\n$OLDID\nSUMMARY|End"
|
|
echo "$MSG" >> $AVAILREPFILE
|
|
echo "$MSG" >> $LOGFILE
|
|
if $AMCONFIG autoemail -s ; then
|
|
$AMNOTIFY -c $AUTOEMAILLIST -a $AVAILREPFILE -i $AVAILREPFILE -r
|
|
fi
|
|
fi
|
|
}
|
|
|
|
geteventname() {
|
|
# arg: $1: event code
|
|
# $2: pager report file
|
|
|
|
case $1 in
|
|
-3)
|
|
MSG="Panic"
|
|
;;
|
|
-4)
|
|
MSG="Panic (H/W)"
|
|
;;
|
|
-5)
|
|
MSG="Interrupt"
|
|
;;
|
|
-6)
|
|
MSG="System off"
|
|
;;
|
|
-7)
|
|
MSG="Power failure"
|
|
;;
|
|
-8)
|
|
MSG="Deregistration"
|
|
;;
|
|
-9)
|
|
MSG="Registration"
|
|
;;
|
|
-10)
|
|
MSG="No error"
|
|
;;
|
|
-11)
|
|
MSG="Hardware error"
|
|
;;
|
|
-12)
|
|
MSG="Software error"
|
|
;;
|
|
-13)
|
|
MSG="Status report"
|
|
;;
|
|
-14)
|
|
MSG="Panic (S/W)"
|
|
;;
|
|
-15)
|
|
MSG="NMI"
|
|
;;
|
|
-16)
|
|
MSG="System reset"
|
|
;;
|
|
-17)
|
|
MSG="Power cycle"
|
|
;;
|
|
-18)
|
|
MSG="System ID change"
|
|
;;
|
|
*)
|
|
MSG="Controlled shutdown"
|
|
;;
|
|
esac
|
|
echo "$MSG" >> $2
|
|
}
|
|
|
|
|
|
#
|
|
# check for improper installation and corruption
|
|
#
|
|
|
|
if [ ! -d $AVAILDIR ] ; then
|
|
echo "\n$CMD: ERROR: cannot find directory $AVAILDIR"
|
|
echo "Please try re-installing availmon\n"
|
|
logger -t availmon -p err -i cannot find directory $AVAILDIR
|
|
exit
|
|
elif [ ! -x $AMREGISTER -o ! -x $AMNOTIFY -o ! -x $AMSYSLOG -o ! -x $AMTICKERD \
|
|
-o ! -x $AMTIME1970 -o ! -x $AMSYSINFO -o ! -x $AMCONFIG ] ; then
|
|
echo "\n$CMD: ERROR: executable files corrupted"
|
|
echo "Please try re-installing availmon\n"
|
|
logger -t availmon -p err -i executable files corrupted
|
|
exit
|
|
elif [ ! -d $SAVEDIR ] ; then
|
|
|
|
#
|
|
# create .save directory at the first time reboot
|
|
# of the first installation of availmon
|
|
#
|
|
mkdir $SAVEDIR
|
|
if [ -f $CRASHDIR/bounds ] ; then
|
|
cp $CRASHDIR/bounds $SAVEDIR/bounds
|
|
else
|
|
echo "0" > $SAVEDIR/bounds
|
|
fi
|
|
$AMSYSINFO -s > $SAVEDIR/serialnum
|
|
$AMSYSINFO -n > $SAVEDIR/hostname
|
|
MSG=`$AMTIME1970 -i`
|
|
echo "PREV$MSG" > $PREVSTARTFILE
|
|
if [ ! -f $LOGFILE ] ; then
|
|
echo "$MSG" > $LOGFILE
|
|
fi
|
|
if [ -f $SYSLOGFILE ] ; then
|
|
tail -1 $SYSLOGFILE > $LASTSYSLOG
|
|
fi
|
|
if [ -x /usr/bin/hinv ] ; then
|
|
/usr/bin/hinv -mvv > $SAVEDIR/hinv
|
|
sort $SAVEDIR/hinv > $SAVEDIR/hinv.sort
|
|
fi
|
|
if [ -x /usr/sbin/versions ] ; then
|
|
/usr/sbin/versions -n eoe.sw.base support.sw.fru "patchSG*" > $SAVEDIR/versions
|
|
fi
|
|
if [ -x /usr/gfx/gfxinfo ] ; then
|
|
/usr/gfx/gfxinfo -vv > $SAVEDIR/gfxinfo
|
|
fi
|
|
cp $CONFIGDIR/autoemail $SAVEDIR
|
|
cp $CONFIGDIR/autoemail.list $SAVEDIR
|
|
|
|
# if tickerd is on, use user-level daemon
|
|
if $AMCONFIG tickerd ; then
|
|
$AMTICKERD $TICKFILE $TICKDURATION &
|
|
else
|
|
rm -f $TICKFILE
|
|
fi
|
|
rm -f $AVAILDIR/install.sh /etc/init.d/avail /etc/rc0.d/K05avail
|
|
rm -f /etc/rc2.d/S95avail /etc/config/avail /etc/config/availmon
|
|
exit
|
|
fi
|
|
|
|
#
|
|
# Start processing
|
|
#
|
|
|
|
if [ -f $AVAILDIR/install.sh ] ; then
|
|
$AVAILDIR/install.sh
|
|
rm -f $AVAILDIR/install.sh
|
|
fi
|
|
|
|
getid
|
|
LASTTICK=`cat $TICKFILE 2> /dev/null`
|
|
LASTTICK=${LASTTICK:=-1}
|
|
if [ $LASTTICK -ge 0 ] ; then
|
|
LASTTICKDATE=`$AMTIME1970 -d $LASTTICK`
|
|
else
|
|
LASTTICKDATE="unknown"
|
|
fi
|
|
|
|
# if tickerd is on, use user-level daemon
|
|
if $AMCONFIG tickerd ; then
|
|
$AMTICKERD $TICKFILE $TICKDURATION &
|
|
else
|
|
rm -f $TICKFILE
|
|
fi
|
|
|
|
if [ -f $SAVEDIR/autoemail ] ; then
|
|
if comparefile autoemail $CONFIGDIR/autoemail ; then
|
|
if $AMCONFIG autoemail -s ; then
|
|
$AMREGISTER -d -c $SAVEDIR/autoemail.list
|
|
cp $CONFIGDIR/autoemail $SAVEDIR/autoemail
|
|
cp $CONFIGDIR/autoemail.list $SAVEDIR/autoemail.list
|
|
else
|
|
$AMREGISTER -r -c $CONFIGDIR/autoemail.list
|
|
cp $CONFIGDIR/autoemail $SAVEDIR/autoemail
|
|
cp $CONFIGDIR/autoemail.list $SAVEDIR/autoemail.list
|
|
fi
|
|
else
|
|
if comparefile autoemail.list $CONFIGDIR/autoemail.list ; then
|
|
$AMCONFIG -k
|
|
fi
|
|
fi
|
|
else
|
|
cp $CONFIGDIR/autoemail $SAVEDIR/autoemail
|
|
cp $CONFIGDIR/autoemail.list $SAVEDIR/autoemail.list
|
|
if $AMCONFIG autoemail ; then
|
|
$AMREGISTER -r
|
|
fi
|
|
fi
|
|
|
|
if [ -f $CRASHDIR/bounds ] ; then
|
|
if [ -f $SAVEDIR/bounds ] ; then
|
|
diff $SAVEDIR/bounds $CRASHDIR/bounds > /dev/null
|
|
if [ $? -ne 0 ] ; then
|
|
BOUND=`cat $SAVEDIR/bounds`
|
|
cp $CRASHDIR/bounds $SAVEDIR/bounds
|
|
SUMMARYFILE=$CRASHDIR/summary.$BOUND
|
|
FRUFILE=$CRASHDIR/fru.$BOUND
|
|
AMSYSLOGFILE=$CRASHDIR/syslog.$BOUND
|
|
fi
|
|
else
|
|
cp $CRASHDIR/bounds $SAVEDIR/bounds
|
|
fi
|
|
else
|
|
echo "0" > $SAVEDIR/bounds
|
|
fi
|
|
|
|
HEADER="SERIALNUM|$SERIALNUM\nHOSTNAME|$HOSTNAME\nAMRVERSION|$AMRVERSIONNUM\nUNAME|`uname -Ra`"
|
|
echo "$HEADER" > $AVAILREPFILE
|
|
echo "$HEADER" > $DIAGREPFILE
|
|
PHEADER="$HOSTNAME|"
|
|
echo "$PHEADER" > $PAGERREPFILE
|
|
if [ -f $PREVSTARTFILE ] ; then
|
|
PSMSG=`cat $PREVSTARTFILE`
|
|
elif [ -f $LOGFILE ] ; then
|
|
PSMSG=`grep '^START|' $LOGFILE | tail -1`
|
|
else
|
|
echo "\nERROR: $CMD: availlog and saved data were corrupted!!"
|
|
echo "Please check file system\n"
|
|
MSG="START|$SINCE1970|$SINCE1970DATE"
|
|
echo "$MSG" > $LOGFILE
|
|
PSMSG="PREV$MSG"
|
|
fi
|
|
|
|
EXTRASUEVENT=0
|
|
if [ -f $SUEVENTFILE ] ; then
|
|
#
|
|
# check if system boot time is later than single-user shutdown
|
|
# if yes, there is another shutdown/crash event
|
|
#
|
|
BOOTTIME=`$AMTIME1970 -i | cut -f2 -d'|'`
|
|
EVENTLINE=`cat $SUEVENTFILE`
|
|
EVENTTIME=`echo $EVENTLINE | cut -f3 -d'|'`
|
|
if [ $BOOTTIME -ge $EVENTTIME ] ; then
|
|
EXTRASUEVENT=1
|
|
cp -f $AVAILREPFILE $AVAILREPFILE.su
|
|
cp -f $DIAGREPFILE $DIAGREPFILE.su
|
|
cp -f $PAGERREPFILE $PAGERREPFILE.su
|
|
echo "$PSMSG" >> $AVAILREPFILE.su
|
|
echo "$PSMSG" >> $DIAGREPFILE.su
|
|
echo "$EVENTLINE" >> $LOGFILE
|
|
echo "$EVENTLINE" >> $AVAILREPFILE.su
|
|
echo "$EVENTLINE" >> $DIAGREPFILE.su
|
|
EVENTCODE=`echo $EVENTLINE | cut -f2 -d'|'`
|
|
geteventname $EVENTCODE $PAGERREPFILE.su
|
|
MSG="LASTTICK|$LASTTICK|$LASTTICKDATE"
|
|
echo "$MSG" >> $LOGFILE
|
|
echo "$MSG" >> $AVAILREPFILE.su
|
|
echo "$MSG" >> $DIAGREPFILE.su
|
|
LASTTICK=-1
|
|
LASTTICKDATE="unknown"
|
|
STATUSINTERVAL=`cat $CONFIGDIR/statusinterval 2> /dev/null`
|
|
echo "STATUSINTERVAL|$STATUSINTERVAL" >> $AVAILREPFILE.su
|
|
echo "STATUSINTERVAL|$STATUSINTERVAL" >> $DIAGREPFILE.su
|
|
else
|
|
echo "$PSMSG" >> $AVAILREPFILE
|
|
echo "$PSMSG" >> $DIAGREPFILE
|
|
mv $SUEVENTFILE $EVENTFILE
|
|
fi
|
|
else
|
|
echo "$PSMSG" >> $AVAILREPFILE
|
|
echo "$PSMSG" >> $DIAGREPFILE
|
|
fi
|
|
|
|
#
|
|
# check coredump first - report crash if system crashes after
|
|
# controlled shutdown
|
|
#
|
|
if [ $BOUND -ge 0 ] ; then
|
|
if [ -f $SUMMARYFILE ] ; then
|
|
if grep 'PANIC STRING' $SUMMARYFILE | grep NMI > /dev/null ; then
|
|
EVENTCODE=-15
|
|
elif [ -f $FRUFILE ] ; then
|
|
cat $FRUFILE >> $SUMMARYFILE
|
|
if grep -i 'FRU ANALY' $FRUFILE > /dev/null ; then
|
|
if grep 'FRU ANALYZER' $FRUFILE | grep -i 'No error' > /dev/null ; then
|
|
EVENTCODE=-14
|
|
elif grep -i 'SOFTWARE' $FRUFILE > /dev/null ; then
|
|
EVENTCODE=-14
|
|
elif grep 'Inconclusive hardware error state' $FRUFILE > /dev/null ; then
|
|
EVENTCODE=-3
|
|
else
|
|
EVENTCODE=-4
|
|
fi
|
|
else
|
|
EVENTCODE=-3
|
|
fi
|
|
else
|
|
EVENTCODE=-3
|
|
fi
|
|
EVENTTIME=`awk '/CRASH TIME/ {print $3}' $SUMMARYFILE`
|
|
EVENTDATE=`awk '/CRASH TIME/ {print $4, $5, $6, $7, $8}' $SUMMARYFILE`
|
|
elif [ -f $CRASHLOGFILE.$BOUND ] ; then
|
|
EVENTDATE=`awk '/crash time/ {print $3, $4, $5, $6, $7}' $CRASHLOGFILE.$BOUND`
|
|
EVENTTIME=`$AMTIME1970 -t $EVENTDATE`
|
|
EVENTCODE=-3
|
|
else
|
|
EVENTTIME=`expr $SINCE1970 - 60`
|
|
EVENTDATE=`$AMTIME1970 -d $EVENTTIME`
|
|
EVENTCODE=-3
|
|
fi
|
|
EVENTLINE="EVENT|$EVENTCODE|$EVENTTIME|$EVENTDATE"
|
|
elif [ -f $EVENTFILE ] ; then
|
|
EVENTLINE=`cat $EVENTFILE`
|
|
EVENTCODE=`echo $EVENTLINE | cut -f2 -d'|'`
|
|
EVENTTIME=`echo $EVENTLINE | cut -f3 -d'|'`
|
|
EVENTDATE=`$AMTIME1970 -d $EVENTTIME`
|
|
else
|
|
$AMSYSLOG -S $SYSLOGFILE -O $OSYSLOGFILE > $AMSYSLOGFILE
|
|
case $PLATFORM in
|
|
IP19 | IP21 | IP25)
|
|
if grep "NMI" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-15
|
|
elif grep "SYSTEM RESET" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-16
|
|
elif grep "POWER CYCLE" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-17
|
|
elif grep "SYSTEM OFF" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-6
|
|
elif grep "POWER FAIL" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-7
|
|
else
|
|
EVENTCODE=-5
|
|
fi
|
|
;;
|
|
IP27)
|
|
if grep "NMI pending" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-15
|
|
elif grep "System reset pending" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-16
|
|
elif grep "Remote power-cycle command" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-17
|
|
elif grep "Module keyswitch turned OFF" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-6
|
|
elif grep "AC power lost" $AMSYSLOGFILE > /dev/null ; then
|
|
EVENTCODE=-7
|
|
else
|
|
EVENTCODE=-5
|
|
fi
|
|
;;
|
|
*)
|
|
EVENTCODE=-5
|
|
;;
|
|
esac
|
|
EVENTLINE="EVENT|$EVENTCODE|-1|unknown"
|
|
EVENTTIME=-1
|
|
EVENTDATE="unknown"
|
|
fi
|
|
|
|
if [ $EXTRASUEVENT -eq 1 ] ; then
|
|
if [ $EVENTTIME -eq -1 ] ; then
|
|
SUSTARTTIME=`expr $SINCE1970 - 60`
|
|
SUSTARTDATE=`$AMTIME1970 -d $SUSTARTTIME`
|
|
MSG="START|$SUSTARTTIME|$SUSTARTDATE|NOTMULTIUSER"
|
|
else
|
|
MSG="START|$EVENTTIME|$EVENTDATE|NOTMULTIUSER"
|
|
fi
|
|
echo "$MSG" >> $AVAILREPFILE.su
|
|
echo "$MSG" >> $DIAGREPFILE.su
|
|
echo "PREV$MSG" >> $AVAILREPFILE
|
|
echo "PREV$MSG" >> $DIAGREPFILE
|
|
|
|
if $AMCONFIG autoemail ; then
|
|
if [ "$SERIALNUM" != "unknown" ] ; then
|
|
$AMNOTIFY -c $AUTOEMAILLIST -a $AVAILREPFILE.su -d $DIAGREPFILE.su -p $PAGERREPFILE.su &
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo $EVENTLINE >> $LOGFILE
|
|
echo $EVENTLINE >> $AVAILREPFILE
|
|
echo $EVENTLINE >> $DIAGREPFILE
|
|
geteventname $EVENTCODE $PAGERREPFILE
|
|
MSG="LASTTICK|$LASTTICK|$LASTTICKDATE"
|
|
echo "$MSG" >> $LOGFILE
|
|
echo "$MSG" >> $AVAILREPFILE
|
|
echo "$MSG" >> $DIAGREPFILE
|
|
STATUSINTERVAL=`cat $CONFIGDIR/statusinterval 2> /dev/null`
|
|
echo "STATUSINTERVAL|$STATUSINTERVAL" >> $AVAILREPFILE
|
|
echo "STATUSINTERVAL|$STATUSINTERVAL" >> $DIAGREPFILE
|
|
SMSG="START|$SINCE1970|$SINCE1970DATE"
|
|
echo "$SMSG" >> $AVAILREPFILE
|
|
echo "$SMSG" >> $DIAGREPFILE
|
|
if [ $BOUND -ge 0 ] ; then
|
|
MSG="BOUND|$BOUND"
|
|
echo "$MSG" >> $LOGFILE
|
|
if [ -f $SUMMARYFILE ] ; then
|
|
echo "SUMMARY|Begin" >> $LOGFILE
|
|
echo "SUMMARY|Begin" >> $AVAILREPFILE
|
|
echo "SUMMARY|Begin" >> $DIAGREPFILE
|
|
echo "SUMMARY|" >> $PAGERREPFILE
|
|
MSG=`grep 'PANIC STRING' $SUMMARYFILE`
|
|
echo "$MSG" >> $LOGFILE
|
|
echo "$MSG" >> $AVAILREPFILE
|
|
echo "$MSG" >> $DIAGREPFILE
|
|
echo "$MSG" >> $PAGERREPFILE
|
|
if [ $EVENTCODE -eq -4 ] ; then
|
|
tail +3 $SUMMARYFILE >> $LOGFILE
|
|
tail +3 $SUMMARYFILE >> $AVAILREPFILE
|
|
tail +3 $SUMMARYFILE >> $DIAGREPFILE
|
|
tail +3 $SUMMARYFILE >> $PAGERREPFILE
|
|
fi
|
|
echo "SUMMARY|End" >> $LOGFILE
|
|
echo "SUMMARY|End" >> $AVAILREPFILE
|
|
echo "SUMMARY|End" >> $DIAGREPFILE
|
|
fi
|
|
fi
|
|
|
|
SIZE=`/sbin/stat -sq $LOGFILE`
|
|
if [ $SIZE -ge 100000 ] ; then
|
|
mv $LOGFILE $AVAILDIR/oavaillog
|
|
echo "$SMSG" > $LOGFILE
|
|
else
|
|
echo "$SMSG" >> $LOGFILE
|
|
fi
|
|
echo "PREV$SMSG" > $PREVSTARTFILE
|
|
|
|
NOTIFYOPTIONS=" -c $AUTOEMAILLIST -a $AVAILREPFILE -p $PAGERREPFILE"
|
|
|
|
if gendiagrep ; then
|
|
NOTIFYOPTIONS="$NOTIFYOPTIONS -i $DIAGREPFILE"
|
|
else
|
|
NOTIFYOPTIONS="$NOTIFYOPTIONS -d $DIAGREPFILE"
|
|
fi
|
|
|
|
if [ "$SERIALNUM" != "unknown" ] ; then
|
|
if $AMCONFIG autoemail ; then
|
|
$AMNOTIFY $NOTIFYOPTIONS &
|
|
fi
|
|
fi
|
|
|
|
tail -1 $SYSLOGFILE > $LASTSYSLOG
|
|
rm -f $SCRATCHFILE $TMPFILE $TMPSORTFILE $DIFFFILE $SUEVENTFILE $EVENTFILE $SUMMARYFILE
|