package dials.dial;
import dials.datastore.CountTuple;
import dials.messages.ContextualMessage;
import dials.model.FilterDialModel;
import java.math.BigDecimal;
public class DialHelper {
public static String ATTEMPTED = "attempted";
private FilterDialModel dial;
public DialHelper(FilterDialModel dial) {
this.dial = dial;
}
public String getDialPattern(ContextualMessage message) {
if (dial != null) {
CountTuple tuple = getCountTuple(dial, message);
if (tuple != null) {
String dialIncreaseResult = determineDialIncreaseEligibility(dial, tuple, message);
if (!dialIncreaseResult.equals("")) {
return dialIncreaseResult;
}
String dialDecreaseResult = determineDialDecreaseEligibility(dial, tuple, message);
if (!dialDecreaseResult.equals("")) {
return dialDecreaseResult;
}
return ATTEMPTED;
}
}
return "";
}
private CountTuple getCountTuple(FilterDialModel dial, ContextualMessage message) {
CountTuple tuple = new CountTuple(message.getFeature().getExecution().getExecutions(),
message.getFeature().getExecution().getErrors());
if (dial.getFrequency() + (dial.getFrequency() * dial.getAttempts()) > tuple.getExecutions()) {
return null;
}
return tuple;
}
private String determineDialIncreaseEligibility(FilterDialModel dial, CountTuple tuple, ContextualMessage message) {
if (tuple.getRateOfSuccess().compareTo(new BigDecimal(dial.getIncreaseThreshold())) >= 0) {
return dial.getIncreasePattern();
}
message.getExecutionContext().addExecutionStep("Filter not eligible for Dial increase.");
return "";
}
private String determineDialDecreaseEligibility(FilterDialModel dial, CountTuple tuple, ContextualMessage message) {
if (tuple.getRateOfSuccess().compareTo(new BigDecimal(dial.getDecreaseThreshold())) < 0) {
return dial.getDecreasePattern();
}
message.getExecutionContext().addExecutionStep("Filter not eligible for Dial decrease.");
return "";
}
}