Annotation of 42BSD/usr.bin/uucp/UUAIDS/uuusage, revision 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.