home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OpenStep 3.3J
/
os33j.iso
/
private
/
etc
/
uucp
/
uucp.day.sh
< prev
Wrap
Linux/UNIX/POSIX Shell Script
|
1989-07-05
|
12KB
|
368 lines
#! /bin/sh
#
#
# uucp.day [-x] [-l]
#
# this script is, as most, continuously under developement. the
# main reason for this script is to keep stats on uucp traffic in order to
# better understand who we talk to and to help justify alternate networking
# ideas (x.25).
# problems to Cal_Thixton@Next.COM
# cal thixton
#
# crontab: 20 23 * * * su uucp -c /usr/lib/uucp/uucp.day
#
# automatic logging to some master log site on the net....
#
# aliases: uucpstats: "|/usr/lib/uucp/uucp.day -l"
#
# -l log this report to STATSDIR
# -x turn debugging on. do nothing damaging.
#
#
# next
# UUCP GENERAL ACCOUNTING
# Mon Jun 15 1987
# Site Bytes Time Bytes Calls Cost ($ ATT) Files BPS
# Total hh:mm:ss Out In Out Tot Today To_Date Out In
# austsun 41191 0:06:37 24488 16703 0 3 $ 2.25 65.80 10 10 103
# cipric 901 0:00:11 410 491 0 2 $ 0.00 0.00 1 1 75
# convex 1391749 1:50:13 1390921 828 0 3 $ 0.00 0.00 145 2 210
# edsr 4011514 10:03:58 4011514 0 0 0 $ 0.00 0.00 281 0 110
# housun 20314 0:03:56 20314 0 0 4 $ 1.57 1.57 8 0 85
# kcsun 839 0:00:03 406 433 0 1 $ 0.02 0.02 1 0 209
# milano 919 0:00:15 410 509 0 2 $ 0.09 0.09 1 1 57
# sunarch 914 0:00:09 414 500 0 2 $ 0.05 4.22 1 1 91
# suntan 3109 0:00:30 1521 1588 0 2 $ 0.00 0.00 2 3 100
# ti-csl 18211 0:02:57 1533 16678 0 7 $ 0.00 0.00 2 3 102
# tulsun 76674 0:06:04 75215 1459 0 14 $ 1.58 10.64 26 2 210
# tundra 62273 0:04:34 61773 500 0 2 $ 1.51 1.51 26 1 226
# uokmax 81172 0:12:35 80334 838 0 4 $ 0.00 0.00 3 2 107
# | Days: 9 $/day: $ 9.32 Total: $ 7.05 83.84 Bytes: 5709780
#
# most of the colums should be obvious.
# Call_Out: The number of calls we initiated.
# Call_Tot: Total number of calls (in and out). call_tot - call_out = the # of calls
# we received.
# Cost_today: an estimate of ATT charges for that day based on L-costs. call att and
# get a $/minute rate for day/direct_dial.
# Cost_Todate: a running sum of the estimated att costs.
# Files_Out: files sent
# Files_In: files received
# Days: number of days since the total was reset back to 0.
# $/Day: average cost per day in $.
# Total: first number is the estimated cost for today followed by running total for
# x days.
# BPS - average bytes/sec
#
# 1/15/88 - add sed to clean up incoming email when logging.
# delete unnecessary headers. tj
# 1/15/88 - do not run uucpanz. tj
#
# daily UUCP cleanup
#
PATH="/bin:/usr/bin:/usr/lib/uucp:/usr/ucb:/etc:/usr/local:" ; export PATH
HOSTNAME=`hostname`
LIBDIR=/usr/lib/uucp
UUCLEAN=${LIBDIR}/uuclean
CHOWN=/usr/etc/chown
SPOOLDIR=/usr/spool/uucp
STATSDIR=${SPOOLDIR}/STATS
#
# if we are started up with -l, assume that we are being
# given an account report from some site and that we need to save it.
#
if [ "$1"x = -xx ]; then
DEBUG=true
shift
fi
if [ "$1"x = -lx ]; then
sed \
-e "/^Received: /d" \
-e "/^ id A[A-C][0-9]/d" \
-e "/^Return-Path: /d" \
-e "/^Posted-/d" \
-e "/^Message-Id: /d" \
-e "/^Status: /d" \
-e '/^UUCP ANALYZER:/,$d' > /tmp/uucpstats.$$
SUB=`grep '^Subject: .* UUCP GENERAL ACCOUNTING' /tmp/uucpstats.$$`
set ${SUB:=none}
if [ ! "$3" = UUCP -o ! "$4" = GENERAL -o ! "$5" = ACCOUNTING ]; then
cat /tmp/uucpstats.$$ >> ${STATSDIR}/trash
${CHOWN} -f uucp ${STATSDIR}/trash
rm -f /tmp/uucpstats.$$
exit 0
fi
if [ ! -d ${STATSDIR} ]; then
mkdir ${STATSDIR}
chmod 777 ${STATSDIR}
${CHOWN} -f uucp ${STATSDIR}
fi
DIR=${STATSDIR}/`echo $2 | sed 's,/.*,,'`
if [ ! -d ${DIR} ]; then
mkdir ${DIR}
chmod 777 ${DIR}
${CHOWN} -f uucp ${DIR}
fi
FILE=`echo $2 | sed -e 's/Jan/01/' -e 's/Feb/02/' -e 's/Mar/03/' \
-e 's/Apr/04/' -e 's/May/05/' -e 's/Jun/06/' \
-e 's/Jul/07/' -e 's/Aug/08/' -e 's/Sep/09/' \
-e 's/Oct/10/' -e 's/Nov/11/' -e 's/Dec/12/' \
-e 's/\([0-9][0-9]\)\.\([0-9][0-9]\)\.\(19[0-9][0-9]\)/\3.\1.\2/'`
if [ -f ${STATSDIR}/${FILE} ]; then
mv /tmp/uucpstats.$$ ${STATSDIR}/${FILE}.$$
${CHOWN} -f uucp ${STATSDIR}/${FILE}.$$
else
mv /tmp/uucpstats.$$ ${STATSDIR}/${FILE}
${CHOWN} -f uucp ${STATSDIR}/${FILE}
fi
exit 0
fi
set `date`
DAY=$1
MON=$2
YEAR=$6
#
# DAYMON: Day of the month 1-31
#
DAYMON=$3
#
# MONTH: Change Month name into a number
#
MONTH=`echo ${MON} | sed -e 's/Jan/01/' -e 's/Feb/02/' -e 's/Mar/03/' \
-e 's/Apr/04/' -e 's/May/05/' -e 's/Jun/06/' \
-e 's/Jul/07/' -e 's/Aug/08/' -e 's/Sep/09/' \
-e 's/Oct/10/' -e 's/Nov/11/' -e 's/Dec/12/' \
-e 's/\([0-9][0-9]\)\.\([0-9][0-9]\)\.\(19[0-9][0-9]\)/\3.\1.\2/'`
#
# prefix 1-9 days with 0 so that ls(1)'s work on listing the
# STATS directory and keep the files in chronological order.
#
if [ ${DAYMON} -lt 10 ]; then
DAYMON=0${DAYMON}
fi
#
# DATANAME: e.g. 1989.03.03 Year, Month, Day
#
DATENAME=${YEAR}.${MONTH}.${DAYMON}
HOURS=720
if [ ! -n "$DEBUG" ]; then
SYS=${SPOOLDIR}/SYSLOG.$$
else
SYS=${SPOOLDIR}/SYSLOG
fi
#
# STATSPERSON - place to email these stats to. this is really not
# a person but a archival script
#
STATSPERSON=uucpstats@localhost.com
#
# L-costs has a list of sites and cost in $/minute. e.g.
# sun cost 0.34
# housun cost 0.40
# keyword 'cost' is required.
#
if [ -f /etc/uucp/L-costs ]; then
COSTS=/etc/uucp/L-costs
elif [ -f /usr/lib/uucp/L-costs ]; then
COSTS=/usr/lib/uucp/L-costs
else
COSTS=/dev/null
fi
#
#
# LAST_REPORT - most recent report (yesterdays). used to
# general cost_to_date estimates.
#
LASTREPORT=${STATSDIR}/LAST_REPORT
if [ ! -f ${LASTREPORT} ]; then
touch ${LASTREPORT}
fi
#
# Figure out where the Logging directory is
#
echo hi
if [ -d ${SPOOLDIR}/OLD ]; then
LOGDIR=${SPOOLDIR}/OLD
elif [ -d ${SPOOLDIR}/LOG ]; then
LOGDIR=${SPOOLDIR}/LOG
else
LOGDIR=/tmp
fi
LASTLOG=${LOGDIR}/LOGFILE.last
#
# check to see if the stats directory is there and create it if not
#
if [ ! -d ${STATSDIR} ]; then
mkdir ${STATSDIR}
chmod 777 ${STATSDIR}
${CHOWN} -f uucp ${STATSDIR}
fi
REPORTFILE=${DATENAME}
NEWREPORT=${STATSDIR}/${REPORTFILE}
if [ -f ${NEWREPORT} ]; then
NEWREPORT=${STATSDIR}/${REPORTFILE}.$$
fi
#
# UUclean a bunch of things
#
if [ ! -n "$DEBUG" ]; then
for i in \
${SPOOLDIR}/AUDIT \
${SPOOLDIR}/CORRUPT \
${SPOOLDIR}/LCK \
${SPOOLDIR}/STST \
${SPOOLDIR}/TM. \
${SPOOLDIR}/X. \
${SPOOLDIR}/XTMP \
${SPOOLDIR}/C. \
${SPOOLDIR}/D. \
${SPOOLDIR}/D.${HOSTNAME} \
${SPOOLDIR}/D.${HOSTNAME}X
do
if [ -d ${i} ]; then
$UUCLEAN -p -n${HOURS} -d${i}
fi
done
fi
if [ ! -n "$DEBUG" ]; then $UUCLEAN -pSTST. -pTM. -pLTMP. -pLOG. -pX. -n4 -d${SPOOLDIR} ; fi
if [ ! -n "$DEBUG" ]; then $UUCLEAN -pLCK. -n8 -d${SPOOLDIR} ; fi
if [ ! -n "$DEBUG" ]; then $UUCLEAN -d${LIBDIR}/.XQTDIR -p -n72 ; fi
#
# Begin new log at beginning of each month if either this is the first
# day of the month or uucp.startnewmonth has something in it. (since /usr/adm
# is owned by root and it is uncertain who cron runs as, then modify the file
# instead of deleting/creating it to indicate change).
#
# if uucp.newmonth has the keywords 'newmonth <some_month>',
# awk will assume this is a new month.
#
if [ ${DAYMON} = 01 ] ; then
NEWMONTH="newmonth ${MON}"
else
NEWMONTH="${MON}"
fi
# Old spool/log files are kept by the naming scheme:
# LOGFILE.${YEAR}.${MONTH}.${DAYMON} where ${DAY} is the day of the week,
# Sun to Sat, and ${DAYMON} is the numerical day of the month. SYSLOG
# files are kept by the scheme: SYSLOG.week: the current week's: totals;
# SYSLOG.month: the current month's totals; SYSLOG.${month} where
# ${month} is the first three letters of the month: the totals for that
# month.
if [ ! -n "$DEBUG" ]; then
touch ${SPOOLDIR}/LOGFILE
${CHOWN} -f uucp ${SPOOLDIR}/LOGFILE
touch ${LOGDIR}/LOGFILE.${DATENAME}
${CHOWN} -f uucp ${LOGDIR}/LOGFILE.${DATENAME}
mv ${SPOOLDIR}/LOGFILE ${LOGDIR}/LOGFILE.${DATENAME}
rm -f ${LASTLOG}
ln ${LOGDIR}/LOGFILE.${DATENAME} ${LASTLOG}
touch ${SPOOLDIR}/SYSLOG
${CHOWN} -f uucp ${SPOOLDIR}/SYSLOG
touch ${SPOOLDIR}/SYSLOG.$$
${CHOWN} -f uucp ${SPOOLDIR}/SYSLOG.$$
mv ${SPOOLDIR}/SYSLOG ${SPOOLDIR}/SYSLOG.$$
touch ${SPOOLDIR}/SYSLOG
${CHOWN} -f uucp ${SPOOLDIR}/SYSLOG
touch ${SPOOLDIR}/LOGFILE
${CHOWN} -f uucp ${SPOOLDIR}/LOGFILE
cat ${SPOOLDIR}/SYSLOG.$$ >> ${LOGDIR}/SYSLOG.week
if [ -f ${SPOOLDIR}/ERRLOG ]; then
touch ${SPOOLDIR}/ERRLOG
${CHOWN} -f uucp ${SPOOLDIR}/ERRLOG
touch ${LOGDIR}/ERRLOG.${DATENAME}
${CHOWN} -f uucp ${LOGDIR}/ERRLOG.${DATENAME}
mv ${SPOOLDIR}/ERRLOG ${LOGDIR}/ERRLOG.${DATENAME}
touch ${SPOOLDIR}/ERRLOG
${CHOWN} -f uucp ${SPOOLDIR}/ERRLOG
fi
fi
#
# make sure these are there when cat'ed below else the script could die
#
# send syslog stats to administrator.
#
# b - total bytes
# c - costs in $ ATT
# d - dialout to site
# f - failed attempts to call site
# o - total cost to date in $
# r - bytes recieved
# s - bytes sent
# t - total time in seconds
# v - conversations with site
# x - files sent
# y - files recieved
#
(
echo " "
echo " ${HOSTNAME}"
echo " UUCP GENERAL ACCOUNTING"
echo " ${DAY} ${MON} ${DAYMON} ${YEAR}"
echo "Site Bytes Time Bytes Calls Cost ($ ATT) Files BPS Fail"
echo " Total hh:mm:ss Out In Out Tot Today To_Date Out In"
(
(
echo hostname ${HOSTNAME}
echo ${NEWMONTH}
cat ${LASTREPORT} ${LASTLOG} ${COSTS} ${SYS} ) | awk ' { \
if ( $1 == "hostname" ) { hostname = $2 } \
if ( $1 == "newmonth" ) { newmonth = 1 } \
if ( $6 == "data" ) { b[ $2 ] += $7 ; t[ $2 ] += $9 } \
if ( $5 == "sent" ) { s[ $2 ] += $7 ; x[ $2 ] += 1 } \
if ( $5 == "received" ) { r[ $2 ] += $7 ; y[ $2 ] += 1 } \
if ( $2 == "cost" && ( $4 == "" || $4 == hostname )) \
{ c[ $1 ] = $3 } \
if ( $8 == "$" && newmonth == 0 ) { o[ $1 ] = $10 } \
if ( $1 == "|" && newmonth == 0 ) { days = $3 } \
if ( $4 == "SUCCEEDED" && $5 == "(call" ) { d[ $2 ] += 1 } \
if ( $4 == "FAILED" && $5 == "(call" ) { f[ $2 ] += 1 } \
if ( $5 == "(conversation" && $6 == "complete)" ) { v[ $2 ] += 1 } \
} \
END { for ( i in b ) { \
printf("%-8.8s %7d %2d:%02d:%02d %7d %7d %2d %2d $ %6.2f %7.2f %3d %3d %4d %3d\n", \
i, b[i], t[i]/3600, (t[i]%3600)/60, (t[i]%3600)%60, s[i], r[i], \
d[i], v[i], (t[i]/60)*c[i], ((t[i]/60)*c[i])+o[i], x[i]/2, y[i]/2, \
b[i]/(t[i]+1), f[i]) ; \
totalbytes += b[i] ; day += (t[i]/60)*c[i] ; \
todate += ((t[i]/60)*c[i])+o[i] } \
printf("| Days: %3d $/day: $ %6.2f Total: $ %6.2f %7.2f Bytes: %d\n", \
(days + 1), todate/(days + 1), day, todate, totalbytes ) }' ) | \
sort ) > /tmp/.uucp.day.report
if [ ! -n "$DEBUG" ]; then
mv /tmp/.uucp.day.report ${NEWREPORT}
${CHOWN} -f uucp ${NEWREPORT}
if [ -n "${STATSPERSON}" ]; then
Mail -s "${HOSTNAME}/${REPORTFILE} UUCP GENERAL ACCOUNTING" ${STATSPERSON} < ${NEWREPORT}
fi
rm -f ${LASTREPORT}
ln -s `basename ${NEWREPORT}` ${LASTREPORT}
rm -f ${SYS}
fi
#
# Remove LOGFILEs older than one week; save SYSLOG
# files forever. Remove them manually if desired.
#
if [ ! -n "$DEBUG" ]; then find ${LOGDIR} -name 'LOGFILE.*' -mtime +7 -exec rm -f {} \; ; fi
#
# Poll morning systems
#
if [ ! -n "$DEBUG" ]; then
for i in `uuname`
do
touch ${SPOOLDIR}/C./C.${i}n0000
done
fi
exit 0