|
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 |
}
|