check_junos: Added -C option to cache interface information.
If used, this option will let the interfaces check query *all* interface information on the first API call. This will then be used when further querying interfaces (e.g. physical interfaces of aggregates).
This commit is contained in:
parent
e1da92dff9
commit
1cfdcd3667
|
@ -58,7 +58,7 @@ my $plugin = Nagios::Plugin::JUNOS->new(
|
|||
blurb => 'Monitor Juniper™ Switches.',
|
||||
usage =>
|
||||
"Usage: %s [-v|--verbose] [-H <host>] [-p <port>] [-t <timeout]
|
||||
[-U <user>] [-P <password] check-tuple [...]",
|
||||
[-C] [-U <user>] [-P <password] check-tuple [...]",
|
||||
license =>
|
||||
"This nagios plugin is free software, and comes with ABSOLUTELY NO WARRANTY.
|
||||
It may be used, redistributed and/or modified under the terms of the 3-Clause
|
||||
|
@ -110,7 +110,15 @@ my %checks = (
|
|||
|
||||
my $junos = undef;
|
||||
|
||||
my $cache = {};
|
||||
|
||||
$plugin->add_common_args();
|
||||
$plugin->add_arg({
|
||||
spec => 'caching|C',
|
||||
usage => '-C, --caching',
|
||||
desc => 'Enabling caching of API results',
|
||||
default => 0,
|
||||
});
|
||||
|
||||
foreach my $check (keys %checks) {
|
||||
$plugin->add_check_impl($check, $checks{$check});
|
||||
|
@ -184,21 +192,31 @@ sub get_interfaces
|
|||
my @ifaces = ();
|
||||
my @ret = ();
|
||||
|
||||
my $cmd = 'get_interface_information';
|
||||
my $res;
|
||||
|
||||
my $args = { detail => 1 };
|
||||
|
||||
if ((scalar(@targets) == 1) && (! $opts->{'with_description'})) {
|
||||
$args->{'interface_name'} = $targets[0];
|
||||
if (defined($cache->{'interfaces'})) {
|
||||
@ifaces = @{$cache->{'interfaces'}};
|
||||
}
|
||||
$res = $plugin->send_query($cmd, $args);
|
||||
else {
|
||||
my $cmd = 'get_interface_information';
|
||||
my $res;
|
||||
|
||||
if (! ref $res) {
|
||||
$plugin->die($res);
|
||||
my $args = { detail => 1 };
|
||||
|
||||
if ((scalar(@targets) == 1) && (! $opts->{'with_description'})
|
||||
&& (! $plugin->{'conf'}->{'caching'})) {
|
||||
$args->{'interface_name'} = $targets[0];
|
||||
}
|
||||
$res = $plugin->send_query($cmd, $args);
|
||||
|
||||
if (! ref $res) {
|
||||
$plugin->die($res);
|
||||
}
|
||||
|
||||
@ifaces = $res->getElementsByTagName('physical-interface');
|
||||
}
|
||||
|
||||
@ifaces = $res->getElementsByTagName('physical-interface');
|
||||
if ($plugin->{'conf'}->{'caching'}) {
|
||||
$cache->{'interfaces'} = \@ifaces;
|
||||
}
|
||||
|
||||
@targets = map { s/\*/\.\*/g; s/\?/\./g; $_; } @targets;
|
||||
|
||||
|
|
Loading…
Reference in a new issue