From 1c7f00f4711331b3afd8220dcbd22b9980301b58 Mon Sep 17 00:00:00 2001 From: thibaults-centreon Date: Fri, 4 Jun 2021 11:42:30 +0200 Subject: [PATCH] enh(plugin): renaming, style and new health mode --- .../azure/database/redis/mode/cachelatency.pm | 4 +- .../database/redis/mode/cachemissrate.pm | 144 ------------------ .../mode/{cachehits.pm => cacheusage.pm} | 6 +- .../mode/{connectedclients.pm => clients.pm} | 6 +- cloud/azure/database/redis/mode/health.pm | 76 +++++++++ .../redis/mode/{serverload.pm => load.pm} | 6 +- cloud/azure/database/redis/plugin.pm | 22 +-- 7 files changed, 98 insertions(+), 166 deletions(-) delete mode 100644 cloud/azure/database/redis/mode/cachemissrate.pm rename cloud/azure/database/redis/mode/{cachehits.pm => cacheusage.pm} (96%) rename cloud/azure/database/redis/mode/{connectedclients.pm => clients.pm} (96%) create mode 100644 cloud/azure/database/redis/mode/health.pm rename cloud/azure/database/redis/mode/{serverload.pm => load.pm} (96%) diff --git a/cloud/azure/database/redis/mode/cachelatency.pm b/cloud/azure/database/redis/mode/cachelatency.pm index 52336b33d..0ebeb9b55 100644 --- a/cloud/azure/database/redis/mode/cachelatency.pm +++ b/cloud/azure/database/redis/mode/cachelatency.pm @@ -105,13 +105,13 @@ Example: Using resource name : -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=latency --custommode=api +perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=cache-latency --custommode=api --resource= --resource-group= --aggregation='average' --warning-cache-latency='8000' --critical-cache-latency='9000' Using resource id : -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=latency --custommode=api +perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=cache-latency --custommode=api --resource='/subscriptions//resourceGroups//providers/Microsoft.Cache/Redis/' --aggregation='average' --warning-total-latency='50' --critical-total-latency='100' diff --git a/cloud/azure/database/redis/mode/cachemissrate.pm b/cloud/azure/database/redis/mode/cachemissrate.pm deleted file mode 100644 index d47661263..000000000 --- a/cloud/azure/database/redis/mode/cachemissrate.pm +++ /dev/null @@ -1,144 +0,0 @@ -# -# Copyright 2021 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 cloud::azure::database::redis::mode::cachemissrate; - -use base qw(cloud::azure::custom::mode); - -use strict; -use warnings; - -sub get_metrics_mapping { - my ($self, %options) = @_; - - my $metrics_mapping = { - 'cachemissrate' => { - 'output' => 'Cache Miss Rate', - 'label' => 'cache-miss-rate', - 'nlabel' => 'redis.cache.miss.rate', - 'unit' => '%', - 'min' => '0', - 'max' => '100' - } - }; - - return $metrics_mapping; -} - -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-metric:s' => { name => 'filter_metric' }, - 'resource:s' => { name => 'resource' }, - 'resource-group:s' => { name => 'resource_group' } - }); - - return $self; -} - -sub check_options { - my ($self, %options) = @_; - $self->SUPER::check_options(%options); - - if (!defined($self->{option_results}->{resource}) || $self->{option_results}->{resource} eq '') { - $self->{output}->add_option_msg(short_msg => 'Need to specify either --resource with --resource-group option or --resource .'); - $self->{output}->option_exit(); - } - my $resource = $self->{option_results}->{resource}; - my $resource_group = defined($self->{option_results}->{resource_group}) ? $self->{option_results}->{resource_group} : ''; - if ($resource =~ /^\/subscriptions\/.*\/resourceGroups\/(.*)\/providers\/Microsoft\.Cache\/Redis\/(.*)$/) { - $resource_group = $1; - $resource = $2; - } - - $self->{az_resource} = $resource; - $self->{az_resource_group} = $resource_group; - $self->{az_resource_type} = 'Redis'; - $self->{az_resource_namespace} = 'Microsoft.Cache'; - $self->{az_timeframe} = defined($self->{option_results}->{timeframe}) ? $self->{option_results}->{timeframe} : 900; - $self->{az_interval} = defined($self->{option_results}->{interval}) ? $self->{option_results}->{interval} : 'PT5M'; - $self->{az_aggregations} = ['Average']; - if (defined($self->{option_results}->{aggregation})) { - $self->{az_aggregations} = []; - foreach my $stat (@{$self->{option_results}->{aggregation}}) { - if ($stat ne '') { - push @{$self->{az_aggregations}}, ucfirst(lc($stat)); - } - } - } - - foreach my $metric (keys %{$self->{metrics_mapping}}) { - next if (defined($self->{option_results}->{filter_metric}) && $self->{option_results}->{filter_metric} ne '' - && $metric !~ /$self->{option_results}->{filter_metric}/); - push @{$self->{az_metrics}}, $metric; - } -} - -1; - -__END__ - -=head1 MODE - -Check Azure Redis Cache miss rate. - -Example: - -Using resource name : - -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=cache-miss-rate --custommode=api ---resource= --resource-group= --aggregation='average' ---warning-cache-miss-rate='40' --critical-cache-miss-rate='50' - -Using resource id : - -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=cache-miss-rate --custommode=api ---resource='/subscriptions//resourceGroups//providers/Microsoft.Cache/Redis/' ---aggregation='average' --warning-cache-miss-rate='40' --critical-cache-miss-rate='50' - - -Default aggregation: 'average' / 'minimum', 'maximum' and 'total' are valid. - -=over 8 - -=item B<--resource> - -Set resource name or id (Required). - -=item B<--resource-group> - -Set resource group (Required if resource's name is used). - -=item B<--warning-*> - -Warning threshold where '*' can be: -'cache-miss-rate'. - -=item B<--critical-*> - -Critical threshold where '*' can be: -'cache-miss-rate'. - -=back - -=cut diff --git a/cloud/azure/database/redis/mode/cachehits.pm b/cloud/azure/database/redis/mode/cacheusage.pm similarity index 96% rename from cloud/azure/database/redis/mode/cachehits.pm rename to cloud/azure/database/redis/mode/cacheusage.pm index f36661c0f..5ec60c1e7 100644 --- a/cloud/azure/database/redis/mode/cachehits.pm +++ b/cloud/azure/database/redis/mode/cacheusage.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package cloud::azure::database::redis::mode::cachehits; +package cloud::azure::database::redis::mode::cacheusage; use base qw(cloud::azure::custom::mode); @@ -112,13 +112,13 @@ Example: Using resource name : -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=cache-hits --custommode=api +perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=cache-usage --custommode=api --resource= --resource-group= --aggregation='total' --warning-cache-misses='800' --critical-cache-misses='900' Using resource id : -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=cache-hits --custommode=api +perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=cache-usage --custommode=api --resource='/subscriptions//resourceGroups//providers/Microsoft.Cache/Redis/' --aggregation='total' --warning-cache-misses='800' --critical-cache-misses='900' diff --git a/cloud/azure/database/redis/mode/connectedclients.pm b/cloud/azure/database/redis/mode/clients.pm similarity index 96% rename from cloud/azure/database/redis/mode/connectedclients.pm rename to cloud/azure/database/redis/mode/clients.pm index c3824d4af..bffd5387a 100644 --- a/cloud/azure/database/redis/mode/connectedclients.pm +++ b/cloud/azure/database/redis/mode/clients.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package cloud::azure::database::redis::mode::connectedclients; +package cloud::azure::database::redis::mode::clients; use base qw(cloud::azure::custom::mode); @@ -105,13 +105,13 @@ Example: Using resource name : -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=connected-clients --custommode=api +perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=clients --custommode=api --resource= --resource-group= --aggregation='average' --warning-connected-clients='800' --critical-connected-clients='900' Using resource id : -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=connected-clients --custommode=api +perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=clients --custommode=api --resource='/subscriptions//resourceGroups//providers/Microsoft.Cache/Redis/' --aggregation='average' --warning-connected-clients='800' --critical-connected-clients='900' diff --git a/cloud/azure/database/redis/mode/health.pm b/cloud/azure/database/redis/mode/health.pm new file mode 100644 index 000000000..2d0aaff4c --- /dev/null +++ b/cloud/azure/database/redis/mode/health.pm @@ -0,0 +1,76 @@ +# +# Copyright 2021 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 cloud::azure::database::redis::mode::health; + +use base qw(cloud::azure::management::monitor::mode::health); + +use strict; +use warnings; + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); + + $self->{az_resource_namespace} = 'Microsoft.Cache'; + $self->{az_resource_type} = 'Redis'; +} + +1; + +__END__ + +=head1 MODE + +Check Azure Redis cache health status. + +=over 8 + +=item B<--resource> + +Set resource name or id (Required). + +=item B<--resource-group> + +Set resource group (Required if resource's name is used). + +=item B<--warning-status> + +Set warning threshold for status (Default: ''). +Can used special variables like: %{status}, %{summary} + +=item B<--critical-status> + +Set critical threshold for status (Default: '%{status} =~ /^Unavailable$/'). +Can used special variables like: %{status}, %{summary} + +=item B<--unknown-status> + +Set unknown threshold for status (Default: '%{status} =~ /^Unknown$/'). +Can used special variables like: %{status}, %{summary} + +=item B<--ok-status> + +Set ok threshold for status (Default: '%{status} =~ /^Available$/'). +Can used special variables like: %{status}, %{summary} + +=back + +=cut diff --git a/cloud/azure/database/redis/mode/serverload.pm b/cloud/azure/database/redis/mode/load.pm similarity index 96% rename from cloud/azure/database/redis/mode/serverload.pm rename to cloud/azure/database/redis/mode/load.pm index 7b3b22936..b03a669aa 100644 --- a/cloud/azure/database/redis/mode/serverload.pm +++ b/cloud/azure/database/redis/mode/load.pm @@ -18,7 +18,7 @@ # limitations under the License. # -package cloud::azure::database::redis::mode::serverload; +package cloud::azure::database::redis::mode::load; use base qw(cloud::azure::custom::mode); @@ -106,13 +106,13 @@ Example: Using resource name : -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=server-load --custommode=api +perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=load --custommode=api --resource= --resource-group= --aggregation='maximum' --warning-server-load-percentage='80' --critical-server-load-percentage='90' Using resource id : -perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=server-load --custommode=api +perl centreon_plugins.pl --plugin=cloud::azure::database::redis::plugin --mode=load --custommode=api --resource='/subscriptions//resourceGroups//providers/Microsoft.Cache/Redis/' --aggregation='maximum' --warning-server-load-percentage='80' --critical-server-load-percentage='90' diff --git a/cloud/azure/database/redis/plugin.pm b/cloud/azure/database/redis/plugin.pm index 01c96b2e8..f75bd1371 100644 --- a/cloud/azure/database/redis/plugin.pm +++ b/cloud/azure/database/redis/plugin.pm @@ -31,17 +31,17 @@ sub new { $self->{version} = '0.1'; $self->{modes} = { - 'discovery' => 'cloud::azure::database::redis::mode::discovery', - 'cache-hits' => 'cloud::azure::database::redis::mode::cachehits', - 'cache-latency' => 'cloud::azure::database::redis::mode::cachelatency', - 'cache-miss-rate' => 'cloud::azure::database::redis::mode::cachemissrate', - 'connected-clients' => 'cloud::azure::database::redis::mode::connectedclients', - 'server-load' => 'cloud::azure::database::redis::mode::serverload', - 'operations' => 'cloud::azure::database::redis::mode::operations', - 'cpu' => 'cloud::azure::database::redis::mode::cpu', - 'memory' => 'cloud::azure::database::redis::mode::memory', - 'errors' => 'cloud::azure::database::redis::mode::errors', - 'cache-throughput' => 'cloud::azure::database::redis::mode::cachethroughput' + 'cache-latency' => 'cloud::azure::database::redis::mode::cachelatency', + 'cache-throughput' => 'cloud::azure::database::redis::mode::cachethroughput', + 'cache-usage' => 'cloud::azure::database::redis::mode::cacheusage', + 'clients' => 'cloud::azure::database::redis::mode::clients', + 'cpu' => 'cloud::azure::database::redis::mode::cpu', + 'discovery' => 'cloud::azure::database::redis::mode::discovery', + 'errors' => 'cloud::azure::database::redis::mode::errors', + 'health' => 'cloud::azure::database::redis::mode::health', + 'load' => 'cloud::azure::database::redis::mode::load', + 'memory' => 'cloud::azure::database::redis::mode::memory', + 'operations' => 'cloud::azure::database::redis::mode::operations', }; $self->{custom_modes}->{azcli} = 'cloud::azure::custom::azcli';