Blame contrib/ovmrtg/ovadd

Packit 667938
#!/usr/local/bin/perl5
Packit 667938
# -*- mode: Perl -*-
Packit 667938
##################################################################
Packit 667938
# This file controls the creation of all the MRTG config files from OV
Packit 667938
##################################################################
Packit 667938
# Created by Laurie Gellatly <gellatly@one.net.au>
Packit 667938
# See newrtrov.txt for a description of what is performed
Packit 667938
#################################################################
Packit 667938
#
Packit 667938
# Distributed under the GNU copyleft
Packit 667938
#
Packit 667938
# $Id: ovadd,v 1.1.1.1 2002/02/26 10:16:36 oetiker Exp $
Packit 667938
#
Packit 667938
use Socket;
Packit 667938
use strict;
Packit 667938
use vars '$DEBUG';
Packit 667938
my $DEBUG = 0;
Packit 667938
my $company = "Company";
Packit 667938
my $rundir = "/opt/mrtg/run";
Packit 667938
my $webdir = "/var/opt/ns-fasttrack/docs/mrtg/";
Packit 667938
my $cronfile = "mrtgc";
Packit 667938
my $roothtml = "routers.html";
Packit 667938
my $buildhtf = "buildht";
Packit 667938
my $dnsfile = "ovmrtgc.csv";
Packit 667938
Packit 667938
# Change the next line to be " &" to submit all jobs at once
Packit 667938
my $backgrnd = " ";
Packit 667938
Packit 667938
my($at,$router,$sysn,$sysncfg,$sysnhtml,$head,$cnt);
Packit 667938
my(@buildhtt,@sysipnms,@mrtgc,@sysnms); 
Packit 667938
Packit 667938
sub main {
Packit 667938
Packit 667938
  $router = $ARGV[0];
Packit 667938
  die <
Packit 667938
Packit 667938
USAGE: ovadd 'router IP ADDRESS/S'
Packit 667938
Packit 667938
EXAMPLE:  ovadd 193.21.1.2  10.21.1.2 10.21.1.1
Packit 667938
Packit 667938
Packit 667938
USAGE
Packit 667938
   chdir $rundir;
Packit 667938
# Find the IP Address and SNMP sysNames from the arguments given
Packit 667938
   @sysipnms=`perl ovsysnms @ARGV`;
Packit 667938
   chomp(@sysipnms);
Packit 667938
# Generate the interfaces to collect on
Packit 667938
   `perl ovcols + @ARGV > collects`;
Packit 667938
# Start the collection happening on these interfaces
Packit 667938
   `xnmcollect -merge collects`;
Packit 667938
   `xnmcollect -event`;
Packit 667938
   for ($cnt = 0; $cnt < @sysipnms ; $cnt++){
Packit 667938
      ($router,$sysn) = split /\,/, $sysipnms[$cnt];
Packit 667938
      $sysn = lc($sysn);
Packit 667938
      $sysncfg = $sysn.".cfg";
Packit 667938
      $sysnhtml = $sysn.".html";
Packit 667938
# Create the .cfg file for each device
Packit 667938
      `perl $rundir\/cfgmakerov $router > $sysncfg`;
Packit 667938
# Create the root HTML file for this device in its directory
Packit 667938
      `perl $rundir\/index $sysncfg "Router $sysn" $sysn > $webdir$sysn\/$sysnhtml`;
Packit 667938
      $mrtgc[@mrtgc] = $sysn;
Packit 667938
   }
Packit 667938
Packit 667938
   @mrtgc = sort(@mrtgc);
Packit 667938
   $cnt = 0;
Packit 667938
   $head = 0;
Packit 667938
   $at = 0;
Packit 667938
   open(BUILDHT, "<".$buildhtf);
Packit 667938
# This next piece of code assumes that the $buildhtf file is in alpha order
Packit 667938
# This code leaves old lines untouched (in case the IP address rather than
Packit 667938
# the sysName was used as the target
Packit 667938
   while(<BUILDHT>){
Packit 667938
      chomp;
Packit 667938
      if (/index (.*)\.cfg/){
Packit 667938
         $sysn = $1;
Packit 667938
         $head = $_;
Packit 667938
         if (($sysn lt $mrtgc[$at]) || ($at >= @mrtgc)) {
Packit 667938
            $buildhtt[@buildhtt] = $head;
Packit 667938
         }else {
Packit 667938
            do{
Packit 667938
               $cnt = $mrtgc[$at];
Packit 667938
               $buildhtt[@buildhtt] =
Packit 667938
 "perl $rundir\/index $cnt.cfg \"Router $cnt\" $cnt > $webdir$cnt\/$cnt.html";
Packit 667938
               ++$at;
Packit 667938
            }while (($sysn ge $mrtgc[$at]) && ($at < @mrtgc));
Packit 667938
            if ($sysn ne $mrtgc[$at-1]){
Packit 667938
               $buildhtt[@buildhtt] = $head;
Packit 667938
            }
Packit 667938
         }
Packit 667938
      }
Packit 667938
   }
Packit 667938
   close (BUILDHT);
Packit 667938
# In case there were none to start with add it the new members
Packit 667938
   while ($at < @mrtgc){
Packit 667938
      $cnt = $mrtgc[$at];
Packit 667938
      $buildhtt[@buildhtt] =
Packit 667938
 "perl $rundir\/index $cnt.cfg \"Router $cnt\" $cnt > $webdir$cnt\/$cnt.html";
Packit 667938
      ++$at;
Packit 667938
   }
Packit 667938
   open (BUILDHT,">".$buildhtf);
Packit 667938
   print BUILDHT <
Packit 667938
#This file builds the HTML for each device being monitored
Packit 667938
cd $rundir
Packit 667938
ECHO
Packit 667938
   for ($cnt = 0; $cnt < @buildhtt ; $cnt++){
Packit 667938
      print BUILDHT "$buildhtt[$cnt]\n";
Packit 667938
   }
Packit 667938
   close (BUILDHT);
Packit 667938
Packit 667938
# Add on the new IPs and sysNames to the onces we already have
Packit 667938
   open (DNSFILE,"<".$dnsfile);
Packit 667938
   while(<DNSFILE>){
Packit 667938
      chomp;
Packit 667938
      $sysipnms[@sysipnms] = $_;
Packit 667938
   }
Packit 667938
   close (DNSFILE);
Packit 667938
Packit 667938
   @sysipnms = sort srtipnms @sysipnms;
Packit 667938
   $sysn = ".";
Packit 667938
   for ($cnt = 0; $cnt < @sysipnms ; $cnt++){
Packit 667938
      $head = lc((split /\,/,$sysipnms[$cnt])[1]);
Packit 667938
      if($sysn eq $head){
Packit 667938
	 next;
Packit 667938
      }
Packit 667938
      $sysn = $head;
Packit 667938
      $sysipnms[@sysnms] = $sysipnms[$cnt];
Packit 667938
      $sysnms[@sysnms] = $sysn;
Packit 667938
   }
Packit 667938
# Now sysnms has the exact number of targets in it while sysipnms has
Packit 667938
# the first @sysnms entries correct!
Packit 667938
Packit 667938
   open (DNSFILE,">".$dnsfile);
Packit 667938
   for ($cnt = 0; $cnt < @sysnms ; $cnt++){
Packit 667938
      print DNSFILE "$sysipnms[$cnt]\n";
Packit 667938
   }
Packit 667938
   close (DNSFILE);
Packit 667938
Packit 667938
   open (HTMLF,">".$webdir.$roothtml);
Packit 667938
   print HTMLF <
Packit 667938
<HTML>
Packit 667938
</HEAD>
Packit 667938
<BODY BGCOLOR="#ffffff">
Packit 667938
<CENTER>

$company Router MRTG Traffic Analysis

</CENTER>
Packit 667938
Packit 667938
<SPACER TYPE=VERTICAL SIZE=4>
Packit 667938
<CENTER>
Packit 667938
  
Packit 667938
  <FONT FACE="Arial,Helvetica" SIZE=2>
Packit 667938
ECHO
Packit 667938
   for ($cnt = 0; $cnt < @sysnms ; $cnt++){
Packit 667938
      $sysn = $sysnms[$cnt];
Packit 667938
      $sysnhtml = $sysn.".html";
Packit 667938
      print HTMLF "$sysn<\/A>
\n";
Packit 667938
   }
Packit 667938
   print HTMLF <
Packit 667938
</FONT>
Packit 667938
Packit 667938
Packit 667938
</BODY>
Packit 667938
</HTML>
Packit 667938
ECHO
Packit 667938
   close(HTMLF);
Packit 667938
   open (MRTGC,">".$cronfile);
Packit 667938
   print MRTGC <
Packit 667938
#This file runs the MRTG for each config $rundir/file
Packit 667938
cd $rundir
Packit 667938
ECHO
Packit 667938
   for ($cnt = 0; $cnt < @sysnms ; $cnt++){
Packit 667938
      print MRTGC "perl $rundir\/mrtg $sysnms[$cnt].cfg $backgrnd\n";
Packit 667938
   }
Packit 667938
   print MRTGC <
Packit 667938
# Additional commands could go here. Under NT the next line won't return
Packit 667938
$buildhtf
Packit 667938
# End of rebuild ht file
Packit 667938
ECHO
Packit 667938
   close (MRTGC);
Packit 667938
# send to management station
Packit 667938
# (local host unless run from a management console)
Packit 667938
`ovevent "" .1.3.6.1.4.1.11.2.17.1.0.58916873 .1.3.6.1.4.1.11.2.17.2.1.0 Integer 14 .1.3.6.1.4.1.11.2.17.2.2.0 OctetString "$ENV{OVwSessionID}" .1.3.6.1.4.1.11.2.17.2.4.0 OctetString "OVMRTG ADD/Update for @ARGV COMPLETED"`
Packit 667938
Packit 667938
}  
Packit 667938
main;
Packit 667938
exit(0);
Packit 667938
sub srtipnms{
Packit 667938
 lc((split( /\,/,$a))[1]) cmp lc( (split( /\,/,$b))[1]);
Packit 667938
}
Packit 667938