+ Optimize snmp requests get_multiple.

This commit is contained in:
Quentin Garnier 2015-02-13 16:53:29 +01:00
parent 2eaa5854d8
commit 2e9cf95dd3
7 changed files with 14 additions and 16 deletions

View File

@ -350,9 +350,6 @@ sub get_multiple_table {
$self->{maxrepetitions} =~ /^\d+$/) {
$repeat_count = $self->{maxrepetitions};
}
$repeat_count = floor($repeat_count / (scalar(keys %{$working_oids})));
$repeat_count = 1 if ($repeat_count == 0);
# Quit if base not the same or 'ENDOFMIBVIEW' value. Need all oid finish otherwise we continue :)
while (1) {
@ -375,7 +372,9 @@ sub get_multiple_table {
if ($self->is_snmpv1()) {
$self->{session}->getnext($vb);
} else {
$self->{session}->getbulk(0, $repeat_count, $vb);
my $current_repeat_count = floor($repeat_count / (scalar(keys %{$working_oids})));
$current_repeat_count = 1 if ($current_repeat_count == 0);
$self->{session}->getbulk(0, $current_repeat_count, $vb);
}
# Error

View File

@ -38,13 +38,13 @@ package hardware::server::hp::proliant::snmp::mode::components::daacc;
use strict;
use warnings;
my %map_daacc_status = {
my %map_daacc_status = (
1 => 'other',
2 => 'invalid',
3 => 'enabled',
4 => 'tmpDisabled',
5 => 'permDisabled',
};
);
my %map_daacc_condition = (
1 => 'other',
2 => 'ok',

View File

@ -69,8 +69,8 @@ my $oid_cpqFcaPhyDrvStatus = '.1.3.6.1.4.1.232.16.2.5.1.1.6';
sub load {
my (%options) = @_;
push @{$options{request}}, { oid => $oid_cpqFcaLogDrvEntry, start => $mapping->{cpqFcaLogDrvFaultTol}->{oid}, end => $mapping->{cpqFcaLogDrvStatus}->{oid} };
push @{$options{request}}, { oid => $oid_cpqFcaLogDrvCondition };
push @{$options{request}}, { oid => $oid_cpqFcaPhyDrvCondition };
push @{$options{request}}, { oid => $oid_cpqFcaPhyDrvStatus };
}
sub check {

View File

@ -75,7 +75,7 @@ sub load {
push @{$options{request}}, { oid => $oid_cpqNicIfLogMapEntry, start => $mapping->{cpqNicIfLogMapCondition}->{oid}, end => $mapping->{cpqNicIfLogMapStatus}->{oid} };
push @{$options{request}}, { oid => $oid_cpqNicIfLogMapDescription };
push @{$options{request}}, { oid => $cpqNicIfLogMapAdapterCount };
push @{$options{request}}, { oid => $oid_cpqNicIfLogMapAdapterCount };
}
sub check {
@ -103,7 +103,7 @@ sub check {
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
short_msg => sprintf("logical nic '%s' is %s (%s)",
$nic_index, $result3->{cpqNicIfLogMapCondition}));
$instance, $result3->{cpqNicIfLogMapCondition}));
}
}
}

View File

@ -74,8 +74,8 @@ my $oid_cpqScsiLogDrvStatus = '.1.3.6.1.4.1.232.5.2.3.1.1.5';
sub load {
my (%options) = @_;
push @{$options{request}}, { oid => $cpqScsiLogDrvStatus };
push @{$options{request}}, { oid => $cpqScsiLogDrvCondition };
push @{$options{request}}, { oid => $oid_cpqScsiLogDrvStatus };
push @{$options{request}}, { oid => $oid_cpqScsiLogDrvCondition };
}
sub check {
@ -86,7 +86,7 @@ sub check {
return if ($self->check_exclude(section => 'scsildrive'));
foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$oid_cpqScsiLogDrvCondition}})) {
next if ($oid !~ /^$mapping->{cpqScsiLogDrvCondition}->{oid}\.(.*)$/);
next if ($oid !~ /^$mapping2->{cpqScsiLogDrvCondition}->{oid}\.(.*)$/);
my $instance = $1;
my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$oid_cpqScsiLogDrvStatus}, instance => $instance);
my $result2 = $self->{snmp}->map_instance(mapping => $mapping2, results => $self->{results}->{$oid_cpqScsiLogDrvCondition}, instance => $instance);

View File

@ -100,9 +100,8 @@ sub check {
$result->{cpqHeTemperatureThreshold},
$result->{cpqHeTemperatureCondition}));
my $exit = $self->get_severity(section => 'temperature', value => $result->{cpqHeTemperatureCondition});
if (!$self->{output}->is_status(value => $temperature, compare => 'ok', litteral => 1)) {
if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) {
$self->{output}->output_add(severity => $exit,
$self->{output}->output_add(severity => ${$conditions{$temp_condition}}[1],
short_msg => sprintf("temperature '%s' %s status is %s",
$instance, $result->{cpqHeTemperatureLocale}, $result->{cpqHeTemperatureCondition}));
}

View File

@ -344,7 +344,7 @@ sub run {
'dactl', 'daacc', 'daldrive', 'dapdrive', 'fan', 'pnic', 'lnic', 'temperature');
foreach (@components) {
if (/$self->{option_results}->{component}/) {
my $mod_name = "hardware::server::hp::proliant::snmp::mode::components::components::$_";
my $mod_name = "hardware::server::hp::proliant::snmp::mode::components::$_";
centreon::plugins::misc::mymodule_load(output => $self->{output}, module => $mod_name,
error_msg => "Cannot load module '$mod_name'.");
my $func = $mod_name->can('load');