+ Enhance interfaces to permit some overload

This commit is contained in:
garnier-quentin 2015-07-24 13:54:57 +02:00
parent c2ec5a3c8b
commit 7d88df3860
1 changed files with 175 additions and 153 deletions

View File

@ -30,148 +30,6 @@ use Digest::MD5 qw(md5_hex);
my $instance_mode; my $instance_mode;
my $maps_counters = {
int => {
'000_status' => { filter => 'add_status', threshold => 0,
set => {
key_values => [ { name => 'opstatus' }, { name => 'admstatus' } ],
closure_custom_calc => \&custom_status_calc,
closure_custom_output => \&custom_status_output,
closure_custom_perfdata => sub { return 0; },
closure_custom_threshold_check => \&custom_threshold_output,
}
},
'010_in-traffic' => { filter => 'add_traffic',
set => {
key_values => [ { name => 'in', diff => 1 }, { name => 'speed_in'}, { name => 'display' }, { name => 'mode_traffic' } ],
per_second => 1,
closure_custom_calc => \&custom_traffic_calc, closure_custom_calc_extra_options => { label_ref => 'in' },
closure_custom_output => \&custom_traffic_output, output_error_template => 'Traffic In : %s',
closure_custom_perfdata => \&custom_traffic_perfdata,
closure_custom_threshold_check => \&custom_traffic_threshold,
}
},
'011_out-traffic' => { filter => 'add_traffic',
set => {
key_values => [ { name => 'out', diff => 1 }, { name => 'speed_out'}, { name => 'display' }, { name => 'mode_traffic' } ],
per_second => 1,
closure_custom_calc => \&custom_traffic_calc, closure_custom_calc_extra_options => { label_ref => 'out' },
closure_custom_output => \&custom_traffic_output, output_error_template => 'Traffic Out : %s',
closure_custom_perfdata => \&custom_traffic_perfdata,
closure_custom_threshold_check => \&custom_traffic_threshold,
}
},
'020_in-discard' => { filter => 'add_errors',
set => {
key_values => [ { name => 'indiscard', diff => 1 }, { name => 'total_in_packets', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_errors_calc, closure_custom_calc_extra_options => { label_ref1 => 'in', label_ref2 => 'discard' },
closure_custom_output => \&custom_errors_output, output_error_template => 'Packets In Discard : %s',
closure_custom_perfdata => \&custom_errors_perfdata,
closure_custom_threshold_check => \&custom_errors_threshold,
}
},
'021_in-error' => { filter => 'add_errors',
set => {
key_values => [ { name => 'inerror', diff => 1 }, { name => 'total_in_packets', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_errors_calc, closure_custom_calc_extra_options => { label_ref1 => 'in', label_ref2 => 'error' },
closure_custom_output => \&custom_errors_output, output_error_template => 'Packets In Error : %s',
closure_custom_perfdata => \&custom_errors_perfdata,
closure_custom_threshold_check => \&custom_errors_threshold,
}
},
'022_out-discard' => { filter => 'add_errors',
set => {
key_values => [ { name => 'outdiscard', diff => 1 }, { name => 'total_out_packets', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_errors_calc, closure_custom_calc_extra_options => { label_ref1 => 'out', label_ref2 => 'discard' },
closure_custom_output => \&custom_errors_output, output_error_template => 'Packets Out Discard : %s',
closure_custom_perfdata => \&custom_errors_perfdata,
closure_custom_threshold_check => \&custom_errors_threshold,
}
},
'023_out-error' => { filter => 'add_errors',
set => {
key_values => [ { name => 'outerror', diff => 1 }, { name => 'total_out_packets', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_errors_calc, closure_custom_calc_extra_options => { label_ref1 => 'out', label_ref2 => 'error' },
closure_custom_output => \&custom_errors_output, output_error_template => 'Packets Out Error : %s',
closure_custom_perfdata => \&custom_errors_perfdata,
closure_custom_threshold_check => \&custom_errors_threshold,
}
},
'030_in-ucast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'iucast', total_ref1 => 'ibcast', total_ref2 => 'imcast' },
output_template => 'In Ucast : %.2f %%', output_error_template => 'In Ucast : %s',
output_use => 'iucast_prct', threshold_use => 'iucast_prct',
perfdatas => [
{ value => 'iucast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'031_in-bcast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'ibcast', total_ref1 => 'iucast', total_ref2 => 'imcast' },
output_template => 'In Bcast : %.2f %%', output_error_template => 'In Bcast : %s',
output_use => 'ibcast_prct', threshold_use => 'ibcast_prct',
perfdatas => [
{ value => 'ibcast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'032_in-mcast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'imcast', total_ref1 => 'iucast', total_ref2 => 'ibcast' },
output_template => 'In Mcast : %.2f %%', output_error_template => 'In Mcast : %s',
output_use => 'imcast_prct', threshold_use => 'imcast_prct',
perfdatas => [
{ value => 'imcast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'033_out-ucast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'oucast', diff => 1 }, { name => 'omcast', diff => 1 }, { name => 'obcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'oucast', total_ref1 => 'omcast', total_ref2 => 'obcast' },
output_template => 'Out Ucast : %.2f %%', output_error_template => 'Out Ucast : %s',
output_use => 'oucast_prct', threshold_use => 'oucast_prct',
perfdatas => [
{ value => 'oucast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'034_out-bcast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'oucast', diff => 1 }, { name => 'omcast', diff => 1 }, { name => 'obcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'obcast', total_ref1 => 'omcast', total_ref2 => 'oucast' },
output_template => 'Out Bcast : %.2f %%', output_error_template => 'Out Bcast : %s',
output_use => 'obcast_prct', threshold_use => 'obcast_prct',
perfdatas => [
{ value => 'obcast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'035_out-mcast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'ibcast', total_ref1 => 'iucast', total_ref2 => 'imcast' },
output_template => 'In Bcast : %.2f %%', output_error_template => 'In Bcast : %s',
output_use => 'ibcast_prct', threshold_use => 'ibcast_prct',
perfdatas => [
{ value => 'ibcast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
},
};
######################### #########################
# Calc functions # Calc functions
######################### #########################
@ -297,7 +155,7 @@ sub custom_traffic_output {
sub custom_traffic_calc { sub custom_traffic_calc {
my ($self, %options) = @_; my ($self, %options) = @_;
if ($options{new_datas}->{$self->{instance} . '_mode_traffic'} ne $options{old_datas}->{$self->{instance} . '_mode_traffic'}) { if ($options{new_datas}->{$self->{instance} . '_mode_traffic'} ne $options{old_datas}->{$self->{instance} . '_mode_traffic'}) {
$self->{error_msg} = "buffer creation"; $self->{error_msg} = "buffer creation";
return -2; return -2;
@ -395,6 +253,169 @@ sub custom_errors_calc {
######################### #########################
# OIDs mapping functions # OIDs mapping functions
######################### #########################
sub set_counters {
my ($self, %options) = @_;
$self->{maps_counters} = {
int => {
'000_status' => { filter => 'add_status', threshold => 0,
set => {
key_values => $self->set_key_values_status(),
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'),
}
},
'010_in-traffic' => { filter => 'add_traffic',
set => {
key_values => $self->set_key_values_in_traffic(),
per_second => 1,
closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'in' },
closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic In : %s',
closure_custom_perfdata => $self->can('custom_traffic_perfdata'),
closure_custom_threshold_check => $self->can('custom_traffic_threshold'),
}
},
'011_out-traffic' => { filter => 'add_traffic',
set => {
key_values => $self->set_key_values_out_traffic(),
per_second => 1,
closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'out' },
closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic Out : %s',
closure_custom_perfdata => $self->can('custom_traffic_perfdata'),
closure_custom_threshold_check => $self->can('custom_traffic_threshold'),
}
},
'020_in-discard' => { filter => 'add_errors',
set => {
key_values => [ { name => 'indiscard', diff => 1 }, { name => 'total_in_packets', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_errors_calc, closure_custom_calc_extra_options => { label_ref1 => 'in', label_ref2 => 'discard' },
closure_custom_output => \&custom_errors_output, output_error_template => 'Packets In Discard : %s',
closure_custom_perfdata => \&custom_errors_perfdata,
closure_custom_threshold_check => \&custom_errors_threshold,
}
},
'021_in-error' => { filter => 'add_errors',
set => {
key_values => [ { name => 'inerror', diff => 1 }, { name => 'total_in_packets', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_errors_calc, closure_custom_calc_extra_options => { label_ref1 => 'in', label_ref2 => 'error' },
closure_custom_output => \&custom_errors_output, output_error_template => 'Packets In Error : %s',
closure_custom_perfdata => \&custom_errors_perfdata,
closure_custom_threshold_check => \&custom_errors_threshold,
}
},
'022_out-discard' => { filter => 'add_errors',
set => {
key_values => [ { name => 'outdiscard', diff => 1 }, { name => 'total_out_packets', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_errors_calc, closure_custom_calc_extra_options => { label_ref1 => 'out', label_ref2 => 'discard' },
closure_custom_output => \&custom_errors_output, output_error_template => 'Packets Out Discard : %s',
closure_custom_perfdata => \&custom_errors_perfdata,
closure_custom_threshold_check => \&custom_errors_threshold,
}
},
'023_out-error' => { filter => 'add_errors',
set => {
key_values => [ { name => 'outerror', diff => 1 }, { name => 'total_out_packets', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_errors_calc, closure_custom_calc_extra_options => { label_ref1 => 'out', label_ref2 => 'error' },
closure_custom_output => \&custom_errors_output, output_error_template => 'Packets Out Error : %s',
closure_custom_perfdata => \&custom_errors_perfdata,
closure_custom_threshold_check => \&custom_errors_threshold,
}
},
'030_in-ucast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'iucast', total_ref1 => 'ibcast', total_ref2 => 'imcast' },
output_template => 'In Ucast : %.2f %%', output_error_template => 'In Ucast : %s',
output_use => 'iucast_prct', threshold_use => 'iucast_prct',
perfdatas => [
{ value => 'iucast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'031_in-bcast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'ibcast', total_ref1 => 'iucast', total_ref2 => 'imcast' },
output_template => 'In Bcast : %.2f %%', output_error_template => 'In Bcast : %s',
output_use => 'ibcast_prct', threshold_use => 'ibcast_prct',
perfdatas => [
{ value => 'ibcast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'032_in-mcast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'imcast', total_ref1 => 'iucast', total_ref2 => 'ibcast' },
output_template => 'In Mcast : %.2f %%', output_error_template => 'In Mcast : %s',
output_use => 'imcast_prct', threshold_use => 'imcast_prct',
perfdatas => [
{ value => 'imcast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'033_out-ucast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'oucast', diff => 1 }, { name => 'omcast', diff => 1 }, { name => 'obcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'oucast', total_ref1 => 'omcast', total_ref2 => 'obcast' },
output_template => 'Out Ucast : %.2f %%', output_error_template => 'Out Ucast : %s',
output_use => 'oucast_prct', threshold_use => 'oucast_prct',
perfdatas => [
{ value => 'oucast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'034_out-bcast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'oucast', diff => 1 }, { name => 'omcast', diff => 1 }, { name => 'obcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'obcast', total_ref1 => 'omcast', total_ref2 => 'oucast' },
output_template => 'Out Bcast : %.2f %%', output_error_template => 'Out Bcast : %s',
output_use => 'obcast_prct', threshold_use => 'obcast_prct',
perfdatas => [
{ value => 'obcast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
'035_out-mcast' => { filter => 'add_cast',
set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ],
closure_custom_calc => \&custom_cast_calc, closure_custom_calc_extra_options => { label_ref => 'ibcast', total_ref1 => 'iucast', total_ref2 => 'imcast' },
output_template => 'In Bcast : %.2f %%', output_error_template => 'In Bcast : %s',
output_use => 'ibcast_prct', threshold_use => 'ibcast_prct',
perfdatas => [
{ value => 'ibcast_prct', template => '%.2f',
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' },
],
}
},
}};
}
sub set_key_values_status {
my ($self, %options) = @_;
return [ { name => 'opstatus' }, { name => 'admstatus' } ];
}
sub set_key_values_in_traffic {
my ($self, %options) = @_;
return [ { name => 'in', diff => 1 }, { name => 'speed_in'}, { name => 'display' }, { name => 'mode_traffic' } ];
}
sub set_key_values_out_traffic {
my ($self, %options) = @_;
return [ { name => 'out', diff => 1 }, { name => 'speed_out'}, { name => 'display' }, { name => 'mode_traffic' } ];
}
sub set_instance { sub set_instance {
my ($self, %options) = @_; my ($self, %options) = @_;
@ -538,20 +559,21 @@ sub new {
}); });
$self->{statefile_value} = centreon::plugins::statefile->new(%options); $self->{statefile_value} = centreon::plugins::statefile->new(%options);
$self->{statefile_cache} = centreon::plugins::statefile->new(%options); $self->{statefile_cache} = centreon::plugins::statefile->new(%options);
$self->set_counters();
foreach my $key (('int')) { foreach my $key (('int')) {
foreach (keys %{$maps_counters->{$key}}) { foreach (keys %{$self->{maps_counters}->{$key}}) {
my ($id, $name) = split /_/; my ($id, $name) = split /_/;
if (!defined($maps_counters->{$key}->{$_}->{threshold}) || $maps_counters->{$key}->{$_}->{threshold} != 0) { if (!defined($self->{maps_counters}->{$key}->{$_}->{threshold}) || $self->{maps_counters}->{$key}->{$_}->{threshold} != 0) {
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'warning-' . $name . ':s' => { name => 'warning-' . $name }, 'warning-' . $name . ':s' => { name => 'warning-' . $name },
'critical-' . $name . ':s' => { name => 'critical-' . $name }, 'critical-' . $name . ':s' => { name => 'critical-' . $name },
}); });
} }
$maps_counters->{$key}->{$_}->{obj} = centreon::plugins::values->new(statefile => $self->{statefile_value}, $self->{maps_counters}->{$key}->{$_}->{obj} = centreon::plugins::values->new(statefile => $self->{statefile_value},
output => $self->{output}, perfdata => $self->{perfdata}, output => $self->{output}, perfdata => $self->{perfdata},
label => $name); label => $name);
$maps_counters->{$key}->{$_}->{obj}->set(%{$maps_counters->{$key}->{$_}->{set}}); $self->{maps_counters}->{$key}->{$_}->{obj}->set(%{$self->{maps_counters}->{$key}->{$_}->{set}});
} }
} }
@ -563,8 +585,8 @@ sub check_options {
$self->SUPER::init(%options); $self->SUPER::init(%options);
foreach my $key (('int')) { foreach my $key (('int')) {
foreach (keys %{$maps_counters->{$key}}) { foreach (keys %{$self->{maps_counters}->{$key}}) {
$maps_counters->{$key}->{$_}->{obj}->init(option_results => $self->{option_results}); $self->{maps_counters}->{$key}->{$_}->{obj}->init(option_results => $self->{option_results});
} }
} }
@ -635,9 +657,9 @@ sub run {
foreach my $id (sort keys %{$self->{interface_selected}}) { foreach my $id (sort keys %{$self->{interface_selected}}) {
my ($short_msg, $short_msg_append, $long_msg, $long_msg_append) = ('', '', '', ''); my ($short_msg, $short_msg_append, $long_msg, $long_msg_append) = ('', '', '', '');
my @exits = (); my @exits = ();
foreach (sort keys %{$maps_counters->{int}}) { foreach (sort keys %{$self->{maps_counters}->{int}}) {
my $obj = $maps_counters->{int}->{$_}->{obj}; my $obj = $self->{maps_counters}->{int}->{$_}->{obj};
next if (!defined($self->{option_results}->{$maps_counters->{int}->{$_}->{filter}})); next if (!defined($self->{option_results}->{$self->{maps_counters}->{int}->{$_}->{filter}}));
$obj->set(instance => $id); $obj->set(instance => $id);
my ($value_check) = $obj->execute(values => $self->{interface_selected}->{$id}, my ($value_check) = $obj->execute(values => $self->{interface_selected}->{$id},
@ -660,7 +682,7 @@ sub run {
$short_msg_append = ', '; $short_msg_append = ', ';
} }
$maps_counters->{int}->{$_}->{obj}->perfdata(extra_instance => $multiple); $obj->perfdata(extra_instance => $multiple);
} }
$self->{output}->output_add(long_msg => "Interface '" . $self->{interface_selected}->{$id}->{display} . "'$self->{interface_selected}->{$id}->{extra_display} $long_msg"); $self->{output}->output_add(long_msg => "Interface '" . $self->{interface_selected}->{$id}->{display} . "'$self->{interface_selected}->{$id}->{extra_display} $long_msg");