From 6e3055bc7666f55251d3f62805c60c6bc83c4d73 Mon Sep 17 00:00:00 2001 From: qgarnier Date: Thu, 4 Jan 2018 16:52:32 +0100 Subject: [PATCH] Fix #847 --- .../hp/procurve/snmp/mode/components/fan.pm | 76 ++++++++++++++++++ .../hp/procurve/snmp/mode/components/psu.pm | 78 +++++++++++++++++++ .../{ => snmp}/mode/components/sensor.pm | 4 +- .../hp/procurve/{ => snmp}/mode/cpu.pm | 4 +- .../procurve/{ => snmp}/mode/environment.pm | 32 ++++++-- .../hp/procurve/{ => snmp}/mode/memory.pm | 4 +- .../network/hp/procurve/{ => snmp}/plugin.pm | 14 ++-- 7 files changed, 193 insertions(+), 19 deletions(-) create mode 100644 centreon-plugins/network/hp/procurve/snmp/mode/components/fan.pm create mode 100644 centreon-plugins/network/hp/procurve/snmp/mode/components/psu.pm rename centreon-plugins/network/hp/procurve/{ => snmp}/mode/components/sensor.pm (98%) rename centreon-plugins/network/hp/procurve/{ => snmp}/mode/cpu.pm (98%) rename centreon-plugins/network/hp/procurve/{ => snmp}/mode/environment.pm (74%) rename centreon-plugins/network/hp/procurve/{ => snmp}/mode/memory.pm (98%) rename centreon-plugins/network/hp/procurve/{ => snmp}/plugin.pm (69%) diff --git a/centreon-plugins/network/hp/procurve/snmp/mode/components/fan.pm b/centreon-plugins/network/hp/procurve/snmp/mode/components/fan.pm new file mode 100644 index 000000000..7d39bde58 --- /dev/null +++ b/centreon-plugins/network/hp/procurve/snmp/mode/components/fan.pm @@ -0,0 +1,76 @@ +# +# Copyright 2017 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::hp::procurve::snmp::mode::components::fan; + +use strict; +use warnings; + +my %map_fan_status = ( + 0 => 'failed', + 1 => 'removed', + 2 => 'off', + 3 => 'underspeed', + 4 => 'overspeed', + 5 => 'ok', + 6 => 'maxstate', +); + +my $mapping = { + hpicfFanState => { oid => '.1.3.6.1.4.1.11.2.14.11.5.1.54.2.1.1.4', map => \%map_fan_status }, +}; + +sub load { + my ($self) = @_; + + push @{$self->{request}}, { oid => $mapping->{hpicfFanState}->{oid} }; +} + +sub check { + my ($self) = @_; + + + $self->{output}->output_add(long_msg => "Checking fans"); + $self->{components}->{fan} = {name => 'fans', total => 0, skip => 0}; + return if ($self->check_filter(section => 'fan')); + + foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$mapping->{hpicfFanState}->{oid}}})) { + next if ($oid !~ /^$mapping->{hpicfFanState}->{oid}\.(.*)$/); + my $instance = $1; + my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$mapping->{hpicfFanState}->{oid}}, instance => $instance); + + next if ($self->check_filter(section => 'fan', instance => $instance)); + next if ($result->{hpicfFanState} =~ /removed/i && + $self->absent_problem(section => 'fan', instance => $instance)); + $self->{components}->{fan}->{total}++; + + $self->{output}->output_add(long_msg => sprintf("fan '%s' state is %s [instance: %s].", + $instance, $result->{hpicfFanState}, $instance + )); + my $exit = $self->get_severity(section => 'fan', value => $result->{hpicfFanState}); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("fan '%s' state is %s", + $instance, $result->{hpicfFanState})); + } + } +} + +1; diff --git a/centreon-plugins/network/hp/procurve/snmp/mode/components/psu.pm b/centreon-plugins/network/hp/procurve/snmp/mode/components/psu.pm new file mode 100644 index 000000000..223d47a47 --- /dev/null +++ b/centreon-plugins/network/hp/procurve/snmp/mode/components/psu.pm @@ -0,0 +1,78 @@ +# +# Copyright 2017 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package network::hp::procurve::snmp::mode::components::psu; + +use strict; +use warnings; + +my %map_psu_status = ( + 1 => 'psNotPresent', + 2 => 'psNotPlugged', + 3 => 'psPowered', + 4 => 'psFailed', + 5 => 'psPermFailure', + 6 => 'psMax', + 7 => 'psAuxFailure', + 8 => 'psNotPowered', + 9 => 'psAuxNotPowered', +); + +my $mapping = { + hpicfPsState => { oid => '.1.3.6.1.4.1.11.2.14.11.5.1.55.1.1.1.2', map => \%map_psu_status }, +}; + +sub load { + my ($self) = @_; + + push @{$self->{request}}, { oid => $mapping->{hpicfPsState}->{oid} }; +} + +sub check { + my ($self) = @_; + + + $self->{output}->output_add(long_msg => "Checking power supply"); + $self->{components}->{psu} = {name => 'psu', total => 0, skip => 0}; + return if ($self->check_filter(section => 'psu')); + + foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$mapping->{hpicfPsState}->{oid}}})) { + next if ($oid !~ /^$mapping->{hpicfPsState}->{oid}\.(.*)$/); + my $instance = $1; + my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$mapping->{hpicfPsState}->{oid}}, instance => $instance); + + next if ($self->check_filter(section => 'psu', instance => $instance)); + next if ($result->{hpicfPsState} =~ /psNotPresent/i && + $self->absent_problem(section => 'psu', instance => $instance)); + $self->{components}->{psu}->{total}++; + + $self->{output}->output_add(long_msg => sprintf("power supply '%s' state is %s [instance: %s].", + $instance, $result->{hpicfPsState}, $instance + )); + my $exit = $self->get_severity(section => 'psu', value => $result->{hpicfPsState}); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("power supply '%s' state is %s", + $instance, $result->{hpicfPsState})); + } + } +} + +1; diff --git a/centreon-plugins/network/hp/procurve/mode/components/sensor.pm b/centreon-plugins/network/hp/procurve/snmp/mode/components/sensor.pm similarity index 98% rename from centreon-plugins/network/hp/procurve/mode/components/sensor.pm rename to centreon-plugins/network/hp/procurve/snmp/mode/components/sensor.pm index 49f84f802..7b0aa7990 100644 --- a/centreon-plugins/network/hp/procurve/mode/components/sensor.pm +++ b/centreon-plugins/network/hp/procurve/snmp/mode/components/sensor.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::hp::procurve::mode::components::sensor; +package network::hp::procurve::snmp::mode::components::sensor; use strict; use warnings; @@ -81,4 +81,4 @@ sub check { } } -1; \ No newline at end of file +1; diff --git a/centreon-plugins/network/hp/procurve/mode/cpu.pm b/centreon-plugins/network/hp/procurve/snmp/mode/cpu.pm similarity index 98% rename from centreon-plugins/network/hp/procurve/mode/cpu.pm rename to centreon-plugins/network/hp/procurve/snmp/mode/cpu.pm index 31738f1d7..d3ac112a3 100644 --- a/centreon-plugins/network/hp/procurve/mode/cpu.pm +++ b/centreon-plugins/network/hp/procurve/snmp/mode/cpu.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::hp::procurve::mode::cpu; +package network::hp::procurve::snmp::mode::cpu; use base qw(centreon::plugins::mode); @@ -97,4 +97,4 @@ Threshold critical in percent. =back =cut - \ No newline at end of file + diff --git a/centreon-plugins/network/hp/procurve/mode/environment.pm b/centreon-plugins/network/hp/procurve/snmp/mode/environment.pm similarity index 74% rename from centreon-plugins/network/hp/procurve/mode/environment.pm rename to centreon-plugins/network/hp/procurve/snmp/mode/environment.pm index a43f15a44..270bbfa37 100644 --- a/centreon-plugins/network/hp/procurve/mode/environment.pm +++ b/centreon-plugins/network/hp/procurve/snmp/mode/environment.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::hp::procurve::mode::environment; +package network::hp::procurve::snmp::mode::environment; use base qw(centreon::plugins::templates::hardware); @@ -28,7 +28,7 @@ use warnings; sub set_system { my ($self, %options) = @_; - $self->{regexp_threshold_overload_check_section_option} = '^(sensor)$'; + $self->{regexp_threshold_overload_check_section_option} = '^(sensor|fan|psu)$'; $self->{cb_hook2} = 'snmp_execute'; @@ -40,10 +40,30 @@ sub set_system { ['good', 'OK'], ['not present', 'WARNING'], ], + psu => [ + ['psNotPresent', 'OK'], + ['psNotPlugged', 'WARNING'], + ['psPowered', 'OK'], + ['psFailed', 'CRITICAL'], + ['psPermFailure', 'CRITICAL'], + ['psMax', 'WARNING'], + ['psAuxFailure', 'CRITICAL'], + ['psNotPowered', 'WARNING'], + ['psAuxNotPowered', 'CRITICAL'], + ], + fan => [ + ['failed', 'CRITICAL'], + ['removed', 'OK'], + ['off', 'WARNING'], + ['underspeed', 'WARNING'], + ['overspeed', 'WARNING'], + ['ok', 'OK'], + ['maxstate', 'WARNING'], + ], }; - $self->{components_path} = 'network::hp::procurve::mode::components'; - $self->{components_module} = ['sensor']; + $self->{components_path} = 'network::hp::procurve::snmp::mode::components'; + $self->{components_module} = ['sensor', 'psu', 'fan']; } sub snmp_execute { @@ -79,7 +99,7 @@ Check sensors (hpicfChassis.mib). =item B<--component> Which component to check (Default: '.*'). -Can be: 'sensor'. +Can be: 'sensor', 'psu', 'fan'. =item B<--filter> @@ -105,4 +125,4 @@ Example: --threshold-overload='sensor,CRITICAL,^(?!(good)$)' =back =cut - \ No newline at end of file + diff --git a/centreon-plugins/network/hp/procurve/mode/memory.pm b/centreon-plugins/network/hp/procurve/snmp/mode/memory.pm similarity index 98% rename from centreon-plugins/network/hp/procurve/mode/memory.pm rename to centreon-plugins/network/hp/procurve/snmp/mode/memory.pm index b4b7ec8bb..f0af7150f 100644 --- a/centreon-plugins/network/hp/procurve/mode/memory.pm +++ b/centreon-plugins/network/hp/procurve/snmp/mode/memory.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::hp::procurve::mode::memory; +package network::hp::procurve::snmp::mode::memory; use base qw(centreon::plugins::mode); @@ -127,4 +127,4 @@ Threshold critical in percent. =back =cut - \ No newline at end of file + diff --git a/centreon-plugins/network/hp/procurve/plugin.pm b/centreon-plugins/network/hp/procurve/snmp/plugin.pm similarity index 69% rename from centreon-plugins/network/hp/procurve/plugin.pm rename to centreon-plugins/network/hp/procurve/snmp/plugin.pm index ed633764a..6bc47d95e 100644 --- a/centreon-plugins/network/hp/procurve/plugin.pm +++ b/centreon-plugins/network/hp/procurve/snmp/plugin.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package network::hp::procurve::plugin; +package network::hp::procurve::snmp::plugin; use strict; use warnings; @@ -31,12 +31,12 @@ sub new { $self->{version} = '1.0'; %{$self->{modes}} = ( - 'cpu' => 'network::hp::procurve::mode::cpu', - 'environment' => 'network::hp::procurve::mode::environment', - 'interfaces' => 'snmp_standard::mode::interfaces', - 'list-interfaces' => 'snmp_standard::mode::listinterfaces', - 'memory' => 'network::hp::procurve::mode::memory', - ); + 'cpu' => 'network::hp::procurve::snmp::mode::cpu', + 'environment' => 'network::hp::procurve::snmp::mode::environment', + 'interfaces' => 'snmp_standard::mode::interfaces', + 'list-interfaces' => 'snmp_standard::mode::listinterfaces', + 'memory' => 'network::hp::procurve::snmp::mode::memory', + ); return $self; }