mason@tmsoft.uucp (Dave Mason) (02/25/89)
This is my version of a stats program that several people in the Toronto area use. It does news, mail, and uucp including backlogs. You will doubtless have to hack on this to change the statistics gathering portion of the code. This uses Cnews and smail log files. ../Dave --------------------------------------------------- # Copyright 1989 Dave Mason, Toronto, Canada, All rights reserved # This software can be used for any purpose, so long as this notice # stays intact and the following people are correctly attributed. # This software is provided AS IS, with NO GUARANTEES. USE AT # YOUR OWN RISK. # # Mark Brader msb@sq ...87 original code # (public domain) # # David Sherman dave@lsuc 87 & 88 hacking # (public domain) # # Dave Mason mason@tmsoft 89-01-05 added backlog # 89-02-03 added mail information # # site=tmsoft cat <<EOF News Articles Mail UUCP Traffic (kB) Backlog Accptd, Dups, Que'd Recv Sent Recvd Sent Byt/S Jobs Oldest EOF ( # # first of all, extract news stats from Cnews log file # cat ${1-/usr/lib/news/log} |sed '/(/s/> *(.*)/> /'|awk ' # utzoo + <...> hcr ncrcan sickkids $5 == "+" { rec[$4]++; } # utzoo - <....> duplicate $7 == "duplicate" { dup[$4]++; } $5 == "+" && NF > 6 { for (i = 7; i <= NF; ++i) { if ($i=="x"||$i=="unix"||$i=="misc"||$i=="games") snt["<archive>"]++ else snt[$i]++; } } END { for (sys in rec) {all[sys]=0;rT+=rec[sys]} for (sys in dup) {all[sys]=0;dT+=dup[sys]} for (sys in snt) {all[sys]=0;sT+=snt[sys]} all["Total"]=0 rec["Total"]=rT;dup["Total"]=dT;snt["Total"]=sT for (sys in all) print sys, 0, 0, 0, rec[sys]+0, dup[sys]+0, snt[sys]+0 }' | sed 's/[.][Uu][Uu][Cc][Pp]// s/,//' # # now gather UUCP transfer information # awk <${2-/usr/spool/uucp/SYSLOG.last} ' $6=="->" {w=substr($1,1,index($1,"!")-1);snt[w] += $7; snt["Total"] += $7; total[w] += $7;time[w] += $9;time["Total"] += $9} $6=="<-" {w=substr($1,1,index($1,"!")-1);rec[w]+=$7; rec["Total"]+=$7; total[w]+=$7;time[w] += $9;time["Total"] += $9} END { total["Total"] = snt["Total"] + rec["Total"] for (sys in total) print sys, total[sys], rec[sys]+0, snt[sys]+0,0,0,0,0,time[sys]} ' # # get UUCP backlog statistics # uuq | awk ' {w=substr($1,1,length($1)-1) print w,0,0,0,0,0,0,0,0,$2,$9+0 }' # # extract mail volumes queued from smail log file # if test -s /usr/lib/newsbin/maint/mailsize then # this bit is so we get the portion of the log file we haven't output before c=`wc -l /usr/spool/uucp/mail.log|sed -e 's/^[ ]*//' -e 's/[ ].*//'` ms=`cat /usr/lib/newsbin/maint/mailsize` if test "$c" -lt "$ms" then ms="$c" fi else ms=0 fi awk 'BEGIN{from[SITE]=0} NR<='$ms' {next} $5~/!/{ ++from[substr($5,1,index($5,"!")-1)] } $(NF-1)~/!/{ ++to[substr($(NF-1),1,index($(NF-1),"!")-1)] } END{ for (s in from) to[s] += 0 for (s in to) if (sys!=SITE) { print s,0,0,0,0,0,0,0,0,0,0,from[s]+0,to[s] tf+=from[s] tt+=to[s] } print "Total",0,0,0,0,0,0,0,0,0,0,tf,tt print NR >"/usr/lib/newsbin/maint/mailsize" }' SITE=$site /usr/spool/uucp/mail.log # # OK, we've extracted all the info, now format it # ) | awk ' { sys = substr($1,0,6) if (length($1) > length(n[sys])) n[sys] = $1 t[sys] += $2; r[sys] += $3; s[sys] += $4 a[sys] += $5; d[sys] += $6; q[sys] += $7; local += $8 i[sys] += $9; j[sys] += $10; b[sys] += $11 mf[sys]+= $12; mt[sys]+=$13 } END { for (sys in t) if (sys != SITE) { if (i[sys]==0) av=0 else av=int(t[sys]/i[sys]) if (substr(n[sys],1,1)=="<") t[sys]= 1 printf "%12d:%-12s%7d%6d%7d%6d%5d%8d%7d%6d", t[sys]-b[sys], \ n[sys], a[sys], d[sys], q[sys], mf[sys], mt[sys], \ int((r[sys]+999)/1000), int((s[sys]+999)/1000), av if (sys == "Total") printf("\n") else if (b[sys]<1) printf("%5d \n",j[sys]) else if (b[sys]==1) printf("%5d 1 hour\n",j[sys]) else if (b[sys]<=24) printf("%5d %2d hours\n", j[sys],b[sys]) else printf("%5d %4.1f days\n", j[sys],b[sys]/24) } else printf "%12d:%19d originated locally\n", -1000, a[sys] }' SITE=$site - | sort -r -n +0 -1| sed 's/.*:// s/ \([^ ]*[0-9]\)\([0-9][0-9][0-9][^0-9]\)/\1,\2/g s/ \([^ ]*[0-9]\)\([0-9][0-9][0-9][^0-9]\)/\1,\2/g /Total/ !s/ 0 / /g s/ *$// 1s/$/\ /' # /locally/s/ orig/0 orig/ # this line used to follow the /Total/ line in the sed script