diff --git a/centreon/common/emc/navisphere/mode/cache.pm b/centreon/common/emc/navisphere/mode/cache.pm index 3ea2d8e5c..3e8df0381 100644 --- a/centreon/common/emc/navisphere/mode/cache.pm +++ b/centreon/common/emc/navisphere/mode/cache.pm @@ -71,7 +71,9 @@ sub new { $self->{version} = '1.0'; $options{options}->add_options(arguments => { - "threshold-overload:s@" => { name => 'threshold_overload' }, + "cache-command:s" => { name => 'cache_command', default => 'getcache' }, + "cache-options:s" => { name => 'cache_options', default => '-pdp -state -mirror' }, + "threshold-overload:s@" => { name => 'threshold_overload' }, "warning:s" => { name => 'warning', }, "critical:s" => { name => 'critical', }, }); @@ -136,26 +138,30 @@ sub run { #SP Read Cache State Enabled #SP Write Cache State Enabled #Write Cache Mirrored: YES - my $response = $clariion->execute_command(cmd => 'getcache -pdp -state -mirror'); + my $response = $clariion->execute_command(cmd => $self->{option_results}->{cache_command} . ' ' . $self->{option_results}->{cache_options}); chomp $response; - if ($response !~ /^SP Read Cache State\s+(.*)/im) { + my ($read_cache_state, $write_cache_state); + if ($response !~ /^SP Read Cache State(\s+|:\s+)(.*)/im) { $self->{output}->output_add(severity => 'UNKNOWN', short_msg => 'Cannot find cache informations.'); $self->{output}->display(); $self->{output}->exit(); } - my $read_cache_state = $1; + $read_cache_state = $2; - $response =~ /^SP Write Cache State\s+(.*)\s*$/im; - my $write_cache_state = $1; + $response =~ /^SP Write Cache State(\s+|:\s+)(.*)\s*$/im; + $write_cache_state = $2; - $response =~ /^Write Cache Mirrored:\s+(.*)\s*$/im; - my $write_cache_mirror = $1; - - $response =~ /^Prct.*?=\s+(\S+)/im; - my $dirty_prct = $1; + my ($write_cache_mirror, $dirty_prct); + if ($response =~ /^Write Cache Mirrored:\s+(.*)\s*$/im) { + $write_cache_mirror = $1; + } + if ($response =~ /^Prct.*?=\s+(\S+)/im) { + $dirty_prct = $1; + } + $self->{output}->output_add(severity => $self->get_severity(value => $read_cache_state, label => 'read_cache'), short_msg => sprintf("Read cache state is '%s'", @@ -164,23 +170,26 @@ sub run { label => 'write_cache'), short_msg => sprintf("Write cache state is '%s'", $write_cache_state)); - $self->{output}->output_add(severity => $self->get_severity(value => $write_cache_mirror, - label => 'write_mirror'), - short_msg => sprintf("Write cache mirror is '%s'", - $write_cache_mirror)); - - my $exit = $self->{perfdata}->threshold_check(value => $dirty_prct, - threshold => [ { label => 'critical', 'exit_litteral' => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]); - if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { - $self->{output}->output_add(severity => $exit, - short_msg => sprintf("Dirty Cache Pages is %s %%", $dirty_prct)); + if (defined($write_cache_mirror)) { + $self->{output}->output_add(severity => $self->get_severity(value => $write_cache_mirror, + label => 'write_mirror'), + short_msg => sprintf("Write cache mirror is '%s'", + $write_cache_mirror)); } - $self->{output}->perfdata_add(label => 'dirty_cache', unit => '%', - value => $dirty_prct, - warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning'), - critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical'), - min => 0, max => 100); - + if (defined($dirty_prct)) { + my $exit = $self->{perfdata}->threshold_check(value => $dirty_prct, + threshold => [ { label => 'critical', 'exit_litteral' => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("Dirty Cache Pages is %s %%", $dirty_prct)); + } + $self->{output}->perfdata_add(label => 'dirty_cache', unit => '%', + value => $dirty_prct, + warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning'), + critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical'), + min => 0, max => 100); + } + $self->{output}->display(); $self->{output}->exit(); } @@ -195,6 +204,14 @@ Check status of the read and write cache. =over 8 +=item B<--cache-command> + +Set cache command (Default: 'getcache'). + +=item B<--cache-options> + +Set option for cache command (Default: '-pdp -state -mirror'). + =item B<--warning> Threshold warning in percent (for dirty cache).