From 387a9e3f73ca26dd42231837232e1a27b04efbe9 Mon Sep 17 00:00:00 2001 From: garnier-quentin Date: Thu, 20 Dec 2018 11:57:56 +0100 Subject: [PATCH 1/2] Fix mssql version bug --- centreon/plugins/dbi.pm | 8 +++++++- database/mssql/dbi.pm | 41 ++++++++++++++++++++++++++++++++++++++++ database/mssql/plugin.pm | 1 + 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 database/mssql/dbi.pm diff --git a/centreon/plugins/dbi.pm b/centreon/plugins/dbi.pm index 5c636307b..05d0cdb7f 100644 --- a/centreon/plugins/dbi.pm +++ b/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; } diff --git a/database/mssql/dbi.pm b/database/mssql/dbi.pm new file mode 100644 index 000000000..bb5258413 --- /dev/null +++ b/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 ''); + + $self->query(query => q{select SERVERPROPERTY('productversion') as product_version}); + my $row = $self->fetchrow_hashref(); + $self->{version} = $row->{product_version}; +} + +1; + +__END__ \ No newline at end of file diff --git a/database/mssql/plugin.pm b/database/mssql/plugin.pm index 64dad1ca4..2d653a920 100644 --- a/database/mssql/plugin.pm +++ b/database/mssql/plugin.pm @@ -48,6 +48,7 @@ sub new { 'transactions' => 'database::mssql::mode::transactions', ); + $self->{sql_modes}{dbi} = 'database::mssql::dbi'; return $self; } From 5880e09d72c42903fc6043643885ee19708fcb54 Mon Sep 17 00:00:00 2001 From: garnier-quentin Date: Thu, 20 Dec 2018 12:03:50 +0100 Subject: [PATCH 2/2] + Fix mssql version bug --- centreon/plugins/dbi.pm | 7 ++++++- database/mssql/dbi.pm | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/centreon/plugins/dbi.pm b/centreon/plugins/dbi.pm index 05d0cdb7f..560df8a1e 100644 --- a/centreon/plugins/dbi.pm +++ b/centreon/plugins/dbi.pm @@ -262,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/database/mssql/dbi.pm b/database/mssql/dbi.pm index bb5258413..6d70d3231 100644 --- a/database/mssql/dbi.pm +++ b/database/mssql/dbi.pm @@ -31,7 +31,7 @@ sub set_version { $self->{version} = $self->{instance}->get_info(18); # SQL_DBMS_VER return if (defined($self->{version}) && $self->{version} ne ''); - $self->query(query => q{select SERVERPROPERTY('productversion') as product_version}); + 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}; }