+ Can set traffic speed for 'in' and 'out'

This commit is contained in:
Quentin Garnier 2014-06-13 15:29:48 +02:00
parent 61968aacfb
commit 76877ea0bd
1 changed files with 41 additions and 15 deletions

View File

@ -65,6 +65,8 @@ sub new {
"name" => { name => 'use_name' },
"interface:s" => { name => 'interface' },
"speed:s" => { name => 'speed' },
"speed-in:s" => { name => 'speed_in' },
"speed-out:s" => { name => 'speed_out' },
"skip" => { name => 'skip' },
"skip-speed0" => { name => 'skip_speed0' },
"regexp" => { name => 'use_regexp' },
@ -77,6 +79,7 @@ sub new {
});
$self->{interface_id_selected} = [];
$self->{get_speed} = 0;
$self->{statefile_cache} = centreon::plugins::statefile->new(%options);
$self->{statefile_value} = centreon::plugins::statefile->new(%options);
@ -113,6 +116,11 @@ sub check_options {
$self->{output}->add_option_msg(short_msg => "Unsupported --oid-display option.");
$self->{output}->option_exit();
}
if ((!defined($self->{option_results}->{speed}) || $self->{option_results}->{speed} eq '') &&
((!defined($self->{option_results}->{speed_in}) || $self->{option_results}->{speed_in} eq '') ||
(!defined($self->{option_results}->{speed_out}) || $self->{option_results}->{speed_out} eq ''))) {
$self->{get_speed} = 1;
}
$self->{statefile_cache}->check_options(%options);
$self->{statefile_value}->check_options(%options);
@ -141,12 +149,12 @@ sub run {
foreach (@{$self->{interface_id_selected}}) {
$self->{snmp}->load(oids => [$oid_adminstatus . "." . $_, $oid_operstatus . "." . $_, $oid_in32 . "." . $_, $oid_out32 . "." . $_]);
if (!defined($self->{option_results}->{speed}) || $self->{option_results}->{speed} eq '') {
if ($self->{get_speed} == 1) {
$self->{snmp}->load(oids => [$oid_speed32 . "." . $_]);
}
if (!$self->{snmp}->is_snmpv1()) {
$self->{snmp}->load(oids => [$oid_in64 . "." . $_, $oid_out64 . "." . $_]);
if (!defined($self->{option_results}->{speed}) || $self->{option_results}->{speed} eq '') {
if ($self->{get_speed} == 1) {
$self->{snmp}->load(oids => [$oid_speed64 . "." . $_]);
}
}
@ -180,9 +188,15 @@ sub run {
}
# Manage interface speed
my $interface_speed;
my ($interface_speed_in, $interface_speed_out);
if ($self->{get_speed} == 0) {
if (defined($self->{option_results}->{speed}) && $self->{option_results}->{speed} ne '') {
$interface_speed = $self->{option_results}->{speed} * 1000000;
$interface_speed_in = $self->{option_results}->{speed} * 1000000;
$interface_speed_out = $self->{option_results}->{speed} * 1000000;
}
$interface_speed_in = $self->{option_results}->{speed_in} * 1000000 if (defined($self->{option_results}->{speed_in}) && $self->{option_results}->{speed_in} ne '');
$interface_speed_out = $self->{option_results}->{speed_out} * 1000000 if (defined($self->{option_results}->{speed_out}) && $self->{option_results}->{speed_out} ne '');
} else {
if ((!defined($result->{$oid_speed32 . "." . $_}) || $result->{$oid_speed32 . "." . $_} !~ /^[0-9]+$/) &&
(!defined($result->{$oid_speed64 . "." . $_}) || $result->{$oid_speed64 . "." . $_} !~ /^[0-9]+$/)) {
@ -190,7 +204,7 @@ sub run {
short_msg => "Interface '" . $display_value . "' Speed is null or incorrect. You should force the value with --speed option");
next;
}
$interface_speed = (defined($result->{$oid_speed64 . "." . $_}) && $result->{$oid_speed64 . "." . $_} ne '' ? ($result->{$oid_speed64 . "." . $_} * 1000000) : ($result->{$oid_speed32 . "." . $_}));
my $interface_speed = (defined($result->{$oid_speed64 . "." . $_}) && $result->{$oid_speed64 . "." . $_} ne '' ? ($result->{$oid_speed64 . "." . $_} * 1000000) : ($result->{$oid_speed32 . "." . $_}));
if (!defined($interface_speed) || $interface_speed == 0) {
if (!defined($self->{option_results}->{skip_speed0})) {
$self->{output}->output_add(severity => 'UNKNOWN',
@ -200,6 +214,10 @@ sub run {
}
next;
}
$interface_speed_in = $interface_speed;
$interface_speed_out = $interface_speed;
$interface_speed_in = $self->{option_results}->{speed_in} * 1000000 if (defined($self->{option_results}->{speed_in}) && $self->{option_results}->{speed_in} ne '');
$interface_speed_out = $self->{option_results}->{speed_out} * 1000000 if (defined($self->{option_results}->{speed_out}) && $self->{option_results}->{speed_out} ne '');
}
my $old_mode = $self->{statefile_value}->get(name => 'mode_' . $_);
@ -258,8 +276,8 @@ sub run {
}
my $in_absolute_per_sec = ($new_datas->{'in_' . $_} - $old_in) / $time_delta;
my $out_absolute_per_sec = ($new_datas->{'out_' . $_} - $old_out) / $time_delta;
my $in_prct = $in_absolute_per_sec * 100 / $interface_speed;
my $out_prct = $out_absolute_per_sec * 100 / $interface_speed;
my $in_prct = $in_absolute_per_sec * 100 / $interface_speed_in;
my $out_prct = $out_absolute_per_sec * 100 / $interface_speed_out;
###########
# Manage Output
@ -284,14 +302,14 @@ sub run {
$extra_label = '_' . $display_value if (!defined($self->{option_results}->{interface}) || defined($self->{option_results}->{use_regexp}));
$self->{output}->perfdata_add(label => 'traffic_in' . $extra_label, unit => 'b/s',
value => sprintf("%.2f", $in_absolute_per_sec),
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-in', total => $interface_speed),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-in', total => $interface_speed),
min => 0, max => $interface_speed);
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-in', total => $interface_speed_in),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-in', total => $interface_speed_in),
min => 0, max => $interface_speed_in);
$self->{output}->perfdata_add(label => 'traffic_out' . $extra_label, unit => 'b/s',
value => sprintf("%.2f", $out_absolute_per_sec),
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-out', total => $interface_speed),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-out', total => $interface_speed),
min => 0, max => $interface_speed);
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-out', total => $interface_speed_out),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-out', total => $interface_speed_out),
min => 0, max => $interface_speed_out);
}
$self->{statefile_value}->write(data => $new_datas);
@ -447,7 +465,15 @@ Allows to use regexp non case-sensitive (with --regexp).
=item B<--speed>
Set interface speed (in Mb).
Set interface speed for incoming/outgoing traffic (in Mb).
=item B<--speed-in>
Set interface speed for incoming traffic (in Mb).
=item B<--speed-out>
Set interface speed for outgoing traffic (in Mb).
=item B<--skip>