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
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<sonar.coverage.exclusions>
**/model/**/*.java,
**/remote/dto/*.java,
**/utils/Utils.java,
**/exception/**/*.java,
**/service/validators/RegexValidatorV8.java,
**/client/remote/Constants.java
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public boolean isItOn() throws SwitcherException {
@Override
public SwitcherResult submit() throws SwitcherException {
if (SwitcherExecutor.getBypass().containsKey(switcherKey)) {
return SwitcherExecutor.getBypass().get(switcherKey).buildFromSwitcher(this);
return SwitcherExecutor.getBypass().get(switcherKey).buildFromSwitcher(switcherKey, entry);
}

if (canUseAsync()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
package com.github.switcherapi.client.model;

import java.util.*;

import com.github.switcherapi.client.remote.dto.CriteriaResponse;
import com.google.gson.Gson;

import java.util.*;

/**
* @author Roger Floriano (petruki)
* @since 2019-12-24
*/
public class SwitcherResult {

private static final String DEFAULT_REASON = "Default result";
public static final String DEFAULT_REASON = "Default result";

private static final String DEFAULT_SUCCESS = "Success";
public static final String DEFAULT_SUCCESS = "Success";

private boolean result;

Expand All @@ -32,22 +31,22 @@ public SwitcherResult() {
entry = new ArrayList<>();
}

private SwitcherResult(final boolean result, final String reason, final Switcher switcher) {
public SwitcherResult(String switcherKey, boolean result, String reason, List<Entry> entry) {
this();
this.result = result;
this.reason = reason;
this.switcherKey = switcher.getSwitcherKey();
this.entry = switcher.getEntry();
this.switcherKey = switcherKey;
this.entry = entry;
}

public SwitcherResult buildFromSwitcher(Switcher switcher) {
this.switcherKey = switcher.getSwitcherKey();
this.entry = switcher.getEntry();
public SwitcherResult buildFromSwitcher(String switcherKey, List<Entry> entry) {
this.switcherKey = switcherKey;
this.entry = entry;

if (Objects.nonNull(entry)) {
for (Entry inputEntry : entry) {
if (!isEntryMatching(inputEntry)) {
return new SwitcherResult(!this.result, this.reason, switcher);
return new SwitcherResult(switcherKey, !this.result, this.reason, entry);
}
}
}
Expand All @@ -60,27 +59,6 @@ private boolean isEntryMatching(Entry inputEntry) {
entryWhen.get(inputEntry.getStrategy()).contains(inputEntry.getInput());
}

public static SwitcherResult buildFromDefault(Switcher switcher) {
return new SwitcherResult(Boolean.parseBoolean(switcher.getDefaultResult()), DEFAULT_REASON, switcher);
}

public static SwitcherResult buildResultFail(String reason, Switcher switcher) {
return new SwitcherResult(Boolean.FALSE, reason, switcher);
}

public static SwitcherResult buildResultSuccess(Switcher switcher) {
return new SwitcherResult(Boolean.TRUE, DEFAULT_SUCCESS, switcher);
}

public static SwitcherResult buildResultFromRemote(CriteriaResponse criteriaResponse) {
SwitcherResult switcherResult = new SwitcherResult();
switcherResult.setSwitcherKey(criteriaResponse.getSwitcherKey());
switcherResult.setResult(criteriaResponse.getResult());
switcherResult.setReason(criteriaResponse.getReason());
switcherResult.setMetadata(criteriaResponse.getMetadata());
return switcherResult;
}

public boolean isItOn() {
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public CriteriaResponse executeCriteria(final CriteriaRequest criteriaRequest, f
final HttpResponse<String> response = client.send(HttpRequest.newBuilder()
.uri(uri)
.headers(HEADER_AUTHORIZATION, String.format(TOKEN_TEXT, token),
CONTENT_TYPE[0], CONTENT_TYPE[1])
HEADER_CONTENT_TYPE, HEADER_JSON)
.timeout(Duration.ofMillis(timeoutMs))
.POST(HttpRequest.BodyPublishers.ofString(gson.toJson(criteriaRequest.getInputRequest())))
.build(), HttpResponse.BodyHandlers.ofString());
Expand Down Expand Up @@ -92,7 +92,7 @@ public Optional<AuthResponse> auth() {
final HttpResponse<String> response = client.send(HttpRequest.newBuilder()
.uri(URI.create(String.format(AUTH_URL, url)))
.headers(HEADER_APIKEY, switcherProperties.getValue(ContextKey.APIKEY),
CONTENT_TYPE[0], CONTENT_TYPE[1])
HEADER_CONTENT_TYPE, HEADER_JSON)
.timeout(Duration.ofMillis(timeoutMs))
.POST(HttpRequest.BodyPublishers.ofString(gson.toJson(authRequest))
).build(), HttpResponse.BodyHandlers.ofString());
Expand All @@ -115,7 +115,7 @@ public Snapshot resolveSnapshot(final String token) {
final HttpResponse<String> response = client.send(HttpRequest.newBuilder()
.uri(URI.create(String.format(SNAPSHOT_URL, url)))
.headers(HEADER_AUTHORIZATION, String.format(TOKEN_TEXT, token),
CONTENT_TYPE[0], CONTENT_TYPE[1])
HEADER_CONTENT_TYPE, HEADER_JSON)
.timeout(Duration.ofMillis(timeoutMs))
.POST(HttpRequest.BodyPublishers.ofString(String.format(QUERY,
switcherProperties.getValue(ContextKey.DOMAIN),
Expand All @@ -141,7 +141,7 @@ public SnapshotVersionResponse checkSnapshotVersion(final long version, final St
final HttpResponse<String> response = client.send(HttpRequest.newBuilder()
.uri(URI.create(String.format(SNAPSHOT_VERSION_CHECK, url, version)))
.headers(HEADER_AUTHORIZATION, String.format(TOKEN_TEXT, token),
CONTENT_TYPE[0], CONTENT_TYPE[1])
HEADER_CONTENT_TYPE, HEADER_JSON)
.timeout(Duration.ofMillis(timeoutMs))
.GET().build(), HttpResponse.BodyHandlers.ofString());

Expand Down Expand Up @@ -181,7 +181,7 @@ public SwitchersCheck checkSwitchers(Set<String> switchers, final String token)
.uri(URI.create(String.format(CHECK_SWITCHERS, url)))
.timeout(Duration.ofMillis(timeoutMs))
.headers(HEADER_AUTHORIZATION, String.format(TOKEN_TEXT, token),
CONTENT_TYPE[0], CONTENT_TYPE[1])
HEADER_CONTENT_TYPE, HEADER_JSON)
.POST(HttpRequest.BodyPublishers.ofString(gson.toJson(new SwitchersCheck(switchers)))
).build(), HttpResponse.BodyHandlers.ofString());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ public final class Constants {
public static final int DEFAULT_POOL_SIZE = 2;
public static final String HEADER_AUTHORIZATION = "Authorization";
public static final String HEADER_APIKEY = "switcher-api-key";
public static final String HEADER_CONTENT_TYPE = "Content-Type";
public static final String HEADER_JSON = "application/json";
public static final String TOKEN_TEXT = "Bearer %s";
public static final String[] CONTENT_TYPE = { "Content-Type", "application/json" };

public static final String QUERY =
"{\"query\":\"{ domain(name: \\\"%s\\\", environment: \\\"%s\\\", _component: \\\"%s\\\") { " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,11 @@ public boolean isExpired() {
return (this.exp * 1000) < System.currentTimeMillis();
}

@Override
public String toString() {
return "AuthResponse{" +
"token='" + token + '\'' +
", exp=" + exp +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.github.switcherapi.client.remote.dto;

import com.github.switcherapi.client.model.Entry;
import com.github.switcherapi.client.model.Switcher;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -15,26 +14,30 @@ public class CriteriaRequest {

private boolean bypassMetric;

public static CriteriaRequest build(final Switcher switcher) {
final CriteriaRequest request = new CriteriaRequest();
request.switcherKey = switcher.getSwitcherKey();
request.entry = switcher.getEntry();
request.bypassMetric = switcher.isBypassMetrics();
return request;
}

public String getSwitcherKey() {
return switcherKey;
}

public void setSwitcherKey(String switcherKey) {
this.switcherKey = switcherKey;
}

public List<Entry> getEntry() {
return entry;
}

public void setEntry(List<Entry> entry) {
this.entry = entry;
}

public boolean isBypassMetric() {
return bypassMetric;
}

public void setBypassMetric(boolean bypassMetric) {
this.bypassMetric = bypassMetric;
}

/**
* This method builds up the request made by the client to reach the Switcher API.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,10 @@ public void setStatus(boolean status) {
this.status = status;
}

@Override
public String toString() {
return "SnapshotVersionResponse{" +
"status=" + status +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.github.switcherapi.client.service;

import com.github.switcherapi.client.model.Switcher;
import com.github.switcherapi.client.model.SwitcherResult;

import static com.github.switcherapi.client.model.SwitcherResult.DEFAULT_REASON;
import static com.github.switcherapi.client.model.SwitcherResult.DEFAULT_SUCCESS;

public class SwitcherFactory {

private SwitcherFactory() {}

public static SwitcherResult buildFromDefault(Switcher switcher) {
return new SwitcherResult(
switcher.getSwitcherKey(),
Boolean.parseBoolean(switcher.getDefaultResult()),
DEFAULT_REASON, switcher.getEntry());
}

public static SwitcherResult buildResultFail(String reason, Switcher switcher) {
return new SwitcherResult(switcher.getSwitcherKey(), Boolean.FALSE, reason, switcher.getEntry());
}

public static SwitcherResult buildResultSuccess(Switcher switcher) {
return new SwitcherResult(switcher.getSwitcherKey(), Boolean.TRUE, DEFAULT_SUCCESS, switcher.getEntry());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.github.switcherapi.client.model.criteria.Group;
import com.github.switcherapi.client.model.criteria.Strategy;
import com.github.switcherapi.client.model.SwitcherResult;
import com.github.switcherapi.client.service.SwitcherFactory;
import com.github.switcherapi.client.service.SwitcherValidator;
import com.github.switcherapi.client.utils.SwitcherUtils;
import org.apache.commons.lang3.ArrayUtils;
Expand Down Expand Up @@ -63,7 +64,7 @@ public List<String> checkSwitchers(final Set<String> switchers, final Domain dom
@Override
public SwitcherResult executeCriteria(final Switcher switcher, final Domain domain) {
if (!domain.isActivated()) {
return SwitcherResult.buildResultFail(DISABLED_DOMAIN, switcher);
return SwitcherFactory.buildResultFail(DISABLED_DOMAIN, switcher);
}

Config config;
Expand All @@ -80,18 +81,18 @@ public SwitcherResult executeCriteria(final Switcher switcher, final Domain doma

private SwitcherResult getSwitcherResult(Switcher switcher, Group group, Config config) {
if (!group.isActivated()) {
return SwitcherResult.buildResultFail(DISABLED_GROUP, switcher);
return SwitcherFactory.buildResultFail(DISABLED_GROUP, switcher);
}

if (!config.isActivated()) {
return SwitcherResult.buildResultFail(DISABLED_CONFIG, switcher);
return SwitcherFactory.buildResultFail(DISABLED_CONFIG, switcher);
}

if (ArrayUtils.isNotEmpty(config.getStrategies())) {
return this.processOperation(config.getStrategies(), switcher.getEntry(), switcher);
}

return SwitcherResult.buildResultSuccess(switcher);
return SwitcherFactory.buildResultSuccess(switcher);
}

private Config findConfigInGroup(final Group group, final String switcherKey) {
Expand Down Expand Up @@ -129,11 +130,11 @@ private SwitcherResult processOperation(final Strategy[] configStrategies, final
}
}

return SwitcherResult.buildResultSuccess(switcher);
return SwitcherFactory.buildResultSuccess(switcher);
}

private SwitcherResult strategyFailed(Switcher switcher, Strategy strategy, String pattern) {
return SwitcherResult.buildResultFail(String.format(pattern, strategy.getStrategy()), switcher);
return SwitcherFactory.buildResultFail(String.format(pattern, strategy.getStrategy()), switcher);
}

private Entry tryGetSwitcherInput(final List<Entry> input, Strategy strategy) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@

import com.github.switcherapi.client.SwitcherExecutor;
import com.github.switcherapi.client.SwitcherProperties;
import com.github.switcherapi.client.exception.*;
import com.github.switcherapi.client.exception.SwitcherException;
import com.github.switcherapi.client.exception.SwitcherKeyNotFoundException;
import com.github.switcherapi.client.exception.SwitcherSnapshotLoadException;
import com.github.switcherapi.client.exception.SwitchersValidationException;
import com.github.switcherapi.client.model.ContextKey;
import com.github.switcherapi.client.model.Switcher;
import com.github.switcherapi.client.remote.dto.CriteriaRequest;
import com.github.switcherapi.client.model.SwitcherResult;
import com.github.switcherapi.client.service.SwitcherFactory;
import com.github.switcherapi.client.service.remote.ClientRemote;
import com.github.switcherapi.client.utils.Mapper;
import com.github.switcherapi.client.utils.SnapshotEventHandler;
import com.github.switcherapi.client.utils.SnapshotLoader;
import com.github.switcherapi.client.utils.SwitcherUtils;
Expand Down Expand Up @@ -106,7 +110,7 @@ public SwitcherResult executeCriteria(final Switcher switcher) {
SwitcherResult response;
try {
if (switcher.isRemote()) {
response = SwitcherResult.buildResultFromRemote(this.clientRemote.executeCriteria(CriteriaRequest.build(switcher)));
response = Mapper.mapFrom(this.clientRemote.executeCriteria(Mapper.mapFrom(switcher)));
SwitcherUtils.debug(logger, "[Remote] response: {}", response);
} else {
response = this.clientLocal.executeCriteria(switcher, this.domain);
Expand All @@ -117,7 +121,7 @@ public SwitcherResult executeCriteria(final Switcher switcher) {
throw e;
}

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
import com.github.switcherapi.client.exception.SwitchersValidationException;
import com.github.switcherapi.client.model.ContextKey;
import com.github.switcherapi.client.model.Switcher;
import com.github.switcherapi.client.remote.dto.SwitchersCheck;
import com.github.switcherapi.client.remote.dto.CriteriaRequest;
import com.github.switcherapi.client.model.SwitcherResult;
import com.github.switcherapi.client.remote.dto.CriteriaResponse;
import com.github.switcherapi.client.remote.dto.SwitchersCheck;
import com.github.switcherapi.client.service.SwitcherFactory;
import com.github.switcherapi.client.utils.Mapper;
import com.github.switcherapi.client.utils.SwitcherUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
Expand Down Expand Up @@ -40,10 +41,10 @@ public SwitcherResult executeCriteria(final Switcher switcher) {
SwitcherUtils.debug(logger, "[Remote] request: {}", switcher);

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

return SwitcherResult.buildResultFromRemote(response);
return Mapper.mapFrom(response);
} catch (final SwitcherRemoteException e) {
logger.error("Failed to execute criteria - Cause: {}", e.getMessage(), e.getCause());
return tryExecuteLocalCriteria(switcher, e);
Expand All @@ -60,7 +61,7 @@ private SwitcherResult tryExecuteLocalCriteria(final Switcher switcher,
}

if (StringUtils.isNotBlank(switcher.getDefaultResult())) {
final SwitcherResult response = SwitcherResult.buildFromDefault(switcher);
final SwitcherResult response = SwitcherFactory.buildFromDefault(switcher);
SwitcherUtils.debug(logger, "[Default] response: {}", response);

return response;
Expand Down
Loading