2015-03-12 17:10:21 +01:00
#
2019-01-09 09:57:11 +01:00
# Copyright 2019 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.
#
2015-03-12 17:10:21 +01:00
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