wip adsl/vdsl speed for interfaces

This commit is contained in:
garnier-quentin 2020-07-22 16:05:24 +02:00
parent 57ecbb9c33
commit 6dcad1281c

View File

@ -61,6 +61,7 @@ sub custom_threshold_output {
sub custom_status_output { sub custom_status_output {
my ($self, %options) = @_; my ($self, %options) = @_;
my $msg = 'Status : ' . $self->{result_values}->{opstatus} . ' (admin: ' . $self->{result_values}->{admstatus} . ')'; my $msg = 'Status : ' . $self->{result_values}->{opstatus} . ' (admin: ' . $self->{result_values}->{admstatus} . ')';
if (defined($self->{instance_mode}->{option_results}->{add_duplex_status})) { if (defined($self->{instance_mode}->{option_results}->{add_duplex_status})) {
$msg .= ' (duplex: ' . $self->{result_values}->{duplexstatus} . ')'; $msg .= ' (duplex: ' . $self->{result_values}->{duplexstatus} . ')';
@ -495,7 +496,7 @@ sub set_counters_cast {
unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' } unit => '%', min => 0, max => 100, label_extra_instance => 1, instance_use => 'display' }
] ]
} }
}, }
; ;
} }
@ -620,8 +621,8 @@ sub set_oids_label {
$self->{oids_label} = { $self->{oids_label} = {
'ifdesc' => { oid => '.1.3.6.1.2.1.2.2.1.2', cache => 'reload_cache_index_value' }, 'ifdesc' => { oid => '.1.3.6.1.2.1.2.2.1.2', cache => 'reload_cache_index_value' },
'ifalias' => { oid => '.1.3.6.1.2.1.31.1.1.1.18', cache => 'reload_cache_index_value' }, 'ifalias' => { oid => '.1.3.6.1.2.1.31.1.1.1.18', cache => 'reload_cache_index_value' },
'ifname' => { oid => '.1.3.6.1.2.1.31.1.1.1.1', cache => 'reload_cache_index_value', }, 'ifname' => { oid => '.1.3.6.1.2.1.31.1.1.1.1', cache => 'reload_cache_index_value' },
'ipaddr' => { oid => '.1.3.6.1.2.1.4.20.1.2', cache => 'reload_cache_values_index', }, 'ipaddr' => { oid => '.1.3.6.1.2.1.4.20.1.2', cache => 'reload_cache_values_index' }
}; };
} }
@ -660,6 +661,11 @@ sub set_oids_traffic {
$self->{oid_speed64} = '.1.3.6.1.2.1.31.1.1.1.15'; # need multiple by '1000000' $self->{oid_speed64} = '.1.3.6.1.2.1.31.1.1.1.15'; # need multiple by '1000000'
$self->{oid_in64} = '.1.3.6.1.2.1.31.1.1.1.6'; # in B $self->{oid_in64} = '.1.3.6.1.2.1.31.1.1.1.6'; # in B
$self->{oid_out64} = '.1.3.6.1.2.1.31.1.1.1.10'; # in B $self->{oid_out64} = '.1.3.6.1.2.1.31.1.1.1.10'; # in B
$self->{oid_iftype} = '.1.3.6.1.2.1.2.2.1.3';
$self->{oid_adslAtucCurrAttainableRate} = '.1.3.6.1.2.1.10.94.1.1.2.1.8';
$self->{oid_adslAturCurrAttainableRate} = '.1.3.6.1.2.1.10.94.1.1.3.1.8';
$self->{oid_xdsl2LineStatusAttainableRateDs} = '.1.3.6.1.2.1.10.251.1.1.1.1.20';
$self->{oid_xdsl2LineStatusAttainableRateUs} = '.1.3.6.1.2.1.10.251.1.1.1.1.21';
} }
sub set_oids_cast { sub set_oids_cast {
@ -775,29 +781,30 @@ sub new {
$options{no_interfaceid_options} : 0; $options{no_interfaceid_options} : 0;
$options{options}->add_options(arguments => { $options{options}->add_options(arguments => {
'add-global' => { name => 'add_global' }, 'add-global' => { name => 'add_global' },
'add-status' => { name => 'add_status' }, 'add-status' => { name => 'add_status' },
'add-duplex-status' => { name => 'add_duplex_status' }, 'add-duplex-status' => { name => 'add_duplex_status' },
'warning-status:s' => { name => 'warning_status', default => $self->default_warning_status() }, 'warning-status:s' => { name => 'warning_status', default => $self->default_warning_status() },
'critical-status:s' => { name => 'critical_status', default => $self->default_critical_status() }, 'critical-status:s' => { name => 'critical_status', default => $self->default_critical_status() },
'global-admin-up-rule:s' => { name => 'global_admin_up_rule', default => $self->default_global_admin_up_rule() }, 'global-admin-up-rule:s' => { name => 'global_admin_up_rule', default => $self->default_global_admin_up_rule() },
'global-oper-up-rule:s' => { name => 'global_oper_up_rule', default => $self->default_global_oper_up_rule() }, 'global-oper-up-rule:s' => { name => 'global_oper_up_rule', default => $self->default_global_oper_up_rule() },
'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 => '%' },
'units-errors:s' => { name => 'units_errors', default => '%' }, 'units-errors:s' => { name => 'units_errors', default => '%' },
'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' },
'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' },
'reload-cache-time:s' => { name => 'reload_cache_time', default => 180 }, 'reload-cache-time:s' => { name => 'reload_cache_time', default => 180 },
'nagvis-perfdata' => { name => 'nagvis_perfdata' }, 'nagvis-perfdata' => { name => 'nagvis_perfdata' },
'force-counters32' => { name => 'force_counters32' }, 'force-counters32' => { name => 'force_counters32' },
'force-counters64' => { name => 'force_counters64' } 'force-counters64' => { name => 'force_counters64' },
'map-speed-dsl:s@' => { name => 'map_speed_dsl' }
}); });
if ($self->{no_traffic} == 0) { if ($self->{no_traffic} == 0) {
$options{options}->add_options(arguments => { 'add-traffic' => { name => 'add_traffic' } }); $options{options}->add_options(arguments => { 'add-traffic' => { name => 'add_traffic' } });
@ -882,8 +889,8 @@ sub check_options {
sub get_display_value { sub get_display_value {
my ($self, %options) = @_; my ($self, %options) = @_;
my $value = $self->{statefile_cache}->get(name => $self->{option_results}->{oid_display} . "_" . $options{id});
my $value = $self->{statefile_cache}->get(name => $self->{option_results}->{oid_display} . "_" . $options{id});
if (defined($self->{option_results}->{display_transform_src})) { if (defined($self->{option_results}->{display_transform_src})) {
$self->{option_results}->{display_transform_dst} = '' if (!defined($self->{option_results}->{display_transform_dst})); $self->{option_results}->{display_transform_dst} = '' if (!defined($self->{option_results}->{display_transform_dst}));
eval "\$value =~ s{$self->{option_results}->{display_transform_src}}{$self->{option_results}->{display_transform_dst}}"; eval "\$value =~ s{$self->{option_results}->{display_transform_src}}{$self->{option_results}->{display_transform_dst}}";
@ -906,6 +913,7 @@ sub check_oids_options_change {
return 1; return 1;
} }
} }
return 0; return 0;
} }
@ -1018,7 +1026,7 @@ sub get_selection {
} }
} else { } else {
foreach (@{$all_ids}) { foreach (@{$all_ids}) {
my $filter_name = $self->{statefile_cache}->get(name => $self->{option_results}->{oid_filter} . "_" . $_); my $filter_name = $self->{statefile_cache}->get(name => $self->{option_results}->{oid_filter} . '_' . $_);
next if (!defined($filter_name)); next if (!defined($filter_name));
if (!defined($self->{option_results}->{interface})) { if (!defined($self->{option_results}->{interface})) {
$self->add_selected_interface(id => $_); $self->add_selected_interface(id => $_);
@ -1030,6 +1038,22 @@ sub get_selection {
} }
} }
if (defined($self->{option_results}->{map_speed_dsl})) {
$self->{map_speed_dsl} = [];
foreach (@{$self->{option_results}->{map_speed_dsl}}) {
my ($src, $dst) = split /,/;
next if (!defined($dst) || $dst eq '' || !defined($src) || $src eq '');
push @{$self->{map_speed_dsl}}, { src => $src, dst => $dst };
}
foreach (@{$all_ids}) {
my $filter_name = $self->{statefile_cache}->get(name => $self->{option_results}->{oid_filter} . '_' . $_);
for (my $i = 0; $i < scalar(@{$self->{map_speed_dsl}}); $i++) {
$self->{map_speed_dsl}->[$i]->{src_index} = $_ if ($filter_name =~ /$self->{map_speed_dsl}->[$i]->{src}/);
$self->{map_speed_dsl}->[$i]->{dst_index} = $_ if ($filter_name =~ /$self->{map_speed_dsl}->[$i]->{dst}/);
}
}
}
if (scalar(keys %{$self->{int}}) <= 0) { if (scalar(keys %{$self->{int}}) <= 0) {
$self->{output}->add_option_msg(short_msg => "No entry found (maybe you should reload cache file)"); $self->{output}->add_option_msg(short_msg => "No entry found (maybe you should reload cache file)");
$self->{output}->option_exit(); $self->{output}->option_exit();
@ -1065,6 +1089,15 @@ sub load_traffic {
$self->{snmp}->load(oids => [$self->{oid_speed64}], instances => $self->{array_interface_selected}); $self->{snmp}->load(oids => [$self->{oid_speed64}], instances => $self->{array_interface_selected});
} }
} }
return if (!defined($self->{map_speed_dsl}));
my $dst_indexes = [map { $_->{dst_index} } grep { defined($_->{dst_index}) } @{$self->{map_speed_dsl}}];
if (scalar(@$dst_indexes) <= 0) {
$self->{map_speed_dsl} = undef;
return ;
}
$self->{snmp}->load(oids => [$self->{oid_iftype}], instances => $dst_indexes);
} }
sub load_errors { sub load_errors {
@ -1150,6 +1183,7 @@ sub manage_selection {
$self->{results} = $self->{snmp}->get_leef(); $self->{results} = $self->{snmp}->get_leef();
$self->pre_result();
$self->add_result_global() if (defined($self->{option_results}->{add_global})); $self->add_result_global() if (defined($self->{option_results}->{add_global}));
foreach (@{$self->{array_interface_selected}}) { foreach (@{$self->{array_interface_selected}}) {
$self->add_result_status(instance => $_) if (defined($self->{option_results}->{add_status})); $self->add_result_status(instance => $_) if (defined($self->{option_results}->{add_status}));
@ -1198,6 +1232,45 @@ sub add_result_global {
} }
} }
sub pre_result {
my ($self, %options) = @_;
if (defined($self->{map_speed_dsl})) {
my $oids = [];
foreach (@{$self->{map_speed_dsl}}) {
next if (!defined($_->{dst_index}));
next if (!defined($self->{results}->{ $self->{oid_iftype} . '.' . $_->{dst_index} }));
# 94 = adsl, 251 => vdsl2
if ($self->{results}->{ $self->{oid_iftype} . '.' . $_->{dst_index} } == 94) {
push @$oids, $self->{oid_adslAtucCurrAttainableRate} . '.' . $_->{dst_index}, $self->{oid_adslAturCurrAttainableRate} . '.' . $_->{dst_index};
} elsif ($self->{results}->{ $self->{oid_iftype} . '.' . $_->{dst_index} } == 251) {
push @$oids, $self->{oid_xdsl2LineStatusAttainableRateDs} . '.' . $_->{dst_index}, $self->{oid_xdsl2LineStatusAttainableRateUs} . '.' . $_->{dst_index};
}
}
if (scalar(@$oids) > 0) {
my $results = $self->{snmp}->get_leef(oids => $oids);
for (my $i = 0; $i < scalar(@{$self->{map_speed_dsl}}); $i++) {
next if (!defined($self->{map_speed_dsl}->[$i]->{dst_index}));
next if (!defined($self->{results}->{ $self->{oid_iftype} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} }));
# 94 = adsl, 251 => vdsl2
if ($self->{results}->{ $self->{oid_iftype} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} } == 94) {
$self->{map_speed_dsl}->[$i]->{speed_in} = $results->{ $self->{oid_adslAturCurrAttainableRate} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} }
if (defined($results->{ $self->{oid_adslAturCurrAttainableRate} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} }));
$self->{map_speed_dsl}->[$i]->{speed_out} = $results->{ $self->{oid_adslAtucCurrAttainableRate} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} }
if (defined($results->{ $self->{oid_adslAtucCurrAttainableRate} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} }));
} elsif ($self->{results}->{ $self->{oid_iftype} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} } == 251) {
$self->{map_speed_dsl}->[$i]->{speed_in} = $results->{ $self->{oid_xdsl2LineStatusAttainableRateDs} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} }
if (defined($results->{ $self->{oid_xdsl2LineStatusAttainableRateDs} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} }));
$self->{map_speed_dsl}->[$i]->{speed_out} = $results->{ $self->{oid_xdsl2LineStatusAttainableRateUs} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} }
if (defined($results->{ $self->{oid_xdsl2LineStatusAttainableRateUs} . '.' . $self->{map_speed_dsl}->[$i]->{dst_index} }));
}
}
}
}
}
sub add_result_status { sub add_result_status {
my ($self, %options) = @_; my ($self, %options) = @_;
@ -1242,15 +1315,22 @@ sub add_result_traffic {
$self->{int}->{$options{instance}}->{speed_in} = $self->{option_results}->{speed_in} * 1000000 if (defined($self->{option_results}->{speed_in}) && $self->{option_results}->{speed_in} ne ''); $self->{int}->{$options{instance}}->{speed_in} = $self->{option_results}->{speed_in} * 1000000 if (defined($self->{option_results}->{speed_in}) && $self->{option_results}->{speed_in} ne '');
$self->{int}->{$options{instance}}->{speed_out} = $self->{option_results}->{speed_out} * 1000000 if (defined($self->{option_results}->{speed_out}) && $self->{option_results}->{speed_out} ne ''); $self->{int}->{$options{instance}}->{speed_out} = $self->{option_results}->{speed_out} * 1000000 if (defined($self->{option_results}->{speed_out}) && $self->{option_results}->{speed_out} ne '');
} else { } else {
if (defined($self->{map_speed_dsl})) {
foreach (@{$self->{map_speed_dsl}}) {
}
}
my $interface_speed = 0; my $interface_speed = 0;
if (defined($self->{results}->{$self->{oid_speed64} . "." . $options{instance}}) && $self->{results}->{$self->{oid_speed64} . "." . $options{instance}} ne '') { if (defined($self->{results}->{$self->{oid_speed64} . '.' . $options{instance}}) && $self->{results}->{$self->{oid_speed64} . "." . $options{instance}} ne '') {
$interface_speed = $self->{results}->{$self->{oid_speed64} . "." . $options{instance}} * 1000000; $interface_speed = $self->{results}->{$self->{oid_speed64} . '.' . $options{instance}} * 1000000;
# If 0, we put the 32 bits # If 0, we put the 32 bits
if ($interface_speed == 0) { if ($interface_speed == 0) {
$interface_speed = $self->{results}->{$self->{oid_speed32} . "." . $options{instance}}; $interface_speed = $self->{results}->{$self->{oid_speed32} . '.' . $options{instance}};
} }
} else { } else {
$interface_speed = $self->{results}->{$self->{oid_speed32} . "." . $options{instance}}; $interface_speed = $self->{results}->{$self->{oid_speed32} . '.' . $options{instance}};
} }
$self->{int}->{$options{instance}}->{speed_in} = $interface_speed; $self->{int}->{$options{instance}}->{speed_in} = $interface_speed;
@ -1436,6 +1516,14 @@ 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<--map-speed-dsl>
Get interface speed configuration for interface type 'adsl' and 'vdsl2'.
Syntax: --map-speed-dsl=interface-src-name,interface-dsl-name
E.g: --map-speed-dsl=Et0.835,Et0-vdsl2
=item B<--no-skipped-counters> =item B<--no-skipped-counters>
Don't skip counters when no change. Don't skip counters when no change.