enh(netapp/ontap/snmp): cluster-nodes and plexes (#3087)

This commit is contained in:
qgarnier 2021-09-09 11:18:13 +02:00 committed by GitHub
parent 40673581ee
commit 0b1bc16521
2 changed files with 41 additions and 14 deletions

View File

@ -83,7 +83,7 @@ sub node_long_output {
my ($self, %options) = @_; my ($self, %options) = @_;
return sprintf( return sprintf(
"checking node '%s' ", "checking node '%s'",
$options{instance_value}->{name} $options{instance_value}->{name}
); );
} }
@ -145,7 +145,7 @@ sub set_counters {
$self->{maps_counters}->{cpu} = [ $self->{maps_counters}->{cpu} = [
{ label => 'cpu-utilization', nlabel => 'node.cpu.utilization.percentage', set => { { label => 'cpu-utilization', nlabel => 'node.cpu.utilization.percentage', set => {
key_values => [ { name => 'cpuUptime' }, { name => 'cpuBusyTime' } ], key_values => [ { name => 'cpuUptime', diff => 1 }, { name => 'cpuBusyTime', diff => 1 } ],
closure_custom_calc => $self->can('custom_cpu_calc'), closure_custom_calc => $self->can('custom_cpu_calc'),
output_template => 'cpu utilization: %.2f%%', output_template => 'cpu utilization: %.2f%%',
output_use => 'cpu_used', threshold_use => 'cpu_used', output_use => 'cpu_used', threshold_use => 'cpu_used',

View File

@ -40,12 +40,29 @@ sub custom_temp_perfdata {
); );
} }
sub plex_long_output {
my ($self, %options) = @_;
return sprintf(
"checking plex '%s'",
$options{instance_value}->{name}
);
}
sub prefix_plex_output { sub prefix_plex_output {
my ($self, %options) = @_; my ($self, %options) = @_;
return sprintf( return sprintf(
"Plex '%s' [aggregate: %s] ", "Plex '%s' ",
$options{instance_value}->{name}, $options{instance_value}->{name}
);
}
sub prefix_aggregate_output {
my ($self, %options) = @_;
return sprintf(
"aggregate '%s' ",
$options{instance_value}->{aggregate} $options{instance_value}->{aggregate}
); );
} }
@ -61,7 +78,12 @@ sub set_counters {
$self->{maps_counters_type} = [ $self->{maps_counters_type} = [
{ name => 'global', type => 0, cb_prefix_output => 'prefix_global_output', }, { name => 'global', type => 0, cb_prefix_output => 'prefix_global_output', },
{ name => 'plexes', type => 1, cb_prefix_output => 'prefix_plex_output', message_multiple => 'All plexes are ok', skipped_code => { -10 => 1 } } { name => 'plexes', type => 3, cb_prefix_output => 'prefix_plex_output', cb_long_output => 'plex_long_output',
indent_long_output => ' ', message_multiple => 'All plexes are ok',
group => [
{ name => 'aggregates', type => 1, cb_prefix_output => 'prefix_aggregate_output', message_multiple => 'aggregates are ok', display_long => 1, skipped_code => { -10 => 1 } }
]
}
]; ];
$self->{maps_counters}->{global} = [ $self->{maps_counters}->{global} = [
@ -91,7 +113,7 @@ sub set_counters {
} }
]; ];
$self->{maps_counters}->{plexes} = [ $self->{maps_counters}->{aggregates} = [
{ {
label => 'status', label => 'status',
type => 2, type => 2,
@ -105,9 +127,11 @@ sub set_counters {
} }
}, },
{ label => 'resyncing', nlabel => 'plex.resyncing.percentage', set => { { label => 'resyncing', nlabel => 'plex.resyncing.percentage', set => {
key_values => [ { name => 'resync' }, { name => 'aggregate' }, { name => 'name' } ], key_values => [ { name => 'resync' } ],
output_template => 'resyncing: %.2f %%', output_template => 'resyncing: %.2f %%',
closure_custom_perfdata => $self->can('custom_temp_perfdata') perfdatas => [
{ template => '%s', unit => '%', min => 0, max => 100, label_extra_instance => 1 }
]
} }
} }
]; ];
@ -143,6 +167,7 @@ sub manage_selection {
$self->{global} = { offline => 0, resyncing => 0, online => 0 }; $self->{global} = { offline => 0, resyncing => 0, online => 0 };
$self->{plexes} = {}; $self->{plexes} = {};
my $instances = {};
my $snmp_result = $options{snmp}->get_table(oid => $oid_plexName, nothing_quit => 1); my $snmp_result = $options{snmp}->get_table(oid => $oid_plexName, nothing_quit => 1);
foreach my $oid (keys %$snmp_result) { foreach my $oid (keys %$snmp_result) {
$oid =~ /^$oid_plexName\.(.*)$/; $oid =~ /^$oid_plexName\.(.*)$/;
@ -155,7 +180,8 @@ sub manage_selection {
next; next;
} }
$self->{plexes}->{$instance} = { name => $name }; $instances->{$instance} = $name;
$self->{plexes}->{$name} = { name => $name, aggregates => {} };
} }
if (scalar(keys %{$self->{plexes}}) <= 0) { if (scalar(keys %{$self->{plexes}}) <= 0) {
@ -167,12 +193,12 @@ sub manage_selection {
oids => [ oids => [
map($_->{oid}, values(%$mapping)) map($_->{oid}, values(%$mapping))
], ],
instances => [keys %{$self->{plexes}}], instances => [ map($_, keys %$instances) ],
instance_regexp => '^(.*)$' instance_regexp => '^(.*)$'
); );
$snmp_result = $options{snmp}->get_leef(); $snmp_result = $options{snmp}->get_leef();
foreach (keys %{$self->{plexes}}) { foreach (keys %$instances) {
my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $_); my $result = $options{snmp}->map_instance(mapping => $mapping, results => $snmp_result, instance => $_);
if (defined($self->{option_results}->{filter_aggregate}) && $self->{option_results}->{filter_aggregate} ne '' && if (defined($self->{option_results}->{filter_aggregate}) && $self->{option_results}->{filter_aggregate} ne '' &&
$result->{aggregate} !~ /$self->{option_results}->{filter_aggregate}/) { $result->{aggregate} !~ /$self->{option_results}->{filter_aggregate}/) {
@ -180,9 +206,10 @@ sub manage_selection {
next; next;
} }
$self->{plexes}->{$_}->{status} = $result->{status}; $self->{plexes}->{ $instances->{$_} }->{aggregates}->{ $result->{aggregate} }->{name} = $instances->{$_};
$self->{plexes}->{$_}->{aggregate} = $result->{aggregate}; $self->{plexes}->{ $instances->{$_} }->{aggregates}->{ $result->{aggregate} }->{aggregate} = $result->{aggregate};
$self->{plexes}->{$_}->{resync} = $result->{resync} if ($result->{status} eq 'resyncing'); $self->{plexes}->{ $instances->{$_} }->{aggregates}->{ $result->{aggregate} }->{status} = $result->{status};
$self->{plexes}->{ $instances->{$_} }->{aggregates}->{ $result->{aggregate} }->{resync} = $result->{resync} if ($result->{status} eq 'resyncing');
$self->{global}->{ $result->{status} }++; $self->{global}->{ $result->{status} }++;
} }
} }