package software.amazon.lightsail.staticip; import software.amazon.cloudformation.proxy.StdCallbackContext; import software.amazon.cloudformation.proxy.delay.Constant; import java.time.Duration; import java.util.HashMap; import java.util.Map; @lombok.Getter @lombok.Setter @lombok.ToString @lombok.EqualsAndHashCode(callSuper = true) public class CallbackContext extends StdCallbackContext { public static final Constant BACKOFF_DELAY = Constant.of().delay(Duration.ofSeconds(20)) .timeout(Duration.ofMinutes(25)).build(); public static String PRE_CHECK_CREATE = "preCheckCreate"; public static String POST_CHECK_CREATE = "postCheckCreate"; public static String PRE_CHECK_UPDATE = "preCheckUpdate"; private Map isPreCheckDone = new HashMap<>(); private Map waitCount = new HashMap<>(); private Integer maxWaitCount = 60; private Integer postCreateWaitCount = 1; public int getWaitCount(final String key) { return this.waitCount.getOrDefault(key, 0); } public void incrementWaitCount(final String key) { this.waitCount.put(key, getWaitCount(key) + 1); } public boolean isWaitCountReached(final String key) { int maxWait = this.maxWaitCount; if (key.equalsIgnoreCase(POST_CHECK_CREATE)) { maxWait = this.postCreateWaitCount; } return this.getWaitCount(key) >= maxWait; } public boolean getIsPreCheckDone(final String key) { return this.isPreCheckDone.getOrDefault(key, false); } }