No description
- Perl 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| examples | ||
| lib/SNMP | ||
| t | ||
| .gitignore | ||
| Changes | ||
| Makefile.PL | ||
| README | ||
NAME
SNMP::Parallel - An effective SNMP-information-gathering module
VERSION
0.02
DISCLAIMER
THIS MODULE HAS NOT BEEN TESTED EXTENSIVELY AND ITS API IS SUBJECT TO
CHANGE.
Please post any feedback and bug reports to "bug-snmp-parallel at
rt.cpan.org".
SYNOPSIS
use SNMP::Parallel;
my $snmp = SNMP::Parallel->new(
max_sessions => $NUM_POLLERS,
master_timeout => $TIMEOUT_SECONDS,
);
$snmp->add(
dest_host => $ip,
callback => sub { store_data() },
get => [ '1.3.6.1.2.1.1.3.0', 'sysDescr' ],
);
# lather, rinse, repeat
# retrieve data from all hosts
$snmp->execute;
DESCRIPTION
This module collects information, over SNMP, from many hosts and many
OIDs, really fast.
It is a wrapper around the facilities of "SNMP.pm", which is the Perl
interface to the C libraries in the "SNMP" package. Advantages of using
this module include:
Simple configuration
The data structures required by "SNMP" are complex to set up before
polling, and parse for results afterwards. This module provides a
simpler interface to that configuration by accepting just a list of
SNMP OIDs or leaf names.
Parallel execution
Many users are not aware that "SNMP" can poll devices asynchronously
using a callback system. By specifying your callback routine as in
the "SYNOPSIS" section above, many network devices can be polled in
parallel, making operations far quicker. Note that this does not use
threads.
It's fast
To give one example, "SNMP::Parallel" can walk, say, eight indexed
OIDs (port status, errors, traffic, etc) for around 300 devices
(that's 8500 ports) in under 30 seconds. Storage of that data might
take an additional 10 seconds (depending on whether it's to RAM or
disk). This makes polling/monitoring your network every five minutes
(or less) no problem at all.
The interface to this module is simple, with few options. The sections
below detail everything you need to know.
METHODS ARGUMENTS
The method arguments are very flexible. Any of the below acts as the
same:
$obj->method(MyKey => $value);
$obj->method(my_key => $value);
$obj->method(My_Key => $value);
$obj->method(mYK__EY => $value);
SEE ALSO
This module does SNMP::Parallel::Role and SNMP::Parallel::Lock.
It is a fork of SNMP::Effective. This is built on Moose and has a
slightly better interface. Unfortunatly it's not 100% compatible with
SNMP::Effective so it had to get a new name.
OBJECT ATTRIBUTES
master_timeout
$seconds = $self->master_timeout;
Maximum seconds for execute() to run. Default is undef, which means
forever.
max_sessions
$int = $self->max_sessions;
How many concurrent hosts to retrieve data from.
sessions
$int = $self->sessions;
Returns the number of active sessions.
METHODS
BUILDARGS
$hash_ref = $self->BUILDARGS(%args);
$hash_ref = $self->BUILDARGS({ foo => bar });
See "METHODS ARGUMENTS".
add
$self->add(%arguments);
Adding information about what SNMP data to get and where to get it.
Arguments
"dest_host"
Either a single host, or an array-ref that holds a list of hosts.
The format is whatever "SNMP" can handle.
"arg"
A hash-ref of options, passed on to SNMP::Session.
"callback"
A reference to a sub which is called after each time a request is
finished.
"heap"
This can hold anything you want. By default it's an empty hash-ref.
"get" / "getnext" / "walk"
Either "oid object", "numeric oid", SNMP::Varbind SNMP::VarList or
an array-ref containing any combination of the above.
"set"
Either a single SNMP::Varbind or a SNMP::VarList or an array-ref of
any of the above.
This can be called with many different combinations, such as:
"dest_host" / any other argument
This will make changes per dest_host specified. You can use this to
change arg, callback or add OIDs on a per-host basis.
"get" / "getnext" / "walk" / "set"
The OID list submitted to "add()" will be added to all dest_host, if
no dest_host is specified.
"arg" / "callback"
This can be used to alter all hosts' SNMP arguments or callback
method.
execute
$bool = $self->execute;
This method starts setting and/or getting data. It will run as long as
necessary, or until master_timeout seconds has passed. Every time some
data is set and/or retrieved, it will call the callback-method, as
defined globally or per host.
Return true on success, and false if "master_timeout" is reached before
all data is collected.
add_snmp_callback
$class->add_snmp_callback($name, $snmp_method, sub {});
$self->add_snmp_callback($name, $snmp_method, sub {});
Will add a callback for SNMP::Parallel.
$name is what you refere to in SNMP::Parallel::add():
$self->add( $name => ['sysDescr'] );
$snmp_method is the method which should be called on the SNMP::Session
object.
See SNMP::Parallel::Callbacks for default callbacks.
get_host
$host_obj = $self->get_host($hostname);
delete_host
$host_obj = $self->delete_host($hostname);
hosts
@hostnames = $self->hosts;
The 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
of a callback method:
sub my_callback {
my $host = shift;
if(my $error = $host->error) {
warn "$host failed with this error: $error";
return;
}
printf '%s returned data:\n', $host;
for my $obj (@{ $host->results }) {
printf "%s => %s", $obj->name, "$obj";
}
}
DEBUGGING
Debugging is enabled through Log::Log4perl. If nothing else is
spesified, it will default to "error" level, and print to STDERR. The
component-name you want to change is "SNMP::Parallel", inless this
module ins inherited.
BUGS
Please report any bugs or feature requests to "bug-snmp-parallel at
rt.cpan.org", or through the web interface at
<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=SNMP-Parallel>. I will
be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
ACKNOWLEDGEMENTS
Various contributions by Oliver Gorwits.
Sigurd Weisteen Larsen contributed with a better locking mechanism.
COPYRIGHT & LICENSE
Copyright 2007 Jan Henning Thorsen, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
AUTHOR
Jan Henning Thorsen, "<jhthorse at cpan.org>"
POD ERRORS
Hey! The above document had some coding errors, which are explained
below:
Around line 572:
=cut found outside a pod block. Skipping to next block.