#!/usr/local/bin/ksh
#################################################################################
# Script ecs.msg.mgr #
# Description Designed to be run via rsh from an NT Workstation/Server to #
# manage the message log for ECS (Event Control System). This #
# log often times gets too long and takes too long for ECS to #
# manage. The NT Server that ECS runs on will copy the msg.log #
# to /usr/ECS/msg.log.tmp and run this script. #
# Written On 03/29/01 #
# Modifications 04/05/01 - Restructured script so it could be run at any time #
# of the day. HOBBES will now run this script remoteley every #
# time ECS is started so the number of logs will always be 5000 #
# prior to ECS starting. #
# 04/06/01 - Still can't find a good way to sort... Serial #
# numbers wrap and become unsortable, Date wraps and becomes #
# unsortable, and the time is AM/PM so it sorts incorrectly as #
# well. I have come to the conclusion the only way to do this is #
# to truncate the msg.log file and send it back. We will keep #
# the stripped logs in msg.log.$SERIAL so each time ECS is #
# restarted, there will be a new file and ECS will start with a #
# log file with only 5000 lines providing a quick start every #
# time. At 23:59, HOBBES will kick off this script to clean out #
# the msg.log. We (this script) touch $1.$SERIAL every time this #
# script is run so we can keep track of reboots and make sure the #
# cron on HOBBES is running every night. The cleanup section was #
# changed so it will cleanup anything with the date 30 days ago #
# in the filename. This should be the end of this for a while... #
# 04/08/01 - Changed $msg_returned from 5000 to 4080. Messages #
# were getting purged by Mary which is undesirable since we want #
# to keep all the purged messages here. #
# 04/16/01 - Function 'hexinc' was trying to compare a hex number #
# with a decimal number ($NEWMSGIDHEX). It was supposed to be #
# comparing $NEWMSGIDDEC with a decimal number and now it is. #
# 04/16/01 - Changed how we log. We also log to an activity log. #
# 04/16/01 - Had a big boo boo. Another script wiped out the #
# entire /home/bin directory tree which included this file. #
# Since I had been working on this file, I had a good chunk of it #
# in display memory so it was quickly dumped to a file... Seems #
# to be working ok... #
# 01/28/03 - Added the ability to keep logs for any given day in #
# a separate file with a file name that indicates the day the #
# logs belong to. This script will continue as it has in the #
# past but will now have this added functionality. The log files #
# created will be behind by about 24 hours but will contain only #
# logs for that day and they will be in order even if the log #
# indicator rolls (ffff-0000) over (which was the reason this was #
# never done before. It was also noticed that the $msg_returned #
# tag was set at 4080 which allows for 980 logs to be accumulated #
# in two minutes. A decision was made to decrease this number to #
# an even 4000 since it really doesn't matter anyway as long as #
# the script runs and the number of logs is less than 5000 at #
# midnight on HOBBES. - rmorten #
# 01/29/03 - Oops! The 'if' statement that contains the code to #
# watch the log indicator for rollover caused the rest of the #
# code to be ignored if the log indicator wasn't going to roll #
# over. Else statement added so check back tomorrow. - rmorten #
# 01/31/03 - Logging started for each individual light sensor. #
# There is a tag "{LOGGER}" included in every type of log we want #
# broken out so if the log appears in the main log with that tag #
# it will have it's own log when this script is run in cleanup #
# mode. - rmorten #
# 02/05/03 - Just so there will be a log that Hobbes will have #
# online we are now storing the number of messages purged where #
# Hobbes can find it. Hobbes will in turn use the number to #
# create a log entry and display both the reason and the number #
# logs purged on a maintenance page. - rmorten #
# Written By Rick Mortensen #
#################################################################################

# Program Variables
msg_returned=4000
bkdate=/bin/bkdate
awk=/usr/bin/awk
htod=/home/bin/htod
dtoh=/home/bin/dtoh
DAYMINUS30=`$bkdate -d30 '+%y%m%d'`
YESTERDATE=`$bkdate -d1 '+%m/%d'`
YESTERDAY=`$bkdate -d1 '+%y%m%d'`
DATE=`date '+%m/%d'`
DAY=`date '+%y%m%d'`
SERIAL=`date '+%y%m%d%H%M%S'`
PARAMETERS="restart, cleanup, or log"

# Directory Variables
ECSDIR=/usr/ECS

# File Variables
tmp=/tmp/ecs.tmp
LOG=$ECSDIR/msg.log
BAK=$LOG.bak
TMP=$LOG.tmp
ACTIVITYLOG=$ECSDIR/activity.ecs.msg.log
BACKLOGS="$LOG.$DAY* $LOG.$YESTERDAY*"

# Functions
hexinc () { 
# Incr hex number
OLDMSGIDDEC=`$htod $OLDMSGIDHEX`
let NEWMSGIDDEC=$OLDMSGIDDEC+1
NEWMSGIDHEX=`$dtoh $NEWMSGIDDEC | tr "[A-Z]" "[a-z]"`
if [ $NEWMSGIDDEC -ge 65537 ]
then
NEWMSGIDHEX=0000
fi
OLDMSGIDHEX=$NEWMSGIDHEX
case $NEWMSGIDHEX in
?)NEWMSGIDHEX=000$NEWMSGIDHEX ;;
??)NEWMSGIDHEX=00$NEWMSGIDHEX ;;
???)NEWMSGIDHEX=0$NEWMSGIDHEX ;;
????)NEWMSGIDHEX=$NEWMSGIDHEX ;;
esac
}

truncate () {
# Truncate log file and send result to msg.log
# echo Tail 1
tail -$msg_returned $TMP > $LOG
OLD=`wc -l $TMP | $awk '{print $1}'`
let PURGED=$OLD-$msg_returned
}

storelog () {
# Get a copy of all logs purged and keep them in a local file
head -$PURGED $TMP > $LOG.$SERIAL
}

makelogentry () {
# 60db O 04/16 6:59 PM:cliff purges 404 messages from log
# Make an entry in the local log file to show we were here.
# echo Tail 2
OLDMSGIDHEX=`tail -1 $LOG.$SERIAL | $awk '{print $1}'`
hexinc
echo "$NEWMSGIDHEX O `date '+%m/%d %l:%M %p'`:cliff purges $PURGED messages from log for system $1" >> $LOG.$SERIAL
echo "$NEWMSGIDHEX O `date '+%m/%d %l:%M %p'`:cliff purges $PURGED messages from log for system $1" >> $ACTIVITYLOG
echo "$NEWMSGIDHEX O `date '+%m/%d %l:%M %p'`:cliff purges $PURGED messages from log for system $1"
}

# We now expect the user to use a variable to show the type of activity.
# We will test for that here.
if [ $# -ne 1 ]
then
echo "\n\nYou must either enter $PARAMETERS.\nExiting...\n\n";exit
fi

# Test for tmp file and if it missing, exit
if [ -s $TMP ]
then
:
else
echo "\ntmp file missing; exiting...\n"
exit
fi

# If user input matches acceptable parameters act upon them, otherwise let them know what they did wrong.
case $1 in
restart)
truncate
storelog
makelogentry $1
;;
cleanup)
truncate
storelog
makelogentry $1
;;
log)
truncate
storelog
makelogentry $1
# Build a msg.log file that contains only the logs for that day (hopefully in order)
cat $TMP $BACKLOGS | grep "$YESTERDATE" | sort | uniq | grep -v "messages from log for" > $TMP.backlog
awk ' $1 ~ /^ffff/ {print $0}' $TMP.backlog > $TMP.backlog.test
if [ -s $TMP.backlog.test ]
then
awk ' $1 ~ /^[5-9a-f]/ {print $0}' $TMP.backlog > $LOG.$YESTERDAY.history
awk ' $1 ~ /^[0-4]/ {print $0}' $TMP.backlog >> $LOG.$YESTERDAY.history
else
mv $TMP.backlog $LOG.$YESTERDAY.history
fi
# Build a list of logged items and dump to tracking file
LOGLIST=`nawk -F ':' '{print $3} ' $LOG.$YESTERDAY.history | awk ' /LOGGER/ {print $0}' | sed 's/is [0-9].*//g'|sort|uniq|sed 's/ /_/g'`
for log in $LOGLIST
do
Log=`echo $log | sed 's/_/ /g'`
filelog=`echo $log | sed 's/,//g'|sed 's/_/./g'`
grep "${Log}is" $LOG.$YESTERDAY.history | sed 's/M:/M :/g'|awk '{print $3,$4,$5","$(NF-1)}' > $LOG.$YESTERDAY.${filelog}log
done
;;
*) echo "\n\nThe only choices are $PARAMETERS.\nExiting...\n\n" ; exit
;;
esac

# Store number of messages purged in a file for hobbes to copy
echo "$PURGED\n" > $ECSDIR/purged
echo "$1\n" > $ECSDIR/reason
# Cleanup
rm -fr $TMP*

 

  • Expect the best and be prepared for the worst.

  • It is the service that counts, the product can be found anywhere...

[Under Construction]This website will always be under construction...
The information contained within this website is confidential and only to be used in conjunction with the employment of Richard C. Mortensen.  All other use is unauthorized.
Send mail to webmaster@can-be-scanned.com with questions or comments about this web site.
Copyright © 2000 PR Enterprises, Inc.
Last modified: June 09, 2000