|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.