+ Update documentation
This commit is contained in:
parent
79436afc8d
commit
1a83435ea3
|
@ -7,8 +7,16 @@ This document introduces the best practices in the development of "centreon-plug
|
||||||
As all plugins are written in Perl, “there is more than one way to do it”.
|
As all plugins are written in Perl, “there is more than one way to do it”.
|
||||||
But to avoid reinventing the wheel, you should first take a look at the “example” directory, you will get an overview of how to build your own plugin and associated modes.
|
But to avoid reinventing the wheel, you should first take a look at the “example” directory, you will get an overview of how to build your own plugin and associated modes.
|
||||||
|
|
||||||
|
There are 3 chapters:
|
||||||
|
|
||||||
|
* :ref:`Quick Start <quick-start>`: Howto create file structure.
|
||||||
|
* :ref:`Libraries Reference <libraries_reference>`: API description.
|
||||||
|
* :ref:`Model Classes Usage <model_classes_usage>`: description of classes you should use for your plugin.
|
||||||
|
|
||||||
The lastest version is available on following git repository: http://git.centreon.com/centreon-plugins.git
|
The lastest version is available on following git repository: http://git.centreon.com/centreon-plugins.git
|
||||||
|
|
||||||
|
.. _quick-start:
|
||||||
|
|
||||||
***********
|
***********
|
||||||
Quick Start
|
Quick Start
|
||||||
***********
|
***********
|
||||||
|
@ -218,7 +226,7 @@ For example, Warning and Critical thresholds must be validate in **check_options
|
||||||
if (($self->{perfdata}->threshold_validate(label => 'warning', value => $self->{option_results}->{warning})) == 0) {
|
if (($self->{perfdata}->threshold_validate(label => 'warning', value => $self->{option_results}->{warning})) == 0) {
|
||||||
$self->{output}->add_option_msg(short_msg => "Wrong warning threshold '" . $self->{option_results}->{warning} . "'.");
|
$self->{output}->add_option_msg(short_msg => "Wrong warning threshold '" . $self->{option_results}->{warning} . "'.");
|
||||||
$self->{output}->option_exit();
|
$self->{output}->option_exit();
|
||||||
}
|
}
|
||||||
if (($self->{perfdata}->threshold_validate(label => 'critical', value => $self->{option_results}->{critical})) == 0) {
|
if (($self->{perfdata}->threshold_validate(label => 'critical', value => $self->{option_results}->{critical})) == 0) {
|
||||||
$self->{output}->add_option_msg(short_msg => "Wrong critical threshold '" . $self->{option_results}->{critical} . "'.");
|
$self->{output}->add_option_msg(short_msg => "Wrong critical threshold '" . $self->{option_results}->{critical} . "'.");
|
||||||
$self->{output}->option_exit();
|
$self->{output}->option_exit();
|
||||||
|
@ -295,6 +303,8 @@ Once plugin and modes are developed, you can commit (commit messages in english)
|
||||||
git commit -m "Add new plugin for XXXX refs #<ticked_id>"
|
git commit -m "Add new plugin for XXXX refs #<ticked_id>"
|
||||||
git push
|
git push
|
||||||
|
|
||||||
|
.. _libraries_reference:
|
||||||
|
|
||||||
*******************
|
*******************
|
||||||
Libraries reference
|
Libraries reference
|
||||||
*******************
|
*******************
|
||||||
|
@ -1468,40 +1478,25 @@ Then, edit **plugin.pm** and add the following lines:
|
||||||
|
|
||||||
.. code-block:: perl
|
.. code-block:: perl
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Copyright 2005-2015 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
|
# Copyright 2015 Centreon (http://www.centreon.com/)
|
||||||
# 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
|
# Centreon is a full-fledged industry-strength solution that meets
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
# the needs in IT infrastructure and application monitoring for
|
||||||
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
# service performance.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# this program; if not, see <http://www.gnu.org/licenses>.
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
#
|
#
|
||||||
# Linking this program statically or dynamically with other modules is making a
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
# 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
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
# permission to link this program with independent modules to produce an executable,
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
# regardless of the license terms of these independent modules, and to copy and
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# distribute the resulting executable under terms of MERETHIS choice, provided that
|
# See the License for the specific language governing permissions and
|
||||||
# MERETHIS also meet, for each linked independent module, the terms and conditions
|
# limitations under the License.
|
||||||
# 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 : your name <your@mail>
|
|
||||||
#
|
|
||||||
####################################################################################
|
|
||||||
|
|
||||||
# Path to the plugin
|
# Path to the plugin
|
||||||
package apps::pfsense::snmp::plugin;
|
package apps::pfsense::snmp::plugin;
|
||||||
|
@ -1573,40 +1568,25 @@ Edit **memorydroppedpackets.pm** and add the following lines:
|
||||||
|
|
||||||
.. code-block:: perl
|
.. code-block:: perl
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Copyright 2005-2015 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
|
# Copyright 2015 Centreon (http://www.centreon.com/)
|
||||||
# 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
|
# Centreon is a full-fledged industry-strength solution that meets
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
# the needs in IT infrastructure and application monitoring for
|
||||||
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
# service performance.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# this program; if not, see <http://www.gnu.org/licenses>.
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
#
|
#
|
||||||
# Linking this program statically or dynamically with other modules is making a
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
# 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
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
# permission to link this program with independent modules to produce an executable,
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
# regardless of the license terms of these independent modules, and to copy and
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# distribute the resulting executable under terms of MERETHIS choice, provided that
|
# See the License for the specific language governing permissions and
|
||||||
# MERETHIS also meet, for each linked independent module, the terms and conditions
|
# limitations under the License.
|
||||||
# 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 : your name <your@mail>
|
|
||||||
#
|
|
||||||
####################################################################################
|
|
||||||
|
|
||||||
# Path to the plugin
|
# Path to the plugin
|
||||||
package apps::pfsense::snmp::mode::memorydroppedpackets;
|
package apps::pfsense::snmp::mode::memorydroppedpackets;
|
||||||
|
@ -1796,5 +1776,366 @@ Output may display:
|
||||||
|
|
||||||
OK: Dropped packets due to memory limitations : 0.00 /s | dropped_packets_Per_Sec=0.00;0;;1;2
|
OK: Dropped packets due to memory limitations : 0.00 /s | dropped_packets_Per_Sec=0.00;0;;1;2
|
||||||
|
|
||||||
|
.. _model_classes_usage:
|
||||||
|
|
||||||
|
*******************
|
||||||
|
Model Classes Usage
|
||||||
|
*******************
|
||||||
|
|
||||||
|
------------
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
With the experience of plugin development, we have created two classes:
|
||||||
|
|
||||||
|
* centreon::plugins::templates::counter
|
||||||
|
* centreon::plugins::templates::hardware
|
||||||
|
|
||||||
|
It was developed to have a more consistent code and less redundant code. According to context, you should use one of two classes for modes.
|
||||||
|
Following classes can be used for whatever plugin type (SNMP, Custom, DBI,...).
|
||||||
|
|
||||||
|
-------------
|
||||||
|
Class counter
|
||||||
|
-------------
|
||||||
|
|
||||||
|
When to use it ?
|
||||||
|
----------------
|
||||||
|
|
||||||
|
If you have some counters (CPU Usage, Memory, Session...), you should use that class.
|
||||||
|
If you have only one global counter to check, it's maybe not useful to use it (but only for these case).
|
||||||
|
|
||||||
|
Class methods
|
||||||
|
-------------
|
||||||
|
|
||||||
|
List of methods:
|
||||||
|
|
||||||
|
* **new**: class constructor. Overload if you need to add some specific options or to use a statefile.
|
||||||
|
* **check_options**: overload if you need to check your specific options.
|
||||||
|
* **manage_selection**: overload if *mandatory*. Method to get informations for the equipment.
|
||||||
|
* **set_counters**: overload if **mandatory**. Method to configure counters.
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
|
||||||
|
Example 1
|
||||||
|
^^^^^^^^^
|
||||||
|
|
||||||
|
We want to develop the following SNMP plugin:
|
||||||
|
|
||||||
|
* measure the current sessions and current SSL sessions usages.
|
||||||
|
|
||||||
|
.. code-block:: perl
|
||||||
|
|
||||||
|
package my::module::name;
|
||||||
|
|
||||||
|
use base qw(centreon::plugins::templates::counter);
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub set_counters {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
$self->{maps_counters_type} = [
|
||||||
|
{ name => 'global', type => 0, message_separator => ' - ' },
|
||||||
|
];
|
||||||
|
$self->{maps_counters}->{global} = [
|
||||||
|
{ label => 'sessions', set => {
|
||||||
|
key_values => [ { name => 'sessions' } ],
|
||||||
|
output_template => 'Current sessions : %s',
|
||||||
|
perfdatas => [
|
||||||
|
{ label => 'sessions', value => 'sessions_absolute', template => '%s',
|
||||||
|
min => 0 },
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ label => 'sessions-ssl', set => {
|
||||||
|
key_values => [ { name => 'sessions_ssl' } ],
|
||||||
|
output_template => 'Current ssl sessions : %s',
|
||||||
|
perfdatas => [
|
||||||
|
{ label => 'sessions_ssl', value => 'sessions_ssl_absolute', template => '%s',
|
||||||
|
min => 0 },
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
sub manage_selection {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
# OIDs are fake. Only for the example.
|
||||||
|
my ($oid_sessions, $oid_sessions_ssl) = ('.1.2.3.4.0', '.1.2.3.5.0');
|
||||||
|
|
||||||
|
my $result = $options{snmp}->get_leef(oids => [ $oid_sessions, $oid_sessions_ssl ],
|
||||||
|
nothing_quit => 1);
|
||||||
|
$self->{global} = { sessions => $result->{$oid_sessions},
|
||||||
|
sessions_ssl => $result->{$oid_sessions_ssl}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Output may display:
|
||||||
|
::
|
||||||
|
|
||||||
|
OK: Current sessions : 24 - Current ssl sessions : 150 | sessions=24;;;0; sessions_ssl=150;;;0;
|
||||||
|
|
||||||
|
As you can see, we create two arrays of hash tables in **set_counters** method. We use arrays to order the output.
|
||||||
|
|
||||||
|
* **maps_counters_type**: global configuration. Attributes list:
|
||||||
|
|
||||||
|
* *name*: the name is really important. It will be used in hash **map_counters** and also in **manage_selection** as you can see.
|
||||||
|
* *type*: 0 or 1. With 0 value, the output will be written in the short output. With the value 1, it depends if we have one or multiple instances.
|
||||||
|
* *message_multiple*: only useful with *type* 1 value. The message will be displayed in short ouput if we have multiple instances selected.
|
||||||
|
* *message_separator*: the string displayed between counters (Default: ', ').
|
||||||
|
* *cb_prefix_output*, *cb_suffix_output*: name of a method (in a string) to callback. Methods will return a string to be displayed before or after **all** counters.
|
||||||
|
* *cb_init*: name of a method (in a string) to callback. Method will return 0 or 1. With 1 value, counters are not checked.
|
||||||
|
|
||||||
|
* **maps_counters**: complex structure to configure counters. Attributes list:
|
||||||
|
|
||||||
|
* *label*: name used for threshold options.
|
||||||
|
* *threshold*: if we set the value to 0. There is no threshold check options (can be used if you want to set and check option yourself).
|
||||||
|
* *set*: hash table:
|
||||||
|
|
||||||
|
* *keys_values*: array of hashes. Set values used for the counter. Order is important (by default, the first value is used to check).
|
||||||
|
|
||||||
|
* *name*: attribute name. Need to match with attributes in **manage_selection** method!
|
||||||
|
* *diff*: if we set the value to 1, we'll have the difference between two checks (need a statefile!).
|
||||||
|
|
||||||
|
* *output_template*: string to display. '%s' will be replaced by the first value of *keys_values*.
|
||||||
|
* *output_use*: which value to be used in *output_template* (If not set, we use the first value of *keys_values*).
|
||||||
|
* *per_second*: if we set the value to 1, the *diff* values will be calculated per seconds.
|
||||||
|
* *output_change_bytes*: if we set the value to 1 or 2, we can use a second '%s' in *output_template* to display the unit. 1 = divide by 1024 (Bytes), 2 = divide by 1000 (bits).
|
||||||
|
* *perfdata*: array of hashes. To configure perfdatas
|
||||||
|
|
||||||
|
* *label*: name displayed.
|
||||||
|
* *value*: value to used. It's the name from *keys_values* with a **suffix**: '_absolute' or '_per_second' (depends of other options).
|
||||||
|
* *template*: value format (could be for example: '%.3f').
|
||||||
|
* *unit*: unit displayed.
|
||||||
|
* *min*, *max*: min and max displayed. You can use a value from *keys_values*.
|
||||||
|
* *label_extra_instance*: if we set the value to 1, perhaps we'll have a suffix concat with *label*.
|
||||||
|
* *instance_use*: which value from *keys_values* to be used. To be used if *label_extra_instance* is 1.
|
||||||
|
|
||||||
|
Example 2
|
||||||
|
^^^^^^^^^
|
||||||
|
|
||||||
|
We want to add the current number of sessions by virtual servers.
|
||||||
|
|
||||||
|
.. code-block:: perl
|
||||||
|
|
||||||
|
package my::module::name;
|
||||||
|
|
||||||
|
use base qw(centreon::plugins::templates::counter);
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub set_counters {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
$self->{maps_counters_type} = [
|
||||||
|
{ name => 'global', type => 0, cb_prefix_output => 'prefix_global_output' },
|
||||||
|
{ name => 'vs', type => 1, cb_prefix_output => 'prefix_vs_output', message_multiple => 'All Virtual servers are ok' }
|
||||||
|
];
|
||||||
|
$self->{maps_counters}->{global} = [
|
||||||
|
{ label => 'total-sessions', set => {
|
||||||
|
key_values => [ { name => 'sessions' } ],
|
||||||
|
output_template => 'current sessions : %s',
|
||||||
|
perfdatas => [
|
||||||
|
{ label => 'total_sessions', value => 'sessions_absolute', template => '%s',
|
||||||
|
min => 0 },
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ label => 'total-sessions-ssl', set => {
|
||||||
|
key_values => [ { name => 'sessions_ssl' } ],
|
||||||
|
output_template => 'current ssl sessions : %s',
|
||||||
|
perfdatas => [
|
||||||
|
{ label => 'total_sessions_ssl', value => 'sessions_ssl_absolute', template => '%s',
|
||||||
|
min => 0 },
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
$self->{maps_counters}->{vs} = [
|
||||||
|
{ label => 'sessions', set => {
|
||||||
|
key_values => [ { name => 'sessions' }, { name => 'display' } ],
|
||||||
|
output_template => 'current sessions : %s',
|
||||||
|
perfdatas => [
|
||||||
|
{ label => 'sessions', value => 'sessions_absolute', template => '%s',
|
||||||
|
min => 0, label_extra_instance => 1, instance_use => 'display_absolute' },
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ label => 'sessions-ssl', set => {
|
||||||
|
key_values => [ { name => 'sessions_ssl' }, { name => 'display' } ],
|
||||||
|
output_template => 'current ssl sessions : %s',
|
||||||
|
perfdatas => [
|
||||||
|
{ label => 'sessions_ssl', value => 'sessions_ssl_absolute', template => '%s',
|
||||||
|
min => 0, label_extra_instance => 1, instance_use => 'display_absolute' },
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
sub prefix_vs_output {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
return "Virtual server '" . $options{instance_value}->{display} . "' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub prefix_global_output {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
return "Total ";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub manage_selection {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
# OIDs are fake. Only for the example.
|
||||||
|
my ($oid_sessions, $oid_sessions_ssl) = ('.1.2.3.4.0', '.1.2.3.5.0');
|
||||||
|
|
||||||
|
my $result = $options{snmp}->get_leef(oids => [ $oid_sessions, $oid_sessions_ssl ],
|
||||||
|
nothing_quit => 1);
|
||||||
|
$self->{global} = { sessions => $result->{$oid_sessions},
|
||||||
|
sessions_ssl => $result->{$oid_sessions_ssl}
|
||||||
|
};
|
||||||
|
my $oid_table_vs = '.1.2.3.10';
|
||||||
|
my $mapping = {
|
||||||
|
vsName => { oid => '.1.2.3.10.1' },
|
||||||
|
vsSessions => { oid => '.1.2.3.10.2' },
|
||||||
|
vsSessionsSsl => { oid => '.1.2.3.10.3' },
|
||||||
|
};
|
||||||
|
|
||||||
|
$self->{vs} = {};
|
||||||
|
$result = $options{snmp}->get_table(oid => $oid_table_vs,
|
||||||
|
nothing_quit => 1);
|
||||||
|
foreach my $oid (keys %{$result->{ $oid_table_vs }}) {
|
||||||
|
next if ($oid !~ /^$mapping->{vsName}->{oid}\.(.*)$/;
|
||||||
|
my $instance = $1;
|
||||||
|
my $data = $options{snmp}->map_instance(mapping => $mapping, results => $result->{$oid_table_vs}, instance => $instance);
|
||||||
|
|
||||||
|
$self->{vs}->{$instance} = { display => $data->{vsName},
|
||||||
|
sessions => $data->{vsSessions}, sessions_ssl => $data->{vsSessionsSsl}};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
If we have at least 2 virtual servers:
|
||||||
|
::
|
||||||
|
|
||||||
|
OK: Total current sessions : 24, current ssl sessions : 150 - All Virtual servers are ok | total_sessions=24;;;0; total_sessions_ssl=150;;;0; sessions_foo1=11;;;0; sessions_ssl_foo1=70;;;0; sessions_foo2=13;;;0; sessions_ssl_foo2=80;;;0;
|
||||||
|
Virtual server 'foo1' current sessions : 11, current ssl sessions : 70
|
||||||
|
Virtual server 'foo2' current sessions : 13, current ssl sessions : 80
|
||||||
|
|
||||||
|
Example 3
|
||||||
|
^^^^^^^^^
|
||||||
|
|
||||||
|
The model can also be used to check strings (not only counters). So we want to check the status of a virtualserver.
|
||||||
|
|
||||||
|
.. code-block:: perl
|
||||||
|
|
||||||
|
package my::module::name;
|
||||||
|
|
||||||
|
use base qw(centreon::plugins::templates::counter);
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
my $instance_mode;
|
||||||
|
|
||||||
|
sub set_counters {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
$self->{maps_counters_type} = [
|
||||||
|
{ name => 'vs', type => 1, cb_prefix_output => 'prefix_vs_output', message_multiple => 'All Virtual server status are ok' }
|
||||||
|
];
|
||||||
|
$self->{maps_counters}->{vs} = [
|
||||||
|
{ label => 'status', threshold => 0, set => {
|
||||||
|
key_values => [ { name => 'status' }, { name => 'display' } ],
|
||||||
|
closure_custom_calc => $self->can('custom_status_calc'),
|
||||||
|
closure_custom_output => $self->can('custom_status_output'),
|
||||||
|
closure_custom_perfdata => sub { return 0; },
|
||||||
|
closure_custom_threshold_check => $self->can('custom_threshold_output'),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
sub custom_threshold_output {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
my $status = 'ok';
|
||||||
|
|
||||||
|
if ($self->{result_values}->{status} =~ /problem/) {
|
||||||
|
$status = 'critical';
|
||||||
|
}
|
||||||
|
return $status;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub custom_status_output {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
my $msg = sprintf("status is '%s'", $self->{result_values}->{status});
|
||||||
|
return $msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub custom_status_calc {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
$self->{result_values}->{status} = $options{new_datas}->{$self->{instance} . '_status'};
|
||||||
|
$self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'};
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub prefix_vs_output {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
return "Virtual server '" . $options{instance_value}->{display} . "' ";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub check_options {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
$self->SUPER::init(%options);
|
||||||
|
|
||||||
|
# Sometimes, you'll need to have access of the current object in the callback
|
||||||
|
$instance_mode = $self;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub manage_selection {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
|
my $oid_table_vs = '.1.2.3.10';
|
||||||
|
my $mapping = {
|
||||||
|
vsName => { oid => '.1.2.3.10.1' },
|
||||||
|
vsStatus => { oid => '.1.2.3.10.4' },
|
||||||
|
};
|
||||||
|
|
||||||
|
$self->{vs} = {};
|
||||||
|
my $result = $options{snmp}->get_table(oid => $oid_table_vs,
|
||||||
|
nothing_quit => 1);
|
||||||
|
foreach my $oid (keys %{$result->{ $oid_table_vs }}) {
|
||||||
|
next if ($oid !~ /^$mapping->{vsName}->{oid}\.(.*)$/;
|
||||||
|
my $instance = $1;
|
||||||
|
my $data = $options{snmp}->map_instance(mapping => $mapping, results => $result->{$oid_table_vs}, instance => $instance);
|
||||||
|
|
||||||
|
$self->{vs}->{$instance} = { display => $data->{vsName},
|
||||||
|
status => $data->{vsStatus} };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
The following example show 4 new attributes:
|
||||||
|
|
||||||
|
* *closure_custom_calc*: should be used to have a simple name (without '_absolute' or '_per_second'). Or to do some more complex calculation.
|
||||||
|
* *closure_custom_output*: should be used to have a more complex output (An example: want to display the total, free and used value at the same time).
|
||||||
|
* *closure_custom_perfdata*: should be used to manage yourself the perfdata.
|
||||||
|
* *closure_custom_threshold_check*: should be used to manage yourself the threshold check.
|
||||||
|
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Class hardware
|
||||||
|
--------------
|
||||||
|
|
||||||
|
TODO
|
|
@ -1468,40 +1468,25 @@ Ensuite, éditer le fichier **plugin.pm** et ajouter les lignes suivantes :
|
||||||
|
|
||||||
.. code-block:: perl
|
.. code-block:: perl
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Copyright 2005-2015 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
|
# Copyright 2015 Centreon (http://www.centreon.com/)
|
||||||
# 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
|
# Centreon is a full-fledged industry-strength solution that meets
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
# the needs in IT infrastructure and application monitoring for
|
||||||
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
# service performance.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# this program; if not, see <http://www.gnu.org/licenses>.
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
#
|
#
|
||||||
# Linking this program statically or dynamically with other modules is making a
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
# 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
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
# permission to link this program with independent modules to produce an executable,
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
# regardless of the license terms of these independent modules, and to copy and
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# distribute the resulting executable under terms of MERETHIS choice, provided that
|
# See the License for the specific language governing permissions and
|
||||||
# MERETHIS also meet, for each linked independent module, the terms and conditions
|
# limitations under the License.
|
||||||
# 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 : your name <your@mail>
|
|
||||||
#
|
|
||||||
####################################################################################
|
|
||||||
|
|
||||||
# Chemin vers le plugin
|
# Chemin vers le plugin
|
||||||
package apps::pfsense::snmp::plugin;
|
package apps::pfsense::snmp::plugin;
|
||||||
|
@ -1573,40 +1558,25 @@ Editer le fichier **memorydroppedpackets.pm** et ajouter les lignes suivantes :
|
||||||
|
|
||||||
.. code-block:: perl
|
.. code-block:: perl
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Copyright 2005-2015 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
|
# Copyright 2015 Centreon (http://www.centreon.com/)
|
||||||
# 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
|
# Centreon is a full-fledged industry-strength solution that meets
|
||||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
# the needs in IT infrastructure and application monitoring for
|
||||||
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
# service performance.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along with
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# this program; if not, see <http://www.gnu.org/licenses>.
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
#
|
#
|
||||||
# Linking this program statically or dynamically with other modules is making a
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
# 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
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
# permission to link this program with independent modules to produce an executable,
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
# regardless of the license terms of these independent modules, and to copy and
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# distribute the resulting executable under terms of MERETHIS choice, provided that
|
# See the License for the specific language governing permissions and
|
||||||
# MERETHIS also meet, for each linked independent module, the terms and conditions
|
# limitations under the License.
|
||||||
# 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 : your name <your@mail>
|
|
||||||
#
|
|
||||||
####################################################################################
|
|
||||||
|
|
||||||
# Chemin vers le mode
|
# Chemin vers le mode
|
||||||
package apps::pfsense::snmp::mode::memorydroppedpackets;
|
package apps::pfsense::snmp::mode::memorydroppedpackets;
|
||||||
|
|
Loading…
Reference in New Issue