2015-03-12 17:10:21 +01:00
################################################################################
# Copyright 2005-2013 MERETHIS
# Centreon is developped by : Julien Mathis and Romain Le Merlus under
# GPL Licence 2.0.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation ; either version 2 of the License.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, see <http://www.gnu.org/licenses>.
#
# Linking this program statically or dynamically with other modules is making a
# combined work based on this program. Thus, the terms and conditions of the GNU
# General Public License cover the whole combination.
#
# As a special exception, the copyright holders of this program give MERETHIS
# permission to link this program with independent modules to produce an executable,
# regardless of the license terms of these independent modules, and to copy and
# distribute the resulting executable under terms of MERETHIS choice, provided that
# MERETHIS also meet, for each linked independent module, the terms and conditions
# of the license of that module. An independent module is a module which is not
# derived from this program. If you modify this program, you may extend this
# exception to your version of the program, but you are not obliged to do so. If you
# do not wish to do so, delete this exception statement from your version.
#
# For more information : contact@centreon.com
# Authors : Quentin Garnier <qgarnier@merethis.com>
#
####################################################################################
package storage::hp :: 3 par:: 7000 :: mode:: battery ;
use base qw( centreon::plugins::mode ) ;
use strict ;
use warnings ;
2015-03-13 00:28:49 +01:00
my % states = (
'ok' = > 'OK' ,
'new' = > 'OK' ,
'degraded' = > 'WARNING' ,
'failed' = > 'CRITICAL' ,
2015-03-12 17:10:21 +01:00
) ;
sub new {
my ( $ class , % options ) = @ _ ;
my $ self = $ class - > SUPER:: new ( package = > __PACKAGE__ , % options ) ;
bless $ self , $ class ;
$ self - > { version } = '1.0' ;
$ options { options } - > add_options ( arguments = >
{
2015-03-13 00:28:49 +01:00
"hostname:s" = > { name = > 'hostname' } ,
2015-03-12 17:10:21 +01:00
"timeout:s" = > { name = > 'timeout' , default = > 30 } ,
"sudo" = > { name = > 'sudo' } ,
"ssh-option:s@" = > { name = > 'ssh_option' } ,
"ssh-path:s" = > { name = > 'ssh_path' } ,
"ssh-command:s" = > { name = > 'ssh_command' , default = > 'ssh' } ,
"no-component:s" = > { name = > 'no_component' } ,
} ) ;
$ self - > { components } = { } ;
$ self - > { no_components } = undef ;
return $ self ;
}
sub check_options {
my ( $ self , % options ) = @ _ ;
$ self - > SUPER:: init ( % options ) ;
2015-03-13 00:28:49 +01:00
if ( ! defined ( $ self - > { option_results } - > { hostname } ) ) {
$ self - > { output } - > add_option_msg ( short_msg = > "Need to specify a hostname." ) ;
$ self - > { output } - > option_exit ( ) ;
2015-03-12 17:10:21 +01:00
}
if ( defined ( $ self - > { option_results } - > { no_component } ) ) {
if ( $ self - > { option_results } - > { no_component } ne '' ) {
$ self - > { no_components } = $ self - > { option_results } - > { no_component } ;
} else {
$ self - > { no_components } = 'critical' ;
}
}
}
sub run {
my ( $ self , % options ) = @ _ ;
2015-03-13 00:28:49 +01:00
$ self - > { option_results } - > { remote } = 1 ;
my $ stdout = centreon::plugins::misc:: execute ( output = > $ self - > { output } ,
2015-03-12 17:10:21 +01:00
options = > $ self - > { option_results } ,
sudo = > $ self - > { option_results } - > { sudo } ,
command = > "showbattery" ,
command_path = > $ self - > { option_results } - > { command_path } ,
command_options = > $ self - > { option_results } - > { command_options } ) ;
2015-03-13 00:28:49 +01:00
my $ total_components = 0 ;
my @ batteries = split ( "\n" , $ stdout ) ;
foreach my $ battery ( @ batteries ) {
if ( $ battery =~ /\d+\s+(\d+)\s+(\d+)\s+\S+\s+(\S+)\s+(\d+)/ ) {
$ total_components + + ;
my $ psuId = $ 1 ;
my $ batteryId = $ 2 ;
my $ batteryState = $ 3 ;
my $ batteryChrgLvl = $ 4 ;
$ self - > { output } - > output_add ( long_msg = > sprintf ( "Battery '%d' on power supply '%d' is '%s' [Battery charge level: '%d%%']" , $ batteryId , $ psuId , $ batteryState , $ batteryChrgLvl ) ) ;
if ( $ states { lc ( $ batteryState ) } ne 'OK' ) {
$ self - > { output } - > output_add ( severity = > $ states { lc ( $ batteryState ) } ,
short_msg = > sprintf ( "Battery '%d' on power supply '%d' state is '%s' [Battery charge level: '%d%%']" , $ batteryId , $ psuId , $ batteryState , $ batteryChrgLvl ) ) ;
}
}
}
$ self - > { output } - > output_add ( severity = > 'OK' ,
2015-03-12 17:10:21 +01:00
short_msg = > sprintf ( "All %d batteries are ok." , $ total_components ) ) ;
2015-03-13 00:28:49 +01:00
2015-03-12 17:10:21 +01:00
if ( defined ( $ self - > { option_results } - > { no_component } ) && $ total_components == 0 ) {
$ self - > { output } - > output_add ( severity = > $ self - > { no_components } ,
short_msg = > 'No components are checked.' ) ;
}
$ self - > { output } - > display ( ) ;
$ self - > { output } - > exit ( ) ;
}
1 ;
__END__
= head1 MODE
Check batteries .
= over 8
= item B <--hostname>
Hostname to query .
= item B <--ssh-option>
Specify multiple options like the user ( example: - - ssh - option = '-l=centreon-engine' - - ssh - option = '-p=52' ) .
= item B <--ssh-path>
Specify ssh command path ( default: none )
= item B <--ssh-command>
Specify ssh command ( default: 'ssh' ) .
= item B <--sudo>
Use sudo .
= item B <--timeout>
Timeout in seconds for the command ( Default: 30 ) .
= item B <--no-component>
Return an error if no compenents are checked .
If total ( with skipped ) is 0 . ( Default: 'critical' returns ) .
= back
2015-03-13 00:28:49 +01:00
= cut