xref: /original-bsd/usr.bin/uucp/UUAIDS/sys_awk (revision ce06cd54)
1# An awk script for printing a pretty report of UUCP activities from the
2# UUCP SYSLOG - Erik E. Fair	October 2, 1984
3#
4# v7 UUCP
5$4 == "received" {
6	sysname[$2] = $2;
7	by_rec[$2] += $6;
8	sec_rec[$2] += $8;
9	sys_xf[$2] ++;
10}
11#
12# 4.2 BSD UUCP
13$5 == "received" {
14	sysname[$2] = $2;
15	by_rec[$2] += $7;
16	sec_rec[$2] += $9;
17	sys_xf[$2] ++;
18}
19#
20# System V UUCP
21$6 == "<-" {
22	$1 = substr($1, 1, (index($1, "!") - 1));
23	sysname[$1] = $1;
24	by_rec[$1] += $7;
25	sec_rec[$1] += $9;
26	sys_xf[$1] ++;
27}
28#
29# v7 UUCP
30$4 == "sent" {
31	sysname[$2] = $2;
32	by_xmt[$2] += $6;
33	sec_xmt[$2] += $8;
34	sys_xf[$2] ++;
35}
36#
37# 4.2 BSD UUCP
38$5 == "sent" {
39	sysname[$2] = $2;
40	by_xmt[$2] += $7;
41	sec_xmt[$2] += $9;
42	sys_xf[$2] ++;
43}
44#
45# System V UUCP
46$6 == "->" {
47	$1 = substr($1, 1, (index($1, "!") - 1));
48	sysname[$1] = $1;
49	by_xmt[$1] += $7;
50	sec_xmt[$1] += $9;
51	sys_xf[$1] ++;
52}
53END {
54#
55# print a report header
56	printf("System     Xfers  Bytes rec  Bytes xmt   Connect  Avg Xf  Avg rec  Avg xmt\n")
57	for(i in sysname) {
58#
59# sort report by most connect time (selection sort)
60		first = 0;
61		for(j in sysname) {
62			if (sys_xf[j] > 0) {
63				tmp1 = sec_xmt[j];
64				tmp2 = sec_rec[j];
65# Stupid AWK bug - needs a simple expression
66				time = (tmp1 + tmp2);
67				if (time > first) {
68					first = time;
69					sys = sysname[j];
70				}
71			}
72		}
73#
74# 4.2 BSD awk seems to have problems. This check should not be necessary.
75# Oddly enough, this problem also shows up in System V. WHY???
76		if (sys_xf[sys] != 0) {
77#
78# time for some bean counting
79			tmp1       = sec_xmt[sys];
80			tmp2       = sec_rec[sys];
81# Stupid AWK bug - needs a simple expression
82			time       = (tmp1 + tmp2);
83			hours      = time / 3600;
84			sec        = time % 3600;
85			min        = sec / 60;
86			sec        %= 60;
87			tot_xf     += sys_xf[sys];
88			tot_by_rec += by_rec[sys];
89			tot_by_xmt += by_xmt[sys];
90			tot_time   += time;
91#
92# protect myself against mathematical crime (divide by zero)
93			if (sec_rec[sys] == 0)
94				sec_rec[sys] = 1;
95			if (sec_xmt[sys] == 0)
96				sec_xmt[sys] = 1;
97#
98# print a pretty system report (god what an awful printf format...)
99			printf("%-8s%8d%11d%11d%4d:%.2d:%.2d%8d%9d%9d\n", \
100sysname[sys], sys_xf[sys], by_rec[sys], by_xmt[sys], hours, min, sec, \
101((by_rec[sys] + by_xmt[sys]) / sys_xf[sys]), \
102(by_rec[sys]  / sec_rec[sys]), \
103(by_xmt[sys]  / sec_xmt[sys]));
104#
105# make certain we will not see this system again... (selection sort)
106			sys_xf[sys] = 0;
107		}
108	}
109#
110# calculate time split for total time (and print totals [*shudder*])
111	hours = tot_time / 3600;
112	sec = tot_time % 3600;
113	min = sec / 60;
114	sec %= 60;
115	printf("\n%-8s%8d%11d%11d%4d:%.2d:%.2d\n", \
116	"TOTALS", tot_xf, tot_by_rec, tot_by_xmt, hours, min, sec);
117}
118