################################################################################ # 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 . # # 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 # #################################################################################### 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 => { 'mode:s' => { name => 'mode' }, 'dyn-mode:s' => { name => 'dynmode_name' }, 'list-mode' => { name => 'list_mode' }, 'mode-version:s' => { name => 'mode_version' }, } ); $self->{version} = '1.0'; %{$self->{modes}} = (); $self->{default} = undef; $self->{options}->parse_options(); $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'); $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."); $self->{mode} = $self->{dynmode_name}->new(options => $self->{options}, output => $self->{output}, mode => $self->{mode_name}); } else { $self->{output}->add_option_msg(short_msg => "Need to specify '--mode' or '--dyn-mode' option."); $self->{output}->option_exit(); } if (defined($options{help})) { $self->{options}->add_help(package => $self->{modes}{$self->{mode_name}}, sections => 'MODE'); $self->{options}->display_help(); $self->{output}->option_exit(); } if (defined($options{version})) { $self->{mode}->version(); $self->{output}->option_exit(nolabel => 1); } 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(); } $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; 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(); } } 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. =item B<--mode-version> Check minimal version of mode. If not, unknown error. =item B<--version> Display plugin version. =back =head1 DESCRIPTION B<>. =cut