home *** CD-ROM | disk | FTP | other *** search
- #! /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
-