public ProgressEvent handleRequest()

in aws-iot-fleetmetric/src/main/java/com/amazonaws/iot/fleetmetric/UpdateHandler.java [39:93]


    public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
            AmazonWebServicesClientProxy proxy,
            ResourceHandlerRequest<ResourceModel> request,
            CallbackContext callbackContext,
            Logger logger) {

        ResourceModel desiredModel = request.getDesiredResourceState();
        String desiredArn = desiredModel.getMetricArn();
        if (!StringUtils.isEmpty(desiredArn)) {
            logger.log(String.format("MetricArn is read-only, but the caller passed %s. Ignored.", desiredModel.getMetricArn()));
        }

        try {
            UpdateFleetMetricRequest updateFleetMetricRequest = UpdateFleetMetricRequest.builder()
                    .metricName(desiredModel.getMetricName())
                    .description(desiredModel.getDescription())
                    .queryString(desiredModel.getQueryString())
                    .period(desiredModel.getPeriod())
                    .aggregationField(desiredModel.getAggregationField())
                    .queryVersion(desiredModel.getQueryVersion())
                    .indexName(desiredModel.getIndexName())
                    .unit(desiredModel.getUnit())
                    .aggregationType(AggregationType.builder()
                            .name(desiredModel.getAggregationType().getName())
                            .values(desiredModel.getAggregationType().getValues())
                            .build())
                    .build();

            proxy.injectCredentialsAndInvokeV2(updateFleetMetricRequest,
                    iotClient::updateFleetMetric);

            logger.log(String.format("UpdateFleetMetric for %s.", desiredModel.getMetricName()));
        } catch (RuntimeException e) {
            ProgressEvent<ResourceModel, CallbackContext> event = Translator.translateExceptionToProgressEvent(desiredModel, e, logger);
            return event;
        }

        // For an existing resource, we have to update via TagResource API, Update API doesn't take tags.
        try {
            DescribeFleetMetricRequest describeFleetMetricRequest = DescribeFleetMetricRequest.builder()
                    .metricName(desiredModel.getMetricName())
                    .build();
            DescribeFleetMetricResponse describeFleetMetricResponse = proxy.injectCredentialsAndInvokeV2(
                    describeFleetMetricRequest, iotClient::describeFleetMetric);
            String actualArn = describeFleetMetricResponse.metricArn();

            logger.log(String.format("DescribeFleetMetric for %s.", desiredModel.getMetricName()));

            updateTags(proxy, request, actualArn, logger);
        } catch (RuntimeException e) {
            return Translator.translateExceptionToProgressEvent(desiredModel, e, logger);
        }

        return ProgressEvent.defaultSuccessHandler(request.getDesiredResourceState());
    }