diff --git a/apps/mulesoft/restapi/custom/api.pm b/apps/mulesoft/restapi/custom/api.pm index b8f98d509..2b1a2f4f5 100644 --- a/apps/mulesoft/restapi/custom/api.pm +++ b/apps/mulesoft/restapi/custom/api.pm @@ -245,22 +245,13 @@ sub get_application_status { return $response->{data}; } -sub get_application_metrics { - my ($self, %options) = @_; - - my $url_path = $self->{monitoring_endpoint} . '/applications/flows/' . $options{applicationId}; - my $response = $self->request_api(method => 'GET', url_path => $url_path); - - return $response->{data}; -} - sub list_servers { my ($self, %options) = @_; - my $url_path = '/servers'; + my $url_path = $self->{monitoring_endpoint} . '/servers/'; my $response = $self->request_api(method => 'GET', url_path => $url_path); - return $response->{servers}; + return $response->{data}; } sub get_server_status { @@ -269,7 +260,7 @@ sub get_server_status { my $url_path = $self->{monitoring_endpoint} . '/servers/' . $options{serverId}; my $response = $self->request_api(method => 'GET', url_path => $url_path); - return $response->{server}; + return $response->{data}; } diff --git a/apps/mulesoft/restapi/mode/applications.pm b/apps/mulesoft/restapi/mode/applications.pm index 31f8840c7..890e75979 100644 --- a/apps/mulesoft/restapi/mode/applications.pm +++ b/apps/mulesoft/restapi/mode/applications.pm @@ -25,7 +25,6 @@ use base qw(centreon::plugins::templates::counter); use strict; use warnings; use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold); -use Data::Dumper; sub custom_status_output { my ($self, %options) = @_; @@ -44,52 +43,43 @@ sub set_counters { $self->{maps_counters_type} = [ { name => 'global', type => 0, cb_prefix_output => 'prefix_global_output' }, - { name => 'applications', type => 1, cb_prefix_output => 'prefix_application_output', - message_multiple => 'All applications are ok' }, + { name => 'applications', type => 1, cb_prefix_output => 'prefix_application_output', message_multiple => 'All applications are ok' } ]; $self->{maps_counters}->{global} = [ { label => 'total', nlabel => 'mulesoft.applications.total.count', set => { - key_values => [ { name => 'total' } ], - output_template => "Total : %s", - perfdatas => [ - { value => 'total_absolute', template => '%d', min => 0 }, - ], + key_values => [ { name => 'total' } ], + output_template => "Total : %s", + perfdatas => [ { value => 'total_absolute', template => '%d', min => 0 } ], } }, { label => 'started', nlabel => 'mulesoft.applications.status.started.count', set => { - key_values => [ { name => 'started' } ], - output_template => "Started : %s", - perfdatas => [ - { value => 'started_absolute', template => '%d', min => 0 }, - ], + key_values => [ { name => 'started' } ], + output_template => "Started : %s", + perfdatas => [ { value => 'started_absolute', template => '%d', min => 0 } ] } }, { label => 'stopped', nlabel => 'mulesoft.applications.status.stopped.count', set => { - key_values => [ { name => 'stopped' } ], - output_template => "Stopped : %s", - perfdatas => [ - { value => 'stopped_absolute', template => '%d', min => 0 }, - ], + key_values => [ { name => 'stopped' } ], + output_template => "Stopped : %s", + perfdatas => [ { value => 'stopped_absolute', template => '%d', min => 0 } ] } }, { label => 'failed', nlabel => 'mulesoft.applications.status.failed.count', set => { - key_values => [ { name => 'failed' } ], - output_template => "Failed : %s", - perfdatas => [ - { value => 'failed_absolute', template => '%d', min => 0 }, - ], + key_values => [ { name => 'failed' } ], + output_template => "Failed : %s", + perfdatas => [ { value => 'failed_absolute', template => '%d', min => 0 } ] } } ]; $self->{maps_counters}->{applications} = [ { label => 'status', threshold => 0, set => { - key_values => [ { name => 'id' }, { name => 'status' }, { name => 'name'}, { name => 'display' } ], - closure_custom_calc => $self->can('custom_status_calc'), - closure_custom_output => $self->can('custom_status_output'), - closure_custom_perfdata => sub { return 0; }, - closure_custom_threshold_check => \&catalog_status_threshold, + key_values => [ { name => 'id' }, { name => 'status' }, { name => 'name'}, { name => 'display' } ], + closure_custom_calc => $self->can('custom_status_calc'), + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold, } }, ]; @@ -101,10 +91,9 @@ sub new { bless $self, $class; $options{options}->add_options(arguments => { - "filter-name:s" => { name => 'filter_name' }, - "warning-status:s" => { name => 'warning_status', default => '' }, - "critical-status:s" => { name => 'critical_status', default => '%{status} ne "STARTED"' }, - #"critical-status:s" => { name => 'critical_status', default => '' }, + "filter-name:s" => { name => 'filter_name' }, + "warning-status:s" => { name => 'warning_status', default => '' }, + "critical-status:s" => { name => 'critical_status', default => '' } }); return $self; @@ -135,7 +124,7 @@ sub manage_selection { $self->{global} = { started => 0, stopped => 0, failed => 0 }; $self->{applications} = {}; my $result = $options{custom}->list_applications(); - #print Dumper($result); + foreach my $application (@{$result}) { next if ( defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' @@ -145,16 +134,18 @@ sub manage_selection { id => $application->{id}, name => $application->{name}, status => $application->{lastReportedStatus}, - }; + }; + $self->{global}->{started}++ if $application->{lastReportedStatus} =~ m/STARTED/; $self->{global}->{stopped}++ if $application->{lastReportedStatus} =~ m/STOPPED/; $self->{global}->{failed}++ if $application->{lastReportedStatus} =~ m/FAILED/; - #print Dumper($self->{applications}->{application}); } + if (scalar(keys %{$self->{applications}}) <= 0) { $self->{output}->add_option_msg(short_msg => "No application found."); $self->{output}->option_exit(); } + $self->{global}->{total} = scalar (keys %{$self->{applications}}); } @@ -164,7 +155,7 @@ __END__ =head1 MODE -Check Mulesoft Applications status. +Check Mulesoft Anypoint Applications status. Example: perl centreon_plugins.pl --plugin=apps::mulesoft::restapi::plugin --mode=applications diff --git a/apps/mulesoft/restapi/mode/listapplications.pm b/apps/mulesoft/restapi/mode/listapplications.pm index 0e2b493aa..2b7641bec 100644 --- a/apps/mulesoft/restapi/mode/listapplications.pm +++ b/apps/mulesoft/restapi/mode/listapplications.pm @@ -53,7 +53,6 @@ sub run { my $result = $options{custom}->list_applications(); foreach my $application (@{$result}) { - #print $application->{id}; next if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' && $application->{name} !~ /$self->{option_results}->{filter_name}/); @@ -63,8 +62,7 @@ sub run { $application->{lastReportedStatus})); } - $self->{output}->output_add(severity => 'OK', - short_msg => 'Mulesoft Applications:'); + $self->{output}->output_add(severity => 'OK', short_msg => 'Mulesoft Anypoint Applications:'); $self->{output}->display(nolabel => 1, force_ignore_perfdata => 1, force_long_output => 1); $self->{output}->exit(); } @@ -94,13 +92,13 @@ __END__ =head1 MODE -List Mulesoft applications. +List Mulesoft Anypoint applications. =over 8 =item B<--filter-name> -Filter host name (Can be a regexp). +Filter application name (Can be a regexp). =back diff --git a/apps/mulesoft/restapi/mode/listservers.pm b/apps/mulesoft/restapi/mode/listservers.pm new file mode 100644 index 000000000..e774d5b2d --- /dev/null +++ b/apps/mulesoft/restapi/mode/listservers.pm @@ -0,0 +1,106 @@ +# +# Copyright 2020 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and server 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 apps::mulesoft::restapi::mode::listservers; + +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 => { + "filter-name:s" => { name => 'filter_name' }, + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +sub manage_selection { + my ($self, %options) = @_; + + $self->{data} = $options{custom}->list_servers(); +} + +sub run { + my ($self, %options) = @_; + + my $result = $options{custom}->list_servers(); + foreach my $server (@{$result}) { + next if (defined($self->{option_results}->{filter_name}) && $self->{option_results}->{filter_name} ne '' + && $server->{name} !~ /$self->{option_results}->{filter_name}/); + + $self->{output}->output_add(long_msg => sprintf("[id = %s][name = %s][status = %s]", + $server->{id}, + $server->{name}, + $server->{status} + )); + } + + $self->{output}->output_add(severity => 'OK', short_msg => 'Mulesoft Anypoint Servers:'); + $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 => ['id', 'name', 'status']); +} + +sub disco_show { + my ($self, %options) = @_; + + $self->manage_selection(%options); + foreach my $server (@{$self->{data}}) { + $self->{output}->add_disco_entry( + id => $server->{id}, + name => $server->{name}, + status => $server->{status}, + ); + } +} + +1; + +__END__ + +=head1 MODE + +List Mulesoft Anypoint Servers. + +=over 8 + +=item B<--filter-name> + +Filter server name (Can be a regexp). + +=back + +=cut diff --git a/apps/mulesoft/restapi/mode/servers.pm b/apps/mulesoft/restapi/mode/servers.pm new file mode 100644 index 000000000..e84f937e6 --- /dev/null +++ b/apps/mulesoft/restapi/mode/servers.pm @@ -0,0 +1,183 @@ +# +# Copyright 2020 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and server 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 apps::mulesoft::restapi::mode::servers; + +use base qw(centreon::plugins::templates::counter); + +use strict; +use warnings; +use centreon::plugins::templates::catalog_functions qw(catalog_status_threshold); +use DateTime; + +sub custom_status_output { + my ($self, %options) = @_; + return my $msg = sprintf('Id: %s, Status: %s', $self->{result_values}->{id}, $self->{result_values}->{status}); +} + +sub custom_status_calc { + my ($self, %options) = @_; + $self->{result_values}->{status} = $options{new_datas}->{$self->{instance} . '_status'}; + $self->{result_values}->{id} = $options{new_datas}->{$self->{instance} . '_id'}; + return 0; +} + +sub set_counters { + my ($self, %options) = @_; + + $self->{maps_counters_type} = [ + { name => 'global', type => 0, cb_prefix_output => 'prefix_global_output' }, + { name => 'servers', type => 1, cb_prefix_output => 'prefix_server_output', message_multiple => 'All servers are ok' } + ]; + + $self->{maps_counters}->{global} = [ + { label => 'total', nlabel => 'mulesoft.servers.total.count', set => { + key_values => [ { name => 'total' } ], + output_template => "Total : %s", + perfdatas => [ { value => 'total_absolute', template => '%d', min => 0 } ], + } + }, + { label => 'running', nlabel => 'mulesoft.servers.status.running.count', set => { + key_values => [ { name => 'running' } ], + output_template => "Running : %s", + perfdatas => [ { value => 'running_absolute', template => '%d', min => 0 } ] + } + }, + { label => 'disconnected', nlabel => 'mulesoft.servers.status.disconnected.count', set => { + key_values => [ { name => 'disconnected' } ], + output_template => "Disconnected : %s", + perfdatas => [ { value => 'disconnected_absolute', template => '%d', min => 0 } ] + } + } + ]; + + $self->{maps_counters}->{servers} = [ + { label => 'status', threshold => 0, set => { + key_values => [ { name => 'id' }, { name => 'status' }, { name => 'name'}, { name => 'display' } ], + closure_custom_calc => $self->can('custom_status_calc'), + closure_custom_output => $self->can('custom_status_output'), + closure_custom_perfdata => sub { return 0; }, + closure_custom_threshold_check => \&catalog_status_threshold, + } + }, + ]; +} + +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' }, + "warning-status:s" => { name => 'warning_status', default => '' }, + "critical-status:s" => { name => 'critical_status', default => '' }, + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::check_options(%options); + + $self->change_macros(macros => ['warning_status', 'critical_status']); +} + +sub prefix_global_output { + my ($self, %options) = @_; + + return "Total servers "; +} + +sub prefix_server_output { + my ($self, %options) = @_; + + return "Server '" . $options{instance_value}->{name} . "' "; +} + +sub manage_selection { + my ($self, %options) = @_; + + $self->{global} = { started => 0, stopped => 0, failed => 0 }; + $self->{servers} = {}; + my $result = $options{custom}->list_servers(); + my $current_time = DateTime->now(); + foreach my $server (@{$result}) { + next if ( defined($self->{option_results}->{filter_name}) + && $self->{option_results}->{filter_name} ne '' + && $server->{name} !~ /$self->{option_results}->{filter_name}/ ); + $self->{servers}->{$server} = { + display => $server, + id => $server->{id}, + name => $server->{name}, + status => $server->{status}, + }; + + $self->{global}->{running}++ if $server->{status} =~ m/RUNNING/; + $self->{global}->{disconnected}++ if $server->{status} =~ m/DISCONNECTED/; + } + + if (scalar(keys %{$self->{servers}}) <= 0) { + $self->{output}->add_option_msg(short_msg => "No server found."); + $self->{output}->option_exit(); + } + + $self->{global}->{total} = scalar (keys %{$self->{servers}}); +} + +1; + +__END__ + +=head1 MODE + +Check Mulesoft Anypoint Servers status. + +Example: +perl centreon_plugins.pl --plugin=apps::mulesoft::restapi::plugin --mode=servers +--environment-id='1234abc-56de-78fg-90hi-1234abcdefg' --organization-id='1234abcd-56ef-78fg-90hi-1234abcdefg' +--api-username='myapiuser' --api-password='myapipassword' --verbose + +More information on'https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/'. + +=over 8 + +=item B<--filter-name> + +Filter by server name (Regexp can be used). +Example: --filter-name='^server1$' + +=item B<--warning-status> + +Set warning threshold for status (Default: ''). +Threshold can be matched on %{name}, %{id} or %{status} and Regexp can be used. +Typical syntax: --warning-status=%{status} ne "RUNNING" + +=item B<--critical-status> + +Set warning threshold for status (Default: ''). +Threshold can be matched on %{name}, %{id} or %{status} and Regexp can be used. +Typical syntax: --critical-status=%{status} ~= m/DISCONNECTED/" + + +=back + +=cut diff --git a/apps/mulesoft/restapi/plugin.pm b/apps/mulesoft/restapi/plugin.pm index 9abef19bd..e693c3dd0 100644 --- a/apps/mulesoft/restapi/plugin.pm +++ b/apps/mulesoft/restapi/plugin.pm @@ -31,8 +31,10 @@ sub new { $self->{version} = '1.0'; %{$self->{modes}} = ( - 'applications' => 'apps::mulesoft::restapi::mode::applications', - 'listapplications' => 'apps::mulesoft::restapi::mode::listapplications' + 'applications' => 'apps::mulesoft::restapi::mode::applications', + 'listapplications' => 'apps::mulesoft::restapi::mode::listapplications', + 'servers' => 'apps::mulesoft::restapi::mode::servers', + 'listservers' => 'apps::mulesoft::restapi::mode::listservers', ); $self->{custom_modes}{restapi} = 'apps::mulesoft::restapi::custom::api';