Example usage for com.amazonaws.services.cloudformation.model DescribeStackEventsResult getNextToken

List of usage examples for com.amazonaws.services.cloudformation.model DescribeStackEventsResult getNextToken

Introduction

In this page you can find the example usage for com.amazonaws.services.cloudformation.model DescribeStackEventsResult getNextToken.

Prototype


public String getNextToken() 

Source Link

Document

If the output exceeds 1 MB in size, a string that identifies the next page of events.

Usage

From source file:com.deploymentio.cfnstacker.CloudFormationClient.java

License:Apache License

/**
 * Gets all non-progress events for stack that were generated after a
 * certain time. This method will ignore any "throttling" error from AWS and
 * return empty results./* www  . j a  va  2  s.c  o  m*/
 * 
 * @param stackId unique ID for the stack
 * @param startDate only events after this time are considered
 * @return a list of stack events
 */
public List<StackEvent> getStackEvents(String stackId, Date startDate, OperationTracker tracker,
        int checkIntervalSeconds) {

    ArrayList<StackEvent> events = new ArrayList<StackEvent>();
    DescribeStackEventsResult result = null;
    String nextToken = null;

    doLoop: do {
        try {
            result = client.describeStackEvents(new DescribeStackEventsRequest().withStackName(stackId));
        } catch (AmazonServiceException ase) {
            if ("Throttling".equals(ase.getErrorCode())) {
                logger.warn("Got a throttling error from AWS while calling describeStackEvents()");
                break;
            } else {
                throw ase;
            }
        }
        nextToken = result.getNextToken();

        for (StackEvent evt : result.getStackEvents()) {

            // break out if we start seeing events older than our start date
            if (!evt.getTimestamp().after(startDate)) {
                if (logger.isTraceEnabled()) {
                    logger.trace(createStackEventLogMessage(evt, startDate, "Saw event older than startdate"));
                }
                break doLoop;
            }

            // mark that an event was generated
            if (tracker != null) {
                tracker.markEventsGenerated(stackId);
            }

            // ignore IN_PROGRESS events
            if (!evt.getResourceStatus().endsWith("_IN_PROGRESS")) {
                if (logger.isTraceEnabled()) {
                    logger.trace(createStackEventLogMessage(evt, startDate, "Adding event"));
                }
                events.add(evt);
            } else {
                if (logger.isTraceEnabled()) {
                    logger.trace(createStackEventLogMessage(evt, startDate, "Ignorning event"));
                }
            }

            // start tracking a sub-stack if we come across one
            if (tracker != null && evt.getResourceType().equals("AWS::CloudFormation::Stack")
                    && !evt.getPhysicalResourceId().equals(stackId)) {
                tracker.track(this, evt.getLogicalResourceId(), evt.getPhysicalResourceId(),
                        checkIntervalSeconds);
            }
        }

    } while (!StringUtils.isEmpty(nextToken));

    // sort the events
    Collections.sort(events, new Comparator<StackEvent>() {
        @Override
        public int compare(StackEvent e1, StackEvent e2) {
            return e1.getTimestamp().compareTo(e2.getTimestamp());
        }
    });

    return events;
}

From source file:com.mweagle.tereus.aws.CloudFormation.java

License:Open Source License

protected List<StackEvent> getStackEvents(final AmazonCloudFormationAsyncClient awsClient,
        final String stackName, Logger logger) throws Exception {
    List<StackEvent> events = new ArrayList<StackEvent>();
    Optional<String> token = Optional.empty();

    final DescribeStackEventsRequest describeRequest = new DescribeStackEventsRequest();
    describeRequest.setStackName(stackName);
    do {/*from   w w  w  . ja  va2s .c o  m*/
        if (token.isPresent()) {
            describeRequest.setNextToken(token.get());
        }
        final Future<DescribeStackEventsResult> stackEvents = awsClient
                .describeStackEventsAsync(describeRequest);
        DescribeStackEventsResult eventResult = stackEvents.get();
        events.addAll(eventResult.getStackEvents());
        token = Optional.ofNullable(eventResult.getNextToken());
    } while (token.isPresent());
    return events;
}