Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<groupId>com.switcherapi</groupId>
<artifactId>switcher-client</artifactId>
<packaging>jar</packaging>
<version>1.9.0</version>
<version>1.9.1</version>

<name>Switcher Client</name>
<description>Switcher Client SDK for working with Switcher API</description>
Expand Down
10 changes: 2 additions & 8 deletions src/main/java/com/switcherapi/client/model/SwitcherRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import java.util.*;

/**
* SwitcherRequest are the entry point to evaluate criteria and return the result.
* SwitcherRequest is the entry point to evaluate criteria and return the result.
* <br>To execute a criteria evaluation, use one of the available methods: {@link #isItOn()}.
*
* @author Roger Floriano (petruki)
Expand All @@ -19,12 +19,6 @@
* @see #submit()
*/
public final class SwitcherRequest extends SwitcherBuilder {

public static final String KEY = "key";

public static final String SHOW_REASON = "showReason";

public static final String BYPASS_METRIC = "bypassMetric";

private final SwitcherExecutor switcherExecutor;

Expand Down Expand Up @@ -150,7 +144,7 @@ private boolean canUseAsync() {

private Optional<SwitcherResult> getFromHistory() {
for (SwitcherResult switcherResult : historyExecution) {
if (switcherResult.getEntry().equals(getEntry())) {
if (switcherResult.getEntry().equals(entry)) {
return Optional.of(switcherResult);
}
}
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/switcherapi/client/remote/ClientWS.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,21 @@ public interface ClientWS {
* Returns array of switcher keys not found
*/
String CHECK_SWITCHERS = "%s/criteria/switchers_check";

/**
* Constant for query params (Switcher Key)
*/
String KEY = "key";

/**
* Constant for query params (Show Reason)
*/
String SHOW_REASON = "showReason";

/**
* Constant for query params (Bypass Metric)
*/
String BYPASS_METRIC = "bypassMetric";

/**
* Returns the verification configured for a specific switcher (key)
Expand Down
7 changes: 3 additions & 4 deletions src/main/java/com/switcherapi/client/remote/ClientWSImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.switcherapi.client.SwitcherProperties;
import com.switcherapi.client.exception.SwitcherRemoteException;
import com.switcherapi.client.model.ContextKey;
import com.switcherapi.client.model.SwitcherRequest;
import com.switcherapi.client.model.criteria.Snapshot;
import com.switcherapi.client.remote.dto.*;

Expand Down Expand Up @@ -47,9 +46,9 @@ public static ClientWS build(SwitcherProperties switcherProperties, ExecutorServ
public CriteriaResponse executeCriteria(final CriteriaRequest criteriaRequest, final String token) {
final String url = switcherProperties.getValue(ContextKey.URL);
final WebTarget myResource = client.target(String.format(CRITERIA_URL, url))
.queryParam(SwitcherRequest.KEY, criteriaRequest.getSwitcherKey())
.queryParam(SwitcherRequest.SHOW_REASON, Boolean.TRUE)
.queryParam(SwitcherRequest.BYPASS_METRIC, criteriaRequest.isBypassMetric());
.queryParam(KEY, criteriaRequest.getSwitcherKey())
.queryParam(SHOW_REASON, Boolean.TRUE)
.queryParam(BYPASS_METRIC, criteriaRequest.isBypassMetric());

try {
final Response response = myResource.request(MediaType.APPLICATION_JSON)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,24 +104,24 @@ public boolean notifyChange(final String snapshotFile) {
}

@Override
public SwitcherResult executeCriteria(final SwitcherRequest switcher) {
SwitcherUtils.debug(logger, "[Local] request: {}", switcher);
public SwitcherResult executeCriteria(final SwitcherRequest switcherRequest) {
SwitcherUtils.debug(logger, "[Local] request: {}", switcherRequest);

SwitcherResult response;
try {
if (switcher.isRemote()) {
response = Mapper.mapFrom(this.clientRemote.executeCriteria(Mapper.mapFrom(switcher)));
if (switcherRequest.isRemote()) {
response = Mapper.mapFrom(this.clientRemote.executeCriteria(Mapper.mapFrom(switcherRequest)), switcherRequest);
SwitcherUtils.debug(logger, "[Remote] response: {}", response);
} else {
response = this.clientLocal.executeCriteria(switcher, this.domain);
response = this.clientLocal.executeCriteria(switcherRequest, this.domain);
SwitcherUtils.debug(logger, "[Local] response: {}", response);
}
} catch (SwitcherKeyNotFoundException e) {
if (StringUtils.isBlank(switcher.getDefaultResult())) {
if (StringUtils.isBlank(switcherRequest.getDefaultResult())) {
throw e;
}

response = SwitcherFactory.buildFromDefault(switcher);
response = SwitcherFactory.buildFromDefault(switcherRequest);
SwitcherUtils.debug(logger, "[Default] response: {}", response);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,17 @@ public SwitcherRemoteService(final ClientRemote clientRemote, final SwitcherExec
}

@Override
public SwitcherResult executeCriteria(final SwitcherRequest switcher) {
SwitcherUtils.debug(logger, "[Remote] request: {}", switcher);
public SwitcherResult executeCriteria(final SwitcherRequest switcherRequest) {
SwitcherUtils.debug(logger, "[Remote] request: {}", switcherRequest);

try {
final CriteriaResponse response = this.clientRemote.executeCriteria(Mapper.mapFrom(switcher));
final CriteriaResponse response = this.clientRemote.executeCriteria(Mapper.mapFrom(switcherRequest));
SwitcherUtils.debug(logger, "[Remote] response: {}", response);

return Mapper.mapFrom(response);
return Mapper.mapFrom(response, switcherRequest);
} catch (final SwitcherRemoteException e) {
logger.error("Failed to execute criteria - Cause: {}", e.getMessage(), e.getCause());
return tryExecuteLocalCriteria(switcher, e);
return tryExecuteLocalCriteria(switcherRequest, e);
}
}

Expand Down
4 changes: 3 additions & 1 deletion src/main/java/com/switcherapi/client/utils/Mapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ public static CriteriaRequest mapFrom(final SwitcherRequest switcher) {
return request;
}

public static SwitcherResult mapFrom(final CriteriaResponse criteriaResponse) {
public static SwitcherResult mapFrom(final CriteriaResponse criteriaResponse,
final SwitcherRequest switcherRequest) {
SwitcherResult switcherResult = new SwitcherResult();
switcherResult.setSwitcherKey(criteriaResponse.getSwitcherKey());
switcherResult.setResult(criteriaResponse.getResult());
switcherResult.setReason(criteriaResponse.getReason());
switcherResult.setMetadata(criteriaResponse.getMetadata());
switcherResult.setEntry(switcherRequest.getEntry());
return switcherResult;
}
}
10 changes: 6 additions & 4 deletions src/test/java/com/switcherapi/client/SwitcherThrottleTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,18 @@ void resetSwitcherContextState() {
void shouldReturnTrue_withThrottle() {
Switchers.initializeClient();

// Throttled call
// Initial remote call
givenResponse(generateMockAuth(10)); //auth
givenResponse(generateCriteriaResponse("true", false)); //criteria
givenResponse(generateCriteriaResponse("true", false)); //criteria - sync (cached)

// After throttle
givenResponse(generateCriteriaResponse("false", false)); //criteria
// Throttle period - should use cache
givenResponse(generateCriteriaResponse("false", false)); //criteria - async (background)
givenResponse(generateCriteriaResponse("false", false)); //criteria - async after 1 sec (background)

//test
Switcher switcher = Switchers
.getSwitcher(Switchers.REMOTE_KEY)
.checkValue("value")
.throttle(1000);

for (int i = 0; i < 100; i++) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,13 @@ void shouldExecuteCriteria() {
SwitcherProperties switcherProperties = Switchers.getSwitcherProperties();
SwitcherValidator validatorService = new ValidatorService();
ClientLocal clientLocal = new ClientLocalService(validatorService);
SwitcherRequest switcher = new SwitcherRequest(
SwitcherRequest switcherRequest = new SwitcherRequest(
"KEY",
new SwitcherRemoteService(clientRemote, new SwitcherLocalService(clientRemote, clientLocal, switcherProperties)),
switcherProperties);

//test
SwitcherResult actual = Mapper.mapFrom(clientRemote.executeCriteria(Mapper.mapFrom(switcher)));
SwitcherResult actual = Mapper.mapFrom(clientRemote.executeCriteria(Mapper.mapFrom(switcherRequest)), switcherRequest);
assertTrue(actual.isItOn());
}

Expand Down