private async Task ReadNewEventsAsync()

in src/AWS.Deploy.CLI/CloudFormation/StackEventMonitor.cs [75:136]


        private async Task ReadNewEventsAsync()
        {
            var stackEvents = new List<StackEvent>();

            var describeStackEventsRequest = new DescribeStackEventsRequest { StackName = _stackName };
            var listStacksPaginator = _cloudFormationClient.Paginators.DescribeStackEvents(describeStackEventsRequest);

            try
            {
                var breakPaginator = false;
                await foreach (var response in listStacksPaginator.Responses)
                {
                    foreach (var stackEvent in response?.StackEvents ?? new List<StackEvent>())
                    {
                        // Event from before we are interested in
                        if (stackEvent.Timestamp < _startTime)
                        {
                            breakPaginator = true;
                            break;
                        }

                        // Already processed event
                        if (_processedEventIds.Contains(stackEvent.EventId))
                        {
                            breakPaginator = true;
                            break;
                        }

                        // New event, save it
                        _processedEventIds.Add(stackEvent.EventId);
                        stackEvents.Add(stackEvent);
                    }

                    if (breakPaginator)
                    {
                        break;
                    }
                }
            }
            catch (AmazonCloudFormationException exception) when (exception.ErrorCode.Equals("ValidationError") && exception.Message.Equals($"Stack [{_stackName}] does not exist"))
            {
                // Stack is deleted, there could be some missed events between the last poll timestamp and DELETE_COMPLETE
                _interactiveService.WriteDebugLine(exception.PrettyPrint());
            }
            catch (AmazonCloudFormationException exception)
            {
                // Other AmazonCloudFormationException
                _interactiveService.WriteDebugLine(exception.PrettyPrint());
            }

            foreach (var stackEvent in stackEvents.OrderBy(e => e.Timestamp))
            {
                var row = new[]
                {
                    (stackEvent.Timestamp.ToString(CultureInfo.InvariantCulture), TIMESTAMP_WIDTH),
                    (stackEvent.ResourceStatus.ToString(), RESOURCE_STATUS_WIDTH),
                    (stackEvent.ResourceType.Truncate(RESOURCE_TYPE_WIDTH, true), RESOURCE_TYPE_WIDTH),
                    (stackEvent.LogicalResourceId, LOGICAL_RESOURCE_WIDTH),
                };
                _consoleUtilities.DisplayRow(row);
            }
        }