(plugin) database::influxdb - mode query fix uninitialized value with… (#4581)

This commit is contained in:
qgarnier 2023-09-04 16:08:10 +02:00 committed by GitHub
parent 5fdc13ddcf
commit 847c2eb4da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -28,7 +28,7 @@ use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_
sub custom_status_perfdata { sub custom_status_perfdata {
my ($self, %options) = @_; my ($self, %options) = @_;
foreach my $key (@{$self->{instance_mode}->{custom_keys}}) { foreach my $key (@{$self->{instance_mode}->{custom_keys}}) {
$self->{output}->perfdata_add( $self->{output}->perfdata_add(
label => $key, label => $key,
@ -61,13 +61,13 @@ sub custom_status_calc {
$self->{result_values}->{$key} = $options{new_datas}->{$self->{instance} . '_' . $key}; $self->{result_values}->{$key} = $options{new_datas}->{$self->{instance} . '_' . $key};
} }
$self->{result_values}->{time} = time(); $self->{result_values}->{time} = time();
return 0; return 0;
} }
sub set_counters { sub set_counters {
my ($self, %options) = @_; my ($self, %options) = @_;
$self->{maps_counters_type} = [ $self->{maps_counters_type} = [
{ name => 'queries_results', type => 1, { name => 'queries_results', type => 1,
message_multiple => 'All queries results are ok', skipped_code => { -11 => 1 } } message_multiple => 'All queries results are ok', skipped_code => { -11 => 1 } }
@ -89,7 +89,7 @@ sub new {
my ($class, %options) = @_; my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1);
bless $self, $class; bless $self, $class;
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'query:s@' => { name => 'query' }, 'query:s@' => { name => 'query' },
'instance:s' => { name => 'instance' }, 'instance:s' => { name => 'instance' },
@ -104,27 +104,27 @@ sub new {
sub check_options { sub check_options {
my ($self, %options) = @_; my ($self, %options) = @_;
$self->SUPER::check_options(%options); $self->SUPER::check_options(%options);
if (!defined($self->{option_results}->{output}) || $self->{option_results}->{output} eq '') { if (!defined($self->{option_results}->{output}) || $self->{option_results}->{output} eq '') {
$self->{output}->add_option_msg(short_msg => "Need to specify --output option."); $self->{output}->add_option_msg(short_msg => "Need to specify --output option.");
$self->{output}->option_exit(); $self->{output}->option_exit();
} }
if (!defined($self->{option_results}->{instance}) || $self->{option_results}->{instance} eq '') { if (!defined($self->{option_results}->{instance}) || $self->{option_results}->{instance} eq '') {
$self->{output}->add_option_msg(short_msg => "Need to specify --instance option."); $self->{output}->add_option_msg(short_msg => "Need to specify --instance option.");
$self->{output}->option_exit(); $self->{output}->option_exit();
} }
if (!defined($self->{option_results}->{query})) { if (!defined($self->{option_results}->{query})) {
$self->{output}->add_option_msg(short_msg => "Need to specify --query option."); $self->{output}->add_option_msg(short_msg => "Need to specify --query option.");
$self->{output}->option_exit(); $self->{output}->option_exit();
} }
$self->{custom_keys} = []; $self->{custom_keys} = [];
$self->{queries} = {}; $self->{queries} = [];
foreach my $query (@{$self->{option_results}->{query}}) { foreach my $query (@{$self->{option_results}->{query}}) {
next if ($query !~ /^(.*?),(.*)$/); next if ($query !~ /^(.*?),(.*)$/);
$self->{queries}->{$1} = $2; push @{$self->{queries}}, { label => $1, value => $2 };
push @{$self->{maps_counters}->{queries_results}->[0]->{set}->{key_values}}, { name => $1 }; push @{$self->{maps_counters}->{queries_results}->[0]->{set}->{key_values}}, { name => $1 };
push @{$self->{custom_keys}}, $1; push @{$self->{custom_keys}}, $1;
} }
@ -136,25 +136,31 @@ sub manage_selection {
my ($self, %options) = @_; my ($self, %options) = @_;
$self->{queries_results} = {}; $self->{queries_results} = {};
my (@results, @queries);
my $query_index = -1; my $query_index = 0;
foreach my $label (keys %{$self->{queries}}) { foreach my $query (@{$self->{queries}}) {
$query_index++; my $queries_results = $options{custom}->query(queries => [$query->{value}]);
@queries = ();
push @queries, $self->{queries}->{$label};
my $queries_results = $options{custom}->query(queries => \@queries);
foreach my $result (@$queries_results) { foreach my $result (@$queries_results) {
next if (!defined($result->{tags}->{ $self->{option_results}->{instance} })); next if (!defined($result->{tags}->{ $self->{option_results}->{instance} }));
my ($column_index) = grep { $result->{columns}->[$_] eq $self->{custom_keys}->[$query_index] } (0 .. @{$result->{columns}} - 1); my $column_index = 0;
my $value; foreach (@{$result->{columns}}) {
$value = $options{custom}->compute(aggregation => $self->{option_results}->{aggregation}, values => $result->{values}, column => $column_index) if (defined($result->{values})); last if ($_ eq $self->{custom_keys}->[$query_index]);
$self->{queries_results}->{ $result->{tags}->{ $self->{option_results}->{instance} } }->{instance} = $result->{tags}->{ $self->{option_results}->{instance} }; $column_index++;
}
my $value = $options{custom}->compute(aggregation => $self->{option_results}->{aggregation}, values => $result->{values}, column => $column_index) if (defined($result->{values}));
if (!defined($self->{queries_results}->{ $result->{tags}->{ $self->{option_results}->{instance} } })) {
$self->{queries_results}->{ $result->{tags}->{ $self->{option_results}->{instance} } } = {
instance => $result->{tags}->{ $self->{option_results}->{instance} }
};
}
$self->{queries_results}->{ $result->{tags}->{ $self->{option_results}->{instance} } }->{ $result->{columns}->[$column_index] } = $value; $self->{queries_results}->{ $result->{tags}->{ $self->{option_results}->{instance} } }->{ $result->{columns}->[$column_index] } = $value;
} }
$query_index++;
} }
if (scalar(keys %{$self->{queries_results}}) <= 0) { if (scalar(keys %{$self->{queries_results}}) <= 0) {