v09i059: analysis of Bnews logfile
Brandon S. Allbery - comp.sources.misc
allbery at uunet.UU.NET
Wed Dec 13 13:25:47 AEST 1989
Posting-number: Volume 9, Issue 59
Submitted-by: jv at mh.nl (Johan Vromans)
Archive-name: scanlog.pl
The following perl program reads a Bnews logfile, and produces reports.
#---------------------------------- cut here ----------------------------------
#!/bin/sh
# This is a shell archive. Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by Johan Vromans <jv at mhres> on Sun Dec 10 14:53:47 1989
#
# This archive contains:
# scanlog.pl
#
# Error checking via wc(1) will be performed.
LANG=""; export LANG
echo x - scanlog.pl
sed 's/^@//' >scanlog.pl <<'@EOF'
#!/usr/bin/perl -s
# This program requires perl version 3.0, patchlevel 4 or higher
# @(#)@ scanlog 1.2 - scanlog.pl
# This program scans a BNews logfile (default "/usr/lob/news/log"),
# and produces statistics.
#
# It is able to generate three different reports. The reports are
# written to standard output. Unrecognized log entries are written to
# standard error, together with their line numbers in the logfile. These
# entries usually need manual inspection, or may be used to enhance the
# program logic.
#
# These are the reports:
#
# 1. Report of articles received, posted, ... for each host
#
# For each news host, the following messages are tallied and
# reported:
# Recv'd: # of articles received
# Posted: # of articles posted
# Xmit'd: # of articles sent to other hosts
# Ctrl: # of control messages
# Cancel: # of cancel messages
# Junked: # of articles moved to junk
# Dupl: # of duplicate, hence rejected, articles
#
# Report format:
#
# News logfile report from Dec 3 05:21 to Dec 10 04:27
#
# Host Recv'd Posted Xmit'd Ctrl Cancel Junked Dupl
# ------- ------- ------- ------- ------- ------- ------- -------
# hp4nl 11653 0 1140 37 30 48 9
# local 0 18 11 0 0 0 0
# ------- ------- ------- ------- ------- ------- ------- -------
# Total 11653 18 1151 37 30 48 9
#
# 2. Report of non-local newsgroups referenced
#
# For each newsgroup which was not localized, the references are
# tallied and reported:
#
# Unrecognized newsgroups from Dec 3 05:21 to Dec 10 04:27
#
# Newsgroup Refs
# --------------------------- ----
# tue.humour 1
# philnet.general 1
#
# 3. Report of new newsgroups created
#
# For each newsgroup is indicated if the group was created (i.e.
# via a newgroup message), and if the spool area was created (i.e.
# upon receipt of the first article).
#
# Newsgroups created from Dec 3 05:21 to Dec 10 04:27
#
# Newsgroup created: group dir
# --------------------------- ----- ---
# alt.prose.d +
# alt.recovery + +
#
# Usage:
#
# scanlog [ options ] [ logfile ]
#
# options:
# -report generate standard report
# -foreign generate report of unknown groups
# -new generate report of new groups
# default is all reports.
#
# logfile name of the logfile to use
# default is "/usr/lib/news/log"
#
# Copyright 1989 Johan Vromans
# Declared public domain in the hope it may be useful to others as
# well.
# run-time options
#
$do_report = defined $report;
$do_foreign = defined $foreign;
$do_new = defined $new;
# default values
$do_report = $do_new = $do_foreign = 1
unless ($do_report | $do_foreign | $do_new);
# default logfile
@@ARGV = ("/usr/lib/news/log") if $#ARGV < 0;
$firstdate = $lastdate = "";
# process logfile
while ( $line = <> ) {
chop ($line);
@a = split (/\t/, $line);
if ( $#a >= 2 ) { # need three fields
$lastdate = $a[0];
$firstdate = $lastdate unless $firstdate;
$host = $a[1];
$used{$host}++;
$msg = join(" ", at a[2..$#a]); # join, in case the message was split
# Analysis of messages
if ( $msg =~ /^received / ) {
$received{$host}++;
}
elsif ( $msg =~ /^Duplicate / ) {
$duplicate{$host}++;
}
elsif ( $msg =~ /^Cancelling / ) {
$cancelled{$host}++;
}
elsif ( $msg =~ /^Ctl Msg / ) {
$ctrl{$host}++;
if ( $' =~ /^(\S+) .*: newgroup / ) {
$created{$1} = "+";
$brandnew{$1} = "";
}
}
elsif ( $msg =~ /^linecount expected / ) {
# ignore
}
elsif ( $msg =~ /^No valid newsgroups / ) {
$junked{$host}++;
}
elsif ( $msg =~ /^posted / ) {
$posted{$host}++;
}
elsif ( $msg =~ / newsgroup (\S+) not localized$/ ) {
$foreign{$1}++;
}
elsif ( $msg =~ / sent to / ) {
$xmit{$host}++;
}
# Misc
elsif ( $msg =~ /^make newsgroup (\S+) in dir / ) {
$brandnew{$1} = "+";
}
# These entries are ignored
elsif ( $msg =~ /^Expired article / ) {
}
elsif ( $msg =~ /^Can't cancel .* non-existent$/ ) {
}
# Notify
else {
print STDERR "? $. $line\n";
}
}
else {
printf STDERR "? $. $line\n";
}
}
format std_hdr =
News logfile report from @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
"$firstdate to $lastdate"
Host Recv'd Posted Xmit'd Ctrl Cancel Junked Dupl
@.
format std_out =
@@<<<<<< @>>>>>> @>>>>>> @>>>>>> @>>>>>> @>>>>>> @>>>>>> @>>>>>>
$host, $received, $posted, $xmit, $ctrl, $cancelled, $junked, $duplicate
@.
if ( $do_report ) {
$^ = "std_hdr";
$~ = "std_out";
$host = $received = $posted = $ctrl = $cancelled =
$duplicate = $xmit = $junked = "--------";
write;
$Treceived = $Tposted = $Tduplicate = $Txmit =
$Tcancelled = $Tctrl = $Tjunked = 0;
foreach $host ( sort (keys (%used))) {
$Treceived += ($received = $received{$host});
$Tposted += ($posted = $posted{$host});
$Tduplicate += ($duplicate = $duplicate{$host});
$Tcancelled += ($cancelled = $cancelled{$host});
$Tctrl += ($ctrl = $ctrl{$host});
$Txmit += ($xmit = $xmit{$host});
$Tjunked += ($junked = $junked{$host});
write;
}
$host = $received = $posted = $ctrl = $cancelled =
$duplicate = $xmit = $junked = "--------";
write;
$host = "Total";
$received = $Treceived;
$posted = $Tposted;
$duplicate = $Tduplicate;
$xmit = $Txmit;
$junked = $Tjunked;
$ctrl = $Tctrl;
$cancelled = $Tcancelled;
write;
}
format for_hdr =
Unrecognized newsgroups from @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
"$firstdate to $lastdate"
Newsgroup Refs
---------------------------- ------
@.
format for_out =
@@<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>
$group, $refs
@.
if ( $do_foreign) {
$^ = "for_hdr";
$~ = "for_out";
$- = 0;
@foreign = sort (keys (%foreign));
if ( $#foreign >= 0 ) {
foreach $group ( @foreign ) {
$refs = $foreign{$group};
write;
}
}
}
format new_hdr =
Newsgroups created from @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
"$firstdate to $lastdate"
Newsgroup Created: group dir
---------------------------- ----- ---
@.
format new_out =
@@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @ @
$group, $cr, $dir
@.
if ( $do_new ) {
$^ = "new_hdr";
$~ = "new_out";
$- = 0;
@brandnew = sort (keys (%brandnew));
if ( $#brandnew >= 0 ) {
foreach $group ( @brandnew ) {
$dir = $brandnew{$group};
$cr = $created{$group};
write;
}
}
}
@EOF
set `wc -lwc <scanlog.pl`
if test $1$2$3 != 26910176847
then
echo ERROR: wc results of scanlog.pl are $* should be 269 1017 6847
fi
chmod 444 scanlog.pl
exit 0
--
Johan Vromans jv at mh.nl via internet backbones
Multihouse Automatisering bv uucp: ..!{uunet,hp4nl}!mh.nl!jv
Doesburgweg 7, 2803 PL Gouda, The Netherlands phone/fax: +31 1820 62944/62500
------------------------ "Arms are made for hugging" -------------------------
More information about the Comp.sources.misc
mailing list