All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awssdk.services.costexplorer.DefaultCostExplorerAsyncClient Maven / Gradle / Ivy

Go to download

The AWS Java SDK for AWS Cost Explorer module holds the client classes that are used for communicating with AWS Cost Explorer Service

There is a newer version: 2.29.39
Show newest version
/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 * 
 * http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file 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 software.amazon.awssdk.services.costexplorer;

import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.awscore.client.handler.AwsAsyncClientHandler;
import software.amazon.awssdk.awscore.exception.AwsServiceException;
import software.amazon.awssdk.awscore.internal.AwsProtocolMetadata;
import software.amazon.awssdk.awscore.internal.AwsServiceProtocol;
import software.amazon.awssdk.core.RequestOverrideConfiguration;
import software.amazon.awssdk.core.SdkPlugin;
import software.amazon.awssdk.core.SdkRequest;
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
import software.amazon.awssdk.core.client.config.SdkClientOption;
import software.amazon.awssdk.core.client.handler.AsyncClientHandler;
import software.amazon.awssdk.core.client.handler.ClientExecutionParams;
import software.amazon.awssdk.core.http.HttpResponseHandler;
import software.amazon.awssdk.core.metrics.CoreMetric;
import software.amazon.awssdk.metrics.MetricCollector;
import software.amazon.awssdk.metrics.MetricPublisher;
import software.amazon.awssdk.metrics.NoOpMetricCollector;
import software.amazon.awssdk.protocols.core.ExceptionMetadata;
import software.amazon.awssdk.protocols.json.AwsJsonProtocol;
import software.amazon.awssdk.protocols.json.AwsJsonProtocolFactory;
import software.amazon.awssdk.protocols.json.BaseAwsJsonProtocolFactory;
import software.amazon.awssdk.protocols.json.JsonOperationMetadata;
import software.amazon.awssdk.services.costexplorer.internal.CostExplorerServiceClientConfigurationBuilder;
import software.amazon.awssdk.services.costexplorer.model.BackfillLimitExceededException;
import software.amazon.awssdk.services.costexplorer.model.BillExpirationException;
import software.amazon.awssdk.services.costexplorer.model.CostExplorerException;
import software.amazon.awssdk.services.costexplorer.model.CreateAnomalyMonitorRequest;
import software.amazon.awssdk.services.costexplorer.model.CreateAnomalyMonitorResponse;
import software.amazon.awssdk.services.costexplorer.model.CreateAnomalySubscriptionRequest;
import software.amazon.awssdk.services.costexplorer.model.CreateAnomalySubscriptionResponse;
import software.amazon.awssdk.services.costexplorer.model.CreateCostCategoryDefinitionRequest;
import software.amazon.awssdk.services.costexplorer.model.CreateCostCategoryDefinitionResponse;
import software.amazon.awssdk.services.costexplorer.model.DataUnavailableException;
import software.amazon.awssdk.services.costexplorer.model.DeleteAnomalyMonitorRequest;
import software.amazon.awssdk.services.costexplorer.model.DeleteAnomalyMonitorResponse;
import software.amazon.awssdk.services.costexplorer.model.DeleteAnomalySubscriptionRequest;
import software.amazon.awssdk.services.costexplorer.model.DeleteAnomalySubscriptionResponse;
import software.amazon.awssdk.services.costexplorer.model.DeleteCostCategoryDefinitionRequest;
import software.amazon.awssdk.services.costexplorer.model.DeleteCostCategoryDefinitionResponse;
import software.amazon.awssdk.services.costexplorer.model.DescribeCostCategoryDefinitionRequest;
import software.amazon.awssdk.services.costexplorer.model.DescribeCostCategoryDefinitionResponse;
import software.amazon.awssdk.services.costexplorer.model.GenerationExistsException;
import software.amazon.awssdk.services.costexplorer.model.GetAnomaliesRequest;
import software.amazon.awssdk.services.costexplorer.model.GetAnomaliesResponse;
import software.amazon.awssdk.services.costexplorer.model.GetAnomalyMonitorsRequest;
import software.amazon.awssdk.services.costexplorer.model.GetAnomalyMonitorsResponse;
import software.amazon.awssdk.services.costexplorer.model.GetAnomalySubscriptionsRequest;
import software.amazon.awssdk.services.costexplorer.model.GetAnomalySubscriptionsResponse;
import software.amazon.awssdk.services.costexplorer.model.GetApproximateUsageRecordsRequest;
import software.amazon.awssdk.services.costexplorer.model.GetApproximateUsageRecordsResponse;
import software.amazon.awssdk.services.costexplorer.model.GetCostAndUsageRequest;
import software.amazon.awssdk.services.costexplorer.model.GetCostAndUsageResponse;
import software.amazon.awssdk.services.costexplorer.model.GetCostAndUsageWithResourcesRequest;
import software.amazon.awssdk.services.costexplorer.model.GetCostAndUsageWithResourcesResponse;
import software.amazon.awssdk.services.costexplorer.model.GetCostCategoriesRequest;
import software.amazon.awssdk.services.costexplorer.model.GetCostCategoriesResponse;
import software.amazon.awssdk.services.costexplorer.model.GetCostForecastRequest;
import software.amazon.awssdk.services.costexplorer.model.GetCostForecastResponse;
import software.amazon.awssdk.services.costexplorer.model.GetDimensionValuesRequest;
import software.amazon.awssdk.services.costexplorer.model.GetDimensionValuesResponse;
import software.amazon.awssdk.services.costexplorer.model.GetReservationCoverageRequest;
import software.amazon.awssdk.services.costexplorer.model.GetReservationCoverageResponse;
import software.amazon.awssdk.services.costexplorer.model.GetReservationPurchaseRecommendationRequest;
import software.amazon.awssdk.services.costexplorer.model.GetReservationPurchaseRecommendationResponse;
import software.amazon.awssdk.services.costexplorer.model.GetReservationUtilizationRequest;
import software.amazon.awssdk.services.costexplorer.model.GetReservationUtilizationResponse;
import software.amazon.awssdk.services.costexplorer.model.GetRightsizingRecommendationRequest;
import software.amazon.awssdk.services.costexplorer.model.GetRightsizingRecommendationResponse;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlanPurchaseRecommendationDetailsRequest;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlanPurchaseRecommendationDetailsResponse;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlansCoverageRequest;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlansCoverageResponse;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlansPurchaseRecommendationRequest;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlansPurchaseRecommendationResponse;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlansUtilizationDetailsRequest;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlansUtilizationDetailsResponse;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlansUtilizationRequest;
import software.amazon.awssdk.services.costexplorer.model.GetSavingsPlansUtilizationResponse;
import software.amazon.awssdk.services.costexplorer.model.GetTagsRequest;
import software.amazon.awssdk.services.costexplorer.model.GetTagsResponse;
import software.amazon.awssdk.services.costexplorer.model.GetUsageForecastRequest;
import software.amazon.awssdk.services.costexplorer.model.GetUsageForecastResponse;
import software.amazon.awssdk.services.costexplorer.model.InvalidNextTokenException;
import software.amazon.awssdk.services.costexplorer.model.LimitExceededException;
import software.amazon.awssdk.services.costexplorer.model.ListCostAllocationTagBackfillHistoryRequest;
import software.amazon.awssdk.services.costexplorer.model.ListCostAllocationTagBackfillHistoryResponse;
import software.amazon.awssdk.services.costexplorer.model.ListCostAllocationTagsRequest;
import software.amazon.awssdk.services.costexplorer.model.ListCostAllocationTagsResponse;
import software.amazon.awssdk.services.costexplorer.model.ListCostCategoryDefinitionsRequest;
import software.amazon.awssdk.services.costexplorer.model.ListCostCategoryDefinitionsResponse;
import software.amazon.awssdk.services.costexplorer.model.ListSavingsPlansPurchaseRecommendationGenerationRequest;
import software.amazon.awssdk.services.costexplorer.model.ListSavingsPlansPurchaseRecommendationGenerationResponse;
import software.amazon.awssdk.services.costexplorer.model.ListTagsForResourceRequest;
import software.amazon.awssdk.services.costexplorer.model.ListTagsForResourceResponse;
import software.amazon.awssdk.services.costexplorer.model.ProvideAnomalyFeedbackRequest;
import software.amazon.awssdk.services.costexplorer.model.ProvideAnomalyFeedbackResponse;
import software.amazon.awssdk.services.costexplorer.model.RequestChangedException;
import software.amazon.awssdk.services.costexplorer.model.ResourceNotFoundException;
import software.amazon.awssdk.services.costexplorer.model.ServiceQuotaExceededException;
import software.amazon.awssdk.services.costexplorer.model.StartCostAllocationTagBackfillRequest;
import software.amazon.awssdk.services.costexplorer.model.StartCostAllocationTagBackfillResponse;
import software.amazon.awssdk.services.costexplorer.model.StartSavingsPlansPurchaseRecommendationGenerationRequest;
import software.amazon.awssdk.services.costexplorer.model.StartSavingsPlansPurchaseRecommendationGenerationResponse;
import software.amazon.awssdk.services.costexplorer.model.TagResourceRequest;
import software.amazon.awssdk.services.costexplorer.model.TagResourceResponse;
import software.amazon.awssdk.services.costexplorer.model.TooManyTagsException;
import software.amazon.awssdk.services.costexplorer.model.UnknownMonitorException;
import software.amazon.awssdk.services.costexplorer.model.UnknownSubscriptionException;
import software.amazon.awssdk.services.costexplorer.model.UnresolvableUsageUnitException;
import software.amazon.awssdk.services.costexplorer.model.UntagResourceRequest;
import software.amazon.awssdk.services.costexplorer.model.UntagResourceResponse;
import software.amazon.awssdk.services.costexplorer.model.UpdateAnomalyMonitorRequest;
import software.amazon.awssdk.services.costexplorer.model.UpdateAnomalyMonitorResponse;
import software.amazon.awssdk.services.costexplorer.model.UpdateAnomalySubscriptionRequest;
import software.amazon.awssdk.services.costexplorer.model.UpdateAnomalySubscriptionResponse;
import software.amazon.awssdk.services.costexplorer.model.UpdateCostAllocationTagsStatusRequest;
import software.amazon.awssdk.services.costexplorer.model.UpdateCostAllocationTagsStatusResponse;
import software.amazon.awssdk.services.costexplorer.model.UpdateCostCategoryDefinitionRequest;
import software.amazon.awssdk.services.costexplorer.model.UpdateCostCategoryDefinitionResponse;
import software.amazon.awssdk.services.costexplorer.transform.CreateAnomalyMonitorRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.CreateAnomalySubscriptionRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.CreateCostCategoryDefinitionRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.DeleteAnomalyMonitorRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.DeleteAnomalySubscriptionRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.DeleteCostCategoryDefinitionRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.DescribeCostCategoryDefinitionRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetAnomaliesRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetAnomalyMonitorsRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetAnomalySubscriptionsRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetApproximateUsageRecordsRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetCostAndUsageRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetCostAndUsageWithResourcesRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetCostCategoriesRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetCostForecastRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetDimensionValuesRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetReservationCoverageRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetReservationPurchaseRecommendationRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetReservationUtilizationRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetRightsizingRecommendationRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetSavingsPlanPurchaseRecommendationDetailsRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetSavingsPlansCoverageRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetSavingsPlansPurchaseRecommendationRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetSavingsPlansUtilizationDetailsRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetSavingsPlansUtilizationRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetTagsRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.GetUsageForecastRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.ListCostAllocationTagBackfillHistoryRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.ListCostAllocationTagsRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.ListCostCategoryDefinitionsRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.ListSavingsPlansPurchaseRecommendationGenerationRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.ListTagsForResourceRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.ProvideAnomalyFeedbackRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.StartCostAllocationTagBackfillRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.StartSavingsPlansPurchaseRecommendationGenerationRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.TagResourceRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.UntagResourceRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.UpdateAnomalyMonitorRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.UpdateAnomalySubscriptionRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.UpdateCostAllocationTagsStatusRequestMarshaller;
import software.amazon.awssdk.services.costexplorer.transform.UpdateCostCategoryDefinitionRequestMarshaller;
import software.amazon.awssdk.utils.CompletableFutureUtils;

/**
 * Internal implementation of {@link CostExplorerAsyncClient}.
 *
 * @see CostExplorerAsyncClient#builder()
 */
@Generated("software.amazon.awssdk:codegen")
@SdkInternalApi
final class DefaultCostExplorerAsyncClient implements CostExplorerAsyncClient {
    private static final Logger log = LoggerFactory.getLogger(DefaultCostExplorerAsyncClient.class);

    private static final AwsProtocolMetadata protocolMetadata = AwsProtocolMetadata.builder()
            .serviceProtocol(AwsServiceProtocol.AWS_JSON).build();

    private final AsyncClientHandler clientHandler;

    private final AwsJsonProtocolFactory protocolFactory;

    private final SdkClientConfiguration clientConfiguration;

    protected DefaultCostExplorerAsyncClient(SdkClientConfiguration clientConfiguration) {
        this.clientHandler = new AwsAsyncClientHandler(clientConfiguration);
        this.clientConfiguration = clientConfiguration.toBuilder().option(SdkClientOption.SDK_CLIENT, this).build();
        this.protocolFactory = init(AwsJsonProtocolFactory.builder()).build();
    }

    /**
     * 

* Creates a new cost anomaly detection monitor with the requested type and monitor specification. *

* * @param createAnomalyMonitorRequest * @return A Java Future containing the result of the CreateAnomalyMonitor operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.CreateAnomalyMonitor * @see AWS API * Documentation */ @Override public CompletableFuture createAnomalyMonitor( CreateAnomalyMonitorRequest createAnomalyMonitorRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(createAnomalyMonitorRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, createAnomalyMonitorRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "CreateAnomalyMonitor"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, CreateAnomalyMonitorResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("CreateAnomalyMonitor").withProtocolMetadata(protocolMetadata) .withMarshaller(new CreateAnomalyMonitorRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(createAnomalyMonitorRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Adds an alert subscription to a cost anomaly detection monitor. You can use each subscription to define * subscribers with email or SNS notifications. Email subscribers can set an absolute or percentage threshold and a * time frequency for receiving notifications. *

* * @param createAnomalySubscriptionRequest * @return A Java Future containing the result of the CreateAnomalySubscription operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • UnknownMonitorException The cost anomaly monitor does not exist for the account.
  • *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.CreateAnomalySubscription * @see AWS * API Documentation */ @Override public CompletableFuture createAnomalySubscription( CreateAnomalySubscriptionRequest createAnomalySubscriptionRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(createAnomalySubscriptionRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, createAnomalySubscriptionRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "CreateAnomalySubscription"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, CreateAnomalySubscriptionResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("CreateAnomalySubscription").withProtocolMetadata(protocolMetadata) .withMarshaller(new CreateAnomalySubscriptionRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(createAnomalySubscriptionRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Creates a new Cost Category with the requested name and rules. *

* * @param createCostCategoryDefinitionRequest * @return A Java Future containing the result of the CreateCostCategoryDefinition operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ServiceQuotaExceededException You've reached the limit on the number of resources you can create, or * exceeded the size of an individual resource.
  • *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.CreateCostCategoryDefinition * @see AWS API Documentation */ @Override public CompletableFuture createCostCategoryDefinition( CreateCostCategoryDefinitionRequest createCostCategoryDefinitionRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(createCostCategoryDefinitionRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, createCostCategoryDefinitionRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "CreateCostCategoryDefinition"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, CreateCostCategoryDefinitionResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("CreateCostCategoryDefinition").withProtocolMetadata(protocolMetadata) .withMarshaller(new CreateCostCategoryDefinitionRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(createCostCategoryDefinitionRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Deletes a cost anomaly monitor. *

* * @param deleteAnomalyMonitorRequest * @return A Java Future containing the result of the DeleteAnomalyMonitor operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • UnknownMonitorException The cost anomaly monitor does not exist for the account.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.DeleteAnomalyMonitor * @see AWS API * Documentation */ @Override public CompletableFuture deleteAnomalyMonitor( DeleteAnomalyMonitorRequest deleteAnomalyMonitorRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteAnomalyMonitorRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteAnomalyMonitorRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteAnomalyMonitor"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DeleteAnomalyMonitorResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DeleteAnomalyMonitor").withProtocolMetadata(protocolMetadata) .withMarshaller(new DeleteAnomalyMonitorRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(deleteAnomalyMonitorRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Deletes a cost anomaly subscription. *

* * @param deleteAnomalySubscriptionRequest * @return A Java Future containing the result of the DeleteAnomalySubscription operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • UnknownSubscriptionException The cost anomaly subscription does not exist for the account.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.DeleteAnomalySubscription * @see AWS * API Documentation */ @Override public CompletableFuture deleteAnomalySubscription( DeleteAnomalySubscriptionRequest deleteAnomalySubscriptionRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteAnomalySubscriptionRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteAnomalySubscriptionRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteAnomalySubscription"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DeleteAnomalySubscriptionResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DeleteAnomalySubscription").withProtocolMetadata(protocolMetadata) .withMarshaller(new DeleteAnomalySubscriptionRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(deleteAnomalySubscriptionRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Deletes a Cost Category. Expenses from this month going forward will no longer be categorized with this Cost * Category. *

* * @param deleteCostCategoryDefinitionRequest * @return A Java Future containing the result of the DeleteCostCategoryDefinition operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The specified ARN in the request doesn't exist.
  • *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.DeleteCostCategoryDefinition * @see AWS API Documentation */ @Override public CompletableFuture deleteCostCategoryDefinition( DeleteCostCategoryDefinitionRequest deleteCostCategoryDefinitionRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(deleteCostCategoryDefinitionRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, deleteCostCategoryDefinitionRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DeleteCostCategoryDefinition"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DeleteCostCategoryDefinitionResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DeleteCostCategoryDefinition").withProtocolMetadata(protocolMetadata) .withMarshaller(new DeleteCostCategoryDefinitionRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(deleteCostCategoryDefinitionRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Returns the name, Amazon Resource Name (ARN), rules, definition, and effective dates of a Cost Category that's * defined in the account. *

*

* You have the option to use EffectiveOn to return a Cost Category that's active on a specific date. * If there's no EffectiveOn specified, you see a Cost Category that's effective on the current date. * If Cost Category is still effective, EffectiveEnd is omitted in the response. *

* * @param describeCostCategoryDefinitionRequest * @return A Java Future containing the result of the DescribeCostCategoryDefinition operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The specified ARN in the request doesn't exist.
  • *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.DescribeCostCategoryDefinition * @see AWS API Documentation */ @Override public CompletableFuture describeCostCategoryDefinition( DescribeCostCategoryDefinitionRequest describeCostCategoryDefinitionRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(describeCostCategoryDefinitionRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, describeCostCategoryDefinitionRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "DescribeCostCategoryDefinition"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, DescribeCostCategoryDefinitionResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("DescribeCostCategoryDefinition").withProtocolMetadata(protocolMetadata) .withMarshaller(new DescribeCostCategoryDefinitionRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(describeCostCategoryDefinitionRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves all of the cost anomalies detected on your account during the time period that's specified by the * DateInterval object. Anomalies are available for up to 90 days. *

* * @param getAnomaliesRequest * @return A Java Future containing the result of the GetAnomalies operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetAnomalies * @see AWS API * Documentation */ @Override public CompletableFuture getAnomalies(GetAnomaliesRequest getAnomaliesRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getAnomaliesRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getAnomaliesRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetAnomalies"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, GetAnomaliesResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetAnomalies").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetAnomaliesRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getAnomaliesRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves the cost anomaly monitor definitions for your account. You can filter using a list of cost anomaly * monitor Amazon Resource Names (ARNs). *

* * @param getAnomalyMonitorsRequest * @return A Java Future containing the result of the GetAnomalyMonitors operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • UnknownMonitorException The cost anomaly monitor does not exist for the account.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetAnomalyMonitors * @see AWS API * Documentation */ @Override public CompletableFuture getAnomalyMonitors(GetAnomalyMonitorsRequest getAnomalyMonitorsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getAnomalyMonitorsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getAnomalyMonitorsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetAnomalyMonitors"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetAnomalyMonitorsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetAnomalyMonitors").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetAnomalyMonitorsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getAnomalyMonitorsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves the cost anomaly subscription objects for your account. You can filter using a list of cost anomaly * monitor Amazon Resource Names (ARNs). *

* * @param getAnomalySubscriptionsRequest * @return A Java Future containing the result of the GetAnomalySubscriptions operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • UnknownSubscriptionException The cost anomaly subscription does not exist for the account.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetAnomalySubscriptions * @see AWS * API Documentation */ @Override public CompletableFuture getAnomalySubscriptions( GetAnomalySubscriptionsRequest getAnomalySubscriptionsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getAnomalySubscriptionsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getAnomalySubscriptionsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetAnomalySubscriptions"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetAnomalySubscriptionsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetAnomalySubscriptions").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetAnomalySubscriptionsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getAnomalySubscriptionsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves estimated usage records for hourly granularity or resource-level data at daily granularity. *

* * @param getApproximateUsageRecordsRequest * @return A Java Future containing the result of the GetApproximateUsageRecords operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetApproximateUsageRecords * @see AWS * API Documentation */ @Override public CompletableFuture getApproximateUsageRecords( GetApproximateUsageRecordsRequest getApproximateUsageRecordsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getApproximateUsageRecordsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getApproximateUsageRecordsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetApproximateUsageRecords"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetApproximateUsageRecordsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetApproximateUsageRecords").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetApproximateUsageRecordsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getApproximateUsageRecordsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves cost and usage metrics for your account. You can specify which cost and usage-related metric that you * want the request to return. For example, you can specify BlendedCosts or UsageQuantity. * You can also filter and group your data by various dimensions, such as SERVICE or AZ, * in a specific time range. For a complete list of valid dimensions, see the GetDimensionValues operation. Management account in an organization in Organizations have access to all * member accounts. *

*

* For information about filter limitations, see Quotas and * restrictions in the Billing and Cost Management User Guide. *

* * @param getCostAndUsageRequest * @return A Java Future containing the result of the GetCostAndUsage operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • BillExpirationException The requested report expired. Update the date interval and try again.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • RequestChangedException Your request parameters changed between pages. Try again with the old * parameters or without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetCostAndUsage * @see AWS API * Documentation */ @Override public CompletableFuture getCostAndUsage(GetCostAndUsageRequest getCostAndUsageRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getCostAndUsageRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getCostAndUsageRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetCostAndUsage"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetCostAndUsageResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetCostAndUsage").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetCostAndUsageRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getCostAndUsageRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves cost and usage metrics with resources for your account. You can specify which cost and usage-related * metric, such as BlendedCosts or UsageQuantity, that you want the request to return. You * can also filter and group your data by various dimensions, such as SERVICE or AZ, in a * specific time range. For a complete list of valid dimensions, see the GetDimensionValues operation. Management account in an organization in Organizations have access to all * member accounts. *

*

* Hourly granularity is only available for EC2-Instances (Elastic Compute Cloud) resource-level data. All other * resource-level data is available at daily granularity. *

* *

* This is an opt-in only feature. You can enable this feature from the Cost Explorer Settings page. For information * about how to access the Settings page, see Controlling Access for Cost * Explorer in the Billing and Cost Management User Guide. *

*
* * @param getCostAndUsageWithResourcesRequest * @return A Java Future containing the result of the GetCostAndUsageWithResources operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • DataUnavailableException The requested data is unavailable.
  • *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • BillExpirationException The requested report expired. Update the date interval and try again.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • RequestChangedException Your request parameters changed between pages. Try again with the old * parameters or without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetCostAndUsageWithResources * @see AWS API Documentation */ @Override public CompletableFuture getCostAndUsageWithResources( GetCostAndUsageWithResourcesRequest getCostAndUsageWithResourcesRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getCostAndUsageWithResourcesRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getCostAndUsageWithResourcesRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetCostAndUsageWithResources"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetCostAndUsageWithResourcesResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetCostAndUsageWithResources").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetCostAndUsageWithResourcesRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getCostAndUsageWithResourcesRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves an array of Cost Category names and values incurred cost. *

* *

* If some Cost Category names and values are not associated with any cost, they will not be returned by this API. *

*
* * @param getCostCategoriesRequest * @return A Java Future containing the result of the GetCostCategories operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • BillExpirationException The requested report expired. Update the date interval and try again.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • RequestChangedException Your request parameters changed between pages. Try again with the old * parameters or without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetCostCategories * @see AWS API * Documentation */ @Override public CompletableFuture getCostCategories(GetCostCategoriesRequest getCostCategoriesRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getCostCategoriesRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getCostCategoriesRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetCostCategories"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetCostCategoriesResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetCostCategories").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetCostCategoriesRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getCostCategoriesRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves a forecast for how much Amazon Web Services predicts that you will spend over the forecast time period * that you select, based on your past costs. *

* * @param getCostForecastRequest * @return A Java Future containing the result of the GetCostForecast operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetCostForecast * @see AWS API * Documentation */ @Override public CompletableFuture getCostForecast(GetCostForecastRequest getCostForecastRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getCostForecastRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getCostForecastRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetCostForecast"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetCostForecastResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetCostForecast").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetCostForecastRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getCostForecastRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves all available filter values for a specified filter over a period of time. You can search the dimension * values for an arbitrary string. *

* * @param getDimensionValuesRequest * @return A Java Future containing the result of the GetDimensionValues operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • BillExpirationException The requested report expired. Update the date interval and try again.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • RequestChangedException Your request parameters changed between pages. Try again with the old * parameters or without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetDimensionValues * @see AWS API * Documentation */ @Override public CompletableFuture getDimensionValues(GetDimensionValuesRequest getDimensionValuesRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getDimensionValuesRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getDimensionValuesRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetDimensionValues"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetDimensionValuesResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetDimensionValues").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetDimensionValuesRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getDimensionValuesRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves the reservation coverage for your account, which you can use to see how much of your Amazon Elastic * Compute Cloud, Amazon ElastiCache, Amazon Relational Database Service, or Amazon Redshift usage is covered by a * reservation. An organization's management account can see the coverage of the associated member accounts. This * supports dimensions, Cost Categories, and nested expressions. For any time period, you can filter data about * reservation usage by the following dimensions: *

*
    *
  • *

    * AZ *

    *
  • *
  • *

    * CACHE_ENGINE *

    *
  • *
  • *

    * DATABASE_ENGINE *

    *
  • *
  • *

    * DEPLOYMENT_OPTION *

    *
  • *
  • *

    * INSTANCE_TYPE *

    *
  • *
  • *

    * LINKED_ACCOUNT *

    *
  • *
  • *

    * OPERATING_SYSTEM *

    *
  • *
  • *

    * PLATFORM *

    *
  • *
  • *

    * REGION *

    *
  • *
  • *

    * SERVICE *

    *
  • *
  • *

    * TAG *

    *
  • *
  • *

    * TENANCY *

    *
  • *
*

* To determine valid values for a dimension, use the GetDimensionValues operation. *

* * @param getReservationCoverageRequest * You can use the following request parameters to query for how much of your instance usage a reservation * covered. * @return A Java Future containing the result of the GetReservationCoverage operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetReservationCoverage * @see AWS API * Documentation */ @Override public CompletableFuture getReservationCoverage( GetReservationCoverageRequest getReservationCoverageRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getReservationCoverageRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getReservationCoverageRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetReservationCoverage"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetReservationCoverageResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetReservationCoverage").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetReservationCoverageRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getReservationCoverageRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Gets recommendations for reservation purchases. These recommendations might help you to reduce your costs. * Reservations provide a discounted hourly rate (up to 75%) compared to On-Demand pricing. *

*

* Amazon Web Services generates your recommendations by identifying your On-Demand usage during a specific time * period and collecting your usage into categories that are eligible for a reservation. After Amazon Web Services * has these categories, it simulates every combination of reservations in each category of usage to identify the * best number of each type of Reserved Instance (RI) to purchase to maximize your estimated savings. *

*

* For example, Amazon Web Services automatically aggregates your Amazon EC2 Linux, shared tenancy, and c4 family * usage in the US West (Oregon) Region and recommends that you buy size-flexible regional reservations to apply to * the c4 family usage. Amazon Web Services recommends the smallest size instance in an instance family. This makes * it easier to purchase a size-flexible Reserved Instance (RI). Amazon Web Services also shows the equal number of * normalized units. This way, you can purchase any instance size that you want. For this example, your RI * recommendation is for c4.large because that is the smallest size instance in the c4 instance family. *

* * @param getReservationPurchaseRecommendationRequest * @return A Java Future containing the result of the GetReservationPurchaseRecommendation operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetReservationPurchaseRecommendation * @see AWS API Documentation */ @Override public CompletableFuture getReservationPurchaseRecommendation( GetReservationPurchaseRecommendationRequest getReservationPurchaseRecommendationRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getReservationPurchaseRecommendationRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getReservationPurchaseRecommendationRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetReservationPurchaseRecommendation"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory .createResponseHandler(operationMetadata, GetReservationPurchaseRecommendationResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetReservationPurchaseRecommendation").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetReservationPurchaseRecommendationRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getReservationPurchaseRecommendationRequest)); CompletableFuture whenCompleted = executeFuture .whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves the reservation utilization for your account. Management account in an organization have access to * member accounts. You can filter data by dimensions in a time period. You can use GetDimensionValues * to determine the possible dimension values. Currently, you can group only by SUBSCRIPTION_ID. *

* * @param getReservationUtilizationRequest * @return A Java Future containing the result of the GetReservationUtilization operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetReservationUtilization * @see AWS * API Documentation */ @Override public CompletableFuture getReservationUtilization( GetReservationUtilizationRequest getReservationUtilizationRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getReservationUtilizationRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getReservationUtilizationRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetReservationUtilization"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetReservationUtilizationResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetReservationUtilization").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetReservationUtilizationRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getReservationUtilizationRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Creates recommendations that help you save cost by identifying idle and underutilized Amazon EC2 instances. *

*

* Recommendations are generated to either downsize or terminate instances, along with providing savings detail and * metrics. For more information about calculation and function, see Optimizing Your Cost with * Rightsizing Recommendations in the Billing and Cost Management User Guide. *

* * @param getRightsizingRecommendationRequest * @return A Java Future containing the result of the GetRightsizingRecommendation operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetRightsizingRecommendation * @see AWS API Documentation */ @Override public CompletableFuture getRightsizingRecommendation( GetRightsizingRecommendationRequest getRightsizingRecommendationRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getRightsizingRecommendationRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getRightsizingRecommendationRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetRightsizingRecommendation"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetRightsizingRecommendationResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetRightsizingRecommendation").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetRightsizingRecommendationRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getRightsizingRecommendationRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves the details for a Savings Plan recommendation. These details include the hourly data-points that * construct the cost, coverage, and utilization charts. *

* * @param getSavingsPlanPurchaseRecommendationDetailsRequest * @return A Java Future containing the result of the GetSavingsPlanPurchaseRecommendationDetails operation returned * by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetSavingsPlanPurchaseRecommendationDetails * @see AWS API Documentation */ @Override public CompletableFuture getSavingsPlanPurchaseRecommendationDetails( GetSavingsPlanPurchaseRecommendationDetailsRequest getSavingsPlanPurchaseRecommendationDetailsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration( getSavingsPlanPurchaseRecommendationDetailsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getSavingsPlanPurchaseRecommendationDetailsRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetSavingsPlanPurchaseRecommendationDetails"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory .createResponseHandler(operationMetadata, GetSavingsPlanPurchaseRecommendationDetailsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetSavingsPlanPurchaseRecommendationDetails") .withProtocolMetadata(protocolMetadata) .withMarshaller(new GetSavingsPlanPurchaseRecommendationDetailsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getSavingsPlanPurchaseRecommendationDetailsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves the Savings Plans covered for your account. This enables you to see how much of your cost is covered by * a Savings Plan. An organization’s management account can see the coverage of the associated member accounts. This * supports dimensions, Cost Categories, and nested expressions. For any time period, you can filter data for * Savings Plans usage with the following dimensions: *

*
    *
  • *

    * LINKED_ACCOUNT *

    *
  • *
  • *

    * REGION *

    *
  • *
  • *

    * SERVICE *

    *
  • *
  • *

    * INSTANCE_FAMILY *

    *
  • *
*

* To determine valid values for a dimension, use the GetDimensionValues operation. *

* * @param getSavingsPlansCoverageRequest * @return A Java Future containing the result of the GetSavingsPlansCoverage operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetSavingsPlansCoverage * @see AWS * API Documentation */ @Override public CompletableFuture getSavingsPlansCoverage( GetSavingsPlansCoverageRequest getSavingsPlansCoverageRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getSavingsPlansCoverageRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getSavingsPlansCoverageRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetSavingsPlansCoverage"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetSavingsPlansCoverageResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetSavingsPlansCoverage").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetSavingsPlansCoverageRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getSavingsPlansCoverageRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves the Savings Plans recommendations for your account. First use * StartSavingsPlansPurchaseRecommendationGeneration to generate a new set of recommendations, and then * use GetSavingsPlansPurchaseRecommendation to retrieve them. *

* * @param getSavingsPlansPurchaseRecommendationRequest * @return A Java Future containing the result of the GetSavingsPlansPurchaseRecommendation operation returned by * the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetSavingsPlansPurchaseRecommendation * @see AWS API Documentation */ @Override public CompletableFuture getSavingsPlansPurchaseRecommendation( GetSavingsPlansPurchaseRecommendationRequest getSavingsPlansPurchaseRecommendationRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getSavingsPlansPurchaseRecommendationRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getSavingsPlansPurchaseRecommendationRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetSavingsPlansPurchaseRecommendation"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory .createResponseHandler(operationMetadata, GetSavingsPlansPurchaseRecommendationResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetSavingsPlansPurchaseRecommendation").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetSavingsPlansPurchaseRecommendationRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getSavingsPlansPurchaseRecommendationRequest)); CompletableFuture whenCompleted = executeFuture .whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves the Savings Plans utilization for your account across date ranges with daily or monthly granularity. * Management account in an organization have access to member accounts. You can use GetDimensionValues * in SAVINGS_PLANS to determine the possible dimension values. *

* *

* You can't group by any dimension values for GetSavingsPlansUtilization. *

*
* * @param getSavingsPlansUtilizationRequest * @return A Java Future containing the result of the GetSavingsPlansUtilization operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetSavingsPlansUtilization * @see AWS * API Documentation */ @Override public CompletableFuture getSavingsPlansUtilization( GetSavingsPlansUtilizationRequest getSavingsPlansUtilizationRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getSavingsPlansUtilizationRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getSavingsPlansUtilizationRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetSavingsPlansUtilization"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetSavingsPlansUtilizationResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetSavingsPlansUtilization").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetSavingsPlansUtilizationRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getSavingsPlansUtilizationRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves attribute data along with aggregate utilization and savings data for a given time period. This doesn't * support granular or grouped data (daily/monthly) in response. You can't retrieve data by dates in a single * response similar to GetSavingsPlanUtilization, but you have the option to make multiple calls to * GetSavingsPlanUtilizationDetails by providing individual dates. You can use * GetDimensionValues in SAVINGS_PLANS to determine the possible dimension values. *

* *

* GetSavingsPlanUtilizationDetails internally groups data by SavingsPlansArn. *

*
* * @param getSavingsPlansUtilizationDetailsRequest * @return A Java Future containing the result of the GetSavingsPlansUtilizationDetails operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetSavingsPlansUtilizationDetails * @see AWS API Documentation */ @Override public CompletableFuture getSavingsPlansUtilizationDetails( GetSavingsPlansUtilizationDetailsRequest getSavingsPlansUtilizationDetailsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getSavingsPlansUtilizationDetailsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getSavingsPlansUtilizationDetailsRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetSavingsPlansUtilizationDetails"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory .createResponseHandler(operationMetadata, GetSavingsPlansUtilizationDetailsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetSavingsPlansUtilizationDetails").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetSavingsPlansUtilizationDetailsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getSavingsPlansUtilizationDetailsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Queries for available tag keys and tag values for a specified period. You can search the tag values for an * arbitrary string. *

* * @param getTagsRequest * @return A Java Future containing the result of the GetTags operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • BillExpirationException The requested report expired. Update the date interval and try again.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • RequestChangedException Your request parameters changed between pages. Try again with the old * parameters or without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetTags * @see AWS API * Documentation */ @Override public CompletableFuture getTags(GetTagsRequest getTagsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getTagsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getTagsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetTags"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, GetTagsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams().withOperationName("GetTags") .withProtocolMetadata(protocolMetadata).withMarshaller(new GetTagsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getTagsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves a forecast for how much Amazon Web Services predicts that you will use over the forecast time period * that you select, based on your past usage. *

* * @param getUsageForecastRequest * @return A Java Future containing the result of the GetUsageForecast operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • UnresolvableUsageUnitException Cost Explorer was unable to identify the usage unit. Provide * UsageType/UsageTypeGroup filter selections that contain matching units, for example: * hours.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.GetUsageForecast * @see AWS API * Documentation */ @Override public CompletableFuture getUsageForecast(GetUsageForecastRequest getUsageForecastRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(getUsageForecastRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, getUsageForecastRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "GetUsageForecast"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, GetUsageForecastResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("GetUsageForecast").withProtocolMetadata(protocolMetadata) .withMarshaller(new GetUsageForecastRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(getUsageForecastRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves a list of your historical cost allocation tag backfill requests. *

* * @param listCostAllocationTagBackfillHistoryRequest * @return A Java Future containing the result of the ListCostAllocationTagBackfillHistory operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.ListCostAllocationTagBackfillHistory * @see AWS API Documentation */ @Override public CompletableFuture listCostAllocationTagBackfillHistory( ListCostAllocationTagBackfillHistoryRequest listCostAllocationTagBackfillHistoryRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(listCostAllocationTagBackfillHistoryRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, listCostAllocationTagBackfillHistoryRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ListCostAllocationTagBackfillHistory"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory .createResponseHandler(operationMetadata, ListCostAllocationTagBackfillHistoryResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("ListCostAllocationTagBackfillHistory").withProtocolMetadata(protocolMetadata) .withMarshaller(new ListCostAllocationTagBackfillHistoryRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(listCostAllocationTagBackfillHistoryRequest)); CompletableFuture whenCompleted = executeFuture .whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Get a list of cost allocation tags. All inputs in the API are optional and serve as filters. By default, all cost * allocation tags are returned. *

* * @param listCostAllocationTagsRequest * @return A Java Future containing the result of the ListCostAllocationTags operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.ListCostAllocationTags * @see AWS API * Documentation */ @Override public CompletableFuture listCostAllocationTags( ListCostAllocationTagsRequest listCostAllocationTagsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(listCostAllocationTagsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, listCostAllocationTagsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ListCostAllocationTags"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, ListCostAllocationTagsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("ListCostAllocationTags").withProtocolMetadata(protocolMetadata) .withMarshaller(new ListCostAllocationTagsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(listCostAllocationTagsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Returns the name, Amazon Resource Name (ARN), NumberOfRules and effective dates of all Cost * Categories defined in the account. You have the option to use EffectiveOn to return a list of Cost * Categories that were active on a specific date. If there is no EffectiveOn specified, you’ll see * Cost Categories that are effective on the current date. If Cost Category is still effective, * EffectiveEnd is omitted in the response. ListCostCategoryDefinitions supports * pagination. The request can have a MaxResults range up to 100. *

* * @param listCostCategoryDefinitionsRequest * @return A Java Future containing the result of the ListCostCategoryDefinitions operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.ListCostCategoryDefinitions * @see AWS API Documentation */ @Override public CompletableFuture listCostCategoryDefinitions( ListCostCategoryDefinitionsRequest listCostCategoryDefinitionsRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(listCostCategoryDefinitionsRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, listCostCategoryDefinitionsRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ListCostCategoryDefinitions"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, ListCostCategoryDefinitionsResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("ListCostCategoryDefinitions").withProtocolMetadata(protocolMetadata) .withMarshaller(new ListCostCategoryDefinitionsRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(listCostCategoryDefinitionsRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Retrieves a list of your historical recommendation generations within the past 30 days. *

* * @param listSavingsPlansPurchaseRecommendationGenerationRequest * @return A Java Future containing the result of the ListSavingsPlansPurchaseRecommendationGeneration operation * returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • InvalidNextTokenException The pagination token is invalid. Try again without a pagination token.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.ListSavingsPlansPurchaseRecommendationGeneration * @see AWS API Documentation */ @Override public CompletableFuture listSavingsPlansPurchaseRecommendationGeneration( ListSavingsPlansPurchaseRecommendationGenerationRequest listSavingsPlansPurchaseRecommendationGenerationRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration( listSavingsPlansPurchaseRecommendationGenerationRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, listSavingsPlansPurchaseRecommendationGenerationRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ListSavingsPlansPurchaseRecommendationGeneration"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory .createResponseHandler(operationMetadata, ListSavingsPlansPurchaseRecommendationGenerationResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("ListSavingsPlansPurchaseRecommendationGeneration") .withProtocolMetadata(protocolMetadata) .withMarshaller( new ListSavingsPlansPurchaseRecommendationGenerationRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(listSavingsPlansPurchaseRecommendationGenerationRequest)); CompletableFuture whenCompleted = executeFuture .whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Returns a list of resource tags associated with the resource specified by the Amazon Resource Name (ARN). *

* * @param listTagsForResourceRequest * @return A Java Future containing the result of the ListTagsForResource operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The specified ARN in the request doesn't exist.
  • *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.ListTagsForResource * @see AWS API * Documentation */ @Override public CompletableFuture listTagsForResource( ListTagsForResourceRequest listTagsForResourceRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(listTagsForResourceRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, listTagsForResourceRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ListTagsForResource"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, ListTagsForResourceResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("ListTagsForResource").withProtocolMetadata(protocolMetadata) .withMarshaller(new ListTagsForResourceRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(listTagsForResourceRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Modifies the feedback property of a given cost anomaly. *

* * @param provideAnomalyFeedbackRequest * @return A Java Future containing the result of the ProvideAnomalyFeedback operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.ProvideAnomalyFeedback * @see AWS API * Documentation */ @Override public CompletableFuture provideAnomalyFeedback( ProvideAnomalyFeedbackRequest provideAnomalyFeedbackRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(provideAnomalyFeedbackRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, provideAnomalyFeedbackRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "ProvideAnomalyFeedback"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, ProvideAnomalyFeedbackResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("ProvideAnomalyFeedback").withProtocolMetadata(protocolMetadata) .withMarshaller(new ProvideAnomalyFeedbackRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(provideAnomalyFeedbackRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Request a cost allocation tag backfill. This will backfill the activation status (either active or * inactive) for all tag keys from para:BackfillFrom up to the when this request is made. *

*

* You can request a backfill once every 24 hours. *

* * @param startCostAllocationTagBackfillRequest * @return A Java Future containing the result of the StartCostAllocationTagBackfill operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • BackfillLimitExceededException A request to backfill is already in progress. Once the previous * request is complete, you can create another request.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.StartCostAllocationTagBackfill * @see AWS API Documentation */ @Override public CompletableFuture startCostAllocationTagBackfill( StartCostAllocationTagBackfillRequest startCostAllocationTagBackfillRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(startCostAllocationTagBackfillRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, startCostAllocationTagBackfillRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "StartCostAllocationTagBackfill"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, StartCostAllocationTagBackfillResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("StartCostAllocationTagBackfill").withProtocolMetadata(protocolMetadata) .withMarshaller(new StartCostAllocationTagBackfillRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(startCostAllocationTagBackfillRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Requests a Savings Plans recommendation generation. This enables you to calculate a fresh set of Savings Plans * recommendations that takes your latest usage data and current Savings Plans inventory into account. You can * refresh Savings Plans recommendations up to three times daily for a consolidated billing family. *

* *

* StartSavingsPlansPurchaseRecommendationGeneration has no request syntax because no input parameters * are needed to support this operation. *

*
* * @param startSavingsPlansPurchaseRecommendationGenerationRequest * @return A Java Future containing the result of the StartSavingsPlansPurchaseRecommendationGeneration operation * returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • ServiceQuotaExceededException You've reached the limit on the number of resources you can create, or * exceeded the size of an individual resource.
  • *
  • GenerationExistsException A request to generate a recommendation is already in progress.
  • *
  • DataUnavailableException The requested data is unavailable.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.StartSavingsPlansPurchaseRecommendationGeneration * @see AWS API Documentation */ @Override public CompletableFuture startSavingsPlansPurchaseRecommendationGeneration( StartSavingsPlansPurchaseRecommendationGenerationRequest startSavingsPlansPurchaseRecommendationGenerationRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration( startSavingsPlansPurchaseRecommendationGenerationRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, startSavingsPlansPurchaseRecommendationGenerationRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "StartSavingsPlansPurchaseRecommendationGeneration"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory .createResponseHandler(operationMetadata, StartSavingsPlansPurchaseRecommendationGenerationResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("StartSavingsPlansPurchaseRecommendationGeneration") .withProtocolMetadata(protocolMetadata) .withMarshaller( new StartSavingsPlansPurchaseRecommendationGenerationRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(startSavingsPlansPurchaseRecommendationGenerationRequest)); CompletableFuture whenCompleted = executeFuture .whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* An API operation for adding one or more tags (key-value pairs) to a resource. *

*

* You can use the TagResource operation with a resource that already has tags. If you specify a new * tag key for the resource, this tag is appended to the list of tags associated with the resource. If you specify a * tag key that is already associated with the resource, the new tag value you specify replaces the previous value * for that tag. *

*

* Although the maximum number of array members is 200, user-tag maximum is 50. The remaining are reserved for * Amazon Web Services use. *

* * @param tagResourceRequest * @return A Java Future containing the result of the TagResource operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The specified ARN in the request doesn't exist.
  • *
  • TooManyTagsException Can occur if you specify a number of tags for a resource greater than the * maximum 50 user tags per resource.
  • *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.TagResource * @see AWS API * Documentation */ @Override public CompletableFuture tagResource(TagResourceRequest tagResourceRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(tagResourceRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, tagResourceRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "TagResource"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, TagResourceResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("TagResource").withProtocolMetadata(protocolMetadata) .withMarshaller(new TagResourceRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(tagResourceRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Removes one or more tags from a resource. Specify only tag keys in your request. Don't specify the value. *

* * @param untagResourceRequest * @return A Java Future containing the result of the UntagResource operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The specified ARN in the request doesn't exist.
  • *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.UntagResource * @see AWS API * Documentation */ @Override public CompletableFuture untagResource(UntagResourceRequest untagResourceRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(untagResourceRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, untagResourceRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "UntagResource"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler(operationMetadata, UntagResourceResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("UntagResource").withProtocolMetadata(protocolMetadata) .withMarshaller(new UntagResourceRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(untagResourceRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Updates an existing cost anomaly monitor. The changes made are applied going forward, and doesn't change * anomalies detected in the past. *

* * @param updateAnomalyMonitorRequest * @return A Java Future containing the result of the UpdateAnomalyMonitor operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • UnknownMonitorException The cost anomaly monitor does not exist for the account.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.UpdateAnomalyMonitor * @see AWS API * Documentation */ @Override public CompletableFuture updateAnomalyMonitor( UpdateAnomalyMonitorRequest updateAnomalyMonitorRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(updateAnomalyMonitorRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, updateAnomalyMonitorRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "UpdateAnomalyMonitor"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, UpdateAnomalyMonitorResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("UpdateAnomalyMonitor").withProtocolMetadata(protocolMetadata) .withMarshaller(new UpdateAnomalyMonitorRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(updateAnomalyMonitorRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Updates an existing cost anomaly subscription. Specify the fields that you want to update. Omitted fields are * unchanged. *

* *

* The JSON below describes the generic construct for each type. See Request Parameters for possible values as they apply to AnomalySubscription. *

*
* * @param updateAnomalySubscriptionRequest * @return A Java Future containing the result of the UpdateAnomalySubscription operation returned by the service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • UnknownMonitorException The cost anomaly monitor does not exist for the account.
  • *
  • UnknownSubscriptionException The cost anomaly subscription does not exist for the account.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.UpdateAnomalySubscription * @see AWS * API Documentation */ @Override public CompletableFuture updateAnomalySubscription( UpdateAnomalySubscriptionRequest updateAnomalySubscriptionRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(updateAnomalySubscriptionRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, updateAnomalySubscriptionRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "UpdateAnomalySubscription"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, UpdateAnomalySubscriptionResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("UpdateAnomalySubscription").withProtocolMetadata(protocolMetadata) .withMarshaller(new UpdateAnomalySubscriptionRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(updateAnomalySubscriptionRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Updates status for cost allocation tags in bulk, with maximum batch size of 20. If the tag status that's updated * is the same as the existing tag status, the request doesn't fail. Instead, it doesn't have any effect on the tag * status (for example, activating the active tag). *

* * @param updateCostAllocationTagsStatusRequest * @return A Java Future containing the result of the UpdateCostAllocationTagsStatus operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.UpdateCostAllocationTagsStatus * @see AWS API Documentation */ @Override public CompletableFuture updateCostAllocationTagsStatus( UpdateCostAllocationTagsStatusRequest updateCostAllocationTagsStatusRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(updateCostAllocationTagsStatusRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, updateCostAllocationTagsStatusRequest.overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "UpdateCostAllocationTagsStatus"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, UpdateCostAllocationTagsStatusResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("UpdateCostAllocationTagsStatus").withProtocolMetadata(protocolMetadata) .withMarshaller(new UpdateCostAllocationTagsStatusRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(updateCostAllocationTagsStatusRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } /** *

* Updates an existing Cost Category. Changes made to the Cost Category rules will be used to categorize the current * month’s expenses and future expenses. This won’t change categorization for the previous months. *

* * @param updateCostCategoryDefinitionRequest * @return A Java Future containing the result of the UpdateCostCategoryDefinition operation returned by the * service.
* The CompletableFuture returned by this method can be completed exceptionally with the following * exceptions. The exception returned is wrapped with CompletionException, so you need to invoke * {@link Throwable#getCause} to retrieve the underlying exception. *
    *
  • ResourceNotFoundException The specified ARN in the request doesn't exist.
  • *
  • ServiceQuotaExceededException You've reached the limit on the number of resources you can create, or * exceeded the size of an individual resource.
  • *
  • LimitExceededException You made too many calls in a short period of time. Try again later.
  • *
  • SdkException Base class for all exceptions that can be thrown by the SDK (both service and client). * Can be used for catch all scenarios.
  • *
  • SdkClientException If any client side error occurs such as an IO related failure, failure to get * credentials, etc.
  • *
  • CostExplorerException Base class for all service exceptions. Unknown exceptions will be thrown as an * instance of this type.
  • *
* @sample CostExplorerAsyncClient.UpdateCostCategoryDefinition * @see AWS API Documentation */ @Override public CompletableFuture updateCostCategoryDefinition( UpdateCostCategoryDefinitionRequest updateCostCategoryDefinitionRequest) { SdkClientConfiguration clientConfiguration = updateSdkClientConfiguration(updateCostCategoryDefinitionRequest, this.clientConfiguration); List metricPublishers = resolveMetricPublishers(clientConfiguration, updateCostCategoryDefinitionRequest .overrideConfiguration().orElse(null)); MetricCollector apiCallMetricCollector = metricPublishers.isEmpty() ? NoOpMetricCollector.create() : MetricCollector .create("ApiCall"); try { apiCallMetricCollector.reportMetric(CoreMetric.SERVICE_ID, "Cost Explorer"); apiCallMetricCollector.reportMetric(CoreMetric.OPERATION_NAME, "UpdateCostCategoryDefinition"); JsonOperationMetadata operationMetadata = JsonOperationMetadata.builder().hasStreamingSuccessResponse(false) .isPayloadJson(true).build(); HttpResponseHandler responseHandler = protocolFactory.createResponseHandler( operationMetadata, UpdateCostCategoryDefinitionResponse::builder); HttpResponseHandler errorResponseHandler = createErrorResponseHandler(protocolFactory, operationMetadata); CompletableFuture executeFuture = clientHandler .execute(new ClientExecutionParams() .withOperationName("UpdateCostCategoryDefinition").withProtocolMetadata(protocolMetadata) .withMarshaller(new UpdateCostCategoryDefinitionRequestMarshaller(protocolFactory)) .withResponseHandler(responseHandler).withErrorResponseHandler(errorResponseHandler) .withRequestConfiguration(clientConfiguration).withMetricCollector(apiCallMetricCollector) .withInput(updateCostCategoryDefinitionRequest)); CompletableFuture whenCompleted = executeFuture.whenComplete((r, e) -> { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); }); executeFuture = CompletableFutureUtils.forwardExceptionTo(whenCompleted, executeFuture); return executeFuture; } catch (Throwable t) { metricPublishers.forEach(p -> p.publish(apiCallMetricCollector.collect())); return CompletableFutureUtils.failedFuture(t); } } @Override public final CostExplorerServiceClientConfiguration serviceClientConfiguration() { return new CostExplorerServiceClientConfigurationBuilder(this.clientConfiguration.toBuilder()).build(); } @Override public final String serviceName() { return SERVICE_NAME; } private > T init(T builder) { return builder .clientConfiguration(clientConfiguration) .defaultServiceExceptionSupplier(CostExplorerException::builder) .protocol(AwsJsonProtocol.AWS_JSON) .protocolVersion("1.1") .registerModeledException( ExceptionMetadata.builder().errorCode("GenerationExistsException") .exceptionBuilderSupplier(GenerationExistsException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("UnresolvableUsageUnitException") .exceptionBuilderSupplier(UnresolvableUsageUnitException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("UnknownSubscriptionException") .exceptionBuilderSupplier(UnknownSubscriptionException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("RequestChangedException") .exceptionBuilderSupplier(RequestChangedException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("DataUnavailableException") .exceptionBuilderSupplier(DataUnavailableException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("ServiceQuotaExceededException") .exceptionBuilderSupplier(ServiceQuotaExceededException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("BackfillLimitExceededException") .exceptionBuilderSupplier(BackfillLimitExceededException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("InvalidNextTokenException") .exceptionBuilderSupplier(InvalidNextTokenException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("LimitExceededException") .exceptionBuilderSupplier(LimitExceededException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("ResourceNotFoundException") .exceptionBuilderSupplier(ResourceNotFoundException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("UnknownMonitorException") .exceptionBuilderSupplier(UnknownMonitorException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("TooManyTagsException") .exceptionBuilderSupplier(TooManyTagsException::builder).httpStatusCode(400).build()) .registerModeledException( ExceptionMetadata.builder().errorCode("BillExpirationException") .exceptionBuilderSupplier(BillExpirationException::builder).httpStatusCode(400).build()); } private static List resolveMetricPublishers(SdkClientConfiguration clientConfiguration, RequestOverrideConfiguration requestOverrideConfiguration) { List publishers = null; if (requestOverrideConfiguration != null) { publishers = requestOverrideConfiguration.metricPublishers(); } if (publishers == null || publishers.isEmpty()) { publishers = clientConfiguration.option(SdkClientOption.METRIC_PUBLISHERS); } if (publishers == null) { publishers = Collections.emptyList(); } return publishers; } private SdkClientConfiguration updateSdkClientConfiguration(SdkRequest request, SdkClientConfiguration clientConfiguration) { List plugins = request.overrideConfiguration().map(c -> c.plugins()).orElse(Collections.emptyList()); SdkClientConfiguration.Builder configuration = clientConfiguration.toBuilder(); if (plugins.isEmpty()) { return configuration.build(); } CostExplorerServiceClientConfigurationBuilder serviceConfigBuilder = new CostExplorerServiceClientConfigurationBuilder( configuration); for (SdkPlugin plugin : plugins) { plugin.configureClient(serviceConfigBuilder); } return configuration.build(); } private HttpResponseHandler createErrorResponseHandler(BaseAwsJsonProtocolFactory protocolFactory, JsonOperationMetadata operationMetadata) { return protocolFactory.createErrorResponseHandler(operationMetadata); } @Override public void close() { clientHandler.close(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy