SNMP::Effective

Usage

Read "The interface" below, or check out my proceeding from YAPC::Europe::2006: speeding up snmp queries..

The interface

SNMP::Effective->new( ... );

This method returns a SNMP::Effective object (refered to as $snmp_effective later in this document) . Arguments to the constructor can be:

MaxSessions   => int # maximum number of simultainious SNMP session
MasterTimeout => int # maximum number of seconds before killing execute

All other arguments are passed on to SNMP::Effective::Var::new, which from a users views is the same as calling $snmp_effective->add( [args] ).

$snmp_effective->add( ... );

Arguments to this method can be:

DestHost => []     # an array-ref that contains a list of hosts, in this format:
                   # xxx.xxx.xxx.xxx or a hostname
Arg      => {}     # arguments passed on to SNMP::Session
Callback => sub {} # the callback method whick handles the received data
get      => []     # an array-ref that contains a list of OIDs to get
walk     => []     # an array-ref that contains a list of OIDs “trees” to get
set      => []     # an array-ref that contains a list of OIDs to set

This can be called with many different combinations, such as:

$snmp_effective->execute;

This method starts setting / getting data. It will run as long as necessarily, or until MasterTimeout is reached. Every time the some data is set / retrieved, it will call the callback-method, defined pr. host.

SNMP::Effective's callback method

When SNMP is done collecting data from a host, it calls a callback method, provided by the Callback => sub{} argument. Here is an example on a callback method:

my my_callback {

    my $host  = shift;
    my $error = shift;

    if($error) {
        warn “$host failed with this error: $error”;
        return;
    }
    
    my $data = $host->data;

    PRINT_DATA:
    for my $oid (%$data) {
        print “$host returned oid “$oid” with this data:\n”;
        print join “\n\t”, map {
            "$_ => $data->{$oid}{$_}”;
        } keys %{ $data->{$oid} };
        print "\n";
    }
}

Example output:

10.2.10.3 returned oid “1.3.6.1.2.1.1.1” with this data: 1 =>
C12-MM4-CS, Hardware V4 <<VENDOR: BigBand; BOOTR: >>
(ser#0600012893, part#90000046000, rev#A2, opt#c02), v6.0.1(14) ,
Release6.0_Integration Built 2006_03_29_153010

Debugging

By setting $SNMP::Effective::DEBUG you will get a debugging information printed to STDERR. There are no strict debugging levels (yet), but setting it to “100” will output a lot of information.

References