[news.admin] News/Mail status Extraction

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