Blame contrib/get-active/get-active2.pl

Packit 667938
#!/usr/bin/perl
Packit 667938
#
Packit 667938
# Author: Russ Wright, Lawrence Berkeley National Laboratory December 1997
Packit 667938
# Local modifications by Wee-Meng Lee  HP Singapore (colour/lynx)
Packit 667938
#    and Mark Mushkin  HP Santa Clara  (avg/max/min that suit our needs)
Packit 667938
#  Last Update on  Oct 14, 1997
Packit 667938
#
Packit 667938
# This will look at the $trafficDir directory for MRTG generated HTML
Packit 667938
# files, parse them and generate a listing of the most active interfaces
Packit 667938
# in a file called "active.htlm" in the same directory
Packit 667938
#
Packit 667938
# modify this if you wish as long as the above credit is not removed
Packit 667938
#
Packit 667938
# The only weird thing I do is to skip tunnel interfaces (see code below)
Packit 667938
Packit 667938
#
Packit 667938
# TWO VARIABLES YOU MUST CHANGE
Packit 667938
#
Packit 667938
$trafficDir="/usr/local/httpd/htdocs";
Packit 667938
#
Packit 667938
# I put it in a file and include it because I use it in other scripts
Packit 667938
# if you don't - comment this out and uncomment the above line
Packit 667938
#require "trafficdir.include";
Packit 667938
Packit 667938
# CHANGE THIS to your organization name
Packit 667938
$orgName="HP Singapore - IT Site Infrastructure";
Packit 667938
Packit 667938
$outFile = "$trafficDir/active.html";
Packit 667938
Packit 667938
# The following may be changed and I admit that it isn't perfect how I decide
Packit 667938
# to highlight stuff.
Packit 667938
#
Packit 667938
Packit 667938
#values over this will be displayed in the specified color
Packit 667938
#  these are for the MAX values
Packit 667938
$maxAMBER = 70;
Packit 667938
$maxRED = 90;
Packit 667938
# these are for the Average and Current values
Packit 667938
$AMBER = 30;
Packit 667938
$RED = 60;
Packit 667938
Packit 667938
#Defining the colors
Packit 667938
$REDcolor="#ff0000";
Packit 667938
$AMBERcolor="#ffff00";
Packit 667938
$GREENcolor="#00ff00";
Packit 667938
Packit 667938
# Refresh interval (minutes) for HTML doc
Packit 667938
$refreshInt=10;
Packit 667938
#
Packit 667938
$refreshSeconds=60*$refreshInt;
Packit 667938
#
Packit 667938
# Max % to look at (if the Max is lower then we do not include in the list)
Packit 667938
#$maxThresh = 5;
Packit 667938
$maxThresh = 0;
Packit 667938
$theDate=`date +"%m/%d/%y %H:%M"`;
Packit 667938
Packit 667938
open(LS, "ls $trafficDir/*.[0-9]*.html|") || die "Couldn't list directory";
Packit 667938
while (<LS>) {
Packit 667938
        chop;
Packit 667938
        $theFile = $_;
Packit 667938
        open(IN, "$theFile") || die "Couldn't open $theFile\n";
Packit 667938
        $i=0;
Packit 667938
        while (<IN>) {
Packit 667938
                if (/Traffic Analysis for .*[0-9]
(.*)<\/H1> /) {
Packit 667938
                        if ($1 =~ /tunnel/i) {
Packit 667938
# skip tunnels
Packit 667938
                                last;
Packit 667938
                        }
Packit 667938
                        $desc{$theFile} = $1;
Packit 667938
                }
Packit 667938
                if (/\(([0-9.]*\%)\)/) {
Packit 667938
                        $theList{$theFile}[$i++] = $1;
Packit 667938
                }
Packit 667938
        }
Packit 667938
        close(IN);
Packit 667938
}
Packit 667938
close(LS);
Packit 667938
Packit 667938
#
Packit 667938
#
Packit 667938
# the array contains all the percentages: the following 6 for
Packit 667938
#               daily, weekly, monthly, yearly
Packit 667938
#
Packit 667938
# 0 Max In
Packit 667938
# 1 Avg In
Packit 667938
# 2 Cur In
Packit 667938
# 3 Max Out
Packit 667938
# 4 Avg Out
Packit 667938
# 5 Cur Out
Packit 667938
#
Packit 667938
#
Packit 667938
Packit 667938
open(OUT, ">$outFile") || die "Couldn't create $outFile";
Packit 667938
&PrintHead;
Packit 667938
Packit 667938
foreach $key (keys %theList) {
Packit 667938
# get sum of both max in and out
Packit 667938
#        $sumInOut = $theList{$key}[0] + $theList{$key}[4]; # use for max
Packit 667938
         $sumInOut = $theList{$key}[1] + $theList{$key}[4]; # use for avg
Packit 667938
        if ( ($sumInOut > $maxThresh) ||
Packit 667938
            ($curIn > $highlightThresh) ||
Packit 667938
            ($curOut > $highlightThresh) ||
Packit 667938
            ($avgIn > $highlightThresh) ||
Packit 667938
            ($avgOut > $highlightThresh) ) {
Packit 667938
                $printList{$key} = $sumInOut;
Packit 667938
        }
Packit 667938
}
Packit 667938
Packit 667938
Packit 667938
foreach $key (sort by_percent (keys %printList)) {
Packit 667938
        $theRouter = $key;
Packit 667938
        $theRouter =~ s/.*\///;
Packit 667938
        $theRouter =~ s/\.html//;
Packit 667938
        $theFile = $key;
Packit 667938
        $theFile =~ s/.*traffic\///;
Packit 667938
        $maxIn= $theList{$key}[0];
Packit 667938
        $avgIn= $theList{$key}[1];
Packit 667938
        $curIn= $theList{$key}[2];
Packit 667938
        $maxOut= $theList{$key}[3];
Packit 667938
        $avgOut= $theList{$key}[4];
Packit 667938
        $curOut= $theList{$key}[5];
Packit 667938
Packit 667938
        printf(OUT "");
Packit 667938
Packit 667938
        if ($maxIn > $maxRED) {
Packit 667938
                printf(OUT "<CENTER>$maxIn</CENTER>");
Packit 667938
        } elsif ($maxIn > $maxAMBER) {
Packit 667938
                printf(OUT "<CENTER>$maxIn</CENTER>");
Packit 667938
        } else {
Packit 667938
                printf(OUT "<CENTER>$maxIn</CENTER>");
Packit 667938
        }
Packit 667938
        printf(OUT "    ");
Packit 667938
Packit 667938
        if ($maxOut > $maxRED) {
Packit 667938
                printf(OUT "<CENTER>$maxOut</CENTER>");
Packit 667938
        } elsif ($maxOut > $maxAMBER) {
Packit 667938
                printf(OUT "<CENTER>$maxOut</CENTER>");
Packit 667938
        } else {
Packit 667938
                printf(OUT "<CENTER>$maxOut</CENTER>");
Packit 667938
        }
Packit 667938
        printf(OUT "    ");
Packit 667938
Packit 667938
        if ($avgIn > $RED) {
Packit 667938
                printf(OUT "<CENTER>$avgIn</CENTER>");
Packit 667938
        } elsif ($avgIn > $AMBER) {
Packit 667938
                printf(OUT "<CENTER>$avgIn</CENTER>");
Packit 667938
        } else {
Packit 667938
                printf(OUT "<CENTER>$avgIn</CENTER>");
Packit 667938
        }
Packit 667938
        printf(OUT "    ");
Packit 667938
Packit 667938
        if ($avgOut > $RED) {
Packit 667938
                printf(OUT "<CENTER>$avgOut</CENTER>");
Packit 667938
        } elsif ($avgOut > $AMBER) {
Packit 667938
                printf(OUT "<CENTER>$avgOut</CENTER>");
Packit 667938
        } else {
Packit 667938
                printf(OUT "<CENTER>$avgOut</CENTER>");
Packit 667938
        }
Packit 667938
        printf(OUT "    ");
Packit 667938
Packit 667938
        if ($curIn > $RED) {
Packit 667938
                printf(OUT "<CENTER>$curIn</CENTER>");
Packit 667938
        } elsif ($curIn > $AMBER) {
Packit 667938
                printf(OUT "<CENTER>$curIn</CENTER>");
Packit 667938
        } else {
Packit 667938
                printf(OUT "<CENTER>$curIn</CENTER>");
Packit 667938
        }
Packit 667938
        printf(OUT "    ");
Packit 667938
Packit 667938
        if ($curOut > $RED) {
Packit 667938
                printf(OUT "<CENTER>$curOut</CENTER>");
Packit 667938
        } elsif ($curOut > $AMBER) {
Packit 667938
                printf(OUT "<CENTER>$curOut</CENTER>");
Packit 667938
        } else {
Packit 667938
                printf(OUT "<CENTER>$curOut</CENTER>");
Packit 667938
        }
Packit 667938
        printf(OUT "    ");
Packit 667938
Packit 667938
        printf(OUT "$theRouter

\n");

Packit 667938
Packit 667938
}
Packit 667938
Packit 667938
&PrintTail;
Packit 667938
close(OUT);
Packit 667938
Packit 667938
sub by_percent {
Packit 667938
        $printList{$b} <=> $printList{$a};
Packit 667938
}
Packit 667938
Packit 667938
sub PrintTail
Packit 667938
{
Packit 667938
print OUT <
Packit 667938
Packit 667938
</BODY>
Packit 667938
</HTML>
Packit 667938
EOF
Packit 667938
}
Packit 667938
Packit 667938
sub PrintHead
Packit 667938
{
Packit 667938
$expTime=&expistr;
Packit 667938
Packit 667938
print OUT <
Packit 667938
<HTML>
Packit 667938
<HEAD>
Packit 667938
<TITLE>$orgName Most Active Interface</TITLE>
Packit 667938
</HEAD>
Packit 667938
<META HTTP-EQUIV="Expires" CONTENT="$expTime">
Packit 667938
<META HTTP-EQUIV="Refresh" CONTENT=$refreshSeconds>
Packit 667938
<BODY bgcolor=#ffffff>
Packit 667938

Most Active Interfaces as of $theDate

Packit 667938

The following are sorted by the sum of the daily average input

Packit 667938
and daily average output (In Avg% + Out Avg%) interface octets. 
Packit 667938
This table is updated every $refreshInt minutes and will automatically 
Packit 667938
be updated if you are using Netscape.

Packit 667938
Packit 667938
Value ranges: 

Packit 667938
MAX Values are: <FONT COLOR="#ff0000">RED if \> $maxRED </font>, and 
Packit 667938
YELLOW if \> $maxAMBER </font>

Packit 667938

Packit 667938
Average & Current Values are: <FONT COLOR="#ff0000">RED if \> $RED </font>, and YELLOW if \> $AMBER </font>

Packit 667938

Packit 667938
Packit 667938
Packit 667938
In Max %
Packit 667938
Out Max %
Packit 667938
In Avg %
Packit 667938
Out Avg %
Packit 667938
In Current %
Packit 667938
Out Current %
Packit 667938
Interface
Packit 667938

Packit 667938
EOF
Packit 667938
}
Packit 667938
Packit 667938
sub expistr {
Packit 667938
  my ($time) = time+$refreshInt*60+5;
Packit 667938
  my ($wday) = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[(gmtime($time))[6]];
Packit 667938
  my ($month) = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep',
Packit 667938
                 'Oct','Nov','Dec')[(gmtime($time))[4]];
Packit 667938
  my ($mday,$year,$hour,$min,$sec) = (gmtime($time))[3,5,2,1,0];
Packit 667938
  if ($mday<10) {$mday = "0$mday"};
Packit 667938
  if ($hour<10) {$hour = "0$hour"};
Packit 667938
  if ($min<10) {$min = "0$min";}
Packit 667938
  if ($sec<10) {$sec = "0$sec";}
Packit 667938
  return "$wday, $mday $month ".($year+1900)." $hour:$min:$sec GMT";
Packit 667938
}