enh notsodummy

This commit is contained in:
Colin Gagnaire 2019-06-26 17:08:05 +02:00
parent e0895c350e
commit 602a4bb698
1 changed files with 28 additions and 9 deletions

View File

@ -27,7 +27,9 @@ use warnings;
use centreon::plugins::statefile; use centreon::plugins::statefile;
use Digest::MD5 qw(md5_hex); use Digest::MD5 qw(md5_hex);
my %errors_num = (0 => 'OK', 1 => 'WARNING', 2 => 'CRITICAL', 3 => 'UNKNOWN'); my %errors_service = (0 => 'OK', 1 => 'WARNING', 2 => 'CRITICAL', 3 => 'UNKNOWN');
my %errors_host = (0 => 'UP', 1 => 'DOWN');
my %errors_hash = ('UP' => 'OK', 'DOWN' => 'WARNING');
sub new { sub new {
my ($class, %options) = @_; my ($class, %options) = @_;
@ -37,6 +39,7 @@ sub new {
$self->{version} = '1.0'; $self->{version} = '1.0';
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
"status-sequence:s" => { name => 'status_sequence' }, "status-sequence:s" => { name => 'status_sequence' },
"host" => { name => 'host' },
"restart-sequence" => { name => 'restart_sequence' }, "restart-sequence" => { name => 'restart_sequence' },
"show-sequence" => { name => 'show_sequence' }, "show-sequence" => { name => 'show_sequence' },
"output:s" => { name => 'output' }, "output:s" => { name => 'output' },
@ -61,10 +64,14 @@ sub check_options {
} }
foreach my $status (split(',', $self->{option_results}->{status_sequence})) { foreach my $status (split(',', $self->{option_results}->{status_sequence})) {
if ($status !~ /^[0-3]$/ && $status !~ /ok|warning|critical|unknown/i) { if (!defined($self->{option_results}->{host}) && $status !~ /^[0-3]$/ && $status !~ /ok|warning|critical|unknown/i) {
$self->{output}->add_option_msg(short_msg => "Status should be in '0,1,2,3' or 'ok,warning,critical,unknown' (case isensitive)."); $self->{output}->add_option_msg(short_msg => "Status should be in '0,1,2,3' or 'ok,warning,critical,unknown' (case isensitive).");
$self->{output}->option_exit(); $self->{output}->option_exit();
} }
if (defined($self->{option_results}->{host}) && $status !~ /^[0-1]$/ && $status !~ /up|down/i) {
$self->{output}->add_option_msg(short_msg => "Status should be in '0,1' or 'up,down' (case isensitive).");
$self->{output}->option_exit();
}
push @{$self->{status_sequence}}, $status; push @{$self->{status_sequence}}, $status;
} }
@ -99,7 +106,8 @@ sub get_sequence_output {
my $i = 0; my $i = 0;
foreach my $status (split(',', $self->{option_results}->{status_sequence})) { foreach my $status (split(',', $self->{option_results}->{status_sequence})) {
$status = $errors_num{$status} if $status =~ /^[0-3]$/; $status = $errors_service{$status} if ($status =~ /^[0-3]$/ && !defined($self->{option_results}->{host}));
$status = $errors_host{$status} if ($status =~ /^[0-1]$/ && defined($self->{option_results}->{host}));
push @sequence_output, uc($status) if ($i == $options{index}); push @sequence_output, uc($status) if ($i == $options{index});
push @sequence_output, lc($status) if ($i != $options{index}); push @sequence_output, lc($status) if ($i != $options{index});
@ -113,20 +121,27 @@ sub run {
my ($self, %options) = @_; my ($self, %options) = @_;
my ($status, $index) = $self->get_next_status(statefile => $self->{cache}); my ($status, $index) = $self->get_next_status(statefile => $self->{cache});
$status = $errors_num{$status} if $status =~ /^[0-3]$/; my $status_label = $status;
if (defined($self->{option_results}->{host})) {
$status_label = $errors_host{$status} if ($status =~ /^[0-1]$/);
$status = $errors_host{$status} if ($status =~ /^[0-1]$/);
$status = $errors_hash{uc($status)};
} else {
$status_label = $errors_service{$status} if ($status =~ /^[0-3]$/);
$status = $errors_service{$status} if ($status =~ /^[0-3]$/);
}
my $output = $self->{option_results}->{output}; my $output = $self->{option_results}->{output};
$output .= ' [' . $self->get_sequence_output(index => $index) . ']' if ($self->{option_results}->{show_sequence}); $output .= ' [' . $self->get_sequence_output(index => $index) . ']' if ($self->{option_results}->{show_sequence});
$self->{output}->output_add( $self->{output}->output_add(
severity => $status, severity => $status,
short_msg => $output short_msg => uc($status_label) . ': ' . $output
); );
$self->{output}->perfdata_add( $self->{output}->perfdata_add(
nlabel => 'sequence.index.position', value => ++$index, nlabel => 'sequence.index.position', value => ++$index,
min => 1, max => scalar(@{$self->{status_sequence}}) min => 1, max => scalar(@{$self->{status_sequence}})
); );
$self->{output}->display(); $self->{output}->display(nolabel => 1);
$self->{output}->exit(); $self->{output}->exit();
} }
@ -145,8 +160,12 @@ Do a not-so-dummy check.
Comma separated sequence of statuses Comma separated sequence of statuses
from which the mode should pick is from which the mode should pick is
return code from. return code from.
(Example: --status-sequence='ok,critical,ok,ok') (Example: --status-sequence='ok,critical,ok,ok' or --status-sequence='up,up,down' --host)
(Should be numeric value between 0 and 3, or string in ok, warning, critical, unknown). (Should be numeric value between 0 and 3, or string in ok, warning, critical, unknown, up, down).
=item B<--host>
Host statuses.
=item B<--restart-sequence> =item B<--restart-sequence>