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