2013-12-13 16:14:12 +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 centreon::plugins::script_simple ;
use strict ;
use warnings ;
sub new {
my ( $ class , % options ) = @ _ ;
my $ self = { } ;
bless $ self , $ class ;
# $options{package} = parent package caller
# $options{options} = options object
# $options{output} = output object
$ self - > { options } = $ options { options } ;
$ self - > { output } = $ options { output } ;
$ self - > { options } - > add_options (
arguments = > {
2014-06-23 15:32:47 +02:00
'mode:s' = > { name = > 'mode' } ,
'dyn-mode:s' = > { name = > 'dynmode_name' } ,
'list-mode' = > { name = > 'list_mode' } ,
'mode-version:s' = > { name = > 'mode_version' } ,
2013-12-13 16:14:12 +01:00
}
) ;
$ self - > { version } = '1.0' ;
% { $ self - > { modes } } = ( ) ;
$ self - > { default } = undef ;
$ self - > { options } - > parse_options ( ) ;
2014-06-23 15:32:47 +02:00
$ self - > { mode_name } = $ self - > { options } - > get_option ( argument = > 'mode' ) ;
$ self - > { list_mode } = $ self - > { options } - > get_option ( argument = > 'list_mode' ) ;
$ self - > { mode_version } = $ self - > { options } - > get_option ( argument = > 'mode_version' ) ;
2013-12-13 16:14:12 +01:00
$ self - > { options } - > clean ( ) ;
$ self - > { options } - > add_help ( package = > $ options { package } , sections = > 'PLUGIN DESCRIPTION' ) ;
$ self - > { options } - > add_help ( package = > __PACKAGE__ , sections = > 'GLOBAL OPTIONS' ) ;
return $ self ;
}
sub init {
my ( $ self , % options ) = @ _ ;
# $options{version} = string version
# $options{help} = string help
if ( defined ( $ options { help } ) && ! defined ( $ self - > { mode_name } ) ) {
$ self - > { options } - > display_help ( ) ;
$ self - > { output } - > option_exit ( ) ;
}
if ( defined ( $ options { version } ) && ! defined ( $ self - > { mode_name } ) ) {
$ self - > version ( ) ;
}
if ( defined ( $ self - > { list_mode } ) ) {
$ self - > list_mode ( ) ;
}
# Output HELP
$ self - > { options } - > add_help ( package = > 'centreon::plugins::output' , sections = > 'OUTPUT OPTIONS' ) ;
# Load mode
if ( defined ( $ self - > { mode_name } ) && $ self - > { mode_name } ne '' ) {
$ self - > is_mode ( mode = > $ self - > { mode_name } ) ;
centreon::plugins::misc:: mymodule_load ( output = > $ self - > { output } , module = > $ self - > { modes } { $ self - > { mode_name } } ,
error_msg = > "Cannot load module --mode." ) ;
$ self - > { mode } = $ self - > { modes } { $ self - > { mode_name } } - > new ( options = > $ self - > { options } , output = > $ self - > { output } , mode = > $ self - > { mode_name } ) ;
} elsif ( defined ( $ self - > { dynmode_name } ) && $ self - > { dynmode_name } ne '' ) {
centreon::plugins::misc:: mymodule_load ( output = > $ self - > { output } , module = > $ self - > { dynmode_name } ,
error_msg = > "Cannot load module --dyn-mode." ) ;
2014-12-08 20:15:21 +01:00
$ self - > { mode } = $ self - > { dynmode_name } - > new ( options = > $ self - > { options } , output = > $ self - > { output } , mode = > $ self - > { dynmode_name } ) ;
2013-12-13 16:14:12 +01:00
} else {
$ self - > { output } - > add_option_msg ( short_msg = > "Need to specify '--mode' or '--dyn-mode' option." ) ;
$ self - > { output } - > option_exit ( ) ;
}
if ( defined ( $ options { help } ) ) {
2014-11-18 15:49:02 +01:00
if ( defined ( $ self - > { mode_name } ) && $ self - > { mode_name } ne '' ) {
$ self - > { options } - > add_help ( package = > $ self - > { modes } { $ self - > { mode_name } } , sections = > 'MODE' ) ;
} else {
$ self - > { options } - > add_help ( package = > $ self - > { dynmode_name } , sections = > 'MODE' ) ;
}
2013-12-13 16:14:12 +01:00
$ self - > { options } - > display_help ( ) ;
$ self - > { output } - > option_exit ( ) ;
}
if ( defined ( $ options { version } ) ) {
$ self - > { mode } - > version ( ) ;
$ self - > { output } - > option_exit ( nolabel = > 1 ) ;
}
2014-06-23 15:32:47 +02:00
if ( centreon::plugins::misc:: minimal_version ( $ self - > { mode } - > { version } , $ self - > { mode_version } ) == 0 ) {
$ self - > { output } - > add_option_msg ( short_msg = > "Not good version for plugin mode. Excepted at least: " . $ self - > { mode_version } . ". Get: " . $ self - > { mode } - > { version } ) ;
$ self - > { output } - > option_exit ( ) ;
}
2013-12-13 16:14:12 +01:00
$ self - > { options } - > parse_options ( ) ;
$ self - > { option_results } = $ self - > { options } - > get_options ( ) ;
$ self - > { mode } - > check_options ( option_results = > $ self - > { option_results } , default = > $ self - > { default } ) ;
}
sub run {
my $ self = shift ;
2014-02-17 15:21:20 +01:00
if ( $ self - > { output } - > is_disco_format ( ) ) {
$ self - > { mode } - > disco_format ( ) ;
$ self - > { output } - > display_disco_format ( ) ;
$ self - > { output } - > exit ( exit_litteral = > 'ok' ) ;
}
if ( $ self - > { output } - > is_disco_show ( ) ) {
$ self - > { mode } - > disco_show ( snmp = > $ self - > { snmp } ) ;
$ self - > { output } - > display_disco_show ( ) ;
$ self - > { output } - > exit ( exit_litteral = > 'ok' ) ;
} else {
$ self - > { mode } - > run ( ) ;
}
2013-12-13 16:14:12 +01:00
}
sub is_mode {
my ( $ self , % options ) = @ _ ;
# $options->{mode} = mode
if ( ! defined ( $ self - > { modes } { $ options { mode } } ) ) {
$ self - > { output } - > add_option_msg ( short_msg = > "mode '" . $ options { mode } . "' doesn't exist (use --list option to show available modes)." ) ;
$ self - > { output } - > option_exit ( ) ;
}
}
sub version {
my $ self = shift ;
$ self - > { output } - > add_option_msg ( short_msg = > "Plugin Version: " . $ self - > { version } ) ;
$ self - > { output } - > option_exit ( nolabel = > 1 ) ;
}
sub list_mode {
my $ self = shift ;
$ self - > { options } - > display_help ( ) ;
$ self - > { output } - > add_option_msg ( long_msg = > "Modes Available:" ) ;
foreach ( keys % { $ self - > { modes } } ) {
$ self - > { output } - > add_option_msg ( long_msg = > " " . $ _ ) ;
}
$ self - > { output } - > option_exit ( nolabel = > 1 ) ;
}
1 ;
__END__
= head1 NAME
-
= head1 SYNOPSIS
-
= head1 GLOBAL OPTIONS
= over 8
= item B <--mode>
Choose a mode .
= item B <--dyn-mode>
Specify a mode with the path ( separated by '::' ) .
= item B <--list-mode>
List available modes .
2014-06-23 15:32:47 +02:00
= item B <--mode-version>
Check minimal version of mode . If not , unknown error .
2013-12-13 16:14:12 +01:00
= item B <--version>
Display plugin version .
= back
= head1 DESCRIPTION
B < > .
= cut