diff --git a/arex-schedule-web-api/pom.xml b/arex-schedule-web-api/pom.xml index 7abf3215..a32717db 100644 --- a/arex-schedule-web-api/pom.xml +++ b/arex-schedule-web-api/pom.xml @@ -143,7 +143,7 @@ arex-schedule-parent com.arextest - 1.0.39 + 1.0.40 @@ -280,5 +280,5 @@ - 1.0.39 + 1.0.40 \ No newline at end of file diff --git a/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/CompareConfigService.java b/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/CompareConfigService.java index 43402bf3..7f73bdff 100644 --- a/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/CompareConfigService.java +++ b/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/CompareConfigService.java @@ -11,6 +11,7 @@ import com.arextest.schedule.model.converter.ReplayConfigConverter; import com.arextest.schedule.progress.ProgressEvent; import com.arextest.schedule.utils.MapUtils; +import com.arextest.web.model.contract.contracts.config.SystemConfig; import com.arextest.web.model.contract.contracts.config.replay.ReplayCompareConfig; import com.arextest.web.model.contract.contracts.config.replay.ReplayCompareConfig.DependencyComparisonItem; import com.fasterxml.jackson.databind.ObjectMapper; @@ -29,6 +30,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.ResponseEntity; +import org.springframework.retry.support.RetryTemplate; import org.springframework.stereotype.Component; /** @@ -46,53 +48,60 @@ public final class CompareConfigService { private CacheProvider redisCacheProvider; @Value("${arex.api.config.comparison.summary.url}") private String summaryConfigUrl; + @Value("${arex.api.config.system.url}") + private String systemConfigUrl; @Resource private ProgressEvent progressEvent; @Resource private ObjectMapper objectMapper; - private static Map convertOperationConfig( - List operationConfigs) { - Map res = new HashMap<>(); + private static final RetryTemplate RETRY_TEMPLATE = RetryTemplate.builder().maxAttempts(3) + .fixedBackoff(200L) + .build(); + private static final long DEFAULT_COMPARE_IGNORE_TIME_PRECISION_MILLIS = 2000; + private static final boolean DEFAULT_COMPARE_NAME_TO_LOWER = true; + private static final boolean DEFAULT_COMPARE_NULL_EQUALS_EMPTY = true; + private static final boolean DEFAULT_COMPARE_ONLY_COMPARE_COINCIDENT_COLUMN = true; + private static final boolean DEFAULT_COMPARE_SELECT_IGNORE_COMPARE = true; + private static final boolean DEFAULT_COMPARE_UUID_IGNORE = true; - for (ReplayCompareConfig.ReplayComparisonItem source : operationConfigs) { - String operationId = source.getOperationId(); - if (StringUtils.isBlank(operationId)) { - LOGGER.warn("operation id is blank, operationId: {}", operationId); - continue; - } + private static SystemConfig systemConfig = null; - ComparisonInterfaceConfig converted = ReplayConfigConverter.INSTANCE.interfaceDaoFromDto( - source); - List sourceDependencyConfigs = source.getDependencyComparisonItems(); - converted.setDependencyConfigMap(convertDependencyConfig(sourceDependencyConfigs)); - DependencyComparisonItem defaultDependencyComparisonItem = source.getDefaultDependencyComparisonItem(); - converted.setDefaultDependencyConfig( - ReplayConfigConverter.INSTANCE.dependencyDaoFromDto(defaultDependencyComparisonItem)); - res.put(operationId, converted); + public SystemConfig getComparisonSystemConfig() { + + if (systemConfig != null) { + return systemConfig; } - return res; - } + ResponseEntity> response = RETRY_TEMPLATE.execute(context -> { + ResponseEntity> temp = httpWepServiceApiClient.get( + systemConfigUrl, Collections.emptyMap(), + new ParameterizedTypeReference>() { + }); - private static Map convertDependencyConfig( - List dependencyConfigs) { - Map res = new HashMap<>(); - - for (ReplayCompareConfig.DependencyComparisonItem source : dependencyConfigs) { - if (CollectionUtils.isEmpty(source.getOperationTypes()) || StringUtils.isBlank( - source.getOperationName())) { - LOGGER.warn("dependency type or name is blank, dependencyId: {}", source.getDependencyId()); - continue; + if (temp == null || temp.getBody() == null || temp.getBody().getBody() == null) { + throw new RuntimeException("get compare system config failed"); + } else { + return temp; } - - String dependencyKey = ComparisonDependencyConfig.dependencyKey(source); - ComparisonDependencyConfig converted = ReplayConfigConverter.INSTANCE.dependencyDaoFromDto( - source); - res.put(dependencyKey, converted); + }, retryContext -> null); + + if (response == null || response.getBody() == null || response.getBody().getBody() == null) { + LOGGER.error("get compare system config failed"); + SystemConfig defaultConfig = new SystemConfig(); + defaultConfig.setCompareIgnoreTimePrecisionMillis( + DEFAULT_COMPARE_IGNORE_TIME_PRECISION_MILLIS); + defaultConfig.setCompareNameToLower(DEFAULT_COMPARE_NAME_TO_LOWER); + defaultConfig.setCompareNullEqualsEmpty(DEFAULT_COMPARE_NULL_EQUALS_EMPTY); + defaultConfig.setOnlyCompareCoincidentColumn(DEFAULT_COMPARE_ONLY_COMPARE_COINCIDENT_COLUMN); + defaultConfig.setSelectIgnoreCompare(DEFAULT_COMPARE_SELECT_IGNORE_COMPARE); + defaultConfig.setUuidIgnore(DEFAULT_COMPARE_UUID_IGNORE); + systemConfig = defaultConfig; + } else { + systemConfig = response.getBody().getBody(); } - return res; + return systemConfig; } public void preload(ReplayPlan plan) { @@ -125,33 +134,6 @@ public void preload(ReplayPlan plan) { progressEvent.onCompareConfigLoaded(plan); } - private Map getReplayComparisonConfig( - ReplayPlan plan) { - Map urlVariables = Collections.singletonMap("appId", plan.getAppId()); - - ResponseEntity> replayComparisonConfigEntity = - httpWepServiceApiClient.get(summaryConfigUrl, urlVariables, - new ParameterizedTypeReference>() { - }); - - if (replayComparisonConfigEntity == null) { - return new HashMap<>(); - } - - List operationConfigs = Optional.ofNullable( - replayComparisonConfigEntity.getBody()) - .map(GenericResponseType::getBody) - .map(ReplayCompareConfig::getReplayComparisonItems) - .orElse(Collections.emptyList()); - // TODO: add the log of the ComparisonConfig - - // converts - Map opConverted = convertOperationConfig(operationConfigs); - this.setContractChangeFlag(opConverted, - replayComparisonConfigEntity.getBody().getBody().getSkipAssemble()); - return opConverted; - } - public ComparisonInterfaceConfig loadInterfaceConfig(ReplayActionItem actionItem) { return this.loadInterfaceConfig(actionItem.getId()); } @@ -193,6 +175,77 @@ public ComparisonGlobalConfig loadGlobalConfig(String planId) { return ComparisonGlobalConfig.empty(); } + private Map getReplayComparisonConfig( + ReplayPlan plan) { + Map urlVariables = Collections.singletonMap("appId", plan.getAppId()); + + ResponseEntity> replayComparisonConfigEntity = + httpWepServiceApiClient.get(summaryConfigUrl, urlVariables, + new ParameterizedTypeReference>() { + }); + + if (replayComparisonConfigEntity == null) { + return new HashMap<>(); + } + + List operationConfigs = Optional.ofNullable( + replayComparisonConfigEntity.getBody()) + .map(GenericResponseType::getBody) + .map(ReplayCompareConfig::getReplayComparisonItems) + .orElse(Collections.emptyList()); + // TODO: add the log of the ComparisonConfig + + // converts + Map opConverted = convertOperationConfig(operationConfigs); + this.setContractChangeFlag(opConverted, + replayComparisonConfigEntity.getBody().getBody().getSkipAssemble()); + return opConverted; + } + + private static Map convertOperationConfig( + List operationConfigs) { + Map res = new HashMap<>(); + + for (ReplayCompareConfig.ReplayComparisonItem source : operationConfigs) { + String operationId = source.getOperationId(); + if (StringUtils.isBlank(operationId)) { + LOGGER.warn("operation id is blank, operationId: {}", operationId); + continue; + } + + ComparisonInterfaceConfig converted = ReplayConfigConverter.INSTANCE.interfaceDaoFromDto( + source); + List sourceDependencyConfigs = source.getDependencyComparisonItems(); + converted.setDependencyConfigMap(convertDependencyConfig(sourceDependencyConfigs)); + DependencyComparisonItem defaultDependencyComparisonItem = source.getDefaultDependencyComparisonItem(); + converted.setDefaultDependencyConfig( + ReplayConfigConverter.INSTANCE.dependencyDaoFromDto(defaultDependencyComparisonItem)); + res.put(operationId, converted); + } + + return res; + } + + private static Map convertDependencyConfig( + List dependencyConfigs) { + Map res = new HashMap<>(); + + for (ReplayCompareConfig.DependencyComparisonItem source : dependencyConfigs) { + if (CollectionUtils.isEmpty(source.getOperationTypes()) || StringUtils.isBlank( + source.getOperationName())) { + LOGGER.warn("dependency type or name is blank, dependencyId: {}", source.getDependencyId()); + continue; + } + + String dependencyKey = ComparisonDependencyConfig.dependencyKey(source); + ComparisonDependencyConfig converted = ReplayConfigConverter.INSTANCE.dependencyDaoFromDto( + source); + res.put(dependencyKey, converted); + } + + return res; + } + private T byteToObject(byte[] bytes, Class tClass) { try { return objectMapper.readValue(bytes, tClass); diff --git a/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/impl/DefaultCustomComparisonConfigurationHandler.java b/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/impl/DefaultCustomComparisonConfigurationHandler.java index f47e8511..6894e6da 100644 --- a/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/impl/DefaultCustomComparisonConfigurationHandler.java +++ b/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/impl/DefaultCustomComparisonConfigurationHandler.java @@ -76,10 +76,6 @@ public ReplayComparisonConfig pickConfig(ComparisonGlobalConfig globalConfig, public CompareOptions buildSkdOption(String category, ReplayComparisonConfig compareConfig) { CompareOptions options = new CompareOptions(); options.putCategoryType(category); - // todo: the switch of "sqlBodyParse" and "onlyCompareCoincidentColumn" - // need get from ReplayComparisonConfig - options.putSelectIgnoreCompare(true); - options.putOnlyCompareCoincidentColumn(true); if (Objects.equals(category, MockCategoryType.DATABASE.getName())) { options.putExclusions(DEFAULT_DATABASE_IGNORE); } diff --git a/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/impl/DefaultReplayResultComparer.java b/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/impl/DefaultReplayResultComparer.java index 12d8dab8..ffe7d1da 100644 --- a/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/impl/DefaultReplayResultComparer.java +++ b/arex-schedule-web-api/src/main/java/com/arextest/schedule/comparer/impl/DefaultReplayResultComparer.java @@ -24,17 +24,16 @@ import com.arextest.schedule.model.config.ReplayComparisonConfig; import com.arextest.schedule.progress.ProgressTracer; import com.arextest.schedule.service.MetricService; -import java.io.IOException; -import java.io.InputStream; +import com.arextest.web.model.contract.contracts.config.SystemConfig; import java.util.ArrayList; import java.util.Base64; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Properties; import java.util.Set; import java.util.stream.Collectors; +import javax.annotation.PostConstruct; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.extern.slf4j.Slf4j; @@ -54,19 +53,17 @@ public class DefaultReplayResultComparer implements ReplayResultComparer { private static final String IGNORE_TIME_PRECISION_MILLIS_KEY = "ignore.time.precision.millis"; private static long ignoreTimePrecisionMillis = 2000; - static { - Properties props = new Properties(); - try (InputStream input = DefaultReplayResultComparer.class.getResourceAsStream( - APPLICATION_PROPERTIES_NAME)) { - props.load(input); - ignoreTimePrecisionMillis = Long.parseLong( - props.getProperty(IGNORE_TIME_PRECISION_MILLIS_KEY)); - } catch (IOException e) { - LOGGER.error("failed to get ignore time precision millis {}", e.getMessage(), e); - } - - COMPARE_INSTANCE.getGlobalOptions().putNameToLower(true).putNullEqualsEmpty(true) - .putIgnoredTimePrecision(ignoreTimePrecisionMillis); + @PostConstruct + public void init() { + SystemConfig comparisonSystemConfig = compareConfigService.getComparisonSystemConfig(); + COMPARE_INSTANCE.getGlobalOptions() + .putNameToLower(comparisonSystemConfig.getCompareNameToLower()) + .putNullEqualsEmpty(comparisonSystemConfig.getCompareNullEqualsEmpty()) + .putIgnoredTimePrecision(comparisonSystemConfig.getCompareIgnoreTimePrecisionMillis()) + .putIgnoreNodeSet(comparisonSystemConfig.getIgnoreNodeSet()) + .putSelectIgnoreCompare(comparisonSystemConfig.getSelectIgnoreCompare()) + .putOnlyCompareCoincidentColumn(comparisonSystemConfig.getOnlyCompareCoincidentColumn()) + .putUuidIgnore(comparisonSystemConfig.getUuidIgnore()); } private final CompareConfigService compareConfigService; diff --git a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/AbstractCompareDetailConfig.java b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/AbstractCompareDetailConfig.java index 60126301..e235ae28 100644 --- a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/AbstractCompareDetailConfig.java +++ b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/AbstractCompareDetailConfig.java @@ -6,6 +6,7 @@ /** * Created by rchen9 on 2022/9/19. */ +@Deprecated @Getter @Setter public abstract class AbstractCompareDetailConfig { diff --git a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareExclusionsConfig.java b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareExclusionsConfig.java index c09d03ac..31ea2428 100644 --- a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareExclusionsConfig.java +++ b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareExclusionsConfig.java @@ -6,6 +6,7 @@ /** * Created by rchen9 on 2022/9/19. */ +@Deprecated @Data public class CompareExclusionsConfig extends AbstractCompareDetailConfig { diff --git a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareInclusionsConfig.java b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareInclusionsConfig.java index 2cb16e5c..3958e8d3 100644 --- a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareInclusionsConfig.java +++ b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareInclusionsConfig.java @@ -6,6 +6,7 @@ /** * Created by rchen9 on 2022/9/19. */ +@Deprecated @Data public class CompareInclusionsConfig extends AbstractCompareDetailConfig { diff --git a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareListSortConfig.java b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareListSortConfig.java index 8cdfd5ca..a3c77cd1 100644 --- a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareListSortConfig.java +++ b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareListSortConfig.java @@ -6,6 +6,7 @@ /** * Created by rchen9 on 2022/9/20. */ +@Deprecated @Data public class CompareListSortConfig extends AbstractCompareDetailConfig { diff --git a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareReferenceConfig.java b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareReferenceConfig.java index 3b5dc37b..f587b325 100644 --- a/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareReferenceConfig.java +++ b/arex-schedule-web-api/src/main/java/com/arextest/schedule/model/config/CompareReferenceConfig.java @@ -6,6 +6,7 @@ /** * Created by rchen9 on 2022/9/20. */ +@Deprecated @Data public class CompareReferenceConfig extends AbstractCompareDetailConfig { diff --git a/arex-schedule-web-api/src/main/resources/application.properties b/arex-schedule-web-api/src/main/resources/application.properties index d0f4ffc9..99967d65 100644 --- a/arex-schedule-web-api/src/main/resources/application.properties +++ b/arex-schedule-web-api/src/main/resources/application.properties @@ -11,12 +11,12 @@ arex.storage.replayCase.url=${arex.storage.service.api}/api/storage/replay/query arex.storage.postProcess.url=${arex.storage.service.api}/api/storage/replay/postprocessResult #for arex-api arex.api.init.url=${arex.api.service.api}/api/report/init -# deprecated arex.api.push.compareResult.url=${arex.api.service.api}/api/report/pushCompareResults arex.api.push.compareResult.url=${arex.api.service.api}/api/report/analyzeCompareResults arex.api.push.replayStatus.url=${arex.api.service.api}/api/report/pushReplayStatus arex.api.update.report.info.url=${arex.api.service.api}/api/report/updateReportInfo arex.api.remove.records.url=${arex.api.service.api}/api/report/removeRecordsAndScenes #for schedule +arex.api.config.system.url=${arex.api.service.api}/api/system/config/list arex.api.config.comparison.summary.url=${arex.api.service.api}/api/config/comparison/summary/queryByAppId/{appId} arex.api.config.schedule.url=${arex.api.service.api}/api/config/schedule/useResult/appId/{appId} arex.api.config.applicationService.url=${arex.api.service.api}/api/config/applicationService/useResultAsList/appId/{appId} diff --git a/pom.xml b/pom.xml index c4db53cd..219a4e2d 100644 --- a/pom.xml +++ b/pom.xml @@ -263,7 +263,7 @@ pom 3.3.2 - 0.1.27 + 0.2.0 2.0.23 20.0 0.7.5.201505241946 @@ -294,7 +294,7 @@ ${jacoco.report.path} 2.6.3 - 0.6.0.4 + 0.6.0.7 @@ -304,5 +304,5 @@ https://github.com/arextest/arex-replay-schedule https://github.com/arextest/arex-replay-schedule - 1.0.39 + 1.0.40 \ No newline at end of file