2014-06-23 15:50:46 +02:00
#
2020-01-06 15:19:23 +01:00
# Copyright 2020 Centreon (http://www.centreon.com/)
2015-07-21 11:51:02 +02:00
#
# 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.
#
2014-06-23 15:50:46 +02:00
package database::mssql::mode::transactions ;
2020-07-06 14:18:03 +02:00
use base qw( centreon::plugins::templates::counter ) ;
2014-06-23 15:50:46 +02:00
use strict ;
use warnings ;
2020-07-07 14:54:40 +02:00
use centreon::plugins::misc ;
2020-07-06 14:18:03 +02:00
use Digest::MD5 qw( md5_hex ) ;
sub prefix_database_output {
my ( $ self , % options ) = @ _ ;
return "Database '" . $ options { instance_value } - > { display } . "' " ;
}
sub set_counters {
my ( $ self , % options ) = @ _ ;
$ self - > { maps_counters_type } = [
{ name = > 'global' , type = > 0 } ,
{ name = > 'database' , type = > 1 , cb_prefix_output = > 'prefix_database_output' , message_multiple = > 'All databases are ok' , skipped_code = > { - 10 = > 1 } }
] ;
$ self - > { maps_counters } - > { global } = [
{ label = > 'databases-transactions' , nlabel = > 'databases.transactions.persecond' , set = > {
key_values = > [ { name = > 'transactions' , per_second = > 1 } ] ,
output_template = > 'total transactions: %.2f/s' ,
perfdatas = > [
{ template = > '%.2f' , unit = > '/s' , min = > 0 }
]
}
}
] ;
$ self - > { maps_counters } - > { database } = [
{ label = > 'database-transactions' , nlabel = > 'database.transactions.persecond' , set = > {
key_values = > [ { name = > 'transactions' , per_second = > 1 } , { name = > 'display' } ] ,
output_template = > 'transactions: %.2f/s' ,
perfdatas = > [
{ template = > '%.2f' , unit = > '/s' , min = > 0 , label_extra_instance = > 1 , instance_use = > 'display' }
]
}
}
] ;
}
2014-06-23 15:50:46 +02:00
sub new {
my ( $ class , % options ) = @ _ ;
2020-07-06 14:18:03 +02:00
my $ self = $ class - > SUPER:: new ( package = > __PACKAGE__ , % options , statefile = > 1 , force_new_perfdata = > 1 ) ;
2014-06-23 15:50:46 +02:00
bless $ self , $ class ;
2020-07-06 14:18:03 +02:00
$ options { options } - > add_options ( arguments = > {
'filter-database:s' = > { name = > 'filter_database' }
} ) ;
2014-06-23 15:50:46 +02:00
return $ self ;
}
2020-07-06 14:18:03 +02:00
sub manage_selection {
2014-06-23 15:50:46 +02:00
my ( $ self , % options ) = @ _ ;
2020-07-06 14:18:03 +02:00
$ options { sql } - > connect ( ) ;
$ options { sql } - > query ( query = > q{ SELECT instance_name, cntr_value FROM sys.dm_os_performance_counters WHERE UPPER(counter_name) = UPPER('transactions/sec') } ) ;
my $ result = $ options { sql } - > fetchall_arrayref ( ) ;
$ self - > { global } = { } ;
$ self - > { database } = { } ;
foreach my $ row ( @$ result ) {
2020-07-07 14:54:40 +02:00
my $ name = centreon::plugins::misc:: trim ( $ row - > [ 0 ] ) ;
if ( $ name eq '_Total' ) {
2020-07-06 14:18:03 +02:00
$ self - > { global } - > { transactions } = $ row - > [ 1 ] ;
next ;
}
if ( defined ( $ self - > { option_results } - > { filter_database } ) && $ self - > { option_results } - > { filter_database } ne '' &&
2020-07-07 14:54:40 +02:00
$ name !~ /$self->{option_results}->{filter_database}/ ) {
$ self - > { output } - > output_add ( long_msg = > "skipping '" . $ name . "': no matching filter." , debug = > 1 ) ;
2020-07-06 14:18:03 +02:00
next ;
}
2020-07-07 14:54:40 +02:00
$ self - > { database } - > { $ name } = {
display = > $ name ,
2020-07-06 14:18:03 +02:00
transactions = > $ row - > [ 1 ]
} ;
2014-06-23 15:50:46 +02:00
}
2020-07-06 14:18:03 +02:00
$ self - > { cache_name } = 'mssql_' . $ self - > { mode } . '_' . $ options { sql } - > get_unique_id4save ( ) . '_' .
( defined ( $ self - > { option_results } - > { filter_counters } ) ? md5_hex ( $ self - > { option_results } - > { filter_counters } ) : md5_hex ( 'all' ) ) . '_' .
( defined ( $ self - > { option_results } - > { filter_database } ) ? md5_hex ( $ self - > { option_results } - > { filter_database } ) : md5_hex ( 'all' ) ) ;
2014-06-23 15:50:46 +02:00
}
1 ;
__END__
= head1 MODE
2020-07-06 14:18:03 +02:00
Check MSSQL transactions .
2014-06-23 15:50:46 +02:00
= over 8
2020-07-06 14:18:03 +02:00
= item B <--filter-database>
2014-06-23 15:50:46 +02:00
2020-07-06 14:18:03 +02:00
Filter database name ( can be a regexp ) .
2014-06-23 15:50:46 +02:00
2020-07-06 14:18:03 +02:00
= item B <--warning-*> B <--critical-*>
2014-06-23 15:50:46 +02:00
2020-07-06 14:18:03 +02:00
Thresholds .
Can be: 'databases-transactions' , 'database-transactions' .
2014-06-23 15:50:46 +02:00
= back
= cut