Annotation of 42BSD/usr.bin/uucp/UUAIDS/uuusage, revision 1.1.1.1

1.1       root        1: #! /bin/sh
                      2: : '/*********************************************************************
                      3:        uuusage
                      4:                Print summary of UUCP usage
                      5:        Alan S. Watt
                      6:    
                      7:        Sccsid=@(#)uuusage.sh   1.1
                      8: 
                      9:        usage:
                     10:                uuusage [-s] [-t] [period]
                     11: 
                     12:        arguments:
                     13:                -s      Just produce the system summary; dont include
                     14:                        individual user statistics.
                     15: 
                     16:                -t      Produce tbl(1) output.
                     17: 
                     18:                period  One of:
                     19:                          today         Just print todays activities
                     20:                          week          Week to date totals
                     21:                          month         Month to date totals
                     22:                          m_name        Totals for month <m_name> which
                     23:                                        is a three letter abbreviation
                     24:                                        for the month name.
                     25:    
                     26:        history:
                     27:                02/28/83        original version
                     28:    *********************************************************************/'
                     29: 
                     30: : 'format of SYSLOG is:'
                     31: :      'cox onyxasw (4/16-18:24) received data 98 bytes 1 secs'
                     32: : 'format for newer version of UUCP stuff is:'
                     33: :      'swatt decvax (12/30-21:15) (378612944) sent data 64 bytes 0 secs'
                     34: : 'array usage:'
                     35: : '    files[name] == total number of files transferred'
                     36: : '    bytes[name] == total number of bytes sent'
                     37: : '    time[name] == total time spent by user'
                     38: : '    totfiles,tottime,totbytes are like above, but totals'
                     39: : '    sfiles[sname] == files transferred at request of system sname'
                     40: : '    sbytes[sname] == bytes sent/received at request of sname'
                     41: : '    stime[sname] == time spent at request of sname'
                     42: 
                     43: libdir=/usr/lib/uucp
                     44: uudir=/usr/spool/uucp
                     45: uutbl=$libdir/uutbl
                     46: slogprefix="$uudir/OLD/SYSLOG"
                     47: ologprefix="$uudir/OLD/UUUSAGE"
                     48: month=
                     49: tbloutput=0
                     50: systmonly=0
                     51: for arg
                     52: do
                     53:        case $arg in
                     54:        -s)     : 'Only print system usage'
                     55:                systmonly=1
                     56:                ;;
                     57:        -t)     : 'Generate TBL commands'
                     58:                tbloutput=1 ; systmonly=1
                     59:                ;;
                     60:        today)  files="$uudir/SYSLOG"
                     61:                ;;
                     62:        week)   files="$slogprefix.week $uudir/SYSLOG"
                     63:                ;;
                     64:        month)  files="$slogprefix.month $slogprefix.week $uudir/SYSLOG"
                     65:                ;;
                     66:        [Jj]an) month=Jan
                     67:                ;;
                     68:        [Ff]eb) month=Feb
                     69:                ;;
                     70:        [Mm]ar) month=Mar
                     71:                ;;
                     72:        [Aa]pr) month=Apr
                     73:                ;;
                     74:        [Mm]ay) month=May
                     75:                ;;
                     76:        [Jj]un) month=Jun
                     77:                ;;
                     78:        [Jj]ul) month=Jul
                     79:                ;;
                     80:        [Aa]ug) month=Aug
                     81:                ;;
                     82:        [Ss]ep) month=Sep
                     83:                ;;
                     84:        [Oo]ct) month=Oct
                     85:                ;;
                     86:        [Nn]ov) month=Nov
                     87:                ;;
                     88:        [Dd]ec) month=Dec
                     89:                ;;
                     90:        *)      files="$files $arg"
                     91:                ;;
                     92:        esac
                     93: done
                     94: 
                     95: : 'look for short cut on monthly summaries.  If we have one,
                     96:    just dump the summary, deleting the user information part if
                     97:    -s set; running output through $utbl if -t set.
                     98:   '
                     99: case $month in
                    100: '')    ;;
                    101: *) \
                    102:        if [ -s ${ologprefix}.${month} ]
                    103:        then
                    104:                case $systmonly$tbloutput in
                    105:                "00")   grep -v "uuusage: mangled record" \
                    106:                                ${ologprefix}.${month}
                    107:                        ;;
                    108:                "10")   grep -v "uuusage: mangled record" \
                    109:                                ${ologprefix}.${month} \
                    110:                                | sed -e '2,/^$/d'
                    111:                        ;;
                    112:                "01"|"11") \
                    113:                        uuusage -s ${month} | $uutbl
                    114:                        ;;
                    115:                esac
                    116:                exit
                    117:        else
                    118:                files=${slogprefix}.${month} 
                    119:        fi ;;
                    120: esac
                    121: 
                    122: : 'Default report: today"s transfers'
                    123: case $files in
                    124:   '')  files="$uudir/SYSLOG"
                    125:                ;;
                    126: esac
                    127: 
                    128: case $tbloutput in
                    129:  1)    uuusage -s ${files} | $uutbl
                    130:        exit ;;
                    131: esac
                    132: 
                    133: flist=
                    134: for f in $files
                    135: do
                    136:        if [ -r $f ]
                    137:        then
                    138:                flist="$flist $f"
                    139:        else
                    140:                echo "$f: Cannot read file"
                    141:        fi
                    142: done
                    143: 
                    144: set " " $flist ; shift
                    145: case $# in
                    146: 0)     echo "no files to process" ; exit 1 ;;
                    147: esac
                    148: 
                    149: awk '
                    150: BEGIN {
                    151:        systmonly='"$systmonly"'
                    152:        fmon = 1000; lmon = -1000
                    153:        oldnf = 9; newnf = 10
                    154:        # User Format:
                    155:        # user files bytes time Avgsiz Avgtim
                    156:        dfmt = "%-10s%6d%10d%8d%7d%7d\n"
                    157:        sfmt = "%-10s%6s%10s%8s%7s%7s\n"
                    158:        # System Format:
                    159:        # system files bytes time Avgsiz Avgtim rate
                    160:        sfmt1 = "%-10s%6s%10s%8s%7s%7s%7s\n"
                    161:        dfmt1 = "%-10s%6d%10d%8d%7d%7d%7d\n"
                    162:        space = ""
                    163: 
                    164:        # width of output for centering purposes
                    165:        width = 52
                    166: }
                    167: (NR == 1) {
                    168: 
                    169:        # Protect against partial records
                    170:        maxfields = NF
                    171:        if (NF == oldnf)
                    172:                oldfmt++
                    173:        else if (NF == newnf)
                    174:                newfmt++
                    175:        else {
                    176:                # cant seem to get awk to really exit here
                    177:                # it still tries to produce the report
                    178:                printf "uuusage: mangled format of 1st record\n"
                    179:                printf "must be either %d or %d fields\n", oldnf, newnf
                    180:                exit (1)
                    181:        }
                    182: }
                    183: (NF != maxfields) {
                    184:        printf "uuusage: mangled record #%d in file %s (ignored)\n", \
                    185:                NR, FILENAME
                    186: }
                    187: (NF == maxfields) {
                    188: 
                    189:        # protect against format changes
                    190:        D_name = $1
                    191:        D_sname = $2
                    192:        D_date = $3
                    193: 
                    194:        # Old (V7/32V format vs. system III format)
                    195:        if (oldfmt) {
                    196:                D_bytes = $6
                    197:                D_time = $8
                    198:        }
                    199:        else if (newfmt) {
                    200:                D_bytes = $7
                    201:                D_time = $9
                    202:        }
                    203: 
                    204:        # protect against division by 0
                    205:        if (D_time == 0)
                    206:                D_time = 1
                    207: 
                    208:        # stash user usage info
                    209:        if (!systmonly) {
                    210:                name[D_name] = D_name; bytes[D_name] += D_bytes
                    211:                time[D_name] += D_time; files[D_name] += 1
                    212:        }
                    213: 
                    214:        # stash system usage info
                    215:        sname[D_sname] = D_sname; sbytes[D_sname] += D_bytes
                    216:        stime[D_sname] += D_time
                    217:        sfiles[D_sname] += 1
                    218: 
                    219:        # get the date of the transfer
                    220:        n = index (D_date, "/")
                    221:        cmon = substr (D_date, 2, n-2)
                    222:        m = index (D_date, "-")
                    223:        n++
                    224:        cday = substr (D_date, n, m-n)
                    225: 
                    226: 
                    227:        # keep earliest and latest dates (naive about new year)
                    228:        if (int(cmon) < int(fmon) || (cmon == fmon && int(cday) < int(fday))) {
                    229:                fmon = cmon
                    230:                fday = cday
                    231:        }
                    232:        if (int(cmon) > int(lmon) || (cmon == lmon && int(cday) > int(lday))) {
                    233:                lmon = cmon
                    234:                lday = cday
                    235:        }
                    236: }
                    237: END {
                    238:        banner = sprintf "UUCP Usage from %s/%s to %s/%s", \
                    239:                fmon,fday,lmon,lday
                    240:        precision = (width-length(banner))/2
                    241:        format = sprintf "%%%ds\n", precision + length(banner)
                    242:        printf format, banner
                    243:        if (!systmonly) {
                    244:                printf sfmt, "user", "files", "bytes", "time", \
                    245:                        "Avgsiz", "Avgtim"
                    246:                totfiles=0; totbytes=0; tottime=0
                    247:                for (n in name) {
                    248:                        printf dfmt, n, files[n], bytes[n], time[n], \
                    249:                                bytes[n]/files[n], time[n]/files[n]
                    250:                        totfiles += files[n]
                    251:                        totbytes += bytes[n]
                    252:                        tottime += time[n]
                    253:                }
                    254:                printf dfmt, "total", totfiles, totbytes, tottime, \
                    255:                        totbytes/totfiles, tottime/totfiles
                    256:                print space
                    257:        }
                    258: 
                    259:        # now print system usage info
                    260:        printf sfmt1, "system", "files", "bytes", "time", \
                    261:                "Avgsiz", "Avgtim", "rate"
                    262:        totfiles=0; totbytes=0; tottime=0
                    263:        for (n in sname) {
                    264:                printf dfmt1, n, sfiles[n], sbytes[n], stime[n], \
                    265:                        sbytes[n]/sfiles[n], stime[n]/sfiles[n], \
                    266:                        sbytes[n]/stime[n]
                    267:                totfiles += sfiles[n]
                    268:                totbytes += sbytes[n]
                    269:                tottime += stime[n]
                    270:        }
                    271:        printf dfmt1, "total", totfiles, totbytes, tottime, \
                    272:                totbytes/totfiles, tottime/totfiles, totbytes/tottime
                    273: } ' $flist

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.