1#!/bin/sh
2PATH=:/bin:/usr/bin:/usr/ucb
3export PATH
4rm -f /tmp/cmds /tmp/callsto /tmp/callsfrom /tmp/inuse /tmp/outuse
5touch /tmp/cmds /tmp/inuse /tmp/outuse
6cd /usr/spool/uucp
7if [ $# -gt 0 ]
8then
9	what="$1/uucico/* $1/uux*/* $1/xferstats/*"
10else
11	if [ -f LOGFILE ]
12	then
13		what="LOGFILE SYSLOG"
14	else
15		what="LOG/uucico/* LOG/uux*/* LOG/xferstats/*"
16	fi
17fi
18sed -e "s/PATH=.*PATH;//
19/REQUEST/d"  $what |
20/bin/awk '
21BEGIN { fmon = fday = ftime = 99
22	lmon = lday = ltime = 0 }
23$4 ~ /SUCCEEDED|OK/ {
24	t = substr($3,index($3,"-")+1,5)
25	split(t,time,":")
26	if($5 !~ /conversation/) {
27		startup[$2] = time[1]*60+time[2]
28		date[$2] = substr($3, 2, index($3,"-")-2)
29	}
30}
31$4 ~ /FAILED|CAUGHT|OK|TIMEOUT/ {
32	if(startup[$2] == 0 || $5 ~ /startup/)
33		continue
34	t = substr($3,index($3,"-")+1,5)
35	split(t,time,":")
36	elapsed = time[1]*60+time[2] - startup[$2]
37	if (elapsed < 0 )
38		elapsed += 24*60
39	if (elapsed == 0)
40		elapsed = 1
41	if(callto[$2] ){
42		totcallto[$2] += elapsed
43		numcallto[$2]++
44		printf("%s\t%s\t%02d:%02d - %02d:%02d\n",$2,date[$2],startup[$2]/60,startup[$2]%60,time[1],time[2])>>"/tmp/callsto"
45	}else{
46		totcallby[$2] += elapsed
47		numcallby[$2]++
48		printf("%s\t%s\t%02d:%02d - %02d:%02d\n",$2,date[$2],startup[$2]/60,startup[$2]%60,time[1],time[2])>>"/tmp/callsfrom"
49	}
50	callto[$2] = 0
51	startup[$2] = 0
52}
53$4 ~ /SUCCEEDED/{
54	if ($5 ~ /call/)
55		callto[$2]++
56}
57$4 ~ /FAILED|CAUGHT/{
58	if ($5 ~ /call|conversation|SIGNAL/ )
59		failed[$2]++
60}
61$5 ~ /sent/{
62	sentbytes[$2] += $7
63	sentfiles[$2] ++
64	seconds[$2] += $9
65	retries[$2] += $11
66	havout = 1
67	outuse[$1] = $1
68	outusebytes[$1] += $7
69	outusefiles[$1] ++
70	outusesecs[$1] += $9
71}
72$5 ~ /received/{
73	recbytes[$2] += $7
74	recfiles[$2] ++
75	seconds[$2] += $9
76	retries[$2] += $11
77	havin = 1
78	inuse[$2 "!" $1] = $2 "!" $1
79	inusebytes[$2 "!" $1] += $7
80	inusefiles[$2 "!" $1] ++
81	inusesecs[$2 "!" $1] += $9
82}
83$5 ~/XQT/{
84	if( $7 ~ /!|@/ && $6 ~ /rmail/)
85		printf("%s\t%s\t%-8s\t%s\n",substr($3,2,index($3,"-")-2),substr($3,index($3,"-")+1,5),$2 "!" $4,$7)>>"/tmp/cmds"
86}
87$4 ~/XQT/{
88	if ($1 ~ /uucp|daemon|root|news/ || $7 != "rmail")
89		continue
90	printf("%s\t%s\t%-8s\t%s!%s\n",substr($3,2,index($3,"-")-2),substr($3,index($3,"-")+1,5),$1,$2,$7)>>"/tmp/cmds"
91}
92$10 ~/secs/ {
93	curtime = substr($4, 5, 6)
94	dtmp = curtime - int($9) - lasttime[$2]
95	if (dtmp > 0 && dtmp < 20)
96		dead[$2] += dtmp
97	lasttime[$2] = curtime
98	live[$2] += $9
99}
100{
101	n = index ($3, "/")
102	thismon = 0
103	if (n > 0 ) {
104		thismon = int(substr($3, 2, n-2))
105		if (lmon < thismon)
106			lmon = thismon
107		if (thismon < fmon)
108			fmon = thismon
109	}
110	m = index ($3, "-")
111	n++
112	thisday = 0
113	if( (m-n) > 0 ) {
114		thisday = int(substr($3, n, m-n))
115		if ((lday < thisday) && (lmon == thismon) || ldaymon != lmon) {
116			lday = thisday
117			ldaymon = thismon
118		}
119		if ((thisday < fday) && (fmon == thismon) || fdaymon != fmon) {
120			fday = thisday
121			fdaymon = thismon
122		}
123	}
124	thistime = substr($3,m+1,5)
125	if ((ltime < thistime) && (lmon == thismon) && (lday == thisday))
126		ltime = thistime
127	if ((thistime < ftime) && (fmon == thismon) && (fday == thisday))
128		ftime = thistime
129}
130END{
131	printf("\n\t\t\t\tUUCP Traffic Summary\n\n")
132	printf("\t\t\t\tFrom %d/%d %s To %d/%d %s\n\n",fmon,fday,ftime,lmon,lday,ltime)
133	printf("\t      Calls    Minutes     Files       Bytes      Effective   Unused\n")
134	printf("Site[Failed] To/From   To/From    To/From   Sent/Received  Baudrate  Bandwidth\n")
135	for( i in startup ){
136		if(seconds[i]== 0)seconds[i]++
137		if(dead[i]+live[i])
138			percent = dead[i]*100/(dead[i]+live[i])
139		else
140			percent = 0
141		if (failed[i] || retries[i]) {
142			temp = i "[" failed[i]
143			if (retries[i])
144				temp = temp "/" retries[i] "]"
145			else
146				temp = temp "]"
147		} else
148			temp = i
149		printf("%-12s %3d/%-3d %5d/%-5d %4d/%-4d %8d/%-8d %6d  %5d%%\n",\
150		temp,numcallto[i],numcallby[i],\
151		totcallto[i],totcallby[i],\
152		sentfiles[i],recfiles[i],\
153		sentbytes[i],recbytes[i],\
154		(recbytes[i]+sentbytes[i])*8/seconds[i],\
155		percent)
156	}
157	printf("\n\n\n\t\t\t\tOriginating Users\n\n")
158	printf("User\t\t       Minutes     Files       Bytes\n\n")
159	if (havout == 1) {
160		for (i in outuse) {
161			printf("%-21s %5d    %7d      %8d\n", i,\
162				(outusesecs[i]+30)/60,\
163				outusefiles[i], outusebytes[i]) >> "/tmp/outuse"
164		}
165	}
166	if (havin == 1) {
167		for (i in inuse) {
168			printf("%-21s %5d    %7d      %8d\n", i,\
169				(inusesecs[i]+30)/60,\
170				inusefiles[i], inusebytes[i]) >> "/tmp/inuse"
171		}
172	}
173}'
174
175sort /tmp/outuse
176echo " "
177sort /tmp/inuse
178echo " "
179echo " "
180echo " "
181echo "		Long Distance Calls"
182echo
183echo "To	Day	Start - End	    From    Day     Start - End"
184cat >/tmp/$$local<<!!!
185/^ut/d
186!!!
187sed -f /tmp/$$local /tmp/callsto | /bin/awk '
188{
189	if (last == $1)
190		pr = ""
191	else {
192		last = $1
193		pr = $1
194	}
195	if (pr == "" && date == $2)
196		pd = ""
197	else {
198		date = $2
199		pd = $2
200	}
201	printf("%s\t%s\t%s - %s\n",pr,pd,$3,$5)
202}'>/tmp/$$a
203sed -f /tmp/$$local /tmp/callsfrom | /bin/awk '
204{
205	if (last == $1)
206		pr = ""
207	else {
208		last = $1
209		pr = $1
210	}
211	if (pr == "" && date == $2)
212		pd = ""
213	else {
214		date = $2
215		pd = $2
216	}
217	printf("%s\t%s\t%s - %s\n",pr,pd,$3,$5)
218}'>/tmp/$$b
219pr -t -m /tmp/$$a /tmp/$$b | uniq
220rm -f /tmp/$$[ab]
221sed -e "
222/rmail	seismo!/d
223/rmail	rlgvax!/d
224/rmail	rochester!/d
225/rmail	umcp-cs!/d
226/rmail	brl-tgr!/d
227/rmail	brl-vgr!/d
228s/)$//
229" /tmp/cmds >/tmp/$$c
230if [ -s /tmp/$$c ]
231then
232	echo " "
233	echo " "
234	echo " "
235	echo "		Outgoing Mail from Other Sites"
236	echo
237	echo "Day	Time	From		To"
238	cat /tmp/$$c
239fi
240rm -f /tmp/cmds /tmp/$$* /tmp/callsto /tmp/callsfrom /tmp/inuse /tmp/outuse
241