hotsanic |
Subversion Repositories: |
Compare with Previous - Blame - Download
package syssnmp;
use lib "../../../lib";
use HotSaNICsnmp;
sub version {
($VERSION = '$Revision: 1.11 $') =~ s/.*(\d+\.\d+).*/$1/;
return "syssnmp.pm $VERSION";
}
sub do_snmp {
my $oid = '.1.3.6.1.2.1.2.2.1';
# interfaces.ifTable.ifEntry.ifDesc
my $suf_descr = '.2';
# .ifDescr
my $suf_in = '.10';
# .ifInOctets
my $suf_out = '.16';
# .ifOutOctets
my (%targets) = @_;
foreach ( keys(%targets) ) {
# print "1 $_\n";
my ($host, $com) = split /_/;
my ($res, $lastnic, @nics);
my $i = 0;
my $switch = 0;
my $portnum = "none";
for (@{$targets{$_}}) {
my (undef, $portnum) = split /port/;
if ("port$portnum" eq $_) {
# print "Je to switch\n";
$switch = 1;
$port = $portnum;
if($i == 0) {
$nics{$_} = 0;
$lastnic = $port;
$i++;
} else {
$nics{$lastnic} = $_;
$i = 0;
}
} else {
if($i == 0) {
$nics{$_} = 0;
$lastnic = $_;
$i++;
} else {
$nics{$lastnic} = $_;
$i = 0;
}
}
}
# print "2 $_ a $port\n";
# print "3 $host a $com b $lastnic c $nics{$dev}\n";
my @query = ($oid.$suf_descr, $oid.$suf_in, $oid.$suf_out);
# print "4 @query\n";
$res = HotSaNICsnmp::snmp_walk($host, $com, @query);
# print "5 $res\n";
#pokud nejsou vysledky tak se zapise do databaze Undef stav
if(keys(%$res) == 0) {
# print "tady to je kdyz nejni spojeni tak se do rrd da undef";
if ($switch == 1) {
do_rrd($host."_port".$_, "U", "U", $nics{$_}) foreach keys(%nics);
} else {
do_rrd($host."_".$_, "U", "U", $nics{$_}) foreach keys(%nics);
}
return undef;
}
$necodef = defined($$res{$oid.$suf_descr.".".$i});
# print "5a $necodef\n";
#jedem na prohledani vsech ifaces a pokud souhlasi tak se pise do rrd
for ( my $i=1; defined($$res{$oid.$suf_descr.".".$i}); $i++) {
if ($switch == 1) {
#toto je cast pro switch a jde se na rrd pokud souhlasi poradi portu
#jmeno iface se neda pro rozpoznani pouzit protoze je pro vsechny stejne
my $dev = $$res{$oid.$suf_descr.".".$i};
# print "5b $dev\n";
if(defined($nics{$i})) {
# print "5b $nics{$i}\n";
do_rrd($host."_port".$i, $$res{$oid.$suf_in.".".$i}, $$res{$oid.$suf_out.".".$i}, $nics{$i});
}
} else {
#zde rozpoznavame podle jmena iface
my $dev = $$res{$oid.$suf_descr.".".$i};
if(defined($nics{$dev})) {
do_rrd($host."_".$dev, $$res{$oid.$suf_in.".".$i}, $$res{$oid.$suf_out.".".$i}, $nics{$dev});
}
}
}
}
}
sub do_rrd {
my ($name, $in, $out, $max) = @_;
#print "mam tu $max";
if (! -e "rrd/$name.rrd" ) {
system("./makerrd","$name","$max")
}
RRDs::update "rrd/$name.rrd",time.":".$in.":".$out;
if ($ERROR = RRDs::error) { print time,": ",$args{MODNAME},": unable to update `$name.rrd': $ERROR\n"; }
}
1;