Cover V07, I05
Article
Figure 1
Figure 2
Listing 1
Listing 2
Listing 3
Listing 4
Listing 5

may98.tar


Listing 3: Parser for netstat log file

#!/usr/local/bin/perl -w

#
#  netstats_log_to_stats.pl  -  Parse the log made by netstat into
#                               columns suitable for plotting.
#
#     Usage:  netstats_log_to_stats.pl <logfile>
#
#     Example:
#
#        % netstats_log_to_stats.pl netstats.messages > netstats.dat
#
#     Input file:
#
#          ctime   OutPkts Collisions
#        --------- ------- ----------
#        883637463 2612755 50267
#        883641065 2615088 50369
#        883644663 2617414 50501
#        883648263 2619748 50575
#
#     Output file:
#                           %collis    collis    total
#          ctime      day   per min   this min  collis
#        ---------   -----  -------   --------  ------
#        883641065    0.04    0.07       102     50369
#        883644663    0.08    0.09       132     50501
#        883648263    0.12    0.05       74      50575


$OutPkts = 0;
$Collis = 0;
$OutPkts_prev = 0;
$Collis_prev = 0;
$time_prev = 0;

while (<>) {

if (/\d+/) {
# Incoming lines look like this:
#     ctime   OutPkts Collisions
#   --------- ------- ----------
#   873077544  94257  462

($statdate, $OutPkts, $Collis) = split();

# Only set $FirstStatDate once, so that you can string multiple
# invocations together
if (!(defined $FirstStatDate)) { $FirstStatDate = $statdate; }

if (($OutPkts < $OutPkts_prev) || ($statdate == $FirstStatDate)) {

# Then the host was rebooted.  Instead of printing this entry,
# output a blank line. Go ahead and set the prev variables so
# that the subsequent statistics will be relative to the
# skipped entry.

print "\n";

} else {

# This is the usual case
$OutPkts_this_entry = $OutPkts - $OutPkts_prev;
$Collis_this_entry = $Collis - $Collis_prev;
$seconds_this_entry = $statdate - $time_prev;
$minutes_this_entry = ($seconds_this_entry / 60);
$Collis_Ptg_per_minute_this_entry =
(($Collis_this_entry / $OutPkts_this_entry) * 100) /
$minutes_this_entry;

# convert seconds --> days
$statday = (($statdate - $FirstStatDate)/60/60/24);

printf "%d\t%.2f\t%.2f\t%d\t%d\n", $statdate, $statday,
$Collis_Ptg_per_minute_this_entry,
$Collis_this_entry, $Collis;
}

$OutPkts_prev = $OutPkts;
$Collis_prev = $Collis;
$time_prev = $statdate;
}
}

# End of File