fix database custom mode

This commit is contained in:
garnier-quentin 2020-07-28 16:57:30 +02:00
parent 5dc2bf06e6
commit 3effd636c5
9 changed files with 78 additions and 43 deletions

View File

@ -99,8 +99,10 @@ sub handle_ALRM {
$self->prepare_destroy(); $self->prepare_destroy();
$self->disconnect(); $self->disconnect();
$self->{output}->output_add(severity => $self->{sql_errors_exit}, $self->{output}->output_add(
short_msg => 'Timeout'); severity => $self->{sql_errors_exit},
short_msg => 'Timeout'
);
$self->{output}->display(); $self->{output}->display();
$self->{output}->exit(); $self->{output}->exit();
} }

View File

@ -75,7 +75,7 @@ sub init {
$self->{options}->display_help(); $self->{options}->display_help();
$self->{output}->option_exit(); $self->{output}->option_exit();
} }
if (defined($options{version}) && !defined($self->{mode_name})&& !defined($self->{dynmode_name})) { if (defined($options{version}) && !defined($self->{mode_name}) && !defined($self->{dynmode_name})) {
$self->version(); $self->version();
} }
if (defined($self->{list_mode})) { if (defined($self->{list_mode})) {

View File

@ -25,7 +25,7 @@ use warnings;
use Exporter; use Exporter;
our @ISA = qw(Exporter); our @ISA = qw(Exporter);
our @EXPORT_OK = qw(catalog_status_threshold catalog_status_calc); our @EXPORT_OK = qw(catalog_status_threshold catalog_status_threshold_ng catalog_status_calc);
sub catalog_status_threshold { sub catalog_status_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
@ -59,6 +59,34 @@ sub catalog_status_threshold {
return $status; return $status;
} }
sub catalog_status_threshold_ng {
my ($self, %options) = @_;
my $status = 'ok';
my $message;
eval {
local $SIG{__WARN__} = sub { $message = $_[0]; };
local $SIG{__DIE__} = sub { $message = $_[0]; };
my $label = $self->{label};
if (defined($self->{instance_mode}->{option_results}->{'critical-' . $self->{label}}) && $self->{instance_mode}->{option_results}->{'critical-' . $label} ne '' &&
eval "$self->{instance_mode}->{option_results}->{'critical-' . $self->{label}}") {
$status = 'critical';
} elsif (defined($self->{instance_mode}->{option_results}->{'warning-' . $label}) && $self->{instance_mode}->{option_results}->{'warning-' . $label} ne '' &&
eval "$self->{instance_mode}->{option_results}->{'warning-' . $label}") {
$status = 'warning';
} elsif (defined($self->{instance_mode}->{option_results}->{'unknown-' . $label}) && $self->{instance_mode}->{option_results}->{'unknown-' . $label} ne '' &&
eval "$self->{instance_mode}->{option_results}->{'unknown-' . $label}") {
$status = 'unknown';
}
};
if (defined($message)) {
$self->{output}->output_add(long_msg => 'filter status issue: ' . $message);
}
return $status;
}
sub catalog_status_calc { sub catalog_status_calc {
my ($self, %options) = @_; my ($self, %options) = @_;

View File

@ -123,7 +123,7 @@ sub new {
'filter-counters-block:s' => { name => 'filter_counters_block' }, 'filter-counters-block:s' => { name => 'filter_counters_block' },
'filter-counters:s' => { name => 'filter_counters' }, 'filter-counters:s' => { name => 'filter_counters' },
'display-ok-counters:s' => { name => 'display_ok_counters' }, 'display-ok-counters:s' => { name => 'display_ok_counters' },
'list-counters' => { name => 'list_counters' }, 'list-counters' => { name => 'list_counters' }
}); });
$self->{statefile_value} = undef; $self->{statefile_value} = undef;
if (defined($options{statefile}) && $options{statefile}) { if (defined($options{statefile}) && $options{statefile}) {
@ -150,21 +150,24 @@ sub new {
if (!defined($_->{threshold}) || $_->{threshold} != 0) { if (!defined($_->{threshold}) || $_->{threshold} != 0) {
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'warning-' . $thlabel . ':s' => { name => 'warning-' . $thlabel }, 'unknown-' . $thlabel . ':s' => { name => 'unknown-' . $thlabel, default => $_->{unknown_default} },
'critical-' . $thlabel . ':s' => { name => 'critical-' . $thlabel }, 'warning-' . $thlabel . ':s' => { name => 'warning-' . $thlabel, default => $_->{warning_default} },
'critical-' . $thlabel . ':s' => { name => 'critical-' . $thlabel, default => $_->{critical_default} }
}); });
if (defined($_->{nlabel})) { if (defined($_->{nlabel})) {
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'warning-' . $_->{label} . ':s' => { name => 'warning-' . $_->{label}, redirect => 'warning-' . $thlabel }, 'unknown-' . $_->{label} . ':s' => { name => 'unknown-' . $_->{label}, redirect => 'unknown-' . $thlabel },
'critical-' . $_->{label} . ':s' => { name => 'critical-' . $_->{label}, redirect => 'critical-' . $thlabel }, 'warning-' . $_->{label} . ':s' => { name => 'warning-' . $_->{label}, redirect => 'warning-' . $thlabel },
'critical-' . $_->{label} . ':s' => { name => 'critical-' . $_->{label}, redirect => 'critical-' . $thlabel }
}); });
} }
} }
$_->{obj} = centreon::plugins::values->new( $_->{obj} = centreon::plugins::values->new(
statefile => $self->{statefile_value}, statefile => $self->{statefile_value},
output => $self->{output}, perfdata => $self->{perfdata}, output => $self->{output}, perfdata => $self->{perfdata},
label => $_->{label}, nlabel => $_->{nlabel}, thlabel => $thlabel, label => $_->{label}, nlabel => $_->{nlabel}, thlabel => $thlabel
); );
$_->{obj}->set(%{$_->{set}}); $_->{obj}->set(%{$_->{set}});
} }
@ -193,13 +196,19 @@ sub check_options {
$self->{output}->display(nolabel => 1, force_ignore_perfdata => 1); $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1);
$self->{output}->exit(); $self->{output}->exit();
} }
my $change_macros_opt = [];
foreach my $key (keys %{$self->{maps_counters}}) { foreach my $key (keys %{$self->{maps_counters}}) {
foreach (@{$self->{maps_counters}->{$key}}) { foreach (@{$self->{maps_counters}->{$key}}) {
push @$change_macros_opt, 'unknown-' . $_->{label}, 'warning-' . $_->{label}, 'critical-' . $_->{label}
if (defined($_->{type}) && $_->{type} == 2);
$_->{obj}->{instance_mode} = $self; $_->{obj}->{instance_mode} = $self;
$_->{obj}->init(option_results => $self->{option_results}); $_->{obj}->init(option_results => $self->{option_results});
} }
} }
$self->change_macros(macros => $change_macros_opt) if (scalar(@$change_macros_opt) > 0);
if (defined($self->{statefile_value})) { if (defined($self->{statefile_value})) {
$self->{statefile_value}->check_options(%options); $self->{statefile_value}->check_options(%options);
} }

View File

@ -56,7 +56,7 @@ sub new {
$options{options}->add_help(package => __PACKAGE__, sections => 'MYSQLCMD OPTIONS', once => 1); $options{options}->add_help(package => __PACKAGE__, sections => 'MYSQLCMD OPTIONS', once => 1);
$self->{output} = $options{output}; $self->{output} = $options{output};
$self->{custommode_name} = $options{custommode_name}; $self->{sqlmode_name} = $options{sqlmode_name};
$self->{args} = undef; $self->{args} = undef;
$self->{stdout} = undef; $self->{stdout} = undef;
$self->{columns} = undef; $self->{columns} = undef;
@ -81,7 +81,7 @@ sub set_defaults {
my ($self, %options) = @_; my ($self, %options) = @_;
foreach (keys %{$options{default}}) { foreach (keys %{$options{default}}) {
if ($_ eq $self->{custommode_name}) { if ($_ eq $self->{sqlmode_name}) {
for (my $i = 0; $i < scalar(@{$options{default}->{$_}}); $i++) { for (my $i = 0; $i < scalar(@{$options{default}->{$_}}); $i++) {
foreach my $opt (keys %{$options{default}->{$_}[$i]}) { foreach my $opt (keys %{$options{default}->{$_}[$i]}) {
if (!defined($self->{option_results}->{$opt}[$i])) { if (!defined($self->{option_results}->{$opt}[$i])) {

View File

@ -63,7 +63,7 @@ sub new {
$options{options}->add_help(package => __PACKAGE__, sections => 'sqlpluscmd OPTIONS', once => 1); $options{options}->add_help(package => __PACKAGE__, sections => 'sqlpluscmd OPTIONS', once => 1);
$self->{output} = $options{output}; $self->{output} = $options{output};
$self->{custommode_name} = $options{custommode_name}; $self->{sqlmode_name} = $options{sqlmode_name};
$self->{args} = undef; $self->{args} = undef;
$self->{stdout} = undef; $self->{stdout} = undef;
$self->{columns} = undef; $self->{columns} = undef;
@ -87,7 +87,7 @@ sub set_defaults {
my ($self, %options) = @_; my ($self, %options) = @_;
foreach (keys %{$options{default}}) { foreach (keys %{$options{default}}) {
if ($_ eq $self->{custommode_name}) { if ($_ eq $self->{sqlmode_name}) {
for (my $i = 0; $i < scalar(@{$options{default}->{$_}}); $i++) { for (my $i = 0; $i < scalar(@{$options{default}->{$_}}); $i++) {
foreach my $opt (keys %{$options{default}->{$_}[$i]}) { foreach my $opt (keys %{$options{default}->{$_}[$i]}) {
if (!defined($self->{option_results}->{$opt}[$i])) { if (!defined($self->{option_results}->{$opt}[$i])) {

View File

@ -56,7 +56,7 @@ sub new {
$options{options}->add_help(package => __PACKAGE__, sections => 'PSQLCMD OPTIONS', once => 1); $options{options}->add_help(package => __PACKAGE__, sections => 'PSQLCMD OPTIONS', once => 1);
$self->{output} = $options{output}; $self->{output} = $options{output};
$self->{custommode_name} = $options{custommode_name}; $self->{sqlmode_name} = $options{sqlmode_name};
$self->{args} = undef; $self->{args} = undef;
$self->{stdout} = undef; $self->{stdout} = undef;
$self->{columns} = undef; $self->{columns} = undef;
@ -84,7 +84,7 @@ sub set_defaults {
my ($self, %options) = @_; my ($self, %options) = @_;
foreach (keys %{$options{default}}) { foreach (keys %{$options{default}}) {
if ($_ eq $self->{custommode_name}) { if ($_ eq $self->{sqlmode_name}) {
for (my $i = 0; $i < scalar(@{$options{default}->{$_}}); $i++) { for (my $i = 0; $i < scalar(@{$options{default}->{$_}}); $i++) {
foreach my $opt (keys %{$options{default}->{$_}[$i]}) { foreach my $opt (keys %{$options{default}->{$_}[$i]}) {
if (!defined($self->{option_results}->{$opt}[$i])) { if (!defined($self->{option_results}->{$opt}[$i])) {

View File

@ -24,7 +24,7 @@ use base qw(centreon::plugins::templates::counter);
use strict; use strict;
use warnings; use warnings;
use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold); use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng);
use Digest::MD5 qw(md5_hex); use Digest::MD5 qw(md5_hex);
sub custom_traffic_perfdata { sub custom_traffic_perfdata {
@ -224,11 +224,13 @@ sub set_counters {
]; ];
$self->{maps_counters}->{trunk_global} = [ $self->{maps_counters}->{trunk_global} = [
{ label => 'status', threshold => 0, set => { {
label => 'status', type => 2, critical_default => '%{status} =~ /uninitialized|down/',
set => {
key_values => [ { name => 'status' }, { name => 'display' } ], key_values => [ { name => 'status' }, { name => 'display' } ],
output_template => "status is '%s'", output_error_template => 'status: %s', output_template => "status is '%s'", output_error_template => 'status: %s',
closure_custom_perfdata => sub { return 0; }, closure_custom_perfdata => sub { return 0; },
closure_custom_threshold_check => \&catalog_status_threshold closure_custom_threshold_check => \&catalog_status_threshold_ng
} }
}, },
{ label => 'traffic-in', set => { { label => 'traffic-in', set => {
@ -296,11 +298,11 @@ sub set_counters {
]; ];
$self->{maps_counters}->{interfaces} = [ $self->{maps_counters}->{interfaces} = [
{ label => 'interface-status', threshold => 0, set => { { label => 'interface-status', type => 2, set => {
key_values => [ { name => 'status' }, { name => 'display' } ], key_values => [ { name => 'status' }, { name => 'display' } ],
output_template => "status is '%s'", output_template => "status is '%s'",
closure_custom_perfdata => sub { return 0; }, closure_custom_perfdata => sub { return 0; },
closure_custom_threshold_check => \&catalog_status_threshold closure_custom_threshold_check => \&catalog_status_threshold_ng
} }
} }
]; ];
@ -315,12 +317,6 @@ sub new {
'filter-name:s' => { name => 'filter_name' }, 'filter-name:s' => { name => 'filter_name' },
'units-traffic:s' => { name => 'units_traffic', default => '%' }, 'units-traffic:s' => { name => 'units_traffic', default => '%' },
'speed:s' => { name => 'speed' }, 'speed:s' => { name => 'speed' },
'unknown-status:s' => { name => 'unknown_status', default => '' },
'warning-status:s' => { name => 'warning_status', default => '' },
'critical-status:s' => { name => 'critical_status', default => '%{status} =~ /uninitialized|down/' },
'unknown-interface-status:s' => { name => 'unknown_interface_status', default => '' },
'warning-interface-status:s' => { name => 'warning_interface_status', default => '' },
'critical-interface-status:s' => { name => 'critical_interface_status', default => '' },
'add-interfaces' => { name => 'add_interfaces' } 'add-interfaces' => { name => 'add_interfaces' }
}); });

View File

@ -49,10 +49,10 @@ sub set_counters {
key_values => [ { name => 'offset' }, { name => 'date' } ], key_values => [ { name => 'offset' }, { name => 'date' } ],
closure_custom_output => $self->can('custom_usage_output'), closure_custom_output => $self->can('custom_usage_output'),
perfdatas => [ perfdatas => [
{ label => 'offset', value => 'offset', template => '%d', unit => 's' }, { label => 'offset', template => '%d', unit => 's' }
], ]
} }
}, }
]; ];
} }
@ -64,7 +64,7 @@ sub new {
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'ntp-hostname:s' => { name => 'ntp_hostname' }, 'ntp-hostname:s' => { name => 'ntp_hostname' },
'ntp-port:s' => { name => 'ntp_port', default => 123 }, 'ntp-port:s' => { name => 'ntp_port', default => 123 },
'timezone:s' => { name => 'timezone' }, 'timezone:s' => { name => 'timezone' }
}); });
return $self; return $self;
@ -98,13 +98,13 @@ sub get_target_time {
my $tz = centreon::plugins::misc::set_timezone(name => $timezone); my $tz = centreon::plugins::misc::set_timezone(name => $timezone);
my $dt = DateTime->new( my $dt = DateTime->new(
year => $remote_date[0], year => $remote_date[0],
month => $remote_date[1], month => $remote_date[1],
day => $remote_date[2], day => $remote_date[2],
hour => $remote_date[3], hour => $remote_date[3],
minute => $remote_date[4], minute => $remote_date[4],
second => $remote_date[5], second => $remote_date[5],
%$tz %$tz
); );
return ($dt->epoch, \@remote_date, $timezone); return ($dt->epoch, \@remote_date, $timezone);
@ -143,7 +143,7 @@ sub manage_selection {
); );
$self->{offset} = { $self->{offset} = {
offset => sprintf("%d", $offset), offset => sprintf('%d', $offset),
date => $remote_date_formated, date => $remote_date_formated,
}; };
} }