use bigint for qos usage
This commit is contained in:
parent
c30c282364
commit
4e88d5eaac
|
@ -25,6 +25,7 @@ use base qw(centreon::plugins::templates::counter);
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Digest::MD5 qw(md5_hex);
|
use Digest::MD5 qw(md5_hex);
|
||||||
|
use bigint;
|
||||||
|
|
||||||
sub set_counters {
|
sub set_counters {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
@ -32,7 +33,7 @@ sub set_counters {
|
||||||
$self->{maps_counters_type} = [
|
$self->{maps_counters_type} = [
|
||||||
{ name => 'total', type => 0 },
|
{ name => 'total', type => 0 },
|
||||||
{ name => 'interface_classmap', type => 1, cb_prefix_output => 'prefix_intcmap_output', message_multiple => 'All interface classmaps are ok' },
|
{ name => 'interface_classmap', type => 1, cb_prefix_output => 'prefix_intcmap_output', message_multiple => 'All interface classmaps are ok' },
|
||||||
{ name => 'classmap', type => 1, cb_prefix_output => 'prefix_cmap_output', message_multiple => 'All classmaps are ok' },
|
{ name => 'classmap', type => 1, cb_prefix_output => 'prefix_cmap_output', message_multiple => 'All classmaps are ok' }
|
||||||
];
|
];
|
||||||
|
|
||||||
$self->{maps_counters}->{interface_classmap} = [
|
$self->{maps_counters}->{interface_classmap} = [
|
||||||
|
@ -42,7 +43,7 @@ sub set_counters {
|
||||||
closure_custom_calc => $self->can('custom_traffic_calc'),
|
closure_custom_calc => $self->can('custom_traffic_calc'),
|
||||||
closure_custom_output => $self->can('custom_traffic_output'),
|
closure_custom_output => $self->can('custom_traffic_output'),
|
||||||
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 => 'int-cmap-drop', set => {
|
{ label => 'int-cmap-drop', set => {
|
||||||
|
@ -51,10 +52,10 @@ sub set_counters {
|
||||||
output_template => 'Drop : %s %s/s',
|
output_template => 'Drop : %s %s/s',
|
||||||
perfdatas => [
|
perfdatas => [
|
||||||
{ label => 'icmap_drop', value => 'drop_usage_per_second', template => '%d',
|
{ label => 'icmap_drop', value => 'drop_usage_per_second', template => '%d',
|
||||||
unit => 'b/s', min => 0, label_extra_instance => 1, instance_use => 'display_absolute' },
|
unit => 'b/s', min => 0, label_extra_instance => 1, instance_use => 'display_absolute' }
|
||||||
],
|
]
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
];
|
];
|
||||||
$self->{maps_counters}->{classmap} = [
|
$self->{maps_counters}->{classmap} = [
|
||||||
{ label => 'cmap-traffic', set => {
|
{ label => 'cmap-traffic', set => {
|
||||||
|
@ -63,8 +64,8 @@ sub set_counters {
|
||||||
output_template => 'Traffic : %s %s/s',
|
output_template => 'Traffic : %s %s/s',
|
||||||
perfdatas => [
|
perfdatas => [
|
||||||
{ label => 'cmap_traffic', value => 'traffic_usage_per_second', template => '%d',
|
{ label => 'cmap_traffic', value => 'traffic_usage_per_second', template => '%d',
|
||||||
unit => 'b/s', min => 0, label_extra_instance => 1, instance_use => 'display_absolute' },
|
unit => 'b/s', min => 0, label_extra_instance => 1, instance_use => 'display_absolute' }
|
||||||
],
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ label => 'cmap-drop', set => {
|
{ label => 'cmap-drop', set => {
|
||||||
|
@ -73,11 +74,12 @@ sub set_counters {
|
||||||
output_template => 'Drop : %s %s/s',
|
output_template => 'Drop : %s %s/s',
|
||||||
perfdatas => [
|
perfdatas => [
|
||||||
{ label => 'cmap_drop', value => 'drop_usage_per_second', template => '%d',
|
{ label => 'cmap_drop', value => 'drop_usage_per_second', template => '%d',
|
||||||
unit => 'b/s', min => 0, label_extra_instance => 1, instance_use => 'display_absolute' },
|
unit => 'b/s', min => 0, label_extra_instance => 1, instance_use => 'display_absolute' }
|
||||||
],
|
]
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
$self->{maps_counters}->{total} = [
|
$self->{maps_counters}->{total} = [
|
||||||
{ label => 'total-traffic', set => {
|
{ label => 'total-traffic', set => {
|
||||||
key_values => [ { name => 'traffic_usage', diff => 1 } ],
|
key_values => [ { name => 'traffic_usage', diff => 1 } ],
|
||||||
|
@ -85,8 +87,8 @@ sub set_counters {
|
||||||
output_template => 'Total Traffic : %s %s/s',
|
output_template => 'Total Traffic : %s %s/s',
|
||||||
perfdatas => [
|
perfdatas => [
|
||||||
{ label => 'total_traffic', value => 'traffic_usage_per_second', template => '%d',
|
{ label => 'total_traffic', value => 'traffic_usage_per_second', template => '%d',
|
||||||
unit => 'b/s', min => 0 },
|
unit => 'b/s', min => 0 }
|
||||||
],
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ label => 'total-drop', set => {
|
{ label => 'total-drop', set => {
|
||||||
|
@ -95,16 +97,16 @@ sub set_counters {
|
||||||
output_template => 'Total Drop : %s %s/s',
|
output_template => 'Total Drop : %s %s/s',
|
||||||
perfdatas => [
|
perfdatas => [
|
||||||
{ label => 'total_drop', value => 'drop_usage_per_second', template => '%d',
|
{ label => 'total_drop', value => 'drop_usage_per_second', template => '%d',
|
||||||
unit => 'b/s', min => 0 },
|
unit => 'b/s', min => 0 }
|
||||||
],
|
]
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
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 '%' &&
|
if ($self->{instance_mode}->{option_results}->{units_traffic} eq '%' &&
|
||||||
(defined($self->{result_values}->{total}) && $self->{result_values}->{total} =~ /[0-9]/)) {
|
(defined($self->{result_values}->{total}) && $self->{result_values}->{total} =~ /[0-9]/)) {
|
||||||
|
@ -114,7 +116,7 @@ sub custom_traffic_perfdata {
|
||||||
$warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel});
|
$warning = $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel});
|
||||||
$critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel});
|
$critical = $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel});
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->{output}->perfdata_add(
|
$self->{output}->perfdata_add(
|
||||||
label => 'icmap_traffic', unit => 'b/s',
|
label => 'icmap_traffic', unit => 'b/s',
|
||||||
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,
|
||||||
|
@ -127,7 +129,7 @@ sub custom_traffic_perfdata {
|
||||||
|
|
||||||
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 '%' &&
|
if ($self->{instance_mode}->{option_results}->{units_traffic} eq '%' &&
|
||||||
(defined($self->{result_values}->{total}) && $self->{result_values}->{total} =~ /[0-9]/)) {
|
(defined($self->{result_values}->{total}) && $self->{result_values}->{total} =~ /[0-9]/)) {
|
||||||
|
@ -142,10 +144,11 @@ sub custom_traffic_output {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
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)",
|
return sprintf(
|
||||||
$traffic_value . $traffic_unit,
|
'Traffic : %s/s (%s)',
|
||||||
defined($self->{result_values}->{traffic_prct}) ? sprintf("%.2f%%", $self->{result_values}->{traffic_prct}) : '-');
|
$traffic_value . $traffic_unit,
|
||||||
return $msg;
|
defined($self->{result_values}->{traffic_prct}) ? sprintf("%.2f%%", $self->{result_values}->{traffic_prct}) : '-'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub custom_traffic_calc {
|
sub custom_traffic_calc {
|
||||||
|
@ -154,7 +157,7 @@ sub custom_traffic_calc {
|
||||||
$self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'};
|
$self->{result_values}->{display} = $options{new_datas}->{$self->{instance} . '_display'};
|
||||||
$self->{result_values}->{total} = $options{new_datas}->{$self->{instance} . '_total'};
|
$self->{result_values}->{total} = $options{new_datas}->{$self->{instance} . '_total'};
|
||||||
$self->{result_values}->{traffic_usage} = $options{new_datas}->{$self->{instance} . '_traffic_usage'};
|
$self->{result_values}->{traffic_usage} = $options{new_datas}->{$self->{instance} . '_traffic_usage'};
|
||||||
|
|
||||||
my $diff_traffic = ($options{new_datas}->{$self->{instance} . '_traffic_usage'} - $options{old_datas}->{$self->{instance} . '_traffic_usage'});
|
my $diff_traffic = ($options{new_datas}->{$self->{instance} . '_traffic_usage'} - $options{old_datas}->{$self->{instance} . '_traffic_usage'});
|
||||||
$self->{result_values}->{traffic_per_seconds} = $diff_traffic / $options{delta_time};
|
$self->{result_values}->{traffic_per_seconds} = $diff_traffic / $options{delta_time};
|
||||||
if ($options{new_datas}->{$self->{instance} . '_total'} =~ /[1-9]/) {
|
if ($options{new_datas}->{$self->{instance} . '_total'} =~ /[1-9]/) {
|
||||||
|
@ -182,10 +185,10 @@ sub new {
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
|
|
||||||
$options{options}->add_options(arguments => {
|
$options{options}->add_options(arguments => {
|
||||||
"filter-source:s" => { name => 'filter_source' },
|
'filter-source:s' => { name => 'filter_source' },
|
||||||
"oid-filter:s" => { name => 'oid_filter', default => 'ifname' },
|
'oid-filter:s' => { name => 'oid_filter', default => 'ifname' },
|
||||||
"oid-display:s" => { name => 'oid_display', default => 'ifname' },
|
'oid-display:s' => { name => 'oid_display', default => 'ifname' },
|
||||||
"units-traffic:s" => { name => 'units_traffic', default => '%' },
|
'units-traffic:s' => { name => 'units_traffic', default => '%' }
|
||||||
});
|
});
|
||||||
|
|
||||||
return $self;
|
return $self;
|
||||||
|
@ -205,7 +208,7 @@ sub check_options {
|
||||||
|
|
||||||
sub check_oids_label {
|
sub check_oids_label {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
foreach (('oid_filter', 'oid_display')) {
|
foreach (('oid_filter', 'oid_display')) {
|
||||||
$self->{option_results}->{$_} = lc($self->{option_results}->{$_}) if (defined($self->{option_results}->{$_}));
|
$self->{option_results}->{$_} = lc($self->{option_results}->{$_}) if (defined($self->{option_results}->{$_}));
|
||||||
if (!defined($self->{oids_label}->{$self->{option_results}->{$_}})) {
|
if (!defined($self->{oids_label}->{$self->{option_results}->{$_}})) {
|
||||||
|
@ -218,23 +221,20 @@ sub check_oids_label {
|
||||||
}
|
}
|
||||||
|
|
||||||
my $mapping = {
|
my $mapping = {
|
||||||
cbQosCMPrePolicyByteOverflow => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.4' },
|
|
||||||
cbQosCMPrePolicyByte => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.5' },
|
|
||||||
cbQosCMPrePolicyByte64 => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.6' },
|
|
||||||
cbQosCMPostPolicyByteOverflow => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.8' },
|
cbQosCMPostPolicyByteOverflow => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.8' },
|
||||||
cbQosCMPostPolicyByte => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.9' },
|
cbQosCMPostPolicyByte => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.9' },
|
||||||
cbQosCMPostPolicyByte64 => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.10' },
|
cbQosCMPostPolicyByte64 => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.10' },
|
||||||
cbQosCMDropByteOverflow => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.15' },
|
cbQosCMDropByteOverflow => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.15' },
|
||||||
cbQosCMDropByte => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.16' },
|
cbQosCMDropByte => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.16' },
|
||||||
cbQosCMDropByte64 => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.17' },
|
cbQosCMDropByte64 => { oid => '.1.3.6.1.4.1.9.9.166.1.15.1.1.17' }
|
||||||
};
|
};
|
||||||
my $mapping2 = {
|
my $mapping2 = {
|
||||||
cbQosTSCfgRate => { oid => '.1.3.6.1.4.1.9.9.166.1.13.1.1.1' }, # bps
|
cbQosTSCfgRate => { oid => '.1.3.6.1.4.1.9.9.166.1.13.1.1.1' }, # bps
|
||||||
cbQosTSCfgRate64 => { oid => '.1.3.6.1.4.1.9.9.166.1.13.1.1.11' }, # bps
|
cbQosTSCfgRate64 => { oid => '.1.3.6.1.4.1.9.9.166.1.13.1.1.11' } # bps
|
||||||
};
|
};
|
||||||
my $mapping3 = {
|
my $mapping3 = {
|
||||||
cbQosQueueingCfgBandwidth => { oid => '.1.3.6.1.4.1.9.9.166.1.9.1.1.1' },
|
cbQosQueueingCfgBandwidth => { oid => '.1.3.6.1.4.1.9.9.166.1.9.1.1.1' },
|
||||||
cbQosQueueingCfgBandwidthUnits => { oid => '.1.3.6.1.4.1.9.9.166.1.9.1.1.2' },
|
cbQosQueueingCfgBandwidthUnits => { oid => '.1.3.6.1.4.1.9.9.166.1.9.1.1.2' }
|
||||||
};
|
};
|
||||||
|
|
||||||
my $oid_cbQosIfIndex = '.1.3.6.1.4.1.9.9.166.1.1.1.1.4';
|
my $oid_cbQosIfIndex = '.1.3.6.1.4.1.9.9.166.1.1.1.1.4';
|
||||||
|
@ -252,17 +252,17 @@ my $oid_cbQosQueueingCfgEntry = '.1.3.6.1.4.1.9.9.166.1.9.1.1';
|
||||||
|
|
||||||
sub build_qos_information {
|
sub build_qos_information {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
my $qos_data = { complete_name => $options{class_name} };
|
my $qos_data = { complete_name => $options{class_name} };
|
||||||
# Need to try and find the queueing (it's a child)
|
# Need to try and find the queueing (it's a child)
|
||||||
$qos_data->{queueing} = $options{link_queueing}->{$options{policy_index} . '.' . $options{object_index}}
|
$qos_data->{queueing} = $options{link_queueing}->{$options{policy_index} . '.' . $options{object_index}}
|
||||||
if (defined($options{link_queueing}->{$options{policy_index} . '.' . $options{object_index}}));
|
if (defined($options{link_queueing}->{$options{policy_index} . '.' . $options{object_index}}));
|
||||||
$qos_data->{shaping} = $options{link_shaping}->{$options{policy_index} . '.' . $options{object_index}}
|
$qos_data->{shaping} = $options{link_shaping}->{$options{policy_index} . '.' . $options{object_index}}
|
||||||
if (!defined($qos_data->{shaping}) && defined($options{link_shaping}->{$options{policy_index} . '.' . $options{object_index}}));
|
if (!defined($qos_data->{shaping}) && defined($options{link_shaping}->{$options{policy_index} . '.' . $options{object_index}}));
|
||||||
|
|
||||||
while (($options{object_index} = $self->{results}->{$oid_cbQosParentObjectsIndex}->{$oid_cbQosParentObjectsIndex . '.' . $options{policy_index} . '.' . $options{object_index}}) != 0) {
|
while (($options{object_index} = $self->{results}->{$oid_cbQosParentObjectsIndex}->{$oid_cbQosParentObjectsIndex . '.' . $options{policy_index} . '.' . $options{object_index}}) != 0) {
|
||||||
my $config_index = $self->{results}->{$oid_cbQosConfigIndex}->{$oid_cbQosConfigIndex . '.' . $options{policy_index} . '.' . $options{object_index}};
|
my $config_index = $self->{results}->{$oid_cbQosConfigIndex}->{$oid_cbQosConfigIndex . '.' . $options{policy_index} . '.' . $options{object_index}};
|
||||||
|
|
||||||
my $tmp_name = '';
|
my $tmp_name = '';
|
||||||
# try to find policy_map or class_map
|
# try to find policy_map or class_map
|
||||||
if (defined($self->{results}->{$oid_cbQosCMName}->{$oid_cbQosCMName . '.' . $config_index})) {
|
if (defined($self->{results}->{$oid_cbQosCMName}->{$oid_cbQosCMName . '.' . $config_index})) {
|
||||||
|
@ -270,23 +270,23 @@ sub build_qos_information {
|
||||||
} elsif (defined($self->{results}->{$oid_cbQosPolicyMapName}->{$oid_cbQosPolicyMapName . '.' . $config_index})) {
|
} elsif (defined($self->{results}->{$oid_cbQosPolicyMapName}->{$oid_cbQosPolicyMapName . '.' . $config_index})) {
|
||||||
$tmp_name = $self->{results}->{$oid_cbQosPolicyMapName}->{$oid_cbQosPolicyMapName . '.' . $config_index};
|
$tmp_name = $self->{results}->{$oid_cbQosPolicyMapName}->{$oid_cbQosPolicyMapName . '.' . $config_index};
|
||||||
}
|
}
|
||||||
|
|
||||||
$qos_data->{shaping} = $options{link_shaping}->{$options{policy_index} . '.' . $options{object_index}}
|
$qos_data->{shaping} = $options{link_shaping}->{$options{policy_index} . '.' . $options{object_index}}
|
||||||
if (!defined($qos_data->{shaping}) && defined($options{link_shaping}->{$options{policy_index} . '.' . $options{object_index}}));
|
if (!defined($qos_data->{shaping}) && defined($options{link_shaping}->{$options{policy_index} . '.' . $options{object_index}}));
|
||||||
|
|
||||||
$qos_data->{complete_name} = $tmp_name . ':' . $qos_data->{complete_name};
|
$qos_data->{complete_name} = $tmp_name . ':' . $qos_data->{complete_name};
|
||||||
}
|
}
|
||||||
|
|
||||||
return $qos_data;
|
return $qos_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub manage_selection {
|
sub manage_selection {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
$self->{interface_classmap} = {};
|
$self->{interface_classmap} = {};
|
||||||
$self->{classmap} = {};
|
$self->{classmap} = {};
|
||||||
$self->{total} = { drop_usage => 0, total_usage => 0 };
|
$self->{total} = { drop_usage => 0, total_usage => 0 };
|
||||||
|
|
||||||
my $request_oids = [
|
my $request_oids = [
|
||||||
{ oid => $self->{oids_label}->{$self->{option_results}->{oid_filter}} },
|
{ oid => $self->{oids_label}->{$self->{option_results}->{oid_filter}} },
|
||||||
{ oid => $oid_cbQosPolicyMapName },
|
{ oid => $oid_cbQosPolicyMapName },
|
||||||
|
@ -294,9 +294,9 @@ sub manage_selection {
|
||||||
{ oid => $oid_cbQosConfigIndex },
|
{ oid => $oid_cbQosConfigIndex },
|
||||||
{ oid => $oid_cbQosCMName },
|
{ oid => $oid_cbQosCMName },
|
||||||
{ oid => $oid_cbQosQueueingCfgEntry, end => $mapping3->{cbQosQueueingCfgBandwidthUnits}->{oid} },
|
{ oid => $oid_cbQosQueueingCfgEntry, end => $mapping3->{cbQosQueueingCfgBandwidthUnits}->{oid} },
|
||||||
{ oid => $oid_cbQosCMStatsEntry, start => $mapping->{cbQosCMPrePolicyByteOverflow}->{oid}, end => $mapping->{cbQosCMDropByte64}->{oid} },
|
{ oid => $oid_cbQosCMStatsEntry, start => $mapping->{cbQosCMPostPolicyByteOverflow}->{oid}, end => $mapping->{cbQosCMDropByte64}->{oid} },
|
||||||
{ oid => $oid_cbQosParentObjectsIndex },
|
{ oid => $oid_cbQosParentObjectsIndex },
|
||||||
{ oid => $oid_cbQosTSCfgEntry, end => $mapping2->{cbQosTSCfgRate64}->{oid} },
|
{ oid => $oid_cbQosTSCfgEntry, end => $mapping2->{cbQosTSCfgRate64}->{oid} }
|
||||||
];
|
];
|
||||||
push @$request_oids, { oid => $self->{oids_label}->{$self->{option_results}->{oid_display}} }
|
push @$request_oids, { oid => $self->{oids_label}->{$self->{option_results}->{oid_display}} }
|
||||||
if ($self->{option_results}->{oid_filter} ne $self->{option_results}->{oid_display});
|
if ($self->{option_results}->{oid_filter} ne $self->{option_results}->{oid_display});
|
||||||
|
@ -321,8 +321,8 @@ sub manage_selection {
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (keys %{$self->{results}->{$oid_cbQosCMStatsEntry}}) {
|
foreach (keys %{$self->{results}->{$oid_cbQosCMStatsEntry}}) {
|
||||||
next if (!/$mapping->{cbQosCMPrePolicyByte}->{oid}\.(\d+)\.(\d+)/);
|
next if (!/$mapping->{cbQosCMPostPolicyByteOverflow}->{oid}\.(\d+)\.(\d+)/);
|
||||||
|
|
||||||
my ($policy_index, $qos_object_index) = ($1, $2);
|
my ($policy_index, $qos_object_index) = ($1, $2);
|
||||||
|
|
||||||
my $class_name = $classmap_name{$policy_index . '.' . $qos_object_index};
|
my $class_name = $classmap_name{$policy_index . '.' . $qos_object_index};
|
||||||
|
@ -338,24 +338,29 @@ sub manage_selection {
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $qos_data = $self->build_qos_information(class_name => $class_name, policy_index => $policy_index, object_index => $qos_object_index,
|
my $qos_data = $self->build_qos_information(
|
||||||
link_queueing => $link_queueing, link_shaping => $link_shaping);
|
class_name => $class_name,
|
||||||
|
policy_index => $policy_index,
|
||||||
|
object_index => $qos_object_index,
|
||||||
|
link_queueing => $link_queueing,
|
||||||
|
link_shaping => $link_shaping
|
||||||
|
);
|
||||||
|
|
||||||
my $interface_filter = $self->{results}->{$self->{oids_label}->{$self->{option_results}->{oid_filter}}}->{$self->{oids_label}->{$self->{option_results}->{oid_filter}} . '.' . $if_index};
|
my $interface_filter = $self->{results}->{$self->{oids_label}->{$self->{option_results}->{oid_filter}}}->{$self->{oids_label}->{$self->{option_results}->{oid_filter}} . '.' . $if_index};
|
||||||
my $name = $interface_filter . ':' . $qos_data->{complete_name};
|
my $name = $interface_filter . ':' . $qos_data->{complete_name};
|
||||||
|
|
||||||
if (defined($self->{option_results}->{filter_source}) && $self->{option_results}->{filter_source} ne '' &&
|
if (defined($self->{option_results}->{filter_source}) && $self->{option_results}->{filter_source} ne '' &&
|
||||||
$name !~ /$self->{option_results}->{filter_source}/) {
|
$name !~ /$self->{option_results}->{filter_source}/) {
|
||||||
$self->{output}->output_add(long_msg => "skipping '" . $name . "': no matching filter source.", debug => 1);
|
$self->{output}->output_add(long_msg => "skipping '" . $name . "': no matching filter source.", debug => 1);
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Same hash key but only for disco context
|
# Same hash key but only for disco context
|
||||||
if (defined($options{disco})) {
|
if (defined($options{disco})) {
|
||||||
$self->{interface_classmap}->{$policy_index . '.' . $qos_object_index} = $name;
|
$self->{interface_classmap}->{$policy_index . '.' . $qos_object_index} = $name;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$oid_cbQosCMStatsEntry}, instance => $policy_index . '.' . $qos_object_index);
|
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $self->{results}->{$oid_cbQosCMStatsEntry}, instance => $policy_index . '.' . $qos_object_index);
|
||||||
my $traffic_usage = (defined($result->{cbQosCMPostPolicyByte64}) && $result->{cbQosCMPostPolicyByte64} =~ /[1-9]/) ?
|
my $traffic_usage = (defined($result->{cbQosCMPostPolicyByte64}) && $result->{cbQosCMPostPolicyByte64} =~ /[1-9]/) ?
|
||||||
$result->{cbQosCMPostPolicyByte64} : (($result->{cbQosCMPostPolicyByteOverflow} << 32) + $result->{cbQosCMPostPolicyByte});
|
$result->{cbQosCMPostPolicyByte64} : (($result->{cbQosCMPostPolicyByteOverflow} << 32) + $result->{cbQosCMPostPolicyByte});
|
||||||
|
@ -366,40 +371,42 @@ sub manage_selection {
|
||||||
my $result_shaping = $options{snmp}->map_instance(mapping => $mapping2, results => $self->{results}->{$oid_cbQosTSCfgEntry}, instance => $qos_data->{shaping});
|
my $result_shaping = $options{snmp}->map_instance(mapping => $mapping2, results => $self->{results}->{$oid_cbQosTSCfgEntry}, instance => $qos_data->{shaping});
|
||||||
$total = defined($result_shaping->{cbQosTSCfgRate64}) ? $result_shaping->{cbQosTSCfgRate64} : $result_shaping->{cbQosTSCfgRate};
|
$total = defined($result_shaping->{cbQosTSCfgRate64}) ? $result_shaping->{cbQosTSCfgRate64} : $result_shaping->{cbQosTSCfgRate};
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->{interface_classmap}->{$policy_index . '.' . $qos_object_index} = {
|
$self->{interface_classmap}->{$policy_index . '.' . $qos_object_index} = {
|
||||||
display => $name,
|
display => $name,
|
||||||
traffic_usage => $traffic_usage * 8, drop_usage => $drop_usage * 8, total => $total
|
traffic_usage => $traffic_usage * 8,
|
||||||
|
drop_usage => $drop_usage * 8,
|
||||||
|
total => $total
|
||||||
};
|
};
|
||||||
|
|
||||||
my @tabname = split /:/, $name;
|
my @tabname = split /:/, $name;
|
||||||
if (defined($tabname[3])){
|
if (defined($tabname[3])){
|
||||||
$class_name = $tabname[3].'-'.$class_name;
|
$class_name = $tabname[3] . '-' . $class_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->{classmap}->{$name} = { display => $class_name, drop_usage => 0, traffic_usage => 0} if (!defined($self->{classmap}->{$name}));
|
$self->{classmap}->{$name} = { display => $class_name, drop_usage => 0, traffic_usage => 0} if (!defined($self->{classmap}->{$name}));
|
||||||
$self->{classmap}->{$name}->{traffic_usage} += $traffic_usage * 8;
|
$self->{classmap}->{$name}->{traffic_usage} += $traffic_usage * 8;
|
||||||
$self->{classmap}->{$name}->{drop_usage} += $drop_usage * 8;
|
$self->{classmap}->{$name}->{drop_usage} += $drop_usage * 8;
|
||||||
|
|
||||||
if (!defined($tabname[3])){
|
if (!defined($tabname[3])){
|
||||||
$self->{total}->{traffic_usage} += $traffic_usage * 8;
|
$self->{total}->{traffic_usage} += $traffic_usage * 8;
|
||||||
$self->{total}->{drop_usage} += $drop_usage * 8;
|
$self->{total}->{drop_usage} += $drop_usage * 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->{cache_name} = "cisco_qos_" . $options{snmp}->get_hostname() . '_' . $options{snmp}->get_port() . '_' . $self->{mode} . '_' .
|
$self->{cache_name} = 'cisco_qos_' . $options{snmp}->get_hostname() . '_' . $options{snmp}->get_port() . '_' . $self->{mode} . '_' .
|
||||||
(defined($self->{option_results}->{filter_source}) ? md5_hex($self->{option_results}->{filter_source}) : md5_hex('all')) . '_' .
|
(defined($self->{option_results}->{filter_source}) ? md5_hex($self->{option_results}->{filter_source}) : md5_hex('all')) . '_' .
|
||||||
(defined($self->{option_results}->{filter_counters}) ? md5_hex($self->{option_results}->{filter_counters}) : md5_hex('all'));
|
(defined($self->{option_results}->{filter_counters}) ? md5_hex($self->{option_results}->{filter_counters}) : md5_hex('all'));
|
||||||
|
|
||||||
if (scalar(keys %{$self->{interface_classmap}}) <= 0 && !defined($options{disco})) {
|
if (scalar(keys %{$self->{interface_classmap}}) <= 0 && !defined($options{disco})) {
|
||||||
$self->{output}->add_option_msg(short_msg => "Cannot found classmap.");
|
$self->{output}->add_option_msg(short_msg => 'Cannot found classmap.');
|
||||||
$self->{output}->option_exit();
|
$self->{output}->option_exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub disco_format {
|
sub disco_format {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
|
||||||
$self->{output}->add_disco_format(elements => ['name']);
|
$self->{output}->add_disco_format(elements => ['name']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue