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

Reply via email to