diff --git a/centreon-plugins/centreon/plugins/dbi.pm b/centreon-plugins/centreon/plugins/dbi.pm index 5c636307b..560df8a1e 100644 --- a/centreon-plugins/centreon/plugins/dbi.pm +++ b/centreon-plugins/centreon/plugins/dbi.pm @@ -190,6 +190,12 @@ sub is_version_minimum { return 1; } + +sub set_version { + my ($self) = @_; + + $self->{version} = $self->{instance}->get_info(18); # SQL_DBMS_VER +} sub connect { my ($self, %options) = @_; @@ -220,7 +226,7 @@ sub connect { return (-1, $err_msg); } - $self->{version} = $self->{instance}->get_info(18); # SQL_DBMS_VER + $self->set_version(); return 0; } @@ -256,18 +262,23 @@ sub fetchrow_hashref { sub query { my ($self, %options) = @_; + my $continue_error = defined($options{continue_error}) && $options{continue_error} == 1 ? 1 : 0; $self->{statement_handle} = $self->{instance}->prepare($options{query}); if (!defined($self->{statement_handle})) { + return 1 if ($continue_error == 1); $self->{output}->add_option_msg(short_msg => "Cannot execute query: " . $self->{instance}->errstr); $self->{output}->option_exit(exit_litteral => $self->{sql_errors_exit}); } my $rv = $self->{statement_handle}->execute; if (!$rv) { + return 1 if ($continue_error == 1); $self->{output}->add_option_msg(short_msg => "Cannot execute query: " . $self->{statement_handle}->errstr); $self->{output}->option_exit(exit_litteral => $self->{sql_errors_exit}); - } + } + + return 0; } 1; diff --git a/centreon-plugins/database/mssql/dbi.pm b/centreon-plugins/database/mssql/dbi.pm new file mode 100644 index 000000000..6d70d3231 --- /dev/null +++ b/centreon-plugins/database/mssql/dbi.pm @@ -0,0 +1,41 @@ +# +# Copyright 2018 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package database::mssql::dbi; + +use base qw(centreon::plugins::dbi); + +use strict; +use warnings; + +sub set_version { + my ($self) = @_; + + $self->{version} = $self->{instance}->get_info(18); # SQL_DBMS_VER + return if (defined($self->{version}) && $self->{version} ne ''); + + return if ($self->query(query => q{select SERVERPROPERTY('productversion') as product_version}, continue_error => 1) == 1); + my $row = $self->fetchrow_hashref(); + $self->{version} = $row->{product_version}; +} + +1; + +__END__ \ No newline at end of file diff --git a/centreon-plugins/database/mssql/plugin.pm b/centreon-plugins/database/mssql/plugin.pm index 64dad1ca4..2d653a920 100644 --- a/centreon-plugins/database/mssql/plugin.pm +++ b/centreon-plugins/database/mssql/plugin.pm @@ -48,6 +48,7 @@ sub new { 'transactions' => 'database::mssql::mode::transactions', ); + $self->{sql_modes}{dbi} = 'database::mssql::dbi'; return $self; }