From 6aa4217dc902ec7330f11e588d1e44b2538eadd8 Mon Sep 17 00:00:00 2001 From: qgarnier Date: Wed, 20 Apr 2022 16:27:45 +0200 Subject: [PATCH] (plugin) network::cisco::meraki::cloudcontroller::restapi - ignore 404 codes for uplinksLossAndLatency api call (#3613) --- .../cloudcontroller/restapi/custom/api.pm | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/centreon-plugins/network/cisco/meraki/cloudcontroller/restapi/custom/api.pm b/centreon-plugins/network/cisco/meraki/cloudcontroller/restapi/custom/api.pm index 6c51e1540..75b3093c4 100644 --- a/centreon-plugins/network/cisco/meraki/cloudcontroller/restapi/custom/api.pm +++ b/centreon-plugins/network/cisco/meraki/cloudcontroller/restapi/custom/api.pm @@ -167,9 +167,10 @@ sub request_api { #404: Not found- No such URL, or you don't have access to the API or organization at all. #429: Too Many Requests- You submitted more than 5 calls in 1 second to an Organization, triggering rate limiting. This also applies for API calls made across multiple organizations that triggers rate limiting for one of the organizations. my $results = []; - my ($full_url, $get_param); + my $full_url; + my $get_param = defined($options{get_param}) ? $options{get_param} : []; if (defined($options{paginate})) { - $get_param = ['perPage=' . $options{paginate}]; + push @$get_param, 'perPage=' . $options{paginate}; } while (1) { my $response = $self->{http}->request( @@ -431,14 +432,19 @@ sub get_organization_uplink_loss_and_latency { if (!defined($self->{datas}->{uplinks_loss_latency}->{ $options{orgId} })) { $self->{datas}->{uplinks_loss_latency}->{ $options{orgId} } = {}; my $datas = $self->request_api( - endpoint => '/organizations/' . $options{orgId} . '/devices/uplinksLossAndLatency?timespan=' . $self->{timespan}, + endpoint => '/organizations/' . $options{orgId} . '/devices/uplinksLossAndLatency', + get_param => [ 'timespan=' . $self->{timespan} ], paginate => 1000, - hostname => $self->get_shard_hostname(organization_id => $options{orgId}) + hostname => $self->get_shard_hostname(organization_id => $options{orgId}), + ignore_codes => { 404 => 1 } ); - foreach (@$datas) { - $self->{datas}->{uplinks_loss_latency}->{ $options{orgId} }->{ $_->{serial} } = {} - if (!defined($self->{datas}->{uplinks_loss_latency}->{ $options{orgId} }->{ $_->{serial} })); - $self->{datas}->{uplinks_loss_latency}->{ $options{orgId} }->{ $_->{serial} }->{ $_->{uplink} } = $_; + + if (defined($datas)) { + foreach (@$datas) { + $self->{datas}->{uplinks_loss_latency}->{ $options{orgId} }->{ $_->{serial} } = {} + if (!defined($self->{datas}->{uplinks_loss_latency}->{ $options{orgId} }->{ $_->{serial} })); + $self->{datas}->{uplinks_loss_latency}->{ $options{orgId} }->{ $_->{serial} }->{ $_->{uplink} } = $_; + } } } @@ -451,7 +457,8 @@ sub get_device_clients { my ($self, %options) = @_; return $self->request_api( - endpoint => '/devices/' . $options{serial} . '/clients?timespan=' . $self->{timespan}, + endpoint => '/devices/' . $options{serial} . '/clients', + get_param => [ 'timespan=' . $self->{timespan} ], hostname => $self->get_shard_hostname(serial => $options{serial}) ) } @@ -460,7 +467,8 @@ sub get_device_switch_port_statuses { my ($self, %options) = @_; return $self->request_api( - endpoint => '/devices/' . $options{serial} . '/switchPortStatuses?timespan=' . $self->{timespan}, + endpoint => '/devices/' . $options{serial} . '/switchPortStatuses', + get_param => [ 'timespan=' . $self->{timespan} ], hostname => $self->get_shard_hostname(serial => $options{serial}) ); } @@ -471,7 +479,8 @@ sub get_network_device_connection_stats { if (!defined($self->{devices_connection_stats}->{ $options{network_id} })) { $self->{devices_connection_stats}->{ $options{network_id} } = {}; my $datas = $self->request_api( - endpoint => '/networks/' . $options{network_id} . '/wireless/devices/connectionStats?timespan=' . $self->{timespan}, + endpoint => '/networks/' . $options{network_id} . '/wireless/devices/connectionStats', + get_param => [ 'timespan=' . $self->{timespan} ], hostname => $self->get_shard_hostname(network_id => $options{network_id}) ); foreach (@$datas) { @@ -500,7 +509,8 @@ sub get_organization_api_requests_overview { my $results = {}; foreach my $id (@{$options{orgs}}) { $results->{$id} = $self->request_api( - endpoint => '/organizations/' . $id . '/apiRequests/overview?timespan=' . $self->{timespan}, + endpoint => '/organizations/' . $id . '/apiRequests/overview', + get_param => [ 'timespan=' . $self->{timespan} ], hostname => $self->get_shard_hostname(organization_id => $id) ); } @@ -522,7 +532,8 @@ sub get_networks_clients { my ($self, %options) = @_; return $self->request_api( - endpoint => '/networks/' . $options{network_id} . '/clients?timespan=' . $self->{timespan}, + endpoint => '/networks/' . $options{network_id} . '/clients', + get_param => [ 'timespan=' . $self->{timespan} ], hostname => $self->get_shard_hostname(network_id => $options{network_id}), ignore_codes => { 400 => 1 } );