diff --git a/centreon/common/emc/navisphere/mode/sp.pm b/centreon/common/emc/navisphere/mode/sp.pm index 06eef859d..b8e9b7f00 100644 --- a/centreon/common/emc/navisphere/mode/sp.pm +++ b/centreon/common/emc/navisphere/mode/sp.pm @@ -18,38 +18,116 @@ # limitations under the License. # -package centreon::common::emc::navisphere::mode::spcomponents::sp; +package centreon::common::emc::navisphere::mode::sp; + +use base qw(centreon::plugins::templates::hardware); use strict; use warnings; -sub load { }; - -sub check { - my ($self) = @_; - - $self->{output}->output_add(long_msg => "Checking sp"); - $self->{components}->{sp} = {name => 'sp', total => 0, skip => 0}; - return if ($self->check_filter(section => 'sp')); +sub set_system { + my ($self, %options) = @_; - # SP A State: Present - while ($self->{response} =~ /^SP\s+(\S+)\s+State:\s+(.*)$/mgi) { - my $instance = $1; - my $state = $2; - - next if ($self->check_filter(section => 'sp', instance => $instance)); - $self->{components}->{sp}->{total}++; - - $self->{output}->output_add(long_msg => sprintf("sp '%s' state is %s.", - $instance, $state) - ); - my $exit = $self->get_severity(section => 'sp', value => $state); - if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { - $self->{output}->output_add(severity => $exit, - short_msg => sprintf("sp '%s' state is %s", - $instance, $state)); - } - } + $self->{regexp_threshold_overload_check_section_option} = '^(fan|lcc|psu|battery|memory|cpu|iomodule|cable)$'; + + $self->{cb_hook2} = 'navisphere_execute'; + + $self->{thresholds} = { + battery => [ + ['^(Not Ready|Testing|Unknown)$', 'WARNING'], + ['^(?!(Present|Valid)$)', 'CRITICAL'], + ['.*', 'OK'], + ], + psu => [ + ['^(?!(Present|Valid)$)', 'CRITICAL'], + ['.*', 'OK'], + ], + sp => [ + ['^(?!(Present|Valid)$)', 'CRITICAL'], + ['.*', 'OK'], + ], + cable => [ + ['^(.*Unknown.*)$' => 'WARNING'], + ['^(?!(Present|Valid)$)' => 'CRITICAL'], + ['.*', 'OK'], + ], + cpu => [ + ['^(?!(Present|Valid)$)' => 'CRITICAL'], + ['.*', 'OK'], + ], + fan => [ + ['^(?!(Present|Valid)$)' => 'CRITICAL'], + ['.*', 'OK'], + ], + io => [ + ['^(?!(Present|Valid|Empty)$)' => 'CRITICAL'], + ['.*', 'OK'], + ], + lcc => [ + ['^(?!(Present|Valid)$)' => 'CRITICAL'], + ['.*', 'OK'], + ], + dimm => [ + ['^(?!(Present|Valid)$)' => 'CRITICAL'], + ['.*', 'OK'], + ], + }; + + $self->{components_path} = 'centreon::common::emc::navisphere::mode::spcomponents'; + $self->{components_module} = ['fan', 'lcc', 'psu', 'battery', 'memory', 'cpu', 'iomodule', 'cable']; } -1; \ No newline at end of file +sub navisphere_execute { + my ($self, %options) = @_; + + $self->{response} = $options{custom}->execute_command(cmd => 'getcrus ' . $self->{option_results}->{getcrus_options}); + chomp $self->{response}; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, no_absent => 1, no_performance => 1); + bless $self, $class; + + $self->{version} = '1.0'; + $options{options}->add_options(arguments => + { + "getcrus-options:s" => { name => 'getcrus_options', default => '-all' }, + }); + + return $self; +} + +1; + +__END__ + +=head1 MODE + +Check status of storage processor. + +=over 8 + +=item B<--getcrus-options> + +Set option for 'getcrus' command (Default: '-all'). +'-all' option is for some new flare version. + +=item B<--component> + +Which component to check (Default: '.*'). +Can be: 'fan', 'lcc', 'psu', 'battery', 'memory', 'cpu', 'iomodule', 'cable'. + +=item B<--filter> + +Exclude some parts (comma seperated list) (Example: --filter=lcc --filter=fan) +Can also exclude specific instance: --filter=fan,1.2 + +=item B<--no-component> + +Return an error if no compenents are checked. +If total (with skipped) is 0. (Default: 'critical' returns). + +=back + +=cut \ No newline at end of file