![]() ![]() |
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.ifDescmy $suf_descr = '.2';# .ifDescrmy $suf_in = '.10';# .ifInOctetsmy $suf_out = '.16';# .ifOutOctetsmy (%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 stavif(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 rrdfor ( 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 stejnemy $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 ifacemy $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;