POE::Component::SNMP Hangs When Multiple Aliases Added
Rehan Azher <[email protected]> Thu, 28 Oct 2010 11:03:43 +0200
| Newsgroups | gmane.comp.lang.perl.poe |
|---|---|
| Message-ID | <[email protected]> |
Hi Experts,
I am new to POE, and to be on true end do not have more perl experience
except some small scripts. Now I am trying to POLL one Subnet Range using
POE::Component::SNMP. Results are displayed but at the end when
$heap->{pending}=0 it dosent seems to exit the snmp_handler sub .
Following is my code:
POE::Session->create( inline_states =>
{ _start => \&_start_subnet_system,
snmp_handler => \&snmp_subnet_system_handler,
}
);
sub _start_subnet_system {
my ($kernel, $heap) = @_[KERNEL, HEAP];
foreach my $address (@reachable_hosts) {
POE::Component::SNMP->create( alias =>
"$address",
hostname => "$address",
# if you have seperate community strings for
each host
# build a hash (@addresses becomes
%addresses)and
# associate them that way and then set it
here.
community =>
$snmp_settings[$temp_loop]{'community_string'},
version
=>$snmp_settings[$temp_loop]{'snmp_version'},
timeout
=>$snmp_settings[$temp_loop]{'timeout'},
retries
=>$snmp_settings[$temp_loop]{'retries'},
# debug => 0x0A,
);
$kernel->post( $address => walk =>
snmp_handler => -baseoid => $system_oid);
# If you are polling for N oids, this next line
must reflect that, otherwise
# it will stop after the first OID and not try
any of the others.
$heap->{pending} = scalar(@reachable_hosts)-1;
}
}
$poe_kernel->run();
print "Total Discovered Hosts:
$discovered_host_count\n";
print "Total Not Discovered Hosts:
$not_discovered_host_count\n";
sub snmp_subnet_system_handler {
my ($kernel, $heap, $request, $response) = @_[KERNEL, HEAP, ARG0, ARG1];
my ($alias, $host, $cmd, @args) = @$request;
my ($results, @callback_args) = @$response;
if (ref $results) {
$discovered_host_count++;
} else {
$not_discovered_host_count++;
}
if (--$heap->{pending} == 0) {
* $kernel->post( $alias => 'finish' );*
}
}
Where:
@reachable_hosts contains all hosts which are reachable via ICMP Ping.
@snmp_settings is a hash of SNMP Settings need to be apploed , tested and
printed all the values it has all valued required.
$system_oid = '.1.3.6.1.2.1.1'
In fact this is a modified version of this code:
http://www.gdd.net/index.php/Asynchronous_SNMP_poller_%28Perl%29
Above code also hangs at this point *$kernel->post( $alias => 'finish' );*
Can Any pone pelase help on this.
Best Regards,
--
Rehan Azher
Cell: +65 92967887
LinkedIn: http://www.linkedin.com/in/rehanazher