From 8bb897a020f3836ce999ee258d849dd6277df273 Mon Sep 17 00:00:00 2001 From: qgarnier Date: Mon, 28 Dec 2020 15:13:33 +0100 Subject: [PATCH] Fix #2317 (#2459) --- .../standard/snmp/mode/components/led.pm | 78 +++++++++++++++++++ .../snmp/mode/components/resources.pm | 16 +++- .../nortel/standard/snmp/mode/hardware.pm | 15 +++- 3 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 centreon-plugins/network/nortel/standard/snmp/mode/components/led.pm diff --git a/centreon-plugins/network/nortel/standard/snmp/mode/components/led.pm b/centreon-plugins/network/nortel/standard/snmp/mode/components/led.pm new file mode 100644 index 000000000..b2ce13074 --- /dev/null +++ b/centreon-plugins/network/nortel/standard/snmp/mode/components/led.pm @@ -0,0 +1,78 @@ +# +# Copyright 2020 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::nortel::standard::snmp::mode::components::led; + +use strict; +use warnings; +use network::nortel::standard::snmp::mode::components::resources qw($map_led_status); + +my $mapping = { + label => { oid => '.1.3.6.1.4.1.2272.1.101.1.1.5.1.3' }, # rcVossSystemCardLedLabel + status => { oid => '.1.3.6.1.4.1.2272.1.101.1.1.5.1.4', map => $map_led_status } # rcVossSystemCardLedStatus +}; +my $oid_led_entry = '.1.3.6.1.4.1.2272.1.101.1.1.5.1'; # rcVossSystemCardLedEntry + +sub load { + my ($self) = @_; + + push @{$self->{request}}, { + oid => $oid_led_entry, + start => $mapping->{label}->{oid} + }; +} + +sub check { + my ($self) = @_; + + $self->{output}->output_add(long_msg => "Checking led"); + $self->{components}->{led} = {name => 'led', total => 0, skip => 0}; + return if ($self->check_filter(section => 'led')); + + foreach my $oid ($self->{snmp}->oid_lex_sort(keys %{$self->{results}->{$oid_led_entry}})) { + next if ($oid !~ /^$mapping->{label}->{oid}\.(.*)$/); + my $instance = $1; + my $result = $self->{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$oid_led_entry}, instance => $instance); + + next if ($self->check_filter(section => 'led', instance => $instance)); + $self->{components}->{led}->{total}++; + + $self->{output}->output_add( + long_msg => sprintf( + "led '%s' status is '%s' [instance: %s].", + $result->{label}, + $result->{status}, + $instance + ) + ); + my $exit = $self->get_severity(section => 'led', instance => $instance, value => $result->{status}); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { + $self->{output}->output_add( + severity => $exit, + short_msg => sprintf( + "Led '%s' status is '%s'", + $result->{label}, $result->{status} + ) + ); + } + } +} + +1; diff --git a/centreon-plugins/network/nortel/standard/snmp/mode/components/resources.pm b/centreon-plugins/network/nortel/standard/snmp/mode/components/resources.pm index 3aefae131..dd199ac51 100644 --- a/centreon-plugins/network/nortel/standard/snmp/mode/components/resources.pm +++ b/centreon-plugins/network/nortel/standard/snmp/mode/components/resources.pm @@ -24,10 +24,10 @@ use strict; use warnings; use Exporter; -our ($map_comp_status, $map_fan_status, $map_psu_status, $map_card_status); +our ($map_comp_status, $map_fan_status, $map_psu_status, $map_card_status, $map_led_status); our @ISA = qw(Exporter); -our @EXPORT_OK = qw($map_comp_status $map_fan_status $map_psu_status $map_card_status); +our @EXPORT_OK = qw($map_comp_status $map_fan_status $map_psu_status $map_card_status $map_led_status); $map_fan_status = { 1 => 'unknown', @@ -65,4 +65,14 @@ $map_comp_status = { 12 => 'obsoleted', }; -1; \ No newline at end of file +$map_led_status = { + 1 => 'unknown', + 2 => 'greenSteady', + 3 => 'greenBlinking', + 4 => 'amberSteady', + 5 => 'amberBlinking', + 6 => 'greenamberBlinking', + 7 => 'off' +}; + +1; diff --git a/centreon-plugins/network/nortel/standard/snmp/mode/hardware.pm b/centreon-plugins/network/nortel/standard/snmp/mode/hardware.pm index a1281b841..afa4daf6b 100644 --- a/centreon-plugins/network/nortel/standard/snmp/mode/hardware.pm +++ b/centreon-plugins/network/nortel/standard/snmp/mode/hardware.pm @@ -28,7 +28,7 @@ use warnings; sub set_system { my ($self, %options) = @_; - $self->{regexp_threshold_numeric_check_section_option} = '^(temperature|fan.temperature)$'; + $self->{regexp_threshold_numeric_check_section_option} = '^(?:temperature|fan.temperature)$'; $self->{cb_hook2} = 'snmp_execute'; @@ -65,10 +65,19 @@ sub set_system { ['notConfig', 'OK'], ['obsoleted', 'WARNING'], ], + led => [ + ['unknown', 'UNKNOWN'], + ['greenSteady', 'OK'], + ['greenBlinking', 'OK'], + ['amberSteady', 'WARNING'], + ['amberBlinking', 'WARNING'], + ['greenamberBlinking', 'WARNING'], + ['off', 'OK'] + ] }; $self->{components_path} = 'network::nortel::standard::snmp::mode::components'; - $self->{components_module} = ['fan', 'psu', 'card', 'entity']; + $self->{components_module} = ['card', 'entity', 'fan', 'led', 'psu']; } sub snmp_execute { @@ -101,7 +110,7 @@ Check hardware. =item B<--component> Which component to check (Default: '.*'). -Can be: 'fan', 'psu', 'card', 'entity'. +Can be: 'fan', 'psu', 'card', 'entity', 'led'. =item B<--filter>