home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 4.0 PR1
/
NeXT_NEXTSTEP_4.0_PR1_(beta).rar
/
Openstep4-Pr1User.iso
/
private
/
etc
/
uucp
/
UUAIDS
/
uuusage
< prev
Wrap
Text File
|
1995-09-02
|
6KB
|
274 lines
#! /bin/sh
: '/*********************************************************************
uuusage
Print summary of UUCP usage
Alan S. Watt
Sccsid=@(#)uuusage.sh 1.1
usage:
uuusage [-s] [-t] [period]
arguments:
-s Just produce the system summary; dont include
individual user statistics.
-t Produce tbl(1) output.
period One of:
today Just print todays activities
week Week to date totals
month Month to date totals
m_name Totals for month <m_name> which
is a three letter abbreviation
for the month name.
history:
02/28/83 original version
*********************************************************************/'
: 'format of SYSLOG is:'
: 'cox onyxasw (4/16-18:24) received data 98 bytes 1 secs'
: 'format for newer version of UUCP stuff is:'
: 'swatt decvax (12/30-21:15) (378612944) sent data 64 bytes 0 secs'
: 'array usage:'
: ' files[name] == total number of files transferred'
: ' bytes[name] == total number of bytes sent'
: ' time[name] == total time spent by user'
: ' totfiles,tottime,totbytes are like above, but totals'
: ' sfiles[sname] == files transferred at request of system sname'
: ' sbytes[sname] == bytes sent/received at request of sname'
: ' stime[sname] == time spent at request of sname'
libdir=/usr/lib/uucp
uudir=/usr/spool/uucp
uutbl=$libdir/uutbl
slogprefix="$uudir/OLD/SYSLOG"
ologprefix="$uudir/OLD/UUUSAGE"
month=
tbloutput=0
systmonly=0
for arg
do
case $arg in
-s) : 'Only print system usage'
systmonly=1
;;
-t) : 'Generate TBL commands'
tbloutput=1 ; systmonly=1
;;
today) files="$uudir/SYSLOG"
;;
week) files="$slogprefix.week $uudir/SYSLOG"
;;
month) files="$slogprefix.month $slogprefix.week $uudir/SYSLOG"
;;
[Jj]an) month=Jan
;;
[Ff]eb) month=Feb
;;
[Mm]ar) month=Mar
;;
[Aa]pr) month=Apr
;;
[Mm]ay) month=May
;;
[Jj]un) month=Jun
;;
[Jj]ul) month=Jul
;;
[Aa]ug) month=Aug
;;
[Ss]ep) month=Sep
;;
[Oo]ct) month=Oct
;;
[Nn]ov) month=Nov
;;
[Dd]ec) month=Dec
;;
*) files="$files $arg"
;;
esac
done
: 'look for short cut on monthly summaries. If we have one,
just dump the summary, deleting the user information part if
-s set; running output through $utbl if -t set.
'
case $month in
'') ;;
*) \
if [ -s ${ologprefix}.${month} ]
then
case $systmonly$tbloutput in
"00") grep -v "uuusage: mangled record" \
${ologprefix}.${month}
;;
"10") grep -v "uuusage: mangled record" \
${ologprefix}.${month} \
| sed -e '2,/^$/d'
;;
"01"|"11") \
uuusage -s ${month} | $uutbl
;;
esac
exit
else
files=${slogprefix}.${month}
fi ;;
esac
: 'Default report: today"s transfers'
case $files in
'') files="$uudir/SYSLOG"
;;
esac
case $tbloutput in
1) uuusage -s ${files} | $uutbl
exit ;;
esac
flist=
for f in $files
do
if [ -r $f ]
then
flist="$flist $f"
else
echo "$f: Cannot read file"
fi
done
set " " $flist ; shift
case $# in
0) echo "no files to process" ; exit 1 ;;
esac
awk '
BEGIN {
systmonly='"$systmonly"'
fmon = 1000; lmon = -1000
oldnf = 9; newnf = 10
# User Format:
# user files bytes time Avgsiz Avgtim
dfmt = "%-10s%6d%10d%8d%7d%7d\n"
sfmt = "%-10s%6s%10s%8s%7s%7s\n"
# System Format:
# system files bytes time Avgsiz Avgtim rate
sfmt1 = "%-10s%6s%10s%8s%7s%7s%7s\n"
dfmt1 = "%-10s%6d%10d%8d%7d%7d%7d\n"
space = ""
# width of output for centering purposes
width = 52
}
(NR == 1) {
# Protect against partial records
maxfields = NF
if (NF == oldnf)
oldfmt++
else if (NF == newnf)
newfmt++
else {
# cant seem to get awk to really exit here
# it still tries to produce the report
printf "uuusage: mangled format of 1st record\n"
printf "must be either %d or %d fields\n", oldnf, newnf
exit (1)
}
}
(NF != maxfields) {
printf "uuusage: mangled record #%d in file %s (ignored)\n", \
NR, FILENAME
}
(NF == maxfields) {
# protect against format changes
D_name = $1
D_sname = $2
D_date = $3
# Old (V7/32V format vs. system III format)
if (oldfmt) {
D_bytes = $6
D_time = $8
}
else if (newfmt) {
D_bytes = $7
D_time = $9
}
# protect against division by 0
if (D_time == 0)
D_time = 1
# stash user usage info
if (!systmonly) {
name[D_name] = D_name; bytes[D_name] += D_bytes
time[D_name] += D_time; files[D_name] += 1
}
# stash system usage info
sname[D_sname] = D_sname; sbytes[D_sname] += D_bytes
stime[D_sname] += D_time
sfiles[D_sname] += 1
# get the date of the transfer
n = index (D_date, "/")
cmon = substr (D_date, 2, n-2)
m = index (D_date, "-")
n++
cday = substr (D_date, n, m-n)
# keep earliest and latest dates (naive about new year)
if (int(cmon) < int(fmon) || (cmon == fmon && int(cday) < int(fday))) {
fmon = cmon
fday = cday
}
if (int(cmon) > int(lmon) || (cmon == lmon && int(cday) > int(lday))) {
lmon = cmon
lday = cday
}
}
END {
banner = sprintf "UUCP Usage from %s/%s to %s/%s", \
fmon,fday,lmon,lday
precision = (width-length(banner))/2
format = sprintf "%%%ds\n", precision + length(banner)
printf format, banner
if (!systmonly) {
printf sfmt, "user", "files", "bytes", "time", \
"Avgsiz", "Avgtim"
totfiles=0; totbytes=0; tottime=0
for (n in name) {
printf dfmt, n, files[n], bytes[n], time[n], \
bytes[n]/files[n], time[n]/files[n]
totfiles += files[n]
totbytes += bytes[n]
tottime += time[n]
}
printf dfmt, "total", totfiles, totbytes, tottime, \
totbytes/totfiles, tottime/totfiles
print space
}
# now print system usage info
printf sfmt1, "system", "files", "bytes", "time", \
"Avgsiz", "Avgtim", "rate"
totfiles=0; totbytes=0; tottime=0
for (n in sname) {
printf dfmt1, n, sfiles[n], sbytes[n], stime[n], \
sbytes[n]/sfiles[n], stime[n]/sfiles[n], \
sbytes[n]/stime[n]
totfiles += sfiles[n]
totbytes += sbytes[n]
tottime += stime[n]
}
printf dfmt1, "total", totfiles, totbytes, tottime, \
totbytes/totfiles, tottime/totfiles, totbytes/tottime
} ' $flist