From 9a57d96c6e48e7aebbeb89e8e376b894b09876e9 Mon Sep 17 00:00:00 2001 From: qgarnier Date: Thu, 9 Feb 2023 14:27:20 +0000 Subject: [PATCH] (plugin) storage::wd::nas::snmp - new (#4208) --- .../deb.json | 5 + .../pkg.json | 10 + .../rpm.json | 5 + src/storage/wd/nas/snmp/mode/hardware.pm | 221 ++++++++++++++++++ src/storage/wd/nas/snmp/mode/listvolumes.pm | 151 ++++++++++++ src/storage/wd/nas/snmp/mode/volumes.pm | 197 ++++++++++++++++ src/storage/wd/nas/snmp/plugin.pm | 49 ++++ 7 files changed, 638 insertions(+) create mode 100644 packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/deb.json create mode 100644 packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/pkg.json create mode 100644 packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/rpm.json create mode 100644 src/storage/wd/nas/snmp/mode/hardware.pm create mode 100644 src/storage/wd/nas/snmp/mode/listvolumes.pm create mode 100644 src/storage/wd/nas/snmp/mode/volumes.pm create mode 100644 src/storage/wd/nas/snmp/plugin.pm diff --git a/packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/deb.json b/packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/deb.json new file mode 100644 index 000000000..663aaaceb --- /dev/null +++ b/packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/deb.json @@ -0,0 +1,5 @@ +{ + "dependencies": [ + "libsnmp-perl" + ] +} \ No newline at end of file diff --git a/packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/pkg.json b/packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/pkg.json new file mode 100644 index 000000000..27157e209 --- /dev/null +++ b/packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/pkg.json @@ -0,0 +1,10 @@ +{ + "pkg_name": "centreon-plugin-Hardware-Storage-Wd-Nas-Snmp", + "pkg_summary": "Centreon Plugin", + "plugin_name": "centreon_wd_nas_snmp.pl", + "files": [ + "centreon/plugins/script_snmp.pm", + "centreon/plugins/snmp.pm", + "storage/wd/nas/snmp/" + ] +} diff --git a/packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/rpm.json b/packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/rpm.json new file mode 100644 index 000000000..418a331fc --- /dev/null +++ b/packaging/centreon-plugin-Hardware-Storage-Wd-Nas-Snmp/rpm.json @@ -0,0 +1,5 @@ +{ + "dependencies": [ + "perl(SNMP)" + ] +} \ No newline at end of file diff --git a/src/storage/wd/nas/snmp/mode/hardware.pm b/src/storage/wd/nas/snmp/mode/hardware.pm new file mode 100644 index 000000000..bbb063a42 --- /dev/null +++ b/src/storage/wd/nas/snmp/mode/hardware.pm @@ -0,0 +1,221 @@ +# +# Copyright 2023 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package storage::wd::nas::snmp::mode::hardware; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); + +sub prefix_fan_output { + my ($self, %options) = @_; + + return "fan '" . $options{instance} . "' "; +} + +sub prefix_drive_output { + my ($self, %options) = @_; + + return "drive '" . $options{instance} . "' "; +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'global', type => 0 }, + { name => 'fans', type => 1, cb_prefix_output => 'prefix_fan_output', skipped_code => { -10 => 1 } }, + { name => 'drives', type => 1, cb_prefix_output => 'prefix_drive_output', skipped_code => { -10 => 1 } } + ]; + + $self->{maps_counters}->{global} = [ + { label => 'system-temperature', nlabel => 'hardware.temperature.celsius', set => { + key_values => [ { name => 'temperature' } ], + output_template => 'system temperature: %s C', + closure_custom_perfdata => sub { + my ($self, %options) = @_; + + $self->{output}->perfdata_add( + nlabel => $self->{nlabel}, + unit => 'C', + instances => 'system', + value => $self->{result_values}->{temperature}, + warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}), + critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}) + ); + } + } + } + ]; + + $self->{maps_counters}->{fans} = [ + { label => 'fan-status', type => 2, critical_default => '%{status} ne "running"', set => { + key_values => [ { name => 'status' } ], + output_template => 'status: %s', + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold_ng + } + } + ]; + + $self->{maps_counters}->{drives} = [ + { label => 'drive-temperature', nlabel => 'hardware.temperature.celsius', set => { + key_values => [ { name => 'temperature' }, { name => 'serial' } ], + output_template => 'temperature: %s C', + closure_custom_perfdata => sub { + my ($self, %options) = @_; + + $self->{output}->perfdata_add( + nlabel => $self->{nlabel}, + unit => 'C', + instances => 'drive:' . $self->{result_values}->{serial}, + value => $self->{result_values}->{temperature}, + warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning-' . $self->{thlabel}), + critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical-' . $self->{thlabel}) + ); + } + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => {}); + + return $self; +} + +sub manage_selection { + my ($self, %options) = @_; + + my $nas = { + ex2 => { + system => { + temperature => { oid => '.1.3.6.1.4.1.5127.1.1.1.2.1.7' }, + fanStatus => { oid => '.1.3.6.1.4.1.5127.1.1.1.2.1.8' } + }, + drive => { + serial => { oid => '.1.3.6.1.4.1.5127.1.1.1.2.1.10.1.4' }, + temperature => { oid => '.1.3.6.1.4.1.5127.1.1.1.2.1.10.1.5' } + }, + driveTable => '.1.3.6.1.4.1.5127.1.1.1.2.1.10.1' + }, + ex2ultra => { + system => { + temperature => { oid => '.1.3.6.1.4.1.5127.1.1.1.8.1.7' }, + fanStatus => { oid => '.1.3.6.1.4.1.5127.1.1.1.8.1.8' } + }, + drive => { + serial => { oid => '.1.3.6.1.4.1.5127.1.1.1.8.1.10.1.4' }, + temperature => { oid => '.1.3.6.1.4.1.5127.1.1.1.8.1.10.1.5' } + }, + driveTable => '.1.3.6.1.4.1.5127.1.1.1.8.1.10.1' + }, + pr2100 => { + system => { + temperature => { oid => '.1.3.6.1.4.1.5127.1.1.1.9.1.7' }, + fanStatus => { oid => '.1.3.6.1.4.1.5127.1.1.1.9.1.8' } + }, + drive => { + serial => { oid => '.1.3.6.1.4.1.5127.1.1.1.9.1.10.1.4' }, + temperature => { oid => '.1.3.6.1.4.1.5127.1.1.1.9.1.10.1.5' } + }, + driveTable => '.1.3.6.1.4.1.5127.1.1.1.9.1.10.1' + }, + pr4100 => { + system => { + temperature => { oid => '.1.3.6.1.4.1.5127.1.1.1.10.1.7' }, + fanStatus => { oid => '.1.3.6.1.4.1.5127.1.1.1.10.1.8' } + }, + drive => { + serial => { oid => '.1.3.6.1.4.1.5127.1.1.1.10.1.10.1.4' }, + temperature => { oid => '.1.3.6.1.4.1.5127.1.1.1.10.1.10.1.5' } + }, + driveTable => '.1.3.6.1.4.1.5127.1.1.1.10.1.10.1' + } + }; + + my $snmp_result = $options{snmp}->get_leef( + oids => [ map({ $nas->{$_}->{system}->{temperature}->{oid} . '.0', $nas->{$_}->{system}->{fanStatus}->{oid} . '.0' } keys(%$nas)) ], + nothing_quit => 1 + ); + + $self->{global} = {}; + $self->{fans} = {}; + $self->{drives} = {}; + foreach my $type (keys %$nas) { + next if (!defined($snmp_result->{ $nas->{$type}->{system}->{temperature}->{oid} . '.0' })); + + my $result = $options{snmp}->map_instance(mapping => $nas->{$type}->{system}, results => $snmp_result, instance => 0); + + $self->{global}->{temperature} = $1 if ($result->{temperature} =~ /Centigrade:(\d+)/i); + while ($result->{fanStatus} =~ /fan(\d+):\s*(\S+)/g) { + $self->{fans}->{$1} = { status => $2 }; + } + + $snmp_result = $options{snmp}->get_table( + oid => $nas->{$type}->{driveTable}, + start => $nas->{$type}->{drive}->{serial}->{oid}, + end => $nas->{$type}->{drive}->{temperature}->{oid} + ); + + foreach (keys %$snmp_result) { + next if (! /^$nas->{$type}->{drive}->{serial}->{oid}\.(\d+)$/); + $result = $options{snmp}->map_instance(mapping => $nas->{$type}->{drive}, results => $snmp_result, instance => $1); + $self->{drives}->{ $result->{serial} } = { serial => $result->{serial} }; + $self->{drives}->{ $result->{serial} }->{temperature} = $1 if ($result->{temperature} =~ /Centigrade:(\d+)/i); + } + } +} + +1; + +__END__ + +=head1 MODE + +Check hardware. + +=over 8 + +=item B<--warning-fan-status> + +Set warning threshold for status (Default : '%{status} ne "running"'). +Can used special variables like: %{status} + +=item B<--critical-fan-status> + +Set critical threshold for status. +Can used special variables like: %{status} + +=item B<--warning-*> B<--critical-*> + +Thresholds. Can be: +'system-temperature', 'drive-temperature'. + +=back + +=cut diff --git a/src/storage/wd/nas/snmp/mode/listvolumes.pm b/src/storage/wd/nas/snmp/mode/listvolumes.pm new file mode 100644 index 000000000..bafff378a --- /dev/null +++ b/src/storage/wd/nas/snmp/mode/listvolumes.pm @@ -0,0 +1,151 @@ +# +# Copyright 2023 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package storage::wd::nas::snmp::mode::listvolumes; + +use base qw(centreon::plugins::mode); + +use strict; +use warnings; + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $options{options}->add_options(arguments => { + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +sub manage_selection { + my ($self, %options) = @_; + + my $nas = { + ex2 => { + volumeTable => '.1.3.6.1.4.1.5127.1.1.1.2.1.9.1', + volume => { + name => { oid => '.1.3.6.1.4.1.5127.1.1.1.2.1.9.1.2' }, + type => { oid => '.1.3.6.1.4.1.5127.1.1.1.2.1.9.1.3' } + } + }, + ex2ultra => { + volumeTable => '.1.3.6.1.4.1.5127.1.1.1.8.1.9.1', + volume => { + name => { oid => '.1.3.6.1.4.1.5127.1.1.1.8.1.9.1.2' }, + type => { oid => '.1.3.6.1.4.1.5127.1.1.1.8.1.9.1.3' } + } + }, + pr2100 => { + volumeTable => '.1.3.6.1.4.1.5127.1.1.1.9.1.9.1', + volume => { + name => { oid => '.1.3.6.1.4.1.5127.1.1.1.9.1.9.1.2' }, + type => { oid => '.1.3.6.1.4.1.5127.1.1.1.9.1.9.1.3' } + } + }, + pr4100 => { + volumeTable => '.1.3.6.1.4.1.5127.1.1.1.10.1.9.1', + volume => { + name => { oid => '.1.3.6.1.4.1.5127.1.1.1.10.1.9.1.2' }, + type => { oid => '.1.3.6.1.4.1.5127.1.1.1.10.1.9.1.3' } + } + } + }; + + my $snmp_result = $options{snmp}->get_multiple_table( + oids => [ + { oid => $nas->{ex2}->{volumeTable} }, + { oid => $nas->{ex2ultra}->{volumeTable} }, + { oid => $nas->{pr2100}->{volumeTable} }, + { oid => $nas->{pr4100}->{volumeTable} } + ] + ); + + my $volumes = {}; + foreach my $type (keys %$nas) { + next if (scalar(keys %{$snmp_result->{ $nas->{$type}->{volumeTable} }}) <= 0); + foreach (keys %{$snmp_result->{ $nas->{$type}->{volumeTable} }}) { + next if (! /^$nas->{$type}->{volume}->{name}->{oid}\.(\d+)$/); + + $volumes->{$1} = $options{snmp}->map_instance(mapping => $nas->{$type}->{volume}, results => $snmp_result->{ $nas->{$type}->{volumeTable} }, instance => $1); + } + } + + return $volumes; +} + +sub run { + my ($self, %options) = @_; + + my $volumes = $self->manage_selection(%options); + foreach (sort keys %$volumes) { + $self->{output}->output_add( + long_msg => sprintf( + '[name: %s] [type: %s]', + $volumes->{$_}->{name}, + $volumes->{$_}->{type} + ) + ); + } + + $self->{output}->output_add( + severity => 'OK', + short_msg => 'List volumes:' + ); + $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1, force_long_output => 1); + $self->{output}->exit(); +} + +sub disco_format { + my ($self, %options) = @_; + + $self->{output}->add_disco_format(elements => ['name', 'type']); +} + +sub disco_show { + my ($self, %options) = @_; + + my $volumes = $self->manage_selection(%options); + foreach (sort keys %$volumes) { + $self->{output}->add_disco_entry( + %{$volumes->{$_}} + ); + } +} + +1; + +__END__ + +=head1 MODE + +List volumes. + +=over 8 + +=back + +=cut diff --git a/src/storage/wd/nas/snmp/mode/volumes.pm b/src/storage/wd/nas/snmp/mode/volumes.pm new file mode 100644 index 000000000..9b35b409f --- /dev/null +++ b/src/storage/wd/nas/snmp/mode/volumes.pm @@ -0,0 +1,197 @@ +# +# Copyright 2023 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package storage::wd::nas::snmp::mode::volumes; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::misc; + +sub custom_space_usage_output { + my ($self, %options) = @_; + + my ($total_size_value, $total_size_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{total}); + my ($total_used_value, $total_used_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{used}); + my ($total_free_value, $total_free_unit) = $self->{perfdata}->change_bytes(value => $self->{result_values}->{free}); + return sprintf( + "space usage total: %s used: %s (%.2f%%) free: %s (%.2f%%)", + $total_size_value . " " . $total_size_unit, + $total_used_value . " " . $total_used_unit, $self->{result_values}->{prct_used}, + $total_free_value . " " . $total_free_unit, $self->{result_values}->{prct_free} + ); +} + +sub prefix_volume_output { + my ($self, %options) = @_; + + return sprintf( + "volume '%s' ", + $options{instance_value}->{name} + ); +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'volumes', type => 1, cb_prefix_output => 'prefix_volume_output', message_multiple => 'All volumes are ok' } + ]; + + $self->{maps_counters}->{volumes} = [ + { label => 'space-usage', nlabel => 'volume.space.usage.bytes', set => { + key_values => [ { name => 'used' }, { name => 'free' }, { name => 'prct_used' }, { name => 'prct_free' }, { name => 'total' }, { name => 'name' } ], + closure_custom_output => $self->can('custom_space_usage_output'), + perfdatas => [ + { template => '%d', min => 0, max => 'total', unit => 'B', cast_int => 1, label_extra_instance => 1, instance_use => 'name' } + ] + } + }, + { label => 'space-usage-free', display_ok => 0, nlabel => 'volume.space.free.bytes', set => { + key_values => [ { name => 'free' }, { name => 'used' }, { name => 'prct_used' }, { name => 'prct_free' }, { name => 'total' }, { name => 'name' } ], + closure_custom_output => $self->can('custom_space_usage_output'), + perfdatas => [ + { template => '%d', min => 0, max => 'total', unit => 'B', cast_int => 1, label_extra_instance => 1, instance_use => 'name' } + ] + } + }, + { label => 'space-usage-prct', display_ok => 0, nlabel => 'volume.space.usage.percentage', set => { + key_values => [ { name => 'prct_used' }, { name => 'used' }, { name => 'free' }, { name => 'prct_free' }, { name => 'total' }, { name => 'name' } ], + closure_custom_output => $self->can('custom_space_usage_output'), + perfdatas => [ + { template => '%.2f', min => 0, max => 100, unit => '%', label_extra_instance => 1, instance_use => 'name' } + ] + } + } + ]; +} + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options, force_new_perfdata => 1); + bless $self, $class; + + $options{options}->add_options(arguments => { + 'filter-name:s' => { name => 'filter_name' } + }); + + return $self; +} + +sub manage_selection { + my ($self, %options) = @_; + + my $nas = { + ex2 => { + volumeTable => '.1.3.6.1.4.1.5127.1.1.1.2.1.9.1', + volume => { + name => { oid => '.1.3.6.1.4.1.5127.1.1.1.2.1.9.1.2' }, + total => { oid => '.1.3.6.1.4.1.5127.1.1.1.2.1.9.1.5' }, + free => { oid => '.1.3.6.1.4.1.5127.1.1.1.2.1.9.1.6' } + } + }, + ex2ultra => { + volumeTable => '.1.3.6.1.4.1.5127.1.1.1.8.1.9.1', + volume => { + name => { oid => '.1.3.6.1.4.1.5127.1.1.1.8.1.9.1.2' }, + total => { oid => '.1.3.6.1.4.1.5127.1.1.1.8.1.9.1.5' }, + free => { oid => '.1.3.6.1.4.1.5127.1.1.1.8.1.9.1.6' } + } + }, + pr2100 => { + volumeTable => '.1.3.6.1.4.1.5127.1.1.1.9.1.9.1', + volume => { + name => { oid => '.1.3.6.1.4.1.5127.1.1.1.9.1.9.1.2' }, + total => { oid => '.1.3.6.1.4.1.5127.1.1.1.9.1.9.1.5' }, + free => { oid => '.1.3.6.1.4.1.5127.1.1.1.9.1.9.1.6' } + } + }, + pr4100 => { + volumeTable => '.1.3.6.1.4.1.5127.1.1.1.10.1.9.1', + volume => { + name => { oid => '.1.3.6.1.4.1.5127.1.1.1.10.1.9.1.2' }, + total => { oid => '.1.3.6.1.4.1.5127.1.1.1.10.1.9.1.5' }, + free => { oid => '.1.3.6.1.4.1.5127.1.1.1.10.1.9.1.6' } + } + } + }; + + my $snmp_result = $options{snmp}->get_multiple_table( + oids => [ + { oid => $nas->{ex2}->{volumeTable} }, + { oid => $nas->{ex2ultra}->{volumeTable} }, + { oid => $nas->{pr2100}->{volumeTable} }, + { oid => $nas->{pr4100}->{volumeTable} } + ], + nothing_quit => 1 + ); + + $self->{volumes} = {}; + foreach my $type (keys %$nas) { + next if (scalar(keys %{$snmp_result->{ $nas->{$type}->{volumeTable} }}) <= 0); + + foreach (keys %{$snmp_result->{ $nas->{$type}->{volumeTable} }}) { + next if (! /^$nas->{$type}->{volume}->{name}->{oid}\.(\d+)$/); + + my $result = $options{snmp}->map_instance(mapping => $nas->{$type}->{volume}, results => $snmp_result->{ $nas->{$type}->{volumeTable} }, instance => $1); + next if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && + $result->{name} !~ /$self->{option_results}->{filter_name}/); + + $result->{total} =~ /^([0-9\.]+)\s*(\S+)/; + $result->{total} = centreon::plugins::misc::convert_bytes(value => $1, unit => $2 . 'B'); + + $result->{free} =~ /^([0-9\.]+)\s*(\S+)/; + $result->{free} = centreon::plugins::misc::convert_bytes(value => $1, unit => $2 . 'B'); + + $self->{volumes}->{ $result->{name} } = { + name => $result->{name}, + total => $result->{total}, + free => $result->{free}, + used => $result->{total} - $result->{free}, + prct_used => ($result->{total} - $result->{free}) * 100 / $result->{total}, + prct_free => $result->{free} * 100 / $result->{total} + }; + } + } +} + +1; + +__END__ + +=head1 MODE + +Check volumes. + +=over 8 + +=item B<--filter-name> + +Filter volumes by name (can be a regexp). + +=item B<--warning-*> B<--critical-*> + +Thresholds. +Can be: 'space-usage-prct', 'space-usage', 'space-usage-free'. + +=back + +=cut diff --git a/src/storage/wd/nas/snmp/plugin.pm b/src/storage/wd/nas/snmp/plugin.pm new file mode 100644 index 000000000..8d5f1ae41 --- /dev/null +++ b/src/storage/wd/nas/snmp/plugin.pm @@ -0,0 +1,49 @@ +# +# Copyright 2023 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +package storage::wd::nas::snmp::plugin; + +use strict; +use warnings; +use base qw(centreon::plugins::script_snmp); + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $self->{modes} = { + 'hardware' => 'storage::wd::nas::snmp::mode::hardware', + 'list-volumes' => 'storage::wd::nas::snmp::mode::listvolumes', + 'volumes' => 'storage::wd::nas::snmp::mode::volumes' + }; + + return $self; +} + +1; + +__END__ + +=head1 PLUGIN DESCRIPTION + +Check WD (Western Digital) NAS in SNMP. + +=cut