Enh snmp interfaces (#2652)

This commit is contained in:
qgarnier 2021-03-15 14:50:35 +01:00 committed by GitHub
parent 9cf8883f66
commit d723d7d0df
12 changed files with 440 additions and 349 deletions

View File

@ -107,9 +107,9 @@ sub set_counters_errors {
closure_custom_calc => $self->can('custom_errors_calc'), closure_custom_calc_extra_options => { label_ref1 => 'in', label_ref2 => 'crc' }, closure_custom_calc => $self->can('custom_errors_calc'), closure_custom_calc_extra_options => { label_ref1 => 'in', label_ref2 => 'crc' },
closure_custom_output => $self->can('custom_errors_output'), output_error_template => 'Packets In Crc : %s', closure_custom_output => $self->can('custom_errors_output'), output_error_template => 'Packets In Crc : %s',
closure_custom_perfdata => $self->can('custom_errors_perfdata'), closure_custom_perfdata => $self->can('custom_errors_perfdata'),
closure_custom_threshold_check => $self->can('custom_errors_threshold'), closure_custom_threshold_check => $self->can('custom_errors_threshold')
} }
}, }
; ;
} }
@ -119,7 +119,7 @@ sub new {
bless $self, $class; bless $self, $class;
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'add-err-disable' => { name => 'add_err_disable' }, 'add-err-disable' => { name => 'add_err_disable' }
}); });
return $self; return $self;
@ -244,16 +244,20 @@ Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{e
Thresholds. Thresholds.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-crc', 'in-error', 'in-discard', 'out-error', 'out-discard', 'in-traffic', 'out-traffic', 'in-crc', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%), 'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast',
'speed' (b/s). 'speed' (b/s).
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors> =item B<--units-errors>
Units of thresholds for errors/discards (Default: '%') ('%', 'absolute'). Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--units-cast>
Units of thresholds for communication types (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--nagvis-perfdata> =item B<--nagvis-perfdata>
@ -279,10 +283,6 @@ Set interface speed for incoming traffic (in Mb).
Set interface speed for outgoing traffic (in Mb). Set interface speed for outgoing traffic (in Mb).
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--force-counters32> =item B<--force-counters32>
Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy. Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy.

View File

@ -108,29 +108,25 @@ Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{d
Set critical threshold for status (Default: '%{admstatus} eq "up" and %{opstatus} ne "up"'). Set critical threshold for status (Default: '%{admstatus} eq "up" and %{opstatus} ne "up"').
Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{display} Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{display}
=item B<--warning-*> =item B<--warning-*> B<--critical-*>
Threshold warning. Thresholds.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard', 'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%), 'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast',
'speed' (b/s).
=item B<--critical-*>
Threshold critical.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%),
'speed' (b/s). 'speed' (b/s).
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors> =item B<--units-errors>
Units of thresholds for errors/discards (Default: '%') ('%', 'absolute'). Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--units-cast>
Units of thresholds for communication types (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--nagvis-perfdata> =item B<--nagvis-perfdata>
@ -156,10 +152,6 @@ Set interface speed for incoming traffic (in Mb).
Set interface speed for outgoing traffic (in Mb). Set interface speed for outgoing traffic (in Mb).
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--force-counters32> =item B<--force-counters32>
Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy. Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy.

View File

@ -195,20 +195,21 @@ sub output_add {
sub perfdata_add { sub perfdata_add {
my ($self, %options) = @_; my ($self, %options) = @_;
my $perfdata = { my $perfdata = {
label => '', value => '', unit => '', warning => '', critical => '', min => '', max => '', mode => $self->{mode}, label => '', value => '', unit => '', warning => '', critical => '', min => '', max => '', mode => $self->{mode}
}; };
foreach (keys %options) { foreach (keys %options) {
next if (!defined($options{$_})); next if (!defined($options{$_}));
$perfdata->{$_} = $options{$_}; $perfdata->{$_} = $options{$_};
} }
if (defined($self->{option_results}->{use_new_perfdata}) && defined($options{nlabel})) { if ((defined($self->{option_results}->{use_new_perfdata}) || defined($options{force_new_perfdata})) &&
defined($options{nlabel})) {
$perfdata->{label} = $options{nlabel}; $perfdata->{label} = $options{nlabel};
} }
if (defined($options{instances})) { if (defined($options{instances})) {
$options{instances} = [$options{instances}] if (!ref($options{instances})); $options{instances} = [$options{instances}] if (!ref($options{instances}));
my ($external_instance_separator, $internal_instance_separator) = ('#', '~'); my ($external_instance_separator, $internal_instance_separator) = ('#', '~');
if (defined($self->{option_results}->{use_new_perfdata})) { if (defined($self->{option_results}->{use_new_perfdata}) || defined($options{force_new_perfdata})) {
$perfdata->{label} = join('~', @{$options{instances}}) . '#' . $perfdata->{label}; $perfdata->{label} = join('~', @{$options{instances}}) . '#' . $perfdata->{label};
} else { } else {
$perfdata->{label} .= '_' . join('_', @{$options{instances}}); $perfdata->{label} .= '_' . join('_', @{$options{instances}});

View File

@ -27,7 +27,7 @@ use warnings;
sub set_oids_traffic { sub set_oids_traffic {
my ($self, %options) = @_; my ($self, %options) = @_;
$self->{currentEthRx15minBytes} = '.1.3.6.1.4.1.2544.1.11.2.6.2.52.1.5'; # in B $self->{currentEthRx15minBytes} = '.1.3.6.1.4.1.2544.1.11.2.6.2.52.1.5'; # in B
$self->{currentEthRx1dayBytes} = '.1.3.6.1.4.1.2544.1.11.2.6.2.53.1.5'; # in B $self->{currentEthRx1dayBytes} = '.1.3.6.1.4.1.2544.1.11.2.6.2.53.1.5'; # in B
$self->{currentEthTx15minBytes} = '.1.3.6.1.4.1.2544.1.11.2.6.2.56.1.3'; # in B $self->{currentEthTx15minBytes} = '.1.3.6.1.4.1.2544.1.11.2.6.2.56.1.3'; # in B
@ -70,8 +70,8 @@ sub set_counters {
output_template => 'Laser Temperature : %.2f C', output_error_template => 'Laser Temperature : %.2f', output_template => 'Laser Temperature : %.2f C', output_error_template => 'Laser Temperature : %.2f',
perfdatas => [ perfdatas => [
{ label => 'laser_temp', template => '%.2f', { label => 'laser_temp', template => '%.2f',
unit => 'C', label_extra_instance => 1, instance_use => 'display' }, unit => 'C', label_extra_instance => 1, instance_use => 'display' }
], ]
} }
}, },
{ label => 'input-power', filter => 'add_optical', nlabel => 'interface.input.power.dbm', set => { { label => 'input-power', filter => 'add_optical', nlabel => 'interface.input.power.dbm', set => {
@ -79,8 +79,8 @@ sub set_counters {
output_template => 'Input Power : %s dBm', output_error_template => 'Input Power : %s', output_template => 'Input Power : %s dBm', output_error_template => 'Input Power : %s',
perfdatas => [ perfdatas => [
{ label => 'input_power', template => '%s', { label => 'input_power', template => '%s',
unit => 'dBm', label_extra_instance => 1, instance_use => 'display' }, unit => 'dBm', label_extra_instance => 1, instance_use => 'display' }
], ]
} }
}, },
{ label => 'output-power', filter => 'add_optical', nlabel => 'interface.output.power.dbm', set => { { label => 'output-power', filter => 'add_optical', nlabel => 'interface.output.power.dbm', set => {
@ -88,44 +88,61 @@ sub set_counters {
output_template => 'Output Power : %s dBm', output_error_template => 'Output Power : %s', output_template => 'Output Power : %s dBm', output_error_template => 'Output Power : %s',
perfdatas => [ perfdatas => [
{ label => 'output_power', template => '%s', { label => 'output_power', template => '%s',
unit => 'dBm', label_extra_instance => 1, instance_use => 'display' }, unit => 'dBm', label_extra_instance => 1, instance_use => 'display' }
], ]
} }
}, }
; ;
} }
sub custom_traffic_perfdata { sub custom_traffic_perfdata {
my ($self, %options) = @_; my ($self, %options) = @_;
my ($warning, $critical); my ($warning, $critical);
if ($self->{instance_mode}->{option_results}->{units_traffic} eq '%' && defined($self->{result_values}->{speed})) { if ($self->{instance_mode}->{option_results}->{units_traffic} eq 'percent_delta' && defined($self->{result_values}->{speed})) {
$warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}, total => $self->{result_values}->{speed}, cast_int => 1); $warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}, total => $self->{result_values}->{speed}, cast_int => 1);
$critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}, total => $self->{result_values}->{speed}, cast_int => 1); $critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}, total => $self->{result_values}->{speed}, cast_int => 1);
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'b/s') { } elsif ($self->{instance_mode}->{option_results}->{units_traffic} =~ /bps|counter/) {
$warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}); $warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel});
$critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}); $critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel});
}
if ($self->{instance_mode}->{option_results}->{units_traffic} eq 'counter') {
my $nlabel = $self->{nlabel};
$nlabel =~ s/bitspersecond/bits/;
$self->{output}->perfdata_add(
force_new_perfdata => 1,
nlabel => $nlabel,
unit => 'b',
instances => $self->{result_values}->{display},
value => $self->{result_values}->{traffic_counter},
warning => $warning,
critical => $critical,
min => 0
);
} else {
$self->{output}->perfdata_add(
label => 'traffic_' . $self->{result_values}->{label}, unit => 'b/s',
nlabel => $self->{nlabel},
instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef,
value => sprintf('%.2f', $self->{result_values}->{traffic_per_seconds}),
warning => $warning,
critical => $critical,
min => 0, max => $self->{result_values}->{speed}
);
} }
$self->{output}->perfdata_add(
label => 'traffic_' . $self->{result_values}->{label}, unit => 'b/s',
nlabel => $self->{nlabel},
instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef,
value => sprintf("%.2f", $self->{result_values}->{traffic_per_seconds}),
warning => $warning,
critical => $critical,
min => 0, max => $self->{result_values}->{speed}
);
} }
sub custom_traffic_threshold { sub custom_traffic_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $exit = 'ok'; my $exit = 'ok';
if ($self->{instance_mode}->{option_results}->{units_traffic} eq '%' && defined($self->{result_values}->{speed})) { if ($self->{instance_mode}->{option_results}->{units_traffic} eq 'percent_delta' && defined($self->{result_values}->{speed})) {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_prct}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]); $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_prct}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'b/s') { } elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'bps') {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_per_seconds}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]); $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_per_seconds}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'counter') {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_counter}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} }
return $exit; return $exit;
} }
@ -137,9 +154,11 @@ sub custom_traffic_output {
$label =~ s/_/ /g; $label =~ s/_/ /g;
$label =~ s/(\w+)/\u$1/g; $label =~ s/(\w+)/\u$1/g;
my ($traffic_value, $traffic_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{traffic_per_seconds}, network => 1); my ($traffic_value, $traffic_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{traffic_per_seconds}, network => 1);
my $msg = sprintf("Traffic %s : %s/s (%s)", my $msg = sprintf(
$label, $traffic_value . $traffic_unit, "Traffic %s : %s/s (%s)",
defined($self->{result_values}->{traffic_prct}) ? sprintf("%.2f%%", $self->{result_values}->{traffic_prct}) : '-'); $label, $traffic_value . $traffic_unit,
defined($self->{result_values}->{traffic_prct}) ? sprintf('%.2f%%', $self->{result_values}->{traffic_prct}) : '-'
);
return $msg; return $msg;
} }
@ -154,15 +173,16 @@ sub custom_traffic_calc {
$counter = 'traffic_' . $options{extra_options}->{label_ref} . '_1day'; $counter = 'traffic_' . $options{extra_options}->{label_ref} . '_1day';
} }
my $diff_traffic = ($options{new_datas}->{$self->{instance} . '_' . $counter} - $options{old_datas}->{$self->{instance} . '_' . $counter}); my $diff_traffic = ($options{new_datas}->{ $self->{instance} . '_' . $counter } - $options{old_datas}->{ $self->{instance} . '_' . $counter });
$self->{result_values}->{traffic_per_seconds} = $diff_traffic / $options{delta_time}; $self->{result_values}->{traffic_per_seconds} = $diff_traffic / $options{delta_time};
$self->{result_values}->{traffic_counter} = $options{new_datas}->{ $self->{instance} . '_' . $counter };
if (defined($options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}) && if (defined($options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}) &&
$options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}} > 0) { $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}} > 0) {
$self->{result_values}->{traffic_prct} = $self->{result_values}->{traffic_per_seconds} * 100 / $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}; $self->{result_values}->{traffic_prct} = $self->{result_values}->{traffic_per_seconds} * 100 / $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}};
$self->{result_values}->{speed} = $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}; $self->{result_values}->{speed} = $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}};
} }
$self->{result_values}->{label} = $options{extra_options}->{label_ref}; $self->{result_values}->{label} = $options{extra_options}->{label_ref};
$self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'}; $self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'};
return 0; return 0;
@ -174,7 +194,7 @@ sub new {
bless $self, $class; bless $self, $class;
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'add-optical' => { name => 'add_optical' }, 'add-optical' => { name => 'add_optical' }
} }
); );
@ -238,9 +258,14 @@ sub load_traffic {
} }
$self->set_oids_traffic(); $self->set_oids_traffic();
$self->{snmp}->load(oids => [$self->{currentEthRx15minBytes}, $self->{currentEthRx1dayBytes}, $self->{snmp}->load(
$self->{currentEthTx15minBytes}, $self->{currentEthTx1dayBytes}, oids => [
$self->{currentEthRxHighSpeed15minBytes}, $self->{currentEthRxHighSpeed1dayBytes}], instances => $self->{array_interface_selected}); $self->{currentEthRx15minBytes}, $self->{currentEthRx1dayBytes},
$self->{currentEthTx15minBytes}, $self->{currentEthTx1dayBytes},
$self->{currentEthRxHighSpeed15minBytes}, $self->{currentEthRxHighSpeed1dayBytes}
],
instances => $self->{array_interface_selected}
);
} }
sub add_result_traffic { sub add_result_traffic {
@ -301,19 +326,14 @@ Can used special variables like: %{admstatus}, %{opstatus}, %{display}
Set critical threshold for status (Default: '%{admstatus} eq "up" and %{opstatus} ne "up"'). Set critical threshold for status (Default: '%{admstatus} eq "up" and %{opstatus} ne "up"').
Can used special variables like: %{admstatus}, %{opstatus}, %{display} Can used special variables like: %{admstatus}, %{opstatus}, %{display}
=item B<--warning-*> =item B<--warning-*> B<--critical-*>
Threshold warning. Thresholds.
Can be: 'laser-temp', 'input-power', 'output-power', 'traffic-in', 'traffic-out'.
=item B<--critical-*>
Threshold critical.
Can be: 'laser-temp', 'input-power', 'output-power', 'traffic-in', 'traffic-out'. Can be: 'laser-temp', 'input-power', 'output-power', 'traffic-in', 'traffic-out'.
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--interface> =item B<--interface>

View File

@ -151,7 +151,7 @@ sub set_counters_traffic {
closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'in_cir' }, closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'in_cir' },
closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic In CIR : %s', closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic In CIR : %s',
closure_custom_perfdata => $self->can('custom_traffic_perfdata'), closure_custom_perfdata => $self->can('custom_traffic_perfdata'),
closure_custom_threshold_check => $self->can('custom_traffic_threshold'), closure_custom_threshold_check => $self->can('custom_traffic_threshold')
} }
}, },
{ label => 'in-eir', filter => 'add_traffic', nlabel => 'interface.traffic.in.eir.bitspersecond', set => { { label => 'in-eir', filter => 'add_traffic', nlabel => 'interface.traffic.in.eir.bitspersecond', set => {
@ -159,23 +159,23 @@ sub set_counters_traffic {
closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'in_eir' }, closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'in_eir' },
closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic In EIR : %s', closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic In EIR : %s',
closure_custom_perfdata => $self->can('custom_traffic_perfdata'), closure_custom_perfdata => $self->can('custom_traffic_perfdata'),
closure_custom_threshold_check => $self->can('custom_traffic_threshold'), closure_custom_threshold_check => $self->can('custom_traffic_threshold')
} }
}, },
{ label => 'out-cir', filter => 'add_traffic', nlabel => 'interface.traffic.out.cir.bitspersecond', set => { { label => 'out-cir', filter => 'add_traffic', nlabel => 'interface.traffic.out.cir.bitspersecond', set => {
key_values => [ { name => 'out_cir', diff => 1 }, { name => 'speed_out'}, { name => 'display' } ], key_values => [ { name => 'out_cir', diff => 1 }, { name => 'speed_out' }, { name => 'display' } ],
closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'out_cir' }, closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'out_cir' },
closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic Out CIR : %s', closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic Out CIR : %s',
closure_custom_perfdata => $self->can('custom_traffic_perfdata'), closure_custom_perfdata => $self->can('custom_traffic_perfdata'),
closure_custom_threshold_check => $self->can('custom_traffic_threshold'), closure_custom_threshold_check => $self->can('custom_traffic_threshold')
} }
}, },
{ label => 'out-eir', filter => 'add_traffic', nlabel => 'interface.traffic.out.eir.bitspersecond', set => { { label => 'out-eir', filter => 'add_traffic', nlabel => 'interface.traffic.out.eir.bitspersecond', set => {
key_values => [ { name => 'out_eir', diff => 1 }, { name => 'speed_out'}, { name => 'display' } ], key_values => [ { name => 'out_eir', diff => 1 }, { name => 'speed_out' }, { name => 'display' } ],
closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'out_eir' }, closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'out_eir' },
closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic Out EIR : %s', closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic Out EIR : %s',
closure_custom_perfdata => $self->can('custom_traffic_perfdata'), closure_custom_perfdata => $self->can('custom_traffic_perfdata'),
closure_custom_threshold_check => $self->can('custom_traffic_threshold'), closure_custom_threshold_check => $self->can('custom_traffic_threshold')
} }
} }
; ;
@ -186,19 +186,19 @@ sub set_counters_errors {
push @{$self->{maps_counters}->{int}}, push @{$self->{maps_counters}->{int}},
{ label => 'in-eir-discard', filter => 'add_errors', nlabel => 'interface.packets.in.eir.discard.count', set => { { label => 'in-eir-discard', filter => 'add_errors', nlabel => 'interface.packets.in.eir.discard.count', set => {
key_values => [ { name => 'in_eir_discard', diff => 1 }, { name => 'speed_in'}, { name => 'display' } ], key_values => [ { name => 'in_eir_discard', diff => 1 }, { name => 'speed_in' }, { name => 'display' } ],
closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'in_eir_discard' }, closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'in_eir_discard' },
closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic In EIR Discard : %s', closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic In EIR Discard : %s',
closure_custom_perfdata => $self->can('custom_traffic_perfdata'), closure_custom_perfdata => $self->can('custom_traffic_perfdata'),
closure_custom_threshold_check => $self->can('custom_traffic_threshold'), closure_custom_threshold_check => $self->can('custom_traffic_threshold')
} }
}, },
{ label => 'out-eir-discard', filter => 'add_errors', nlabel => 'interface.packets.out.eir.discard.count', set => { { label => 'out-eir-discard', filter => 'add_errors', nlabel => 'interface.packets.out.eir.discard.count', set => {
key_values => [ { name => 'out_eir_discard', diff => 1 }, { name => 'speed_out'}, { name => 'display' } ], key_values => [ { name => 'out_eir_discard', diff => 1 }, { name => 'speed_out' }, { name => 'display' } ],
closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'out_eir_discard' }, closure_custom_calc => $self->can('custom_traffic_calc'), closure_custom_calc_extra_options => { label_ref => 'out_eir_discard' },
closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic Out EIR Discard : %s', closure_custom_output => $self->can('custom_traffic_output'), output_error_template => 'Traffic Out EIR Discard : %s',
closure_custom_perfdata => $self->can('custom_traffic_perfdata'), closure_custom_perfdata => $self->can('custom_traffic_perfdata'),
closure_custom_threshold_check => $self->can('custom_traffic_threshold'), closure_custom_threshold_check => $self->can('custom_traffic_threshold')
} }
} }
; ;
@ -208,33 +208,50 @@ sub custom_traffic_perfdata {
my ($self, %options) = @_; my ($self, %options) = @_;
my ($warning, $critical); my ($warning, $critical);
if ($self->{instance_mode}->{option_results}->{units_traffic} eq '%' && defined($self->{result_values}->{speed})) { if ($self->{instance_mode}->{option_results}->{units_traffic} eq 'percent_delta' && defined($self->{result_values}->{speed})) {
$warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}, total => $self->{result_values}->{speed}, cast_int => 1); $warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}, total => $self->{result_values}->{speed}, cast_int => 1);
$critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}, total => $self->{result_values}->{speed}, cast_int => 1); $critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}, total => $self->{result_values}->{speed}, cast_int => 1);
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'b/s') { } elsif ($self->{instance_mode}->{option_results}->{units_traffic} =~ /bps|counter/) {
$warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}); $warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel});
$critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}); $critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel});
}
if ($self->{instance_mode}->{option_results}->{units_traffic} eq 'counter') {
my $nlabel = $self->{nlabel};
$nlabel =~ s/bitspersecond/bits/;
$self->{output}->perfdata_add(
force_new_perfdata => 1,
nlabel => $nlabel,
unit => 'b',
instances => $self->{result_values}->{display},
value => $self->{result_values}->{traffic_counter},
warning => $warning,
critical => $critical,
min => 0
);
} else {
$self->{output}->perfdata_add(
label => $self->{result_values}->{label}, unit => 'b/s',
nlabel => $self->{nlabel},
instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef,
value => sprintf('%.2f', $self->{result_values}->{traffic_per_seconds}),
warning => $warning,
critical => $critical,
min => 0, max => $self->{result_values}->{speed}
);
} }
$self->{output}->perfdata_add(
label => $self->{result_values}->{label}, unit => 'b/s',
nlabel => $self->{nlabel},
instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef,
value => sprintf("%.2f", $self->{result_values}->{traffic_per_seconds}),
warning => $warning,
critical => $critical,
min => 0, max => $self->{result_values}->{speed}
);
} }
sub custom_traffic_threshold { sub custom_traffic_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $exit = 'ok'; my $exit = 'ok';
if ($self->{instance_mode}->{option_results}->{units_traffic} eq '%' && defined($self->{result_values}->{speed})) { if ($self->{instance_mode}->{option_results}->{units_traffic} eq 'percent_delta' && defined($self->{result_values}->{speed})) {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_prct}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]); $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_prct}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'b/s') { } elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'bps') {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_per_seconds}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]); $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_per_seconds}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'counter') {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_counter}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} }
return $exit; return $exit;
} }
@ -246,9 +263,11 @@ sub custom_traffic_output {
$label =~ s/_/ /g; $label =~ s/_/ /g;
$label =~ s/(\w+)/\u$1/g; $label =~ s/(\w+)/\u$1/g;
my ($traffic_value, $traffic_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{traffic_per_seconds}, network => 1); my ($traffic_value, $traffic_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{traffic_per_seconds}, network => 1);
my $msg = sprintf("Traffic %s : %s/s (%s)", my $msg = sprintf(
$label, $traffic_value . $traffic_unit, "Traffic %s : %s/s (%s)",
defined($self->{result_values}->{traffic_prct}) ? sprintf("%.2f%%", $self->{result_values}->{traffic_prct}) : '-'); $label, $traffic_value . $traffic_unit,
defined($self->{result_values}->{traffic_prct}) ? sprintf('%.2f%%', $self->{result_values}->{traffic_prct}) : '-'
);
return $msg; return $msg;
} }
@ -257,13 +276,10 @@ sub custom_traffic_calc {
return -10 if (defined($self->{instance_mode}->{last_status}) && $self->{instance_mode}->{last_status} == 0); return -10 if (defined($self->{instance_mode}->{last_status}) && $self->{instance_mode}->{last_status} == 0);
my $diff_traffic = ($options{new_datas}->{$self->{instance} . '_' . $options{extra_options}->{label_ref}} - $options{old_datas}->{$self->{instance} . '_' . $options{extra_options}->{label_ref}}); my $diff_traffic = ($options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{label_ref} } - $options{old_datas}->{ $self->{instance} . '_' . $options{extra_options}->{label_ref} });
if ($diff_traffic == 0 && !defined($self->{instance_mode}->{option_results}->{no_skipped_counters})) {
$self->{error_msg} = "skipped";
return -2;
}
$self->{result_values}->{traffic_per_seconds} = $diff_traffic / $options{delta_time}; $self->{result_values}->{traffic_per_seconds} = $diff_traffic / $options{delta_time};
$self->{result_values}->{traffic_counter} = $options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{label_ref} };
if (defined($options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}) && if (defined($options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}) &&
$options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}} > 0) { $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}} > 0) {
$self->{result_values}->{traffic_prct} = $self->{result_values}->{traffic_per_seconds} * 100 / $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}; $self->{result_values}->{traffic_prct} = $self->{result_values}->{traffic_per_seconds} * 100 / $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}};
@ -277,8 +293,7 @@ sub custom_traffic_calc {
sub new { sub new {
my ($class, %options) = @_; my ($class, %options) = @_;
my $self = $class->SUPER::new(package => __PACKAGE__, %options, my $self = $class->SUPER::new(package => __PACKAGE__, %options, no_set_traffic => 1, no_set_errors => 1, no_cast => 1);
no_set_traffic => 1, no_set_errors => 1, no_cast => 1);
bless $self, $class; bless $self, $class;
return $self; return $self;
@ -304,8 +319,10 @@ sub load_traffic {
$self->load_speed(%options); $self->load_speed(%options);
} }
$self->set_oids_traffic(); $self->set_oids_traffic();
$self->{snmp}->load(oids => [$self->{oid_ing_cir}, $self->{oid_ing_eir}, $self->{snmp}->load(oids => [
$self->{oid_eg_cir}, $self->{oid_eg_eir}], instances => $self->{array_interface_selected}); $self->{oid_ing_cir}, $self->{oid_ing_eir},
$self->{oid_eg_cir}, $self->{oid_eg_eir}], instances => $self->{array_interface_selected}
);
} }
sub load_errors { sub load_errors {
@ -399,23 +416,18 @@ Default (depends of the atrica release):
'%{admstatus} eq "up" and %{opstatus} ne "up"' '%{admstatus} eq "up" and %{opstatus} ne "up"'
Can used special variables like: %{admstatus}, %{opstatus}, %{display} Can used special variables like: %{admstatus}, %{opstatus}, %{display}
=item B<--warning-*> =item B<--warning-*> B<--critical-*>
Threshold warning. Thresholds.
Can be: 'in-cir', 'in-eir', 'out-cir', 'out-eir', 'in-eir-discard', 'out-eir-discard'.
=item B<--critical-*>
Threshold critical.
Can be: 'in-cir', 'in-eir', 'out-cir', 'out-eir', 'in-eir-discard', 'out-eir-discard'. Can be: 'in-cir', 'in-eir', 'out-cir', 'out-eir', 'in-eir-discard', 'out-eir-discard'.
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors> =item B<--units-errors>
Units of thresholds for discards (Default: '%') ('%', 'b/s'). Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--interface> =item B<--interface>
@ -437,10 +449,6 @@ Set interface speed for incoming traffic (in Mb).
Set interface speed for outgoing traffic (in Mb). Set interface speed for outgoing traffic (in Mb).
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--reload-cache-time> =item B<--reload-cache-time>
Time in seconds before reloading cache file (default: 180). Time in seconds before reloading cache file (default: 180).

View File

@ -306,16 +306,20 @@ Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{e
Thresholds. Thresholds.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-crc', 'in-error', 'in-discard', 'out-error', 'out-discard', 'in-traffic', 'out-traffic', 'in-crc', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%), 'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast',
'speed' (b/s), 'laser-temp', 'input-power', 'output-power'. 'speed' (b/s), 'laser-temp', 'input-power', 'output-power'.
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors> =item B<--units-errors>
Units of thresholds for errors/discards (Default: '%') ('%', 'absolute'). Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--units-cast>
Units of thresholds for communication types (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--nagvis-perfdata> =item B<--nagvis-perfdata>
@ -341,10 +345,6 @@ Set interface speed for incoming traffic (in Mb).
Set interface speed for outgoing traffic (in Mb). Set interface speed for outgoing traffic (in Mb).
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--force-counters32> =item B<--force-counters32>
Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy. Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy.

View File

@ -177,16 +177,20 @@ Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{e
Thresholds. Thresholds.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard', 'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%), 'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast',
'speed' (b/s). 'speed' (b/s).
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors> =item B<--units-errors>
Units of thresholds for errors/discards (Default: '%') ('%', 'absolute'). Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--units-cast>
Units of thresholds for communication types (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--nagvis-perfdata> =item B<--nagvis-perfdata>
@ -212,10 +216,6 @@ Set interface speed for incoming traffic (in Mb).
Set interface speed for outgoing traffic (in Mb). Set interface speed for outgoing traffic (in Mb).
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--force-counters32> =item B<--force-counters32>
Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy. Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy.

View File

@ -94,7 +94,7 @@ sub new {
bless $self, $class; bless $self, $class;
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'add-optical' => { name => 'add_optical' }, 'add-optical' => { name => 'add_optical' }
} }
); );
@ -294,33 +294,27 @@ Set warning threshold for all error counters.
Set critical threshold for all error counters. Set critical threshold for all error counters.
=item B<--warning-*> =item B<--warning-*> B<--critical-*>
Threshold warning (will superseed --warning-errors). Thresholds (will superseed --[warning-critical]-errors).
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard', 'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%), 'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast',
'speed' (b/s). 'speed' (b/s).
And also: 'fcs-errors (%)', 'input-power' (dBm), 'bias-current' (mA), 'output-power' (dBm), 'module-temperature' (C). And also: 'fcs-errors (%)', 'input-power' (dBm), 'bias-current' (mA), 'output-power' (dBm), 'module-temperature' (C).
=item B<--critical-*>
Threshold critical (will superseed --warning-errors).
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%),
'speed' (b/s).
And also: 'in-fcserror' (%), 'input-power' (dBm), 'bias-current' (mA), 'output-power' (dBm), 'module-temperature' (C).
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors> =item B<--units-errors>
Units of thresholds for errors/discards (Default: '%') ('%', 'absolute'). Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--units-cast>
Units of thresholds for communication types (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--nagvis-perfdata> =item B<--nagvis-perfdata>
@ -346,10 +340,6 @@ Set interface speed for incoming traffic (in Mb).
Set interface speed for outgoing traffic (in Mb). Set interface speed for outgoing traffic (in Mb).
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--force-counters32> =item B<--force-counters32>
Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy. Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy.

View File

@ -74,9 +74,9 @@ sub set_counters_errors {
closure_custom_calc => $self->can('custom_errors_calc'), closure_custom_calc_extra_options => { label => $1 . ' ' . $2, label_ref1 => lc($1), label_ref2 => lc($2) }, closure_custom_calc => $self->can('custom_errors_calc'), closure_custom_calc_extra_options => { label => $1 . ' ' . $2, label_ref1 => lc($1), label_ref2 => lc($2) },
closure_custom_output => $self->can('custom_errors_output'), output_error_template => 'Packets ' . $1 . ' ' . $2 . ' : %s', closure_custom_output => $self->can('custom_errors_output'), output_error_template => 'Packets ' . $1 . ' ' . $2 . ' : %s',
closure_custom_perfdata => $self->can('custom_errors_perfdata'), closure_custom_perfdata => $self->can('custom_errors_perfdata'),
closure_custom_threshold_check => $self->can('custom_errors_threshold'), closure_custom_threshold_check => $self->can('custom_errors_threshold')
} }
}, }
; ;
} }
} }
@ -88,7 +88,7 @@ sub new {
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'warning-errors:s' => { name => 'warning_errors' }, 'warning-errors:s' => { name => 'warning_errors' },
'critical-errors:s' => { name => 'critical_errors' }, 'critical-errors:s' => { name => 'critical_errors' }
}); });
return $self; return $self;
@ -191,27 +191,12 @@ Set warning threshold for all error counters.
Set critical threshold for all error counters. Set critical threshold for all error counters.
=item B<--warning-*> =item B<--warning-*> B<--critical-*>
Threshold warning (will superseed --warning-errors). Thresholds (will superseed --[warning|critical]-errors).
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard', 'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%), 'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast',
'speed' (b/s).
And also: 'in-tooshort' (%), 'in-toolong' (%), 'in-fcserror' (%), 'in-alignerror' (%), 'in-fragment' (%),
'in-overflow' (%), 'in-unknownop' (%), 'in-lengtherror' (%), 'in-codeerror' (%), 'in-carriererror' (%),
'in-jabber' (%), 'in-drop' (%), 'out-tooshort' (%), 'out-toolong' (%), 'out-underrun' (%),
'out-collision' (%), 'out-excessivecollision' (%), 'out-multiplecollision' (%), 'out-singlecollision' (%),
'out-excessivedeferred' (%),'out-deferred' (%), 'out-latecollision' (%), 'out-totalcollision' (%),
'out-drop' (%), 'out-jabber' (%), 'out-fcserror' (%), 'out-fragment' (%).
=item B<--critical-*>
Threshold critical (will superseed --warning-errors).
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%),
'speed' (b/s). 'speed' (b/s).
And also: 'in-tooshort' (%), 'in-toolong' (%), 'in-fcserror' (%), 'in-alignerror' (%), 'in-fragment' (%), And also: 'in-tooshort' (%), 'in-toolong' (%), 'in-fcserror' (%), 'in-alignerror' (%), 'in-fragment' (%),
@ -223,11 +208,15 @@ And also: 'in-tooshort' (%), 'in-toolong' (%), 'in-fcserror' (%), 'in-alignerror
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors> =item B<--units-errors>
Units of thresholds for errors/discards (Default: '%') ('%', 'absolute'). Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--units-cast>
Units of thresholds for communication types (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--nagvis-perfdata> =item B<--nagvis-perfdata>
@ -253,10 +242,6 @@ Set interface speed for incoming traffic (in Mb).
Set interface speed for outgoing traffic (in Mb). Set interface speed for outgoing traffic (in Mb).
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--force-counters32> =item B<--force-counters32>
Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy. Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy.

View File

@ -58,8 +58,8 @@ sub set_counters_global {
output_use => 'global_link_up', threshold_use => 'global_link_up', output_use => 'global_link_up', threshold_use => 'global_link_up',
perfdatas => [ perfdatas => [
{ label => 'total_link_up', value => 'global_link_up', template => '%s', { label => 'total_link_up', value => 'global_link_up', template => '%s',
min => 0, max => 'total_port' }, min => 0, max => 'total_port' }
], ]
} }
}, },
{ label => 'total-link-down', filter => 'add_global', nlabel => 'total.interfaces.link.down.count', set => { { label => 'total-link-down', filter => 'add_global', nlabel => 'total.interfaces.link.down.count', set => {
@ -68,10 +68,10 @@ sub set_counters_global {
output_use => 'global_link_down', threshold_use => 'global_link_down', output_use => 'global_link_down', threshold_use => 'global_link_down',
perfdatas => [ perfdatas => [
{ label => 'total_link_down', value => 'global_link_down', template => '%s', { label => 'total_link_down', value => 'global_link_down', template => '%s',
min => 0, max => 'total_port' }, min => 0, max => 'total_port' }
], ]
} }
}, }
; ;
} }
@ -84,9 +84,9 @@ sub set_counters_errors {
closure_custom_calc => $self->can('custom_errors_calc'), closure_custom_calc_extra_options => { label_ref1 => 'in', label_ref2 => 'crc' }, closure_custom_calc => $self->can('custom_errors_calc'), closure_custom_calc_extra_options => { label_ref1 => 'in', label_ref2 => 'crc' },
closure_custom_output => $self->can('custom_errors_output'), output_error_template => 'Packets In Crc : %s', closure_custom_output => $self->can('custom_errors_output'), output_error_template => 'Packets In Crc : %s',
closure_custom_perfdata => $self->can('custom_errors_perfdata'), closure_custom_perfdata => $self->can('custom_errors_perfdata'),
closure_custom_threshold_check => $self->can('custom_errors_threshold'), closure_custom_threshold_check => $self->can('custom_errors_threshold')
} }
}, }
; ;
} }
@ -259,9 +259,13 @@ sub load_cast {
$self->set_oids_cast(); $self->set_oids_cast();
$self->{snmp}->load(oids => [$self->{oid_ifHCInUcastPkts}, $self->{oid_ifHCInMulticastPkts}, $self->{oid_ifHCInBroadcastPkts}, $self->{snmp}->load(
$self->{oid_ifHCOutUcastPkts}, $self->{oid_ifHCOutMulticastPkts}, $self->{oid_ifHCOutBroadcastPkts}], oids => [
instances => $self->{array_interface_selected}); $self->{oid_ifHCInUcastPkts}, $self->{oid_ifHCInMulticastPkts}, $self->{oid_ifHCInBroadcastPkts},
$self->{oid_ifHCOutUcastPkts}, $self->{oid_ifHCOutMulticastPkts}, $self->{oid_ifHCOutBroadcastPkts}
],
instances => $self->{array_interface_selected}
);
} }
sub load_errors { sub load_errors {
@ -464,23 +468,24 @@ Can used special variables like: %{linkstatus}, %{admstatus}, %{opstatus}, %{dup
Set critical threshold for status (Default: '%{admstatus} eq "enable" and %{opstatus} eq "enabled" and %{linkstatus} ne "true"'). Set critical threshold for status (Default: '%{admstatus} eq "enable" and %{opstatus} eq "enabled" and %{linkstatus} ne "true"').
Can used special variables like: %{linkstatus}, %{admstatus}, %{opstatus}, %{duplexstatus}, %{display} Can used special variables like: %{linkstatus}, %{admstatus}, %{opstatus}, %{duplexstatus}, %{display}
=item B<--warning-*> =item B<--warning-*> B<--critical-*>
Threshold warning. Thresholds.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', 'total-link-up', 'total-link-down', Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', 'total-link-up', 'total-link-down',
'in-traffic', 'out-traffic', 'in-crc', 'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%), 'in-traffic', 'out-traffic', 'in-crc', 'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast',
'speed' (b/s).
=item B<--critical-*>
Threshold critical.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', 'total-link-up', 'total-link-down',
'in-traffic', 'out-traffic', 'in-crc', 'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%),
'speed' (b/s). 'speed' (b/s).
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors>
Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--units-cast>
Units of thresholds for communication types (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--nagvis-perfdata> =item B<--nagvis-perfdata>
@ -506,10 +511,6 @@ Set interface speed for incoming traffic (in Mb).
Set interface speed for outgoing traffic (in Mb). Set interface speed for outgoing traffic (in Mb).
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--reload-cache-time> =item B<--reload-cache-time>
Time in minutes before reloading cache file (default: 180). Time in minutes before reloading cache file (default: 180).

View File

@ -80,6 +80,64 @@ sub custom_status_calc {
return 0; return 0;
} }
###############
# Cast
sub custom_cast_perfdata {
my ($self, %options) = @_;
if ($self->{instance_mode}->{option_results}->{units_cast} =~ /percent/) {
my $nlabel = $self->{nlabel};
$nlabel =~ s/count$/percentage/;
$self->{output}->perfdata_add(
force_new_perfdata => 1,
nlabel => $nlabel,
instances => $self->{result_values}->{display},
value => sprintf('%.2f', $self->{result_values}->{prct}),
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}),
unit => '%',
min => 0,
max => 100
);
} else {
$self->{output}->perfdata_add(
force_new_perfdata => 1,
nlabel => $self->{nlabel},
instances => $self->{result_values}->{display},
value => $self->{result_values}->{used},
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}),
min => 0,
max => $self->{result_values}->{total}
);
}
}
sub custom_cast_threshold {
my ($self, %options) = @_;
my $exit = 'ok';
if ($self->{instance_mode}->{option_results}->{units_cast} =~ /percent/) {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{prct}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} else {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{used}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
}
return $exit;
}
sub custom_cast_output {
my ($self, %options) = @_;
return sprintf(
'%s %s : %.2f%% (%s on %s)',
$self->{result_values}->{cast_going} eq 'i' ? 'In' : 'Out',
ucfirst($self->{result_values}->{cast_test}),
$self->{result_values}->{prct},
$self->{result_values}->{used},
$self->{result_values}->{total}
);
}
sub custom_cast_calc { sub custom_cast_calc {
my ($self, %options) = @_; my ($self, %options) = @_;
@ -89,18 +147,36 @@ sub custom_cast_calc {
return -2; return -2;
} }
my $diff_cast = ($options{new_datas}->{$self->{instance} . '_' . $options{extra_options}->{label_ref}} - $options{old_datas}->{$self->{instance} . '_' . $options{extra_options}->{label_ref}}); my $cast_diff = ($options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . $options{extra_options}->{cast_test} } -
my $total = $diff_cast $options{old_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . $options{extra_options}->{cast_test} });
+ ($options{new_datas}->{$self->{instance} . '_' . $options{extra_options}->{total_ref1}} - $options{old_datas}->{$self->{instance} . '_' . $options{extra_options}->{total_ref1}}) my $total_diff =
+ ($options{new_datas}->{$self->{instance} . '_' . $options{extra_options}->{total_ref2}} - $options{old_datas}->{$self->{instance} . '_' . $options{extra_options}->{total_ref2}}); ($options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . 'ucast' } - $options{old_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . 'ucast' })
+ ($options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . 'bcast' } - $options{old_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . 'bcast' })
+ ($options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . 'mcast' } - $options{old_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . 'mcast' });
my $cast = $options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . $options{extra_options}->{cast_test} };
my $total =
$options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . 'ucast' }
+ $options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . 'bcast' }
+ $options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{cast_going} . 'mcast' };
if ($total == 0 && !defined($self->{instance_mode}->{option_results}->{no_skipped_counters})) { $self->{result_values}->{prct} = 0;
$self->{error_msg} = "skipped"; $self->{result_values}->{used} = $cast_diff;
return -2; $self->{result_values}->{total} = $total_diff;
if ($self->{instance_mode}->{option_results}->{units_cast} eq 'percent_delta') {
$self->{result_values}->{prct} = $cast_diff * 100 / $total_diff if ($total_diff > 0);
} elsif ($self->{instance_mode}->{option_results}->{units_cast} eq 'percent') {
$self->{result_values}->{prct} = $cast * 100 / $total if ($total > 0);
$self->{result_values}->{used} = $cast;
} elsif ($self->{instance_mode}->{option_results}->{units_cast} eq 'delta') {
$self->{result_values}->{used} = $cast_diff;
} else {
$self->{result_values}->{used} = $cast;
$self->{result_values}->{total} = $total;
} }
$self->{result_values}->{cast_going} = $options{extra_options}->{cast_going};
$self->{result_values}->{cast_test} = $options{extra_options}->{cast_test};
$self->{result_values}->{display} = $options{new_datas}->{ $self->{instance} . '_display' };
$self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'};
$self->{result_values}->{$options{extra_options}->{label_ref} . '_prct'} = $total == 0 ? 0 : $diff_cast * 100 / $total;
return 0; return 0;
} }
@ -115,12 +191,12 @@ sub custom_traffic_perfdata {
} }
my ($warning, $critical); my ($warning, $critical);
if ($self->{instance_mode}->{option_results}->{units_traffic} eq '%' && defined($self->{result_values}->{speed})) { if ($self->{instance_mode}->{option_results}->{units_traffic} eq 'percent_delta' && defined($self->{result_values}->{speed})) {
$warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}, total => $self->{result_values}->{speed}, cast_int => 1); $warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}, total => $self->{result_values}->{speed}, cast_int => 1);
$critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}, total => $self->{result_values}->{speed}, cast_int => 1); $critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}, total => $self->{result_values}->{speed}, cast_int => 1);
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'b/s') { } elsif ($self->{instance_mode}->{option_results}->{units_traffic} =~ /bps|counter/) {
$warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}); $warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel});
$critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}); $critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel});
} }
if (defined($self->{instance_mode}->{option_results}->{nagvis_perfdata})) { if (defined($self->{instance_mode}->{option_results}->{nagvis_perfdata})) {
@ -132,6 +208,19 @@ sub custom_traffic_perfdata {
critical => $critical, critical => $critical,
min => 0, max => $self->{result_values}->{speed} min => 0, max => $self->{result_values}->{speed}
); );
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'counter') {
my $nlabel = $self->{nlabel};
$nlabel =~ s/bitspersecond/bits/;
$self->{output}->perfdata_add(
force_new_perfdata => 1,
nlabel => $nlabel,
unit => 'b',
instances => $self->{result_values}->{display},
value => $self->{result_values}->{traffic_counter},
warning => $warning,
critical => $critical,
min => 0
);
} else { } else {
$self->{output}->perfdata_add( $self->{output}->perfdata_add(
label => 'traffic_' . $self->{result_values}->{label}, unit => 'b/s', label => 'traffic_' . $self->{result_values}->{label}, unit => 'b/s',
@ -149,10 +238,12 @@ sub custom_traffic_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $exit = 'ok'; my $exit = 'ok';
if ($self->{instance_mode}->{option_results}->{units_traffic} eq '%' && defined($self->{result_values}->{speed})) { if ($self->{instance_mode}->{option_results}->{units_traffic} eq 'percent_delta' && defined($self->{result_values}->{speed})) {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_prct}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]); $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_prct}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'b/s') { } elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'bps') {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_per_seconds}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]); $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_per_seconds}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} elsif ($self->{instance_mode}->{option_results}->{units_traffic} eq 'counter') {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{traffic_counter}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} }
return $exit; return $exit;
} }
@ -164,7 +255,7 @@ sub custom_traffic_output {
return sprintf( return sprintf(
'Traffic %s : %s/s (%s)', 'Traffic %s : %s/s (%s)',
ucfirst($self->{result_values}->{label}), $traffic_value . $traffic_unit, ucfirst($self->{result_values}->{label}), $traffic_value . $traffic_unit,
defined($self->{result_values}->{traffic_prct}) ? sprintf("%.2f%%", $self->{result_values}->{traffic_prct}) : '-' defined($self->{result_values}->{traffic_prct}) ? sprintf('%.2f%%', $self->{result_values}->{traffic_prct}) : '-'
); );
} }
@ -176,14 +267,10 @@ sub custom_traffic_calc {
$self->{error_msg} = 'buffer creation'; $self->{error_msg} = 'buffer creation';
return -2; return -2;
} }
my $diff_traffic = ($options{new_datas}->{$self->{instance} . '_' . $options{extra_options}->{label_ref}} - $options{old_datas}->{$self->{instance} . '_' . $options{extra_options}->{label_ref}});
if ($diff_traffic == 0 && !defined($self->{instance_mode}->{option_results}->{no_skipped_counters})) {
$self->{error_msg} = 'skipped';
return -2;
}
my $diff_traffic = ($options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{label_ref} } - $options{old_datas}->{ $self->{instance} . '_' . $options{extra_options}->{label_ref} });
$self->{result_values}->{traffic_per_seconds} = $diff_traffic / $options{delta_time}; $self->{result_values}->{traffic_per_seconds} = $diff_traffic / $options{delta_time};
$self->{result_values}->{traffic_counter} = $options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{label_ref} };
if (defined($options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}) && if (defined($options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}) &&
$options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}} > 0) { $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}} > 0) {
$self->{result_values}->{traffic_prct} = $self->{result_values}->{traffic_per_seconds} * 100 / $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}}; $self->{result_values}->{traffic_prct} = $self->{result_values}->{traffic_per_seconds} * 100 / $options{new_datas}->{$self->{instance} . '_speed_' . $options{extra_options}->{label_ref}};
@ -191,7 +278,7 @@ sub custom_traffic_calc {
} }
$self->{result_values}->{label} = $options{extra_options}->{label_ref}; $self->{result_values}->{label} = $options{extra_options}->{label_ref};
$self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'}; $self->{result_values}->{display} = $options{new_datas}->{ $self->{instance} . '_display' };
return 0; return 0;
} }
@ -200,17 +287,19 @@ sub custom_traffic_calc {
sub custom_errors_perfdata { sub custom_errors_perfdata {
my ($self, %options) = @_; my ($self, %options) = @_;
if ($self->{instance_mode}->{option_results}->{units_errors} eq '%') { if ($self->{instance_mode}->{option_results}->{units_errors} =~ /percent/) {
my $nlabel = $self->{nlabel}; my $nlabel = $self->{nlabel};
$nlabel =~ s/count$/percentage/; $nlabel =~ s/count$/percentage/;
$self->{output}->perfdata_add( $self->{output}->perfdata_add(
label => 'packets_' . $self->{result_values}->{label2} . '_' . $self->{result_values}->{label1}, unit => '%', label => 'packets_' . $self->{result_values}->{label2} . '_' . $self->{result_values}->{label1},
unit => '%',
nlabel => $nlabel, nlabel => $nlabel,
instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef, instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef,
value => sprintf("%.2f", $self->{result_values}->{prct}), value => sprintf('%.2f', $self->{result_values}->{prct}),
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}), warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}), critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}),
min => 0, max => 100 min => 0,
max => 100
); );
} else { } else {
$self->{output}->perfdata_add( $self->{output}->perfdata_add(
@ -218,9 +307,10 @@ sub custom_errors_perfdata {
nlabel => $self->{nlabel}, nlabel => $self->{nlabel},
instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef, instances => $self->use_instances(extra_instance => $options{extra_instance}) ? $self->{result_values}->{display} : undef,
value => $self->{result_values}->{used}, value => $self->{result_values}->{used},
warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{label}), warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}),
critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{label}), critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}),
min => 0, max => $self->{result_values}->{total} min => 0,
max => $self->{result_values}->{total}
); );
} }
} }
@ -229,7 +319,7 @@ sub custom_errors_threshold {
my ($self, %options) = @_; my ($self, %options) = @_;
my $exit = 'ok'; my $exit = 'ok';
if ($self->{instance_mode}->{option_results}->{units_errors} eq '%') { if ($self->{instance_mode}->{option_results}->{units_errors} =~ /percent/) {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{prct}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]); $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{prct}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
} else { } else {
$exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{used}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]); $exit = $self->{perfdata}->threshold_check(value => $self->{result_values}->{used}, threshold => [ { label => 'critical-' . $self->{thlabel}, exit_litteral => 'critical' }, { label => 'warning-' . $self->{thlabel}, exit_litteral => 'warning' } ]);
@ -241,9 +331,11 @@ sub custom_errors_output {
my ($self, %options) = @_; my ($self, %options) = @_;
return sprintf( return sprintf(
'Packets %s : %.2f%% (%s)', 'Packets %s : %.2f%% (%s on %s)',
$self->{result_values}->{label}, $self->{result_values}->{label},
$self->{result_values}->{prct}, $self->{result_values}->{used} $self->{result_values}->{prct},
$self->{result_values}->{used},
$self->{result_values}->{total}
); );
} }
@ -256,18 +348,28 @@ sub custom_errors_calc {
return -2; return -2;
} }
my $diff = ($options{new_datas}->{$self->{instance} . '_' . $options{extra_options}->{label_ref1} . $options{extra_options}->{label_ref2}} - my $errors = $options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{label_ref1} . $options{extra_options}->{label_ref2} };
$options{old_datas}->{$self->{instance} . '_' . $options{extra_options}->{label_ref1} . $options{extra_options}->{label_ref2}}); my $errors_diff = ($options{new_datas}->{ $self->{instance} . '_' . $options{extra_options}->{label_ref1} . $options{extra_options}->{label_ref2} } -
my $total = ($options{new_datas}->{$self->{instance} . '_total_' . $options{extra_options}->{label_ref1} . '_packets'} - $options{old_datas}->{ $self->{instance} . '_' . $options{extra_options}->{label_ref1} . $options{extra_options}->{label_ref2} });
my $total = $options{new_datas}->{$self->{instance} . '_total_' . $options{extra_options}->{label_ref1} . '_packets'};
my $total_diff = ($options{new_datas}->{$self->{instance} . '_total_' . $options{extra_options}->{label_ref1} . '_packets'} -
$options{old_datas}->{$self->{instance} . '_total_' . $options{extra_options}->{label_ref1} . '_packets'}); $options{old_datas}->{$self->{instance} . '_total_' . $options{extra_options}->{label_ref1} . '_packets'});
if ($total == 0 && !defined($self->{instance_mode}->{option_results}->{no_skipped_counters})) {
$self->{error_msg} = "skipped"; $self->{result_values}->{prct} = 0;
return -2; $self->{result_values}->{used} = $errors_diff;
$self->{result_values}->{total} = $total_diff;
if ($self->{instance_mode}->{option_results}->{units_errors} eq 'percent_delta') {
$self->{result_values}->{prct} = $errors_diff * 100 / $total_diff if ($total_diff > 0);
} elsif ($self->{instance_mode}->{option_results}->{units_errors} eq 'percent') {
$self->{result_values}->{prct} = $errors * 100 / $total if ($total > 0);
$self->{result_values}->{used} = $errors;
} elsif ($self->{instance_mode}->{option_results}->{units_errors} eq 'delta') {
$self->{result_values}->{used} = $errors_diff;
} else {
$self->{result_values}->{used} = $errors;
$self->{result_values}->{total} = $total;
} }
$self->{result_values}->{prct} = $total == 0 ? 0 : $diff * 100 / $total;
$self->{result_values}->{used} = $diff;
$self->{result_values}->{total} = $total;
if (defined($options{extra_options}->{label})) { if (defined($options{extra_options}->{label})) {
$self->{result_values}->{label} = $options{extra_options}->{label}; $self->{result_values}->{label} = $options{extra_options}->{label};
} else { } else {
@ -433,68 +535,56 @@ sub set_counters_cast {
push @{$self->{maps_counters}->{int}}, push @{$self->{maps_counters}->{int}},
{ label => 'in-ucast', filter => 'add_cast', nlabel => 'interface.packets.in.unicast.count', set => { { label => 'in-ucast', filter => 'add_cast', nlabel => 'interface.packets.in.unicast.count', set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ], 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' }, closure_custom_calc => $self->can('custom_cast_calc'),
output_template => 'In Ucast : %.2f %%', output_error_template => 'In Ucast : %s', closure_custom_calc_extra_options => { cast_going => 'i', cast_test => 'ucast' },
output_use => 'iucast_prct', threshold_use => 'iucast_prct', closure_custom_output => $self->can('custom_cast_output'), output_error_template => 'In Ucast : %s',
perfdatas => [ closure_custom_perfdata => $self->can('custom_cast_perfdata'),
{ value => 'iucast_prct', template => '%.2f', closure_custom_threshold_check => $self->can('custom_cast_threshold')
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' }
]
} }
}, },
{ label => 'in-bcast', filter => 'add_cast', nlabel => 'interface.packets.in.broadcast.count', set => { { label => 'in-bcast', filter => 'add_cast', nlabel => 'interface.packets.in.broadcast.count', set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ], 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' }, closure_custom_calc => $self->can('custom_cast_calc'),
output_template => 'In Bcast : %.2f %%', output_error_template => 'In Bcast : %s', closure_custom_calc_extra_options => { cast_going => 'i', cast_test => 'bcast' },
output_use => 'ibcast_prct', threshold_use => 'ibcast_prct', closure_custom_output => $self->can('custom_cast_output'), output_error_template => 'In Bcast : %s',
perfdatas => [ closure_custom_perfdata => $self->can('custom_cast_perfdata'),
{ value => 'ibcast_prct', template => '%.2f', closure_custom_threshold_check => $self->can('custom_cast_threshold')
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' }
]
} }
}, },
{ label => 'in-mcast', filter => 'add_cast', nlabel => 'interface.packets.in.multicast.count', set => { { label => 'in-mcast', filter => 'add_cast', nlabel => 'interface.packets.in.multicast.count', set => {
key_values => [ { name => 'iucast', diff => 1 }, { name => 'imcast', diff => 1 }, { name => 'ibcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ], 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' }, closure_custom_calc => $self->can('custom_cast_calc'),
output_template => 'In Mcast : %.2f %%', output_error_template => 'In Mcast : %s', closure_custom_calc_extra_options => { cast_going => 'i', cast_test => 'mcast' },
output_use => 'imcast_prct', threshold_use => 'imcast_prct', closure_custom_output => $self->can('custom_cast_output'), output_error_template => 'In Mcast : %s',
perfdatas => [ closure_custom_perfdata => $self->can('custom_cast_perfdata'),
{ value => 'imcast_prct', template => '%.2f', closure_custom_threshold_check => $self->can('custom_cast_threshold')
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' }
]
} }
}, },
{ label => 'out-ucast', filter => 'add_cast', nlabel => 'interface.packets.out.unicast.count', set => { { label => 'out-ucast', filter => 'add_cast', nlabel => 'interface.packets.out.unicast.count', set => {
key_values => [ { name => 'oucast', diff => 1 }, { name => 'omcast', diff => 1 }, { name => 'obcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ], 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' }, closure_custom_calc => $self->can('custom_cast_calc'),
output_template => 'Out Ucast : %.2f %%', output_error_template => 'Out Ucast : %s', closure_custom_calc_extra_options => { cast_going => 'o', cast_test => 'ucast' },
output_use => 'oucast_prct', threshold_use => 'oucast_prct', closure_custom_output => $self->can('custom_cast_output'), output_error_template => 'Out Ucast : %s',
perfdatas => [ closure_custom_perfdata => $self->can('custom_cast_perfdata'),
{ value => 'oucast_prct', template => '%.2f', closure_custom_threshold_check => $self->can('custom_cast_threshold')
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' }
]
} }
}, },
{ label => 'out-bcast', filter => 'add_cast', nlabel => 'interface.packets.out.broadcast.count', set => { { label => 'out-bcast', filter => 'add_cast', nlabel => 'interface.packets.out.broadcast.count', set => {
key_values => [ { name => 'oucast', diff => 1 }, { name => 'omcast', diff => 1 }, { name => 'obcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ], 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' }, closure_custom_calc => $self->can('custom_cast_calc'),
output_template => 'Out Bcast : %.2f %%', output_error_template => 'Out Bcast : %s', closure_custom_calc_extra_options => { cast_going => 'o', cast_test => 'bcast' },
output_use => 'obcast_prct', threshold_use => 'obcast_prct', closure_custom_output => $self->can('custom_cast_output'), output_error_template => 'Out Bcast : %s',
perfdatas => [ closure_custom_perfdata => $self->can('custom_cast_perfdata'),
{ value => 'obcast_prct', template => '%.2f', closure_custom_threshold_check => $self->can('custom_cast_threshold')
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' }
]
} }
}, },
{ label => 'out-mcast', filter => 'add_cast', nlabel => 'interface.packets.out.multicast.count', set => { { label => 'out-mcast', filter => 'add_cast', nlabel => 'interface.packets.out.multicast.count', set => {
key_values => [ { name => 'oucast', diff => 1 }, { name => 'omcast', diff => 1 }, { name => 'obcast', diff => 1 }, { name => 'display' }, { name => 'mode_cast' } ], 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 => 'omcast', total_ref1 => 'oucast', total_ref2 => 'obcast' }, closure_custom_calc => $self->can('custom_cast_calc'),
output_template => 'Out Mcast : %.2f %%', output_error_template => 'Out Mcast : %s', closure_custom_calc_extra_options => { cast_going => 'o', cast_test => 'mcast' },
output_use => 'omcast_prct', threshold_use => 'omcast_prct', closure_custom_output => $self->can('custom_cast_output'), output_error_template => 'Out Mcast : %s',
perfdatas => [ closure_custom_perfdata => $self->can('custom_cast_perfdata'),
{ value => 'omcast_prct', template => '%.2f', closure_custom_threshold_check => $self->can('custom_cast_threshold')
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' }
]
} }
} }
; ;
@ -791,12 +881,13 @@ sub new {
'global-admin-down-rule:s' => { name => 'global_admin_down_rule', default => $self->default_global_admin_down_rule() }, 'global-admin-down-rule:s' => { name => 'global_admin_down_rule', default => $self->default_global_admin_down_rule() },
'global-oper-down-rule:s' => { name => 'global_oper_down_rule', default => $self->default_global_oper_down_rule() }, 'global-oper-down-rule:s' => { name => 'global_oper_down_rule', default => $self->default_global_oper_down_rule() },
'interface:s' => { name => 'interface' }, 'interface:s' => { name => 'interface' },
'units-traffic:s' => { name => 'units_traffic', default => '%' }, 'units-traffic:s' => { name => 'units_traffic', default => 'percent_delta' },
'units-errors:s' => { name => 'units_errors', default => '%' }, 'units-errors:s' => { name => 'units_errors', default => 'percent_delta' },
'units-cast:s' => { name => 'units_cast', default => 'percent_delta' },
'speed:s' => { name => 'speed' }, 'speed:s' => { name => 'speed' },
'speed-in:s' => { name => 'speed_in' }, 'speed-in:s' => { name => 'speed_in' },
'speed-out:s' => { name => 'speed_out' }, 'speed-out:s' => { name => 'speed_out' },
'no-skipped-counters' => { name => 'no_skipped_counters' }, 'no-skipped-counters' => { name => 'no_skipped_counters' }, # legacy
'display-transform-src:s' => { name => 'display_transform_src' }, 'display-transform-src:s' => { name => 'display_transform_src' },
'display-transform-dst:s' => { name => 'display_transform_dst' }, 'display-transform-dst:s' => { name => 'display_transform_dst' },
'show-cache' => { name => 'show_cache' }, 'show-cache' => { name => 'show_cache' },
@ -847,16 +938,35 @@ sub check_options {
$self->check_oids_label(); $self->check_oids_label();
$self->{statefile_cache}->check_options(%options); $self->{statefile_cache}->check_options(%options);
if (defined($self->{option_results}->{add_traffic})) {
if (defined($self->{option_results}->{add_traffic}) && $self->{option_results}->{units_traffic} = 'percent_delta'
(!defined($self->{option_results}->{units_traffic}) || $self->{option_results}->{units_traffic} !~ /^(%|b\/s)$/)) { if (!defined($self->{option_results}->{units_traffic}) ||
$self->{output}->add_option_msg(short_msg => 'Wrong option --units-traffic.'); $self->{option_results}->{units_traffic} eq '' ||
$self->{output}->option_exit(); $self->{option_results}->{units_traffic} eq '%');
$self->{option_results}->{units_traffic} = 'bps' if ($self->{option_results}->{units_traffic} eq 'absolute'); # compat
if ($self->{option_results}->{units_traffic} !~ /^(?:percent_delta|bps|counter)$/) {
$self->{output}->add_option_msg(short_msg => 'Wrong option --units-traffic.');
$self->{output}->option_exit();
}
} }
if (defined($self->{option_results}->{add_errors}) && if (defined($self->{option_results}->{add_errors})) {
(!defined($self->{option_results}->{units_errors}) || $self->{option_results}->{units_errors} !~ /^(%|absolute|b\/s)$/)) { $self->{option_results}->{units_errors} = 'percent_delta'
$self->{output}->add_option_msg(short_msg => 'Wrong option --units-errors.'); if (!defined($self->{option_results}->{units_errors}) ||
$self->{output}->option_exit(); $self->{option_results}->{units_errors} eq '' ||
$self->{option_results}->{units_errors} eq '%');
$self->{option_results}->{units_errors} = 'delta' if ($self->{option_results}->{units_errors} eq 'absolute'); # compat
if ($self->{option_results}->{units_errors} !~ /^(?:percent|percent_delta|delta|counter)$/) {
$self->{output}->add_option_msg(short_msg => 'Wrong option --units-errors.');
$self->{output}->option_exit();
}
}
if (defined($self->{option_results}->{add_cast})) {
$self->{option_results}->{units_cast} = 'percent_delta'
if (!defined($self->{option_results}->{units_cast}) || $self->{option_results}->{units_cast} eq '');
if ($self->{option_results}->{units_cast} !~ /^(?:percent|percent_delta|delta|counter)$/) {
$self->{output}->add_option_msg(short_msg => 'Wrong option --units-cast.');
$self->{output}->option_exit();
}
} }
$self->{get_speed} = 0; $self->{get_speed} = 0;
@ -1483,29 +1593,25 @@ Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{d
Set critical threshold for status (Default: '%{admstatus} eq "up" and %{opstatus} ne "up"'). Set critical threshold for status (Default: '%{admstatus} eq "up" and %{opstatus} ne "up"').
Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{display} Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{display}
=item B<--warning-*> =item B<--warning-*> B<--critical-*>
Threshold warning. Thresholds.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard', 'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%), 'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast',
'speed' (b/s).
=item B<--critical-*>
Threshold critical.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%),
'speed' (b/s). 'speed' (b/s).
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors> =item B<--units-errors>
Units of thresholds for errors/discards (Default: '%') ('%', 'absolute'). Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--units-cast>
Units of thresholds for communication types (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--nagvis-perfdata> =item B<--nagvis-perfdata>
@ -1539,10 +1645,6 @@ Syntax: --map-speed-dsl=interface-src-name,interface-dsl-name
E.g: --map-speed-dsl=Et0.835,Et0-vdsl2 E.g: --map-speed-dsl=Et0.835,Et0-vdsl2
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--force-counters64> =item B<--force-counters64>
Force to use 64 bits counters only. Can be used to improve performance. Force to use 64 bits counters only. Can be used to improve performance.

View File

@ -98,29 +98,25 @@ Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{d
Set critical threshold for status (Default: '%{admstatus} eq "up" and %{opstatus} ne "up"'). Set critical threshold for status (Default: '%{admstatus} eq "up" and %{opstatus} ne "up"').
Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{display} Can used special variables like: %{admstatus}, %{opstatus}, %{duplexstatus}, %{display}
=item B<--warning-*> =item B<--warning-*> B<--critical-*>
Threshold warning. Thresholds.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down', Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard', 'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%), 'in-ucast', 'in-bcast', 'in-mcast', 'out-ucast', 'out-bcast', 'out-mcast',
'speed' (b/s).
=item B<--critical-*>
Threshold critical.
Can be: 'total-port', 'total-admin-up', 'total-admin-down', 'total-oper-up', 'total-oper-down',
'in-traffic', 'out-traffic', 'in-error', 'in-discard', 'out-error', 'out-discard',
'in-ucast' (%), 'in-bcast' (%), 'in-mcast' (%), 'out-ucast' (%), 'out-bcast' (%), 'out-mcast' (%),
'speed' (b/s). 'speed' (b/s).
=item B<--units-traffic> =item B<--units-traffic>
Units of thresholds for the traffic (Default: '%') ('%', 'b/s'). Units of thresholds for the traffic (Default: 'percent_delta') ('percent_delta', 'bps', 'counter').
=item B<--units-errors> =item B<--units-errors>
Units of thresholds for errors/discards (Default: '%') ('%', 'absolute'). Units of thresholds for errors/discards (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--units-cast>
Units of thresholds for communication types (Default: 'percent_delta') ('percent_delta', 'percent', 'delta', 'counter').
=item B<--nagvis-perfdata> =item B<--nagvis-perfdata>
@ -146,10 +142,6 @@ Set interface speed for incoming traffic (in Mb).
Set interface speed for outgoing traffic (in Mb). Set interface speed for outgoing traffic (in Mb).
=item B<--no-skipped-counters>
Don't skip counters when no change.
=item B<--force-counters32> =item B<--force-counters32>
Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy. Force to use 32 bits counters (even in snmp v2c and v3). Should be used when 64 bits counters are buggy.