Blame contrib/ovmrtg/ovcvtfile

Packit 667938
#!/usr/local/bin/perl5
Packit 667938
# -*- mode: Perl -*-
Packit 667938
##################################################################
Packit 667938
# Extract Input and Output values for target
Packit 667938
##################################################################
Packit 667938
# Created by Laurie Gellatly <gellatly@one.net.au>
Packit 667938
# This reads an OV_DB file for the target and interface
Packit 667938
# and prints a single line for In, Out, "UPTIME" and Target
Packit 667938
#################################################################
Packit 667938
#
Packit 667938
# Distributed under the GNU copyleft
Packit 667938
#
Packit 667938
# $Id: ovcvtfile,v 1.1.1.1 2002/02/26 10:16:36 oetiker Exp $
Packit 667938
#
Packit 667938
use strict;
Packit 667938
use vars '$DEBUG';
Packit 667938
my $ov_db = "/var/opt/OV/share/databases";
Packit 667938
my $DEBUG = 0;
Packit 667938
   my($target, $interface, $io , $in, $out, $uptime) ;
Packit 667938
   my ($cnt, $data, $recno, $junk);
Packit 667938
   my @names = ( "IfInErrors", "IfOutErrors", 
Packit 667938
     "IfInOctets", "IfOutOctets", "avgBusy5", "sysUpTime");
Packit 667938
   my @namext = (".err", "", ".cpu");
Packit 667938
   my ($val);
Packit 667938
   my $recsz = 24;
Packit 667938
   my ($oldtime) = time - 550;
Packit 667938
Packit 667938
Packit 667938
sub main {
Packit 667938
Packit 667938
   my($extn) = "";
Packit 667938
   $target = $ARGV[0];
Packit 667938
   $interface = $ARGV[1];
Packit 667938
   $io = $ARGV[2];
Packit 667938
   die <
Packit 667938
Packit 667938
USAGE: ovcvtfile 'IPADDress Interface# io=1|err=0|cpu=2'
Packit 667938
Packit 667938
EXAMPLE:  ovcvtfile 193.20.1.1 4 1
Packit 667938
Packit 667938
Read target 193.20.1.1 for interface 4 Input and Output Octets
Packit 667938
Packit 667938
Packit 667938
USAGE
Packit 667938
   if ($ov_db eq ""){
Packit 667938
     $ov_db = "/var/opt/OV/share/databases";
Packit 667938
   }
Packit 667938
   $ov_db= $ov_db."/snmpCollect/";
Packit 667938
   $extn =  $namext[$io];
Packit 667938
   $uptime = pretty_uptime_value();
Packit 667938
   $in = get(2*$io,$interface);
Packit 667938
   if ($io == 2) {
Packit 667938
      $out = $in;
Packit 667938
   } else {
Packit 667938
      $out = get(1+2*$io,$interface);
Packit 667938
   }
Packit 667938
Packit 667938
print <
Packit 667938
$in
Packit 667938
$out
Packit 667938
$uptime
Packit 667938
$target.$interface$extn
Packit 667938
ECHO
Packit 667938
}
Packit 667938
  
Packit 667938
main;
Packit 667938
exit(0);
Packit 667938
Packit 667938
sub get {
Packit 667938
   my ($ind,$interface) = @_;
Packit 667938
   my ($file) = $ov_db.$names[$ind].".".$interface;
Packit 667938
   open (RAWIN , $file) or die "Could not open $file";
Packit 667938
   my ($junk, $junk, $junk, $junk, $junk, $junk, $junk, $recno) = stat $file;
Packit 667938
   my ($starttime, $entime, $IPAdd1, $IPAdd2, $IPAdd3, $IPAdd4, $cnt, $val) ;
Packit 667938
   $recno = ($recno / $recsz) - 1 ;
Packit 667938
   my ($notfound) = $recno > -1;
Packit 667938
   binmode(RAWIN);
Packit 667938
   while ($notfound){
Packit 667938
# Read from the end of file backwards
Packit 667938
      seek(RAWIN,$recno * $recsz, 0);
Packit 667938
      read(RAWIN, $data, $recsz);
Packit 667938
      ($starttime, $entime, $IPAdd1, $IPAdd2, $IPAdd3, $IPAdd4, $junk, $cnt, $val) =
Packit 667938
      unpack("NNCCCCNNN",$data);
Packit 667938
      if ($oldtime > $entime) {
Packit 667938
         $val = 0;
Packit 667938
	 $notfound = 0;
Packit 667938
      } elsif ($target eq $IPAdd1.".".$IPAdd2.".".$IPAdd3.".".$IPAdd4){
Packit 667938
         if((pack"s",1) eq (pack"v",1)){
Packit 667938
            $notfound = $cnt;
Packit 667938
            $cnt = $val;
Packit 667938
            $val = $notfound;
Packit 667938
         }
Packit 667938
         $notfound = 0;
Packit 667938
         $val = unpack"d",pack"LL",$cnt,$val;
Packit 667938
      } else {
Packit 667938
	 $recno--;
Packit 667938
	 if ( $recno < 0 ){
Packit 667938
            $notfound = 0;
Packit 667938
	 }
Packit 667938
      }
Packit 667938
   }
Packit 667938
   close (RAWIN);
Packit 667938
   if ($ind < 2){
Packit 667938
      $val = $val * ($entime - $starttime);
Packit 667938
   }
Packit 667938
   $val = int($val);
Packit 667938
   return ($val);
Packit 667938
}
Packit 667938
Packit 667938
sub pretty_uptime_value () {
Packit 667938
   my ($uptime) = get(5,0);
Packit 667938
   if ($uptime == 0){
Packit 667938
      return "An unknown amount of time";
Packit 667938
   }
Packit 667938
   my ($seconds,$minutes,$hours,$days,$result);
Packit 667938
## We divide the uptime by hundred since we're not interested in
Packit 667938
## sub-second precision.
Packit 667938
   $uptime = int ($uptime / 100);
Packit 667938
   $days = int ($uptime / (60 * 60 * 24));
Packit 667938
   $uptime %= (60 * 60 * 24);
Packit 667938
   $hours = int ($uptime / (60 * 60));
Packit 667938
   $uptime %= (60 * 60);
Packit 667938
   $minutes = int ($uptime / 60);
Packit 667938
   $seconds = $uptime % 60;
Packit 667938
   if ($days == 0){
Packit 667938
      $result = sprintf ("%d:%02d:%02d", $hours, $minutes, $seconds);
Packit 667938
   } elsif ($days == 1) {
Packit 667938
      $result = sprintf ("%d day, %d:%02d:%02d",
Packit 667938
      $days, $hours, $minutes, $seconds);
Packit 667938
   } else {
Packit 667938
      $result = sprintf ("%d days, %d:%02d:%02d",
Packit 667938
      $days, $hours, $minutes, $seconds);
Packit 667938
   }
Packit 667938
   return $result;
Packit 667938
}