ovadd
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:5k
源码类别:

SNMP编程

开发平台:

C/C++

  1. #!/usr/local/bin/perl5
  2. # -*- mode: Perl -*-
  3. ##################################################################
  4. # This file controls the creation of all the MRTG config files from OV
  5. ##################################################################
  6. # Created by Laurie Gellatly <gellatly@one.net.au>
  7. # See newrtrov.txt for a description of what is performed
  8. #################################################################
  9. #
  10. # Distributed under the GNU copyleft
  11. #
  12. # $Id: ovadd,v 1.1.1.1 2002/02/26 10:16:36 oetiker Exp $
  13. #
  14. use Socket;
  15. use strict;
  16. use vars '$DEBUG';
  17. my $DEBUG = 0;
  18. my $company = "Company";
  19. my $rundir = "/opt/mrtg/run";
  20. my $webdir = "/var/opt/ns-fasttrack/docs/mrtg/";
  21. my $cronfile = "mrtgc";
  22. my $roothtml = "routers.html";
  23. my $buildhtf = "buildht";
  24. my $dnsfile = "ovmrtgc.csv";
  25. # Change the next line to be " &" to submit all jobs at once
  26. my $backgrnd = " ";
  27. my($at,$router,$sysn,$sysncfg,$sysnhtml,$head,$cnt);
  28. my(@buildhtt,@sysipnms,@mrtgc,@sysnms); 
  29. sub main {
  30.   $router = $ARGV[0];
  31.   die <<USAGE  unless $router;
  32. USAGE: ovadd 'router IP ADDRESS/S'
  33. EXAMPLE:  ovadd 193.21.1.2  10.21.1.2 10.21.1.1
  34. USAGE
  35.    chdir $rundir;
  36. # Find the IP Address and SNMP sysNames from the arguments given
  37.    @sysipnms=`perl ovsysnms @ARGV`;
  38.    chomp(@sysipnms);
  39. # Generate the interfaces to collect on
  40.    `perl ovcols + @ARGV > collects`;
  41. # Start the collection happening on these interfaces
  42.    `xnmcollect -merge collects`;
  43.    `xnmcollect -event`;
  44.    for ($cnt = 0; $cnt < @sysipnms ; $cnt++){
  45.       ($router,$sysn) = split /,/, $sysipnms[$cnt];
  46.       $sysn = lc($sysn);
  47.       $sysncfg = $sysn.".cfg";
  48.       $sysnhtml = $sysn.".html";
  49. # Create the .cfg file for each device
  50.       `perl $rundir/cfgmakerov $router > $sysncfg`;
  51. # Create the root HTML file for this device in its directory
  52.       `perl $rundir/index $sysncfg "Router $sysn" $sysn > $webdir$sysn/$sysnhtml`;
  53.       $mrtgc[@mrtgc] = $sysn;
  54.    }
  55.    @mrtgc = sort(@mrtgc);
  56.    $cnt = 0;
  57.    $head = 0;
  58.    $at = 0;
  59.    open(BUILDHT, "<".$buildhtf);
  60. # This next piece of code assumes that the $buildhtf file is in alpha order
  61. # This code leaves old lines untouched (in case the IP address rather than
  62. # the sysName was used as the target
  63.    while(<BUILDHT>){
  64.       chomp;
  65.       if (/index (.*).cfg/){
  66.          $sysn = $1;
  67.          $head = $_;
  68.          if (($sysn lt $mrtgc[$at]) || ($at >= @mrtgc)) {
  69.             $buildhtt[@buildhtt] = $head;
  70.          }else {
  71.             do{
  72.                $cnt = $mrtgc[$at];
  73.                $buildhtt[@buildhtt] =
  74.  "perl $rundir/index $cnt.cfg "Router $cnt" $cnt > $webdir$cnt/$cnt.html";
  75.                ++$at;
  76.             }while (($sysn ge $mrtgc[$at]) && ($at < @mrtgc));
  77.             if ($sysn ne $mrtgc[$at-1]){
  78.                $buildhtt[@buildhtt] = $head;
  79.             }
  80.          }
  81.       }
  82.    }
  83.    close (BUILDHT);
  84. # In case there were none to start with add it the new members
  85.    while ($at < @mrtgc){
  86.       $cnt = $mrtgc[$at];
  87.       $buildhtt[@buildhtt] =
  88.  "perl $rundir/index $cnt.cfg "Router $cnt" $cnt > $webdir$cnt/$cnt.html";
  89.       ++$at;
  90.    }
  91.    open (BUILDHT,">".$buildhtf);
  92.    print BUILDHT <<ECHO;
  93. #This file builds the HTML for each device being monitored
  94. cd $rundir
  95. ECHO
  96.    for ($cnt = 0; $cnt < @buildhtt ; $cnt++){
  97.       print BUILDHT "$buildhtt[$cnt]n";
  98.    }
  99.    close (BUILDHT);
  100. # Add on the new IPs and sysNames to the onces we already have
  101.    open (DNSFILE,"<".$dnsfile);
  102.    while(<DNSFILE>){
  103.       chomp;
  104.       $sysipnms[@sysipnms] = $_;
  105.    }
  106.    close (DNSFILE);
  107.    @sysipnms = sort srtipnms @sysipnms;
  108.    $sysn = ".";
  109.    for ($cnt = 0; $cnt < @sysipnms ; $cnt++){
  110.       $head = lc((split /,/,$sysipnms[$cnt])[1]);
  111.       if($sysn eq $head){
  112.  next;
  113.       }
  114.       $sysn = $head;
  115.       $sysipnms[@sysnms] = $sysipnms[$cnt];
  116.       $sysnms[@sysnms] = $sysn;
  117.    }
  118. # Now sysnms has the exact number of targets in it while sysipnms has
  119. # the first @sysnms entries correct!
  120.    open (DNSFILE,">".$dnsfile);
  121.    for ($cnt = 0; $cnt < @sysnms ; $cnt++){
  122.       print DNSFILE "$sysipnms[$cnt]n";
  123.    }
  124.    close (DNSFILE);
  125.    open (HTMLF,">".$webdir.$roothtml);
  126.    print HTMLF <<ECHO;
  127. <HTML>
  128. </HEAD>
  129. <BODY BGCOLOR="#ffffff">
  130. <CENTER><H1>$company Router MRTG Traffic Analysis </H1></CENTER> 
  131. <SPACER TYPE=VERTICAL SIZE=4>
  132. <CENTER><TABLE BORDER=0 WIDTH="100%" CELLSPACING=0 CELLPADDING=0>
  133.   <TR VALIGN=top>
  134.   <TD WIDTH=388 ALIGN="CENTER"><FONT FACE="Arial,Helvetica" SIZE=2>
  135. ECHO
  136.    for ($cnt = 0; $cnt < @sysnms ; $cnt++){
  137.       $sysn = $sysnms[$cnt];
  138.       $sysnhtml = $sysn.".html";
  139.       print HTMLF "<A HREF="$sysn/$sysnhtml">$sysn</A><br>n";
  140.    }
  141.    print HTMLF <<ECHO;
  142. </FONT>
  143. </TD>
  144. </TABLE>
  145. </BODY>
  146. </HTML>
  147. ECHO
  148.    close(HTMLF);
  149.    open (MRTGC,">".$cronfile);
  150.    print MRTGC <<ECHO;
  151. #This file runs the MRTG for each config $rundir/file
  152. cd $rundir
  153. ECHO
  154.    for ($cnt = 0; $cnt < @sysnms ; $cnt++){
  155.       print MRTGC "perl $rundir/mrtg $sysnms[$cnt].cfg $backgrndn";
  156.    }
  157.    print MRTGC <<ECHO;
  158. # Additional commands could go here. Under NT the next line won't return
  159. $buildhtf
  160. # End of rebuild ht file
  161. ECHO
  162.    close (MRTGC);
  163. # send to management station
  164. # (local host unless run from a management console)
  165. `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"`
  166. }  
  167. main;
  168. exit(0);
  169. sub srtipnms{
  170.  lc((split( /,/,$a))[1]) cmp lc( (split( /,/,$b))[1]);
  171. }