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

SNMP编程

开发平台:

C/C++

  1. #!/usr/local/bin/perl5
  2. # -*- mode: Perl -*-
  3. ##################################################################
  4. # Extract Input and Output values for target
  5. ##################################################################
  6. # Created by Laurie Gellatly <gellatly@one.net.au>
  7. # This reads an OV_DB file for the target and interface
  8. # and prints a single line for In, Out, "UPTIME" and Target
  9. #################################################################
  10. #
  11. # Distributed under the GNU copyleft
  12. #
  13. # $Id: ovcvtfile,v 1.1.1.1 2002/02/26 10:16:36 oetiker Exp $
  14. #
  15. use strict;
  16. use vars '$DEBUG';
  17. my $ov_db = "/var/opt/OV/share/databases";
  18. my $DEBUG = 0;
  19.    my($target, $interface, $io , $in, $out, $uptime) ;
  20.    my ($cnt, $data, $recno, $junk);
  21.    my @names = ( "IfInErrors", "IfOutErrors", 
  22.      "IfInOctets", "IfOutOctets", "avgBusy5", "sysUpTime");
  23.    my @namext = (".err", "", ".cpu");
  24.    my ($val);
  25.    my $recsz = 24;
  26.    my ($oldtime) = time - 550;
  27. sub main {
  28.    my($extn) = "";
  29.    $target = $ARGV[0];
  30.    $interface = $ARGV[1];
  31.    $io = $ARGV[2];
  32.    die <<USAGE  unless (defined($target) && defined($interface) && defined($io));
  33. USAGE: ovcvtfile 'IPADDress Interface# io=1|err=0|cpu=2'
  34. EXAMPLE:  ovcvtfile 193.20.1.1 4 1
  35. Read target 193.20.1.1 for interface 4 Input and Output Octets
  36. USAGE
  37.    if ($ov_db eq ""){
  38.      $ov_db = "/var/opt/OV/share/databases";
  39.    }
  40.    $ov_db= $ov_db."/snmpCollect/";
  41.    $extn =  $namext[$io];
  42.    $uptime = pretty_uptime_value();
  43.    $in = get(2*$io,$interface);
  44.    if ($io == 2) {
  45.       $out = $in;
  46.    } else {
  47.       $out = get(1+2*$io,$interface);
  48.    }
  49. print <<ECHO;
  50. $in
  51. $out
  52. $uptime
  53. $target.$interface$extn
  54. ECHO
  55. }
  56.   
  57. main;
  58. exit(0);
  59. sub get {
  60.    my ($ind,$interface) = @_;
  61.    my ($file) = $ov_db.$names[$ind].".".$interface;
  62.    open (RAWIN , $file) or die "Could not open $file";
  63.    my ($junk, $junk, $junk, $junk, $junk, $junk, $junk, $recno) = stat $file;
  64.    my ($starttime, $entime, $IPAdd1, $IPAdd2, $IPAdd3, $IPAdd4, $cnt, $val) ;
  65.    $recno = ($recno / $recsz) - 1 ;
  66.    my ($notfound) = $recno > -1;
  67.    binmode(RAWIN);
  68.    while ($notfound){
  69. # Read from the end of file backwards
  70.       seek(RAWIN,$recno * $recsz, 0);
  71.       read(RAWIN, $data, $recsz);
  72.       ($starttime, $entime, $IPAdd1, $IPAdd2, $IPAdd3, $IPAdd4, $junk, $cnt, $val) =
  73.       unpack("NNCCCCNNN",$data);
  74.       if ($oldtime > $entime) {
  75.          $val = 0;
  76.  $notfound = 0;
  77.       } elsif ($target eq $IPAdd1.".".$IPAdd2.".".$IPAdd3.".".$IPAdd4){
  78.          if((pack"s",1) eq (pack"v",1)){
  79.             $notfound = $cnt;
  80.             $cnt = $val;
  81.             $val = $notfound;
  82.          }
  83.          $notfound = 0;
  84.          $val = unpack"d",pack"LL",$cnt,$val;
  85.       } else {
  86.  $recno--;
  87.  if ( $recno < 0 ){
  88.             $notfound = 0;
  89.  }
  90.       }
  91.    }
  92.    close (RAWIN);
  93.    if ($ind < 2){
  94.       $val = $val * ($entime - $starttime);
  95.    }
  96.    $val = int($val);
  97.    return ($val);
  98. }
  99. sub pretty_uptime_value () {
  100.    my ($uptime) = get(5,0);
  101.    if ($uptime == 0){
  102.       return "An unknown amount of time";
  103.    }
  104.    my ($seconds,$minutes,$hours,$days,$result);
  105. ## We divide the uptime by hundred since we're not interested in
  106. ## sub-second precision.
  107.    $uptime = int ($uptime / 100);
  108.    $days = int ($uptime / (60 * 60 * 24));
  109.    $uptime %= (60 * 60 * 24);
  110.    $hours = int ($uptime / (60 * 60));
  111.    $uptime %= (60 * 60);
  112.    $minutes = int ($uptime / 60);
  113.    $seconds = $uptime % 60;
  114.    if ($days == 0){
  115.       $result = sprintf ("%d:%02d:%02d", $hours, $minutes, $seconds);
  116.    } elsif ($days == 1) {
  117.       $result = sprintf ("%d day, %d:%02d:%02d",
  118.       $days, $hours, $minutes, $seconds);
  119.    } else {
  120.       $result = sprintf ("%d days, %d:%02d:%02d",
  121.       $days, $hours, $minutes, $seconds);
  122.    }
  123.    return $result;
  124. }