Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10 5/3/83; site umcp-cs.UUCP
Path: utzoo!watmath!clyde!floyd!harpo!seismo!rlgvax!cvl!umcp-cs!fred
From: fred@umcp-cs.UUCP
Newsgroups: net.sources
Subject: improved awk scripts for summarizing uucp log files
Message-ID: <5548@umcp-cs.UUCP>
Date: Wed, 29-Feb-84 12:03:27 EST
Article-I.D.: umcp-cs.5548
Posted: Wed Feb 29 12:03:27 1984
Date-Received: Fri, 2-Mar-84 13:38:56 EST
Organization: Univ. of Maryland, Computer Science Dept.
Lines: 223

Awhile back, Art Zemon  submitted a couple of awk
scripts for summarizing /usr/spool/uucp/LOGFILE and /usr/spool/uucp/SYSLOG.
 submitted a script for summarizing the output of the
LOGFILE summarizer script.

I've combined the scripts, and added some features. These scripts
are the result.  Note that under Berkeley Unix they are directly
executable.

==========================================================================
summ_LOGFILE
==========================================================================
#! /bin/awk -f
#
# USEAGE: summ_LOGFILE /usr/spool/uucp/LOGFILE
#
# 14-Dec-83
#
# This script is based on one written by Art Zemon of FileNet Corp.
# It has been modified locally (by Fred Blonder ) to
# change the output format somewhat, and to sort it into
# alphabetical order by system name.
#
BEGIN		{
			if ( FILENAME == "-" ) {
				print "Useage: summ_LOGFILE ";
				exit
				}

			no_dev = 0;
		}
$4 ~ /NO/	{
			if ( $6 == "DEVICE)" ) {
				temp = sprintf("%s\t%s", $2, $3);
				if ( nose[no_dev - 1] != temp )
					nose[no_dev++] = temp;
			}
		}

$5 ~ /\(call/	{
			if ( $4 == "SUCCEEDED" )
				++succeed[$7];
			else if ( $4 == "FAILED" )
				++fail[$7];
			else if ( $4 == "LOCKED" )
				++locked[$7];
			else
				print $0
		}

$4 ~ /OK/	{
			if ( $5 == "(startup)" )
				++talk[$2];
			else if ( $5 == "(conversation" )
				++complete[$2];
		}

END		{
			for ( i in succeed )
				list[i] = i;
			for ( i in fail )
				list[i] = i;
			for ( i in locked )
				list[i] = i;
			for ( i in talk )
				list[i] = i;

			printf("UUCP success/failure summary\n\n");
			printf("System   poll  succ fail lock  died\n\n");
			for ( ; ; ) {
				first = "~~~~~~"
				for ( i in list ) {
					if ( list[i] == i && i < first )
						first = i;
				}
				if ( first == "~~~~~~" )
					break;
				i = first;
				list[i] = "";
				if ( ( talk[i] - succeed[i] ) < 0 )
					printf("%-7s    ?  error %3d  %3d  %3d\n", i, fail[i], locked[i], talk[i] - complete[i]);
				else
					printf("%-7s  %3d   %3d  %3d  %3d  %3d\n", i, talk[i] - succeed[i], succeed[i], fail[i], locked[i], talk[i] - complete[i]);
			}
			if ( no_dev > 0 )
				printf("\nNO AVAILABLE DEVICE\n");
				for(i=0; i) to
# change the output format somewhat, and to sort it into
# alphabetical order by system name.
#
BEGIN		{
			if ( FILENAME == "-" ) {
				print "Useage: summ_SYSLOG ";
				exit
				}

		}
$4 ~ /received/	{
			from[$2] += $6;
			from_time[$2] += $8;
			total_from += $6;
			total_from_time += $8;
			see_saw[$2] += $6
			++users[$1];
		}

$4 ~ /sent/	{
			to[$2] += $6;
			to_time[$2] += $8;
			total_to += $6;
			total_to_time += $8;
			see_saw[$2] -= $6;
			++users[$1];
		}

END		{
			print "Received:"
			print "	system    bytes    time (minutes)\n"
			for ( ; ; ) {
				first = "~~~~~~"
				for ( i in from )
					if ( from[i] != "*" && i < first )
						first = i;
				if ( first == "~~~~~~" )
					break;
				i = first;
				printf("\t%-7s %7d  %6.2f\n", i, from[i], from_time[i] / 60);
				from[i] = "*";
				}
			print "	        -------  ------";
			printf("\tTotals  %7d %7.2f\n", total_from, total_from_time / 60);
			print "\nSent:"
			print "	system    bytes    time (minutes)\n"
			for ( ; ; ) {
				first = "~~~~~~"
				for ( i in to )
					if ( to[i] != "*" && i < first )
						first = i;
				if ( first == "~~~~~~" )
					break;
				i = first;
				printf("\t%-7s %7d  %6.2f\n", i, to[i], to_time[i] / 60);
				to[i] = "*";
				}
			print "	        -------  ------";
			printf("\tTotals  %7d %7.2f\n", total_to, total_to_time / 60);
			print
			print "Balance of bytes ( < 0 means more sent than received)\n"
			for ( ; ; ) {
				first = "~~~~~~"
				for ( i in see_saw )
					if ( see_saw[i] != "*" && i < first )
						first = i;
				if ( first == "~~~~~~" )
					break;
				i = first;
				printf("\t%-7s %7d\n", i, see_saw[i]);
				see_saw[i] = "*";
				}
			print
			print "Messages (by user)\n"
			for ( ; ; ) {
				highest = 0
				for ( i in users )
					if ( users[i] > highest ) {
						highest = users[i];
						first = i;
						}
				if ( highest == 0 )
					break;
				i = first;
				printf("\t%-7s %3d\n", i, users[i]);
				users[i] = "";
				}
			}
==========================================================================

The output of summ_LOGFILE looks like:

	UUCP connection status for 24 hour period ending \
	Wed Feb 29 05:25:41 EST 1984

	UUCP success/failure summary

	System   poll  succ fail lock  died

	aicvax     0     1    0    0    0
	allegra    6     0    2    0    0
	am-vax     ?  error   0    0    0
	aplvax     0     3   11    2    1
	brl-bmd    0     1    0    0    0
	bsos       0    21    4    0    0
	cal-uni    0    13    2    1    2
	cp1        1     0    3    0    0
	cvl        1    35    3    0    4
	dbl        0    24    2    1    0
	eneevax    3    23    3    5    2
	rlgvax     2     2    0    0    0
	seismo     2     9    4    0    1
	wb-chi     0     0   24    0    0

The fields are: number of times you were polled by that system,
number of times you polled that system, unsuccessful attempted
polls, polls which failed due to resources being locked, and number
of times uucico started up, but didn't terminate normally. The
``error'' message indicates that a poll suceeeded in connecting
and logging in, but uucico didn't start up correclty.

					Fred Blonder
					harpo!seismo!umcp-cs!fred