diff --git a/centreon-plugins/apps/grafana/restapi/custom/api.pm b/centreon-plugins/apps/grafana/restapi/custom/api.pm index 2c5c4dc77..8e50bc092 100644 --- a/centreon-plugins/apps/grafana/restapi/custom/api.pm +++ b/centreon-plugins/apps/grafana/restapi/custom/api.pm @@ -71,16 +71,17 @@ sub check_options { my ($self, %options) = @_; $self->{hostname} = (defined($self->{option_results}->{hostname})) ? $self->{option_results}->{hostname} : ''; - $self->{port} = (defined($self->{option_results}->{port})) ? $self->{option_results}->{port} : 15672; + $self->{port} = (defined($self->{option_results}->{port})) ? $self->{option_results}->{port} : 3000; $self->{proto} = (defined($self->{option_results}->{proto})) ? $self->{option_results}->{proto} : 'http'; $self->{timeout} = (defined($self->{option_results}->{timeout})) ? $self->{option_results}->{timeout} : 10; $self->{username} = (defined($self->{option_results}->{username})) ? $self->{option_results}->{username} : undef; $self->{password} = (defined($self->{option_results}->{password})) ? $self->{option_results}->{password} : undef; - - if (!defined($self->{hostname}) || $self->{hostname} eq '') { + + if ($self->{hostname} eq '') { $self->{output}->add_option_msg(short_msg => 'Need to specify --hostname option.'); $self->{output}->option_exit(); } + return 0; } @@ -124,27 +125,22 @@ sub request { my ($self, %options) = @_; $self->settings(); - - $self->{output}->output_add(long_msg => "URL: '" . $self->{proto} . '://' . $self->{hostname} . ':' . $self->{port} . $options{url_path} . "'", debug => 1); - $self->{output}->output_add(long_msg => "Parameters: '" . join(', ', @{$options{post_param}}) . "'", debug => 1) if (defined($options{post_param})); - my $content = $self->{http}->request( %options, unknown_status => '%{http_code} < 200 or %{http_code} >= 300', - critical_status => '', + critical_status => '' ); if (!defined($content) || $content eq '') { $self->{output}->add_option_msg(short_msg => "API returns empty content [code: '" . $self->{http}->get_code() . "'] [message: '" . $self->{http}->get_message() . "']"); $self->{output}->option_exit(); } - + my $decoded; eval { $decoded = JSON::XS->new->utf8->decode($content); }; if ($@) { - $self->{output}->output_add(long_msg => $content, debug => 1); $self->{output}->add_option_msg(short_msg => "Cannot decode response (add --debug option to display returned content)"); $self->{output}->option_exit(); } @@ -164,7 +160,7 @@ __END__ =head1 NAME -Grfana Rest API +Grafana Rest API =head1 CUSTOM MODE OPTIONS @@ -178,7 +174,7 @@ Remote hostname or IP address. =item B<--port> -Port used (Default: 15672) +Port used (Default: 3000) =item B<--proto> diff --git a/centreon-plugins/apps/grafana/restapi/mode/health.pm b/centreon-plugins/apps/grafana/restapi/mode/health.pm index c4979ebff..309663e3a 100644 --- a/centreon-plugins/apps/grafana/restapi/mode/health.pm +++ b/centreon-plugins/apps/grafana/restapi/mode/health.pm @@ -24,46 +24,31 @@ use base qw(centreon::plugins::templates::counter); use strict; use warnings; -use Digest::MD5 qw(md5_hex); -use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold catalog_status_calc); +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold_ng); sub custom_status_output { my ($self, %options) = @_; - my $msg = "Database state is: '" . $self->{result_values}->{state} . "'"; - return $msg; -} - -sub custom_version_output{ - my ($self, %options) = @_; - - my $msg = "Grafana version is: '" . $self->{result_values}->{version} . "'"; - return $msg; - + return sprintf( + "database state is '%s' [grafana version: %s]", + $self->{result_values}->{state}, + $self->{result_values}->{version} + ); } sub set_counters { my ($self, %options) = @_; $self->{maps_counters_type} = [ - { name => 'health', type => 0, cb_prefix_output => 'prefix_version_output', skipped_code => { -10 => 1 } }, + { name => 'health', type => 0, skipped_code => { -10 => 1 } } ]; $self->{maps_counters}->{health} = [ - { label => 'status', threshold => 0, set => { - key_values => [ { name => 'state' } ], - closure_custom_calc => \&catalog_status_calc, + { label => 'status', type => 2, critical_default => '%{state} ne "ok"', set => { + key_values => [ { name => 'state' }, { name => 'version' } ], closure_custom_output => $self->can('custom_status_output'), closure_custom_perfdata => sub { return 0; }, - closure_custom_threshold_check => \&catalog_status_threshold, - } - }, - { label => 'version', threshold => 0, set => { - key_values => [ { name => 'version' } ], - closure_custom_calc => \&catalog_status_calc, - closure_custom_output => $self->can('custom_version_output'), - closure_custom_perfdata => sub { return 0; }, - closure_custom_threshold_check => \&catalog_status_threshold, + closure_custom_threshold_check => \&catalog_status_threshold_ng } } ]; @@ -75,36 +60,19 @@ sub new { bless $self, $class; $options{options}->add_options(arguments => { - 'warning-status:s' => { name => 'warning_status', default => '' }, - 'critical-status:s' => { name => 'critical_status', default => '%{state} ne "ok"' }, }); + return $self; } -sub check_options { - my ($self, %options) = @_; - $self->SUPER::check_options(%options); - - $self->change_macros(macros => ['warning_status', 'critical_status']); -} - sub manage_selection { my ($self, %options) = @_; my $result = $options{custom}->query(url_path => '/api/health'); - - $self->{health} = {}; - my $state = $result->{database}; - $self->{health} = { - state => $state, - version => $result->{version} - }; - - if (scalar(keys %{$self->{health}}) <= 0) { - $self->{output}->add_option_msg(short_msg => 'No state found'); - $self->{output}->option_exit(); - } + state => $result->{database}, + version => $result->{version} + }; } 1; @@ -113,19 +81,19 @@ __END__ =head1 MODE -Check health state. +Check health. =over 8 =item B<--warning-status> -Set warning threshold for status (Default: ''). -Can used special variables like: %{state} +Set warning threshold for status. +Can used special variables like: %{state}, %{version} =item B<--critical-status> Set critical threshold for status (Default: '%{state} ne "ok"'). -Can used special variables like: %{state} +Can used special variables like: %{state}, %{version} =back diff --git a/centreon-plugins/apps/grafana/restapi/plugin.pm b/centreon-plugins/apps/grafana/restapi/plugin.pm index c83e7915b..7e7433de4 100644 --- a/centreon-plugins/apps/grafana/restapi/plugin.pm +++ b/centreon-plugins/apps/grafana/restapi/plugin.pm @@ -30,11 +30,11 @@ sub new { bless $self, $class; $self->{version} = '1.0'; - %{$self->{modes}} = ( - 'health' => 'apps::grafana::restapi::mode::health', - ); - - $self->{custom_modes}{api} = 'apps::grafana::restapi::custom::api'; + $self->{modes} = { + 'health' => 'apps::grafana::restapi::mode::health' + }; + + $self->{custom_modes}->{api} = 'apps::grafana::restapi::custom::api'; return $self; }