From b3397421b7b756ac032e004c28fb6a51891b8304 Mon Sep 17 00:00:00 2001 From: garnier-quentin Date: Fri, 24 Jan 2025 04:21:13 -0500 Subject: [PATCH 1/2] Add --sql-file option to modes sql and sql-string --- src/centreon/common/protocols/sql/mode/sql.pm | 25 +++++++++++++------ .../common/protocols/sql/mode/sqlstring.pm | 18 ++++++++++--- src/database/db2/plugin.pm | 2 ++ 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/centreon/common/protocols/sql/mode/sql.pm b/src/centreon/common/protocols/sql/mode/sql.pm index 350326a43a..3414cacbf6 100644 --- a/src/centreon/common/protocols/sql/mode/sql.pm +++ b/src/centreon/common/protocols/sql/mode/sql.pm @@ -24,6 +24,7 @@ use base qw(centreon::plugins::templates::counter); use strict; use warnings; +use centreon::plugins::misc; use Time::HiRes qw(gettimeofday tv_interval); sub custom_value_output { @@ -76,8 +77,9 @@ sub new { my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); bless $self, $class; - $options{options}->add_options(arguments => { + $options{options}->add_options(arguments => { 'sql-statement:s' => { name => 'sql_statement' }, + 'sql-file:s' => { name => 'sql_file' }, 'format:s' => { name => 'format', default => 'SQL statement result : %i.' }, 'perfdata-unit:s' => { name => 'perfdata_unit', default => '' }, 'perfdata-name:s' => { name => 'perfdata_name', default => 'value' }, @@ -94,10 +96,15 @@ sub check_options { my ($self, %options) = @_; $self->SUPER::check_options(%options); - if (!defined($self->{option_results}->{sql_statement}) || $self->{option_results}->{sql_statement} eq '') { - $self->{output}->add_option_msg(short_msg => "Need to specify '--sql-statement' option."); - $self->{output}->option_exit(); + $self->{query} = $self->{option_results}->{sql_statement}; + if (!defined($self->{query}) || $self->{query} eq '') { + if (!defined($self->{option_results}->{format}) || $self->{option_results}->{format} eq '') { + $self->{output}->add_option_msg(short_msg => "Need to specify --sql-statement or --sql-file option."); + $self->{output}->option_exit(); + } + $self->{query} = centreon::plugins::misc::slurp_file(output => $self->{output}, file => $self->{option_results}->{sql_file}); } + if (!defined($self->{option_results}->{format}) || $self->{option_results}->{format} eq '') { $self->{output}->add_option_msg(short_msg => "Need to specify '--format' option."); $self->{output}->option_exit(); @@ -108,9 +115,9 @@ sub manage_selection { my ($self, %options) = @_; $options{sql}->connect(); - + my $timing0 = [gettimeofday]; - $options{sql}->query(query => $self->{option_results}->{sql_statement}); + $options{sql}->query(query => $self->{query}); my $value = $options{sql}->fetchrow_array(); $self->{global} = { value => $value, @@ -134,6 +141,10 @@ Check SQL statement. SQL statement that returns a number. +=item B<--sql-file> + +Define the file with the SQL request. + =item B<--format> Output format (default: 'SQL statement result : %i.'). @@ -161,4 +172,4 @@ Can be: 'value', 'execution-time'. =back -=cut +=cut \ No newline at end of file diff --git a/src/centreon/common/protocols/sql/mode/sqlstring.pm b/src/centreon/common/protocols/sql/mode/sqlstring.pm index 0d874bd839..b3b68a9697 100644 --- a/src/centreon/common/protocols/sql/mode/sqlstring.pm +++ b/src/centreon/common/protocols/sql/mode/sqlstring.pm @@ -23,6 +23,7 @@ package centreon::common::protocols::sql::mode::sqlstring; use base qw(centreon::plugins::templates::counter); use strict; use warnings; +use centreon::plugins::misc; use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); sub set_counters { @@ -73,6 +74,7 @@ sub new { $options{options}->add_options(arguments => { 'sql-statement:s' => { name => 'sql_statement' }, + 'sql-file:s' => { name => 'sql_file' }, 'key-column:s' => { name => 'key_column' }, 'value-column:s' => { name => 'value_column' }, 'printf-format:s' => { name => 'printf_format' }, @@ -88,9 +90,13 @@ sub check_options { my ($self, %options) = @_; $self->SUPER::check_options(%options); - if (!defined($self->{option_results}->{sql_statement}) || $self->{option_results}->{sql_statement} eq '') { - $self->{output}->add_option_msg(short_msg => "Need to specify '--sql-statement' option."); - $self->{output}->option_exit(); + $self->{query} = $self->{option_results}->{sql_statement}; + if (!defined($self->{query}) || $self->{query} eq '') { + if (!defined($self->{option_results}->{format}) || $self->{option_results}->{format} eq '') { + $self->{output}->add_option_msg(short_msg => "Need to specify --sql-statement or --sql-file option."); + $self->{output}->option_exit(); + } + $self->{query} = centreon::plugins::misc::slurp_file(output => $self->{output}, file => $self->{option_results}->{sql_file}); } $self->{printf_value} = 'value_field'; @@ -108,7 +114,7 @@ sub manage_selection { my ($self, %options) = @_; $options{sql}->connect(); - $options{sql}->query(query => $self->{option_results}->{sql_statement}); + $options{sql}->query(query => $self->{query}); $self->{rows} = {}; my $row_count = 0; @@ -156,6 +162,10 @@ Check SQL statement to query string pattern (You cannot have more than to fiels SQL statement that returns a string. +=item B<--sql-file> + +Define the file with the SQL request. + =item B<--key-column> Key column (must be one of the selected field). NOT mandatory if you select only one field diff --git a/src/database/db2/plugin.pm b/src/database/db2/plugin.pm index fd3cbd016f..630d1d30d6 100644 --- a/src/database/db2/plugin.pm +++ b/src/database/db2/plugin.pm @@ -39,6 +39,8 @@ sub new { 'database-usage' => 'database::db2::mode::databaseusage', 'hadr' => 'database::db2::mode::hadr', 'list-tablespaces' => 'database::db2::mode::listtablespaces', + 'sql' => 'centreon::common::protocols::sql::mode::sql', + 'sql-string' => 'centreon::common::protocols::sql::mode::sqlstring', 'tablespaces' => 'database::db2::mode::tablespaces' }; From 891bee25bda55b43a96df94395af7cb8a0ad803e Mon Sep 17 00:00:00 2001 From: garnier-quentin Date: Fri, 24 Jan 2025 04:24:34 -0500 Subject: [PATCH 2/2] wip --- src/centreon/common/protocols/sql/mode/sql.pm | 2 +- src/centreon/common/protocols/sql/mode/sqlstring.pm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/centreon/common/protocols/sql/mode/sql.pm b/src/centreon/common/protocols/sql/mode/sql.pm index 3414cacbf6..eea83c77e6 100644 --- a/src/centreon/common/protocols/sql/mode/sql.pm +++ b/src/centreon/common/protocols/sql/mode/sql.pm @@ -98,7 +98,7 @@ sub check_options { $self->{query} = $self->{option_results}->{sql_statement}; if (!defined($self->{query}) || $self->{query} eq '') { - if (!defined($self->{option_results}->{format}) || $self->{option_results}->{format} eq '') { + if (!defined($self->{option_results}->{sql_file}) || $self->{option_results}->{sql_file} eq '') { $self->{output}->add_option_msg(short_msg => "Need to specify --sql-statement or --sql-file option."); $self->{output}->option_exit(); } diff --git a/src/centreon/common/protocols/sql/mode/sqlstring.pm b/src/centreon/common/protocols/sql/mode/sqlstring.pm index b3b68a9697..0384d1d71e 100644 --- a/src/centreon/common/protocols/sql/mode/sqlstring.pm +++ b/src/centreon/common/protocols/sql/mode/sqlstring.pm @@ -92,7 +92,7 @@ sub check_options { $self->{query} = $self->{option_results}->{sql_statement}; if (!defined($self->{query}) || $self->{query} eq '') { - if (!defined($self->{option_results}->{format}) || $self->{option_results}->{format} eq '') { + if (!defined($self->{option_results}->{sql_file}) || $self->{option_results}->{sql_file} eq '') { $self->{output}->add_option_msg(short_msg => "Need to specify --sql-statement or --sql-file option."); $self->{output}->option_exit(); }