Skip to content

Commit

Permalink
Improve logging. Change to do all drift requests in parallel instead …
Browse files Browse the repository at this point in the history
…of seriually
  • Loading branch information
cartwrightian committed Jan 15, 2019
1 parent e3ea1b0 commit d34e334
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/tw/com/providers/CFNClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ private DescribeStackDriftDetectionStatusResponse getDriftQueryStatus(String dri

public DriftStatus getDriftDetectionResult(String stackName, String detectionId) {
DescribeStackDriftDetectionStatusResponse query = getDriftQueryStatus(detectionId);
if (query.detectionStatus().equals(StackDriftDetectionStatus.DETECTION_COMPLETE)) {
if (!query.detectionStatus().equals(StackDriftDetectionStatus.DETECTION_COMPLETE)) {
logger.info(String.format("Drift detection failed for query: %s status: %s reason: %s",
detectionId,query.detectionStatus(), query.detectionStatusReason()));
}
Expand Down
33 changes: 26 additions & 7 deletions src/tw/com/repository/CfnRepository.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package tw.com.repository;

import software.amazon.awssdk.services.cloudformation.model.*;
import software.amazon.awssdk.services.cloudformation.model.Stack;
import software.amazon.awssdk.services.ec2.model.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -12,9 +13,8 @@
import tw.com.exceptions.*;
import tw.com.providers.CFNClient;

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;

import static java.lang.String.format;

Expand Down Expand Up @@ -276,13 +276,32 @@ private CFNClient.DriftStatus getStackDrift(String name) throws InterruptedExcep

@Override
public List<StackEntry> getStackDrifts(ProjectAndEnv projectAndEnv) {
// name -> query ID
Map<String,String> refIds = new HashMap<>();
List<StackEntry> stacks = getStacks(projectAndEnv);
for (StackEntry stackEntry: stacks) {
stacks.forEach(stackEntry -> refIds.put(stackEntry.getStackName(),formationClient.detectDrift(stackEntry.getStackName())));

Collection<String> stillInProgress = refIds.values();
while (!stillInProgress.isEmpty()) {
try {
CFNClient.DriftStatus drift = getStackDrift(stackEntry.getStackName());
stackEntry.setDriftStatus(drift);
Thread.sleep(STATUS_CHECK_INTERVAL_MILLIS);
stillInProgress = stillInProgress.stream().filter(id -> formationClient.driftDetectionInProgress(id)).collect(Collectors.toList());
} catch (InterruptedException e) {
logger.warn("Unable to check drift status of stack " + stackEntry, e);
logger.warn("Exception while checking drift status", e);
break;
}
}

if (!stillInProgress.isEmpty()) {
logger.warn("Unable to check drift status of all stacks");
}

for (StackEntry stackEntry: stacks) {
String stackName = stackEntry.getStackName();
String refId = refIds.get(stackName);
if (!stillInProgress.contains(refId)) {
CFNClient.DriftStatus drift = formationClient.getDriftDetectionResult(stackName, refId);
stackEntry.setDriftStatus(drift);
}
}
return stacks;
Expand Down

0 comments on commit d34e334

Please sign in to comment.