#!/bin/sh
#
# snap_cmp (Snapshot and Compare)
#
# Usage: snap_cmp CPLBUG
#
# By: Angel Corbera ([email protected])
#
# Purpose: To know which blocks have changed
# their output/status after a CP has been rebooted,
# probably during an On-line upgrade.
# The script will check first if CP is not rebooting.
#
# Procedure:
# Run this script just BEFORE the CP is rebooted.
# It will save current values/status of selected
# blocks (PID controllers, AOUT, etc).
#
# Run this script AGAIN after the CP has rebooted
# completely.
# After getting the new values, the script will
# show ONLY the blocks that have changed their
# output values (AOUT), or Status (M/A, L/R).
#
# MA/LR retrieved from: PID, PIDA, PIDE, PIDX, PIDXE
# RATIO
# OUT values retrieved from: AOUT, AOUTR
#
cd /opt/ac
# Check for argument
CP=$1
if [ $# != 1 ]
then
echo "\n\nUsage: $0 CPLBUG\n\n"
exit 1
fi
#
# Check if CP is rebooting
#
ME=`uname -n`
LOCK=n
echo "Getting $CP host: ... :\c"
HOST=`awk '$1=="'$CP'" {print $2}' /usr/fox/sp/sldb`
echo "$HOST"
echo "Querying $HOST ...\c"
#
if [ $HOST = $ME ]
then
ls -l /usr/fox/sp/locks | grep "$CP+"
if [ $? -eq 0 ]
then
echo "$CP is locked!, \c"
LOCK=y
else
echo "Not locked!, \c"
fi
ls -l /usr/fox/sp/locks | grep "$CP-"
if [ $? -eq 0 ]
then
echo "$CP is REBOOTING!, "
LOCK=y
else
echo "Not rebooting!, "
fi
else
rexec $HOST /usr/bin/ls -l /usr/fox/sp/locks > tmp1
grep "$CP+" tmp1
if [ $? -eq 0 ]
then
echo "$CP is locked!\c"
LOCK=y
else
echo "Not locked!\c"
fi
grep "$CP-" tmp1
if [ $? -eq 0 ]
then
echo "$CP is REBOOTING!"
LOCK=y
else
echo "Not rebooting!"
fi
fi
if [ $LOCK = y ]
then
echo "$CP is locked or rebooting. Exiting!"
exit 1
else
echo "$CP is NOT locked, nor rebooting. Continuing."
fi
echo "\nDo you want to continue getting values/status (y/n)?"
read answer
if [ $answer = y ]
then
continue
else
exit 1
fi
if [ -f malr.txt ]
then
mv malr.txt malr.old
touch malr.txt
else
touch malr.txt
fi
echo "\nMA/LR status for $CP controllers" >> malr.txt
echo "Date = `date`">> malr.txt
echo "MA= 0(Man) / 1(Auto) LR= 0(Loc) / 1(Rem)\n" >> malr.txt
echo "Compound Block Type MA LR" >> malr.txt
echo "==========================================" >> malr.txt
for x in PID PIDA PIDE PIDX PIDXE RATIO
do
echo "Retrieving MA/LR status for $x blocks ...\c"
/opt/fox/bin/tools/getpars -n -U$CP -mCMPNM:%14s -t$x -mTYPE:%7s -mMA:%0d -mLR:%0d > tmp1
grep -v BLOCK-NAME tmp1 > tmp2
awk '$0 ~ /^[A-Z0-9][A-Z0-9]/ {printf "%-14s%-14s %-6s %2d %2d\n",$2,$1,$3,$4,$5}' tmp2 >> malr.txt
echo " Done!"
done
echo "\nCompound Block Type MA OUT " >> malr.txt
echo "==========================================" >> malr.txt
for x in AOUT AOUTR
do
echo "Retrieving OUT values from $x blocks ...\c"
/opt/fox/bin/tools/getpars -n -U$CP -mCMPNM:%14s -t$x -mTYPE:%7s -mMA:%0d -mOUT:%.2f > tmp1
grep -v BLOCK-NAME tmp1 > tmp2
awk '$0 ~ /^[A-Z0-9][A-Z0-9]/ {printf "%-14s%-14s %-6s %0d %-6.2f\n",$2,$1,$3,$4,$5}' tmp2 >> malr.txt
echo " Done!"
done
cat malr.txt
echo "\nALL these values have been saved to: /opt/ac/malr.txt"
echo "\nComparison between PREVIOUS and NEW files:"
echo "PREVIOUS : `grep Date malr.old`"
echo "NEW : `grep Date malr.txt`\n"
echo " PREVIOUS | N E W "
echo "Compound Block PIDx MA LR | MA LR "
echo "Compound Block AOUT MA OUT | MA OUT "
echo "================================================================"
sdiff malr.old malr.txt | grep "|" | grep -v Date > tmp1
awk '
$3~/^PID/ {printf "%-14s%-14s %-6s %2d %2d | %2d %2d\n",$2,$1,$3,$4,$5,$10,$11}
$3~/^RATIO/ {printf "%-14s%-14s %-6s %2d %2d | %2d %2d\n",$2,$1,$3,$4,$5,$10,$11}
$3~/^AOUT/ {printf "%-14s%-14s %-6s %2d %-.2f | %2d %.2f\n",$2,$1,$3,$4,$5,$10,$11}
' tmp1 > /opt/ac/changes.txt
more /opt/ac/changes.txt