This is an automated email from the ASF dual-hosted git repository. min pushed a commit to branch new-config-format in repository https://gitbox.apache.org/repos/asf/dubbo-admin.git
commit 3e92b5f17be0f206039607cdc08b6e7c60a101a4 Author: nzomkxia <[email protected]> AuthorDate: Thu Jul 4 16:30:42 2019 +0800 change the format of config in zk --- .../apache/dubbo/admin/common/util/Constants.java | 3 ++ .../org/apache/dubbo/admin/common/util/Tool.java | 17 +++++++ .../dubbo/admin/controller/AccessesController.java | 21 ++++---- .../controller/ConditionRoutesController.java | 32 ++++++------ .../admin/controller/LoadBalanceController.java | 20 ++++---- .../admin/controller/OverridesController.java | 32 ++++++------ .../dubbo/admin/controller/WeightController.java | 20 ++++---- .../dubbo/admin/service/OverrideService.java | 16 +++--- .../apache/dubbo/admin/service/RouteService.java | 12 ++--- .../admin/service/impl/OverrideServiceImpl.java | 55 +++++++++++--------- .../dubbo/admin/service/impl/RouteServiceImpl.java | 59 ++++++++++++---------- .../admin/controller/AccessesControllerTest.java | 18 ++++--- .../controller/ConditionRoutesControllerTest.java | 25 ++++----- .../controller/LoadBalanceControllerTest.java | 20 ++++---- .../src/components/governance/AccessControl.vue | 3 +- .../src/components/governance/LoadBalance.vue | 8 +-- .../src/components/governance/Overrides.vue | 12 +++-- .../src/components/governance/RoutingRule.vue | 12 +++-- .../src/components/governance/WeightAdjust.vue | 8 +-- 19 files changed, 224 insertions(+), 169 deletions(-) diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java index 141caa8..f0743aa 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java @@ -27,7 +27,10 @@ public class Constants { public static final String METADATA_ADDRESS = "dubbo.metadata-report.address"; public static final String DEFAULT_ROOT = "dubbo"; public static final String PATH_SEPARATOR = "/"; + public static final String DOT = "."; + public static final String COLON = ":"; public static final String GROUP_KEY = "group"; + public static final String DUBBO_GROUP = "dubbo"; public static final String CONFIG_KEY = "config"; public static final String DUBBO_PROPERTY = "dubbo.properties"; public static final String PROVIDER_SIDE = "provider"; diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Tool.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Tool.java index 602263c..2b3cd91 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Tool.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Tool.java @@ -16,6 +16,8 @@ */ package org.apache.dubbo.admin.common.util; +import org.apache.dubbo.common.utils.StringUtils; + /** * Tool * @@ -55,4 +57,19 @@ public class Tool { } return null; } + + public static String encodeKey(String key) { + String interfaze = getInterface(key); + String group = getGroup(key); + String version = getVersion(key); + String encodeKey = interfaze + Constants.COLON; + if (StringUtils.isNotEmpty(version)) { + encodeKey = encodeKey + version; + } + encodeKey = encodeKey + Constants.COLON; + if (StringUtils.isNotEmpty(group)) { + encodeKey = encodeKey + group; + } + return encodeKey; + } } diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java index 3510e54..a6bb2a6 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java @@ -21,6 +21,7 @@ import org.apache.dubbo.admin.common.exception.ParamValidationException; import org.apache.dubbo.admin.common.exception.ResourceNotFoundException; import org.apache.dubbo.admin.common.exception.VersionValidationException; import org.apache.dubbo.admin.common.util.Constants; +import org.apache.dubbo.admin.common.util.ConvertUtil; import org.apache.dubbo.admin.model.dto.AccessDTO; import org.apache.dubbo.admin.model.dto.ConditionRouteDTO; import org.apache.dubbo.admin.service.ProviderService; @@ -65,9 +66,9 @@ public class AccessesController { List<AccessDTO> accessDTOS = new ArrayList<>(); AccessDTO accessDTO; if (StringUtils.isNotBlank(application)) { - accessDTO = routeService.findAccess(application); + accessDTO = routeService.findAccess(application, false); } else { - accessDTO = routeService.findAccess(service); + accessDTO = routeService.findAccess(service, true); } if (accessDTO != null) { accessDTO.setEnabled(true); @@ -76,17 +77,17 @@ public class AccessesController { return accessDTOS; } - @RequestMapping(value = "/{id}", method = RequestMethod.GET) - public AccessDTO detailAccess(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET) + public AccessDTO detailAccess(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - AccessDTO accessDTO = routeService.findAccess(id); + AccessDTO accessDTO = routeService.findAccess(id, type.equals(Constants.SERVICE)); return accessDTO; } - @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) - public void deleteAccess(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE) + public void deleteAccess(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - routeService.deleteAccess(id); + routeService.deleteAccess(id, type.equals(Constants.SERVICE)); } @RequestMapping(method = RequestMethod.POST) @@ -107,9 +108,9 @@ public class AccessesController { @RequestMapping(value = "/{id}", method = RequestMethod.PUT) public void updateAccess(@PathVariable String id, @RequestBody AccessDTO accessDTO, @PathVariable String env) { - + String type = ConvertUtil.getScopeFromDTO(accessDTO); id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - ConditionRouteDTO route = routeService.findConditionRoute(id); + ConditionRouteDTO route = routeService.findConditionRoute(id, type.equals(Constants.SERVICE)); if (Objects.isNull(route)) { throw new ResourceNotFoundException("Unknown ID!"); } diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java index 8486d3e..9017fb5 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java @@ -22,6 +22,7 @@ import org.apache.dubbo.admin.common.exception.ParamValidationException; import org.apache.dubbo.admin.common.exception.ResourceNotFoundException; import org.apache.dubbo.admin.common.exception.VersionValidationException; import org.apache.dubbo.admin.common.util.Constants; +import org.apache.dubbo.admin.common.util.ConvertUtil; import org.apache.dubbo.admin.model.dto.ConditionRouteDTO; import org.apache.dubbo.admin.service.ProviderService; import org.apache.dubbo.admin.service.RouteService; @@ -69,7 +70,8 @@ public class ConditionRoutesController { @RequestMapping(value = "/{id}", method = RequestMethod.PUT) public boolean updateRule(@PathVariable String id, @RequestBody ConditionRouteDTO newConditionRoute, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - ConditionRouteDTO oldConditionRoute = routeService.findConditionRoute(id); + String type = ConvertUtil.getScopeFromDTO(newConditionRoute); + ConditionRouteDTO oldConditionRoute = routeService.findConditionRoute(id, type.equals(Constants.SERVICE)); if (oldConditionRoute == null) { throw new ResourceNotFoundException("can not find route rule for: " + id); } @@ -83,9 +85,9 @@ public class ConditionRoutesController { ConditionRouteDTO conditionRoute = null; List<ConditionRouteDTO> result = new ArrayList<>(); if (StringUtils.isNotBlank(application)) { - conditionRoute = routeService.findConditionRoute(application); + conditionRoute = routeService.findConditionRoute(application, false); } else if (StringUtils.isNotBlank(service)) { - conditionRoute = routeService.findConditionRoute(service); + conditionRoute = routeService.findConditionRoute(service, true); } else { throw new ParamValidationException("Either Service or application is required."); } @@ -95,34 +97,34 @@ public class ConditionRoutesController { return result; } - @RequestMapping(value = "/{id}", method = RequestMethod.GET) - public ConditionRouteDTO detailRoute(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET) + public ConditionRouteDTO detailRoute(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - ConditionRouteDTO conditionRoute = routeService.findConditionRoute(id); + ConditionRouteDTO conditionRoute = routeService.findConditionRoute(id, type.equals(Constants.SERVICE)); if (conditionRoute == null || conditionRoute.getConditions() == null) { throw new ResourceNotFoundException("Unknown ID!"); } return conditionRoute; } - @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) - public boolean deleteRoute(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE) + public boolean deleteRoute(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - routeService.deleteConditionRoute(id); + routeService.deleteConditionRoute(id, type.equals(Constants.SERVICE)); return true; } - @RequestMapping(value = "/enable/{id}", method = RequestMethod.PUT) - public boolean enableRoute(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/enable/{type}/{id}", method = RequestMethod.PUT) + public boolean enableRoute(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - routeService.enableConditionRoute(id); + routeService.enableConditionRoute(id, type.equals(Constants.SERVICE)); return true; } - @RequestMapping(value = "/disable/{id}", method = RequestMethod.PUT) - public boolean disableRoute(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/disable/{type}/{id}", method = RequestMethod.PUT) + public boolean disableRoute(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - routeService.disableConditionRoute(id); + routeService.disableConditionRoute(id, type.equals(Constants.SERVICE)); return true; } diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java index 3daad1f..0ae2c7c 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java @@ -22,6 +22,7 @@ import org.apache.dubbo.admin.common.exception.ParamValidationException; import org.apache.dubbo.admin.common.exception.ResourceNotFoundException; import org.apache.dubbo.admin.common.exception.VersionValidationException; import org.apache.dubbo.admin.common.util.Constants; +import org.apache.dubbo.admin.common.util.ConvertUtil; import org.apache.dubbo.admin.model.dto.BalancingDTO; import org.apache.dubbo.admin.service.OverrideService; import org.apache.dubbo.admin.service.ProviderService; @@ -72,7 +73,8 @@ public class LoadBalanceController { throw new ParamValidationException("Unknown ID!"); } id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - BalancingDTO balancing = overrideService.findBalance(id); + String type = ConvertUtil.getScopeFromDTO(balancingDTO); + BalancingDTO balancing = overrideService.findBalance(id, type.equals(Constants.SERVICE)); if (balancing == null) { throw new ResourceNotFoundException("Unknown ID!"); } @@ -91,9 +93,9 @@ public class LoadBalanceController { } BalancingDTO balancingDTO; if (StringUtils.isNotBlank(application)) { - balancingDTO = overrideService.findBalance(application); + balancingDTO = overrideService.findBalance(application, false); } else { - balancingDTO = overrideService.findBalance(service); + balancingDTO = overrideService.findBalance(service, true); } List<BalancingDTO> balancingDTOS = new ArrayList<>(); if (balancingDTO != null) { @@ -102,23 +104,23 @@ public class LoadBalanceController { return balancingDTOS; } - @RequestMapping(value = "/{id}", method = RequestMethod.GET) - public BalancingDTO detailLoadBalance(@PathVariable String id, @PathVariable String env) throws ParamValidationException { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET) + public BalancingDTO detailLoadBalance(@PathVariable String id, @PathVariable String type, @PathVariable String env) throws ParamValidationException { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - BalancingDTO balancingDTO = overrideService.findBalance(id); + BalancingDTO balancingDTO = overrideService.findBalance(id, type.equals(Constants.SERVICE)); if (balancingDTO == null) { throw new ResourceNotFoundException("Unknown ID!"); } return balancingDTO; } - @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) - public boolean deleteLoadBalance(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE) + public boolean deleteLoadBalance(@PathVariable String id, @PathVariable String type, @PathVariable String env) { if (id == null) { throw new IllegalArgumentException("Argument of id is null!"); } id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - overrideService.deleteBalance(id); + overrideService.deleteBalance(id, type.equals(Constants.SERVICE)); return true; } diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java index c50ae01..60a6e5b 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java @@ -22,6 +22,7 @@ import org.apache.dubbo.admin.common.exception.ParamValidationException; import org.apache.dubbo.admin.common.exception.ResourceNotFoundException; import org.apache.dubbo.admin.common.exception.VersionValidationException; import org.apache.dubbo.admin.common.util.Constants; +import org.apache.dubbo.admin.common.util.ConvertUtil; import org.apache.dubbo.admin.model.dto.DynamicConfigDTO; import org.apache.dubbo.admin.service.OverrideService; import org.apache.dubbo.admin.service.ProviderService; @@ -69,7 +70,8 @@ public class OverridesController { @RequestMapping(value = "/{id}", method = RequestMethod.PUT) public boolean updateOverride(@PathVariable String id, @RequestBody DynamicConfigDTO overrideDTO, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - DynamicConfigDTO old = overrideService.findOverride(id); + String type = ConvertUtil.getScopeFromDTO(overrideDTO); + DynamicConfigDTO old = overrideService.findOverride(id, type.equals(Constants.SERVICE)); if (old == null) { throw new ResourceNotFoundException("Unknown ID!"); } @@ -84,9 +86,9 @@ public class OverridesController { DynamicConfigDTO override = null; List<DynamicConfigDTO> result = new ArrayList<>(); if (StringUtils.isNotBlank(service)) { - override = overrideService.findOverride(service); + override = overrideService.findOverride(service, true); } else if(StringUtils.isNotBlank(application)){ - override = overrideService.findOverride(application); + override = overrideService.findOverride(application, false); } else { throw new ParamValidationException("Either Service or application is required."); } @@ -96,10 +98,10 @@ public class OverridesController { return result; } - @RequestMapping(value = "/{id}", method = RequestMethod.GET) - public DynamicConfigDTO detailOverride(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET) + public DynamicConfigDTO detailOverride(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - DynamicConfigDTO override = overrideService.findOverride(id); + DynamicConfigDTO override = overrideService.findOverride(id, type.equals(Constants.SERVICE)); if (override == null) { throw new ResourceNotFoundException("Unknown ID!"); } @@ -107,26 +109,26 @@ public class OverridesController { return override; } - @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) - public boolean deleteOverride(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE) + public boolean deleteOverride(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - overrideService.deleteOverride(id); + overrideService.deleteOverride(id, type.equals(Constants.SERVICE)); return true; } - @RequestMapping(value = "/enable/{id}", method = RequestMethod.PUT) - public boolean enableRoute(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/enable/{type}/{id}", method = RequestMethod.PUT) + public boolean enableOverride(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - overrideService.enableOverride(id); + overrideService.enableOverride(id, type.equals(Constants.SERVICE)); return true; } - @RequestMapping(value = "/disable/{id}", method = RequestMethod.PUT) - public boolean disableRoute(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/disable/{type}/{id}", method = RequestMethod.PUT) + public boolean disableOverride(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - overrideService.disableOverride(id); + overrideService.disableOverride(id, type.equals(Constants.SERVICE)); return true; } } diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java index 3333e90..e7a7ff4 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java @@ -22,6 +22,7 @@ import org.apache.dubbo.admin.common.exception.ParamValidationException; import org.apache.dubbo.admin.common.exception.ResourceNotFoundException; import org.apache.dubbo.admin.common.exception.VersionValidationException; import org.apache.dubbo.admin.common.util.Constants; +import org.apache.dubbo.admin.common.util.ConvertUtil; import org.apache.dubbo.admin.model.dto.WeightDTO; import org.apache.dubbo.admin.service.OverrideService; import org.apache.dubbo.admin.service.ProviderService; @@ -71,7 +72,8 @@ public class WeightController { throw new ParamValidationException("Unknown ID!"); } id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - WeightDTO weight = overrideService.findWeight(id); + String type = ConvertUtil.getScopeFromDTO(weightDTO); + WeightDTO weight = overrideService.findWeight(id, type.equals(Constants.SERVICE)); if (weight == null) { throw new ResourceNotFoundException("Unknown ID!"); } @@ -88,9 +90,9 @@ public class WeightController { } WeightDTO weightDTO; if (StringUtils.isNotBlank(application)) { - weightDTO = overrideService.findWeight(application); + weightDTO = overrideService.findWeight(application, false); } else { - weightDTO = overrideService.findWeight(service); + weightDTO = overrideService.findWeight(service, true); } List<WeightDTO> weightDTOS = new ArrayList<>(); if (weightDTO != null) { @@ -100,20 +102,20 @@ public class WeightController { return weightDTOS; } - @RequestMapping(value = "/{id}", method = RequestMethod.GET) - public WeightDTO detailWeight(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.GET) + public WeightDTO detailWeight(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - WeightDTO weightDTO = overrideService.findWeight(id); + WeightDTO weightDTO = overrideService.findWeight(id, type.equals(Constants.SERVICE)); if (weightDTO == null) { throw new ResourceNotFoundException("Unknown ID!"); } return weightDTO; } - @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) - public boolean deleteWeight(@PathVariable String id, @PathVariable String env) { + @RequestMapping(value = "/{type}/{id}", method = RequestMethod.DELETE) + public boolean deleteWeight(@PathVariable String id, @PathVariable String type, @PathVariable String env) { id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR); - overrideService.deleteWeight(id); + overrideService.deleteWeight(id, type.equals(Constants.SERVICE)); return true; } } diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/OverrideService.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/OverrideService.java index b17b96f..aa40398 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/OverrideService.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/OverrideService.java @@ -26,28 +26,28 @@ public interface OverrideService { void updateOverride(DynamicConfigDTO override); - void deleteOverride(String id); + void deleteOverride(String id, boolean isService); - void enableOverride(String id); + void enableOverride(String id, boolean isService); - void disableOverride(String id); + void disableOverride(String id, boolean isService); - DynamicConfigDTO findOverride(String id); + DynamicConfigDTO findOverride(String id, boolean isService); void saveWeight(WeightDTO weightDTO); void updateWeight(WeightDTO weightDTO); - void deleteWeight(String id); + void deleteWeight(String id, boolean isService); - WeightDTO findWeight(String id); + WeightDTO findWeight(String id, boolean isService); void saveBalance(BalancingDTO balancingDTO); void updateBalance(BalancingDTO balancingDTO); - void deleteBalance(String id); + void deleteBalance(String id, boolean isService); - BalancingDTO findBalance(String id); + BalancingDTO findBalance(String id, boolean isService); } diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java index 4f5acb8..165a759 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java @@ -30,23 +30,23 @@ public interface RouteService { void updateConditionRoute(ConditionRouteDTO newConditionRoute); - void deleteConditionRoute(String id); + void deleteConditionRoute(String id, boolean isService); - void deleteAccess(String id); + void deleteAccess(String id, boolean isService); void createAccess(AccessDTO accessDTO); - AccessDTO findAccess(String id); + AccessDTO findAccess(String id, boolean isService); void updateAccess(AccessDTO accessDTO); - void enableConditionRoute(String id); + void enableConditionRoute(String id, boolean isService); - void disableConditionRoute(String id); + void disableConditionRoute(String id, boolean isService); - ConditionRouteDTO findConditionRoute(String id); + ConditionRouteDTO findConditionRoute(String id, boolean isService); void createTagRoute(TagRouteDTO tagRoute); diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java index a0a49fa..0d8e954 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java @@ -20,6 +20,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.dubbo.admin.common.util.Constants; import org.apache.dubbo.admin.common.util.ConvertUtil; import org.apache.dubbo.admin.common.util.OverrideUtils; +import org.apache.dubbo.admin.common.util.Tool; import org.apache.dubbo.admin.common.util.YamlParser; import org.apache.dubbo.admin.model.adapter.DynamicConfigDTO2OverrideDTOAdapter; import org.apache.dubbo.admin.model.adapter.LoadBalance2OverrideAdapter; @@ -47,7 +48,8 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ @java.lang.Override public void saveOverride(DynamicConfigDTO override) { String id = ConvertUtil.getIdFromDTO(override); - String path = getPath(id); + String scope = ConvertUtil.getScopeFromDTO(override); + String path = getPath(id, scope.equals(Constants.SERVICE)); String exitConfig = dynamicConfiguration.getConfig(path); List<OverrideConfig> configs = new ArrayList<>(); OverrideDTO existOverride = new DynamicConfigDTO2OverrideDTOAdapter(override); @@ -78,7 +80,8 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ @java.lang.Override public void updateOverride(DynamicConfigDTO update) { String id = ConvertUtil.getIdFromDTO(update); - String path = getPath(id); + String scope = ConvertUtil.getScopeFromDTO(update); + String path = getPath(id, scope.equals(Constants.SERVICE)); String exitConfig = dynamicConfiguration.getConfig(path); if (exitConfig == null) { //throw exception @@ -113,11 +116,11 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ } @java.lang.Override - public void deleteOverride(String id) { + public void deleteOverride(String id, boolean isService) { if (StringUtils.isEmpty(id)) { // throw exception } - String path = getPath(id); + String path = getPath(id, isService); String config = dynamicConfiguration.getConfig(path); if (config == null) { //throw exception @@ -151,11 +154,11 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ } @java.lang.Override - public void enableOverride(String id) { + public void enableOverride(String id, boolean isService) { if (StringUtils.isEmpty(id)) { //throw exception } - String path = getPath(id); + String path = getPath(id, isService); String config = dynamicConfiguration.getConfig(path); if (config == null) { //throw exception @@ -178,11 +181,11 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ } @java.lang.Override - public void disableOverride(String id) { + public void disableOverride(String id, boolean isService) { if (StringUtils.isEmpty(id)) { //throw exception } - String path = getPath(id); + String path = getPath(id, isService); if (dynamicConfiguration.getConfig(path) == null) { //throw exception } @@ -205,11 +208,11 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ } @java.lang.Override - public DynamicConfigDTO findOverride(String id) { + public DynamicConfigDTO findOverride(String id, boolean isService) { if (StringUtils.isEmpty(id)) { //throw exception } - String path = getPath(id); + String path = getPath(id, isService); String config = dynamicConfiguration.getConfig(path); if (config != null) { OverrideDTO overrideDTO = YamlParser.loadObject(config, OverrideDTO.class); @@ -222,7 +225,7 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ public void saveWeight(WeightDTO weightDTO) { String id = ConvertUtil.getIdFromDTO(weightDTO); String scope = ConvertUtil.getScopeFromDTO(weightDTO); - String path = getPath(id); + String path = getPath(id, scope.equals(Constants.SERVICE)); String config = dynamicConfiguration.getConfig(path); OverrideConfig overrideConfig = OverrideUtils.weightDTOtoConfig(weightDTO); OverrideDTO overrideDTO = insertConfig(config, overrideConfig, id, scope, Constants.WEIGHT); @@ -239,7 +242,7 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ public void updateWeight(WeightDTO weightDTO) { String id = ConvertUtil.getIdFromDTO(weightDTO); String scope = ConvertUtil.getScopeFromDTO(weightDTO); - String path = getPath(id); + String path = getPath(id, scope.equals(Constants.SERVICE)); String config = dynamicConfiguration.getConfig(path); WeightDTO oldWeight = null; if (config != null) { @@ -275,8 +278,8 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ } @java.lang.Override - public void deleteWeight(String id) { - String path = getPath(id); + public void deleteWeight(String id, boolean isService) { + String path = getPath(id, isService); String config = dynamicConfiguration.getConfig(path); OverrideConfig oldConfig = null; if (config != null) { @@ -310,8 +313,8 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ } @java.lang.Override - public WeightDTO findWeight(String id) { - String path = getPath(id); + public WeightDTO findWeight(String id, boolean isService) { + String path = getPath(id, isService); String config = dynamicConfiguration.getConfig(path); if (config != null) { OverrideDTO overrideDTO = YamlParser.loadObject(config, OverrideDTO.class); @@ -332,7 +335,7 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ public void saveBalance(BalancingDTO balancingDTO) { String id = ConvertUtil.getIdFromDTO(balancingDTO); String scope = ConvertUtil.getScopeFromDTO(balancingDTO); - String path = getPath(id); + String path = getPath(id, scope.equals(Constants.SERVICE)); String config = dynamicConfiguration.getConfig(path); OverrideConfig overrideConfig = OverrideUtils.balancingDTOtoConfig(balancingDTO); OverrideDTO overrideDTO = insertConfig(config, overrideConfig, id, scope, Constants.BALANCING); @@ -349,7 +352,7 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ public void updateBalance(BalancingDTO balancingDTO) { String id = ConvertUtil.getIdFromDTO(balancingDTO); String scope = ConvertUtil.getScopeFromDTO(balancingDTO); - String path = getPath(id); + String path = getPath(id, scope.equals(Constants.SERVICE)); String config = dynamicConfiguration.getConfig(path); BalancingDTO oldBalancing = null; if (config != null) { @@ -383,8 +386,8 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ } @java.lang.Override - public void deleteBalance(String id) { - String path = getPath(id); + public void deleteBalance(String id, boolean isService) { + String path = getPath(id, isService); String config = dynamicConfiguration.getConfig(path); OverrideConfig oldConfig = null; if (config != null) { @@ -416,8 +419,8 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ } @java.lang.Override - public BalancingDTO findBalance(String id) { - String path = getPath(id); + public BalancingDTO findBalance(String id, boolean isService) { + String path = getPath(id, isService); String config = dynamicConfiguration.getConfig(path); if (config != null) { OverrideDTO overrideDTO = YamlParser.loadObject(config, OverrideDTO.class); @@ -513,9 +516,11 @@ public class OverrideServiceImpl extends AbstractService implements OverrideServ } return result; } - private String getPath(String key) { - key = key.replace("/", "*"); - return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + Constants.CONFIGURATOR; + private String getPath(String key, boolean isService) { + if (isService) { + key = Tool.encodeKey(key); + } + return prefix + Constants.PATH_SEPARATOR + Constants.DUBBO_GROUP + Constants.PATH_SEPARATOR + key + Constants.DOT + Constants.CONFIGURATOR; } private void unregisterWeight(WeightDTO weightDTO) { diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java index f7280cf..cec9150 100644 --- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java +++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java @@ -20,6 +20,7 @@ import org.apache.dubbo.admin.common.exception.ResourceNotFoundException; import org.apache.dubbo.admin.common.util.Constants; import org.apache.dubbo.admin.common.util.ConvertUtil; import org.apache.dubbo.admin.common.util.RouteUtils; +import org.apache.dubbo.admin.common.util.Tool; import org.apache.dubbo.admin.common.util.YamlParser; import org.apache.dubbo.admin.model.domain.Route; import org.apache.dubbo.admin.model.dto.AccessDTO; @@ -42,7 +43,8 @@ public class RouteServiceImpl extends AbstractService implements RouteService { @Override public void createConditionRoute(ConditionRouteDTO conditionRoute) { String id = ConvertUtil.getIdFromDTO(conditionRoute); - String path = getPath(id, Constants.CONDITION_ROUTE); + String type = ConvertUtil.getScopeFromDTO(conditionRoute); + String path = getPath(id, Constants.CONDITION_ROUTE, type.equals(Constants.SERVICE)); String existConfig = dynamicConfiguration.getConfig(path); RoutingRule existRule = null; if (existConfig != null) { @@ -63,7 +65,8 @@ public class RouteServiceImpl extends AbstractService implements RouteService { @Override public void updateConditionRoute(ConditionRouteDTO newConditionRoute) { String id = ConvertUtil.getIdFromDTO(newConditionRoute); - String path = getPath(id, Constants.CONDITION_ROUTE); + String type = ConvertUtil.getScopeFromDTO(newConditionRoute); + String path = getPath(id, Constants.CONDITION_ROUTE, type.equals(Constants.SERVICE)); String existConfig = dynamicConfiguration.getConfig(path); if (existConfig == null) { throw new ResourceNotFoundException("no existing condition route for path: " + path); @@ -83,11 +86,11 @@ public class RouteServiceImpl extends AbstractService implements RouteService { } @Override - public void deleteConditionRoute(String id) { + public void deleteConditionRoute(String id, boolean isService) { if (StringUtils.isEmpty(id)) { // throw exception } - String path = getPath(id, Constants.CONDITION_ROUTE); + String path = getPath(id, Constants.CONDITION_ROUTE, isService); String config = dynamicConfiguration.getConfig(path); if (config == null) { //throw exception @@ -111,8 +114,8 @@ public class RouteServiceImpl extends AbstractService implements RouteService { } @Override - public void deleteAccess(String id) { - String path = getPath(id, Constants.CONDITION_ROUTE); + public void deleteAccess(String id, boolean isService) { + String path = getPath(id, Constants.CONDITION_ROUTE, isService); String config = dynamicConfiguration.getConfig(path); if (config != null) { RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class); @@ -135,7 +138,8 @@ public class RouteServiceImpl extends AbstractService implements RouteService { @Override public void createAccess(AccessDTO accessDTO) { String id = ConvertUtil.getIdFromDTO(accessDTO); - String path = getPath(id, Constants.CONDITION_ROUTE); + String scope = ConvertUtil.getScopeFromDTO(accessDTO); + String path = getPath(id, Constants.CONDITION_ROUTE, scope.equals(Constants.SERVICE)); String config = dynamicConfiguration.getConfig(path); List<String> blackWhiteList = RouteUtils.convertToBlackWhiteList(accessDTO); RoutingRule ruleDTO; @@ -168,8 +172,8 @@ public class RouteServiceImpl extends AbstractService implements RouteService { } @Override - public AccessDTO findAccess(String id) { - String path = getPath(id, Constants.CONDITION_ROUTE); + public AccessDTO findAccess(String id, boolean isService) { + String path = getPath(id, Constants.CONDITION_ROUTE, isService); String config = dynamicConfiguration.getConfig(path); if (config != null) { RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class); @@ -182,7 +186,8 @@ public class RouteServiceImpl extends AbstractService implements RouteService { @Override public void updateAccess(AccessDTO accessDTO) { String key = ConvertUtil.getIdFromDTO(accessDTO); - String path = getPath(key, Constants.CONDITION_ROUTE); + String scope = ConvertUtil.getScopeFromDTO(accessDTO); + String path = getPath(key, Constants.CONDITION_ROUTE, scope.equals(Constants.SERVICE)); List<String> blackWhiteList = RouteUtils.convertToBlackWhiteList(accessDTO); String config = dynamicConfiguration.getConfig(path); List<String> oldList = null; @@ -205,8 +210,8 @@ public class RouteServiceImpl extends AbstractService implements RouteService { } @Override - public void enableConditionRoute(String id) { - String path = getPath(id, Constants.CONDITION_ROUTE); + public void enableConditionRoute(String id, boolean isService) { + String path = getPath(id, Constants.CONDITION_ROUTE, isService); String config = dynamicConfiguration.getConfig(path); if (config != null) { RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class); @@ -227,8 +232,8 @@ public class RouteServiceImpl extends AbstractService implements RouteService { } @Override - public void disableConditionRoute(String serviceName) { - String path = getPath(serviceName, Constants.CONDITION_ROUTE); + public void disableConditionRoute(String serviceName, boolean isService) { + String path = getPath(serviceName, Constants.CONDITION_ROUTE, isService); String config = dynamicConfiguration.getConfig(path); if (config != null) { RoutingRule routeRule = YamlParser.loadObject(config, RoutingRule.class); @@ -249,8 +254,8 @@ public class RouteServiceImpl extends AbstractService implements RouteService { } @Override - public ConditionRouteDTO findConditionRoute(String id) { - String path = getPath(id, Constants.CONDITION_ROUTE); + public ConditionRouteDTO findConditionRoute(String id, boolean isService) { + String path = getPath(id, Constants.CONDITION_ROUTE, isService); String config = dynamicConfiguration.getConfig(path); if (config != null) { RoutingRule routingRule = YamlParser.loadObject(config, RoutingRule.class); @@ -267,7 +272,7 @@ public class RouteServiceImpl extends AbstractService implements RouteService { @Override public void createTagRoute(TagRouteDTO tagRoute) { String id = ConvertUtil.getIdFromDTO(tagRoute); - String path = getPath(id,Constants.TAG_ROUTE); + String path = getPath(id,Constants.TAG_ROUTE, false); TagRoute store = RouteUtils.convertTagroutetoStore(tagRoute); dynamicConfiguration.setConfig(path, YamlParser.dumpObject(store)); } @@ -275,7 +280,7 @@ public class RouteServiceImpl extends AbstractService implements RouteService { @Override public void updateTagRoute(TagRouteDTO tagRoute) { String id = ConvertUtil.getIdFromDTO(tagRoute); - String path = getPath(id, Constants.TAG_ROUTE); + String path = getPath(id, Constants.TAG_ROUTE, false); if (dynamicConfiguration.getConfig(path) == null) { throw new ResourceNotFoundException("can not find tagroute: " + id); //throw exception @@ -287,13 +292,13 @@ public class RouteServiceImpl extends AbstractService implements RouteService { @Override public void deleteTagRoute(String id) { - String path = getPath(id, Constants.TAG_ROUTE); + String path = getPath(id, Constants.TAG_ROUTE, false); dynamicConfiguration.deleteConfig(path); } @Override public void enableTagRoute(String id) { - String path = getPath(id, Constants.TAG_ROUTE); + String path = getPath(id, Constants.TAG_ROUTE, false); String config = dynamicConfiguration.getConfig(path); if (config != null) { TagRoute tagRoute = YamlParser.loadObject(config, TagRoute.class); @@ -305,7 +310,7 @@ public class RouteServiceImpl extends AbstractService implements RouteService { @Override public void disableTagRoute(String id) { - String path = getPath(id, Constants.TAG_ROUTE); + String path = getPath(id, Constants.TAG_ROUTE, false); String config = dynamicConfiguration.getConfig(path); if (config != null) { TagRoute tagRoute = YamlParser.loadObject(config, TagRoute.class); @@ -317,7 +322,7 @@ public class RouteServiceImpl extends AbstractService implements RouteService { @Override public TagRouteDTO findTagRoute(String id) { - String path = getPath(id, Constants.TAG_ROUTE); + String path = getPath(id, Constants.TAG_ROUTE, false); String config = dynamicConfiguration.getConfig(path); if (config != null) { TagRoute tagRoute = YamlParser.loadObject(config, TagRoute.class); @@ -326,12 +331,14 @@ public class RouteServiceImpl extends AbstractService implements RouteService { return null; } - private String getPath(String key, String type) { - key = key.replace("/", "*"); + private String getPath(String key, String type, boolean isService) { + if (isService) { + key = Tool.encodeKey(key); + } if (type.equals(Constants.CONDITION_ROUTE)) { - return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + "condition-router"; + return prefix + Constants.PATH_SEPARATOR + Constants.DUBBO_GROUP + Constants.PATH_SEPARATOR + key + Constants.DOT + "condition-router"; } else { - return prefix + Constants.PATH_SEPARATOR + key + Constants.PATH_SEPARATOR + "tag-router"; + return prefix + Constants.PATH_SEPARATOR + Constants.DUBBO_GROUP + Constants.PATH_SEPARATOR + key + Constants.DOT + "tag-router"; } } diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java index e087898..a2563bd 100644 --- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java +++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java @@ -20,6 +20,7 @@ package org.apache.dubbo.admin.controller; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.dubbo.admin.AbstractSpringIntegrationTest; +import org.apache.dubbo.admin.common.util.Constants; import org.apache.dubbo.admin.model.dto.AccessDTO; import org.apache.dubbo.admin.model.dto.ConditionRouteDTO; import org.apache.dubbo.admin.service.ProviderService; @@ -72,14 +73,14 @@ public class AccessesControllerTest extends AbstractSpringIntegrationTest { // when application is present String application = "applicationName"; - when(routeService.findAccess(application)).thenReturn(accessDTO); + when(routeService.findAccess(application, false)).thenReturn(accessDTO); response = restTemplate.getForEntity(url("/api/{env}/rules/access?application={application}"), String.class, env, application); exceptResponseBody = objectMapper.writeValueAsString(Collections.singletonList(accessDTO)); assertEquals(exceptResponseBody, response.getBody()); // when service is present String service = "serviceName"; - when(routeService.findAccess(service)).thenReturn(accessDTO); + when(routeService.findAccess(service, true)).thenReturn(accessDTO); response = restTemplate.getForEntity(url("/api/{env}/rules/access?service={service}"), String.class, env, service); exceptResponseBody = objectMapper.writeValueAsString(Collections.singletonList(accessDTO)); assertEquals(exceptResponseBody, response.getBody()); @@ -89,8 +90,8 @@ public class AccessesControllerTest extends AbstractSpringIntegrationTest { public void detailAccess() throws JsonProcessingException { String id = "1"; AccessDTO accessDTO = new AccessDTO(); - when(routeService.findAccess(id)).thenReturn(accessDTO); - ResponseEntity<String> response = restTemplate.getForEntity(url("/api/{env}/rules/access/{id}"), String.class, env, id); + when(routeService.findAccess(id, false)).thenReturn(accessDTO); + ResponseEntity<String> response = restTemplate.getForEntity(url("/api/{env}/rules/access/{type}/{id}"), String.class, env, Constants.APPLICATION, id); String exceptResponseBody = objectMapper.writeValueAsString(accessDTO); assertEquals(exceptResponseBody, response.getBody()); } @@ -98,8 +99,8 @@ public class AccessesControllerTest extends AbstractSpringIntegrationTest { @Test public void deleteAccess() { String id = "1"; - restTemplate.delete(url("/api/{env}/rules/access/{id}"), env, id); - verify(routeService).deleteAccess(id); + restTemplate.delete(url("/api/{env}/rules/access/{type}/{id}"), env, Constants.APPLICATION, id); + verify(routeService).deleteAccess(id,false); } @Test @@ -126,12 +127,13 @@ public class AccessesControllerTest extends AbstractSpringIntegrationTest { public void updateAccess() throws IOException { AccessDTO accessDTO = new AccessDTO(); String id = "1"; + accessDTO.setApplication(id); // when id is 'Unknown ID' restTemplate.put(url("/api/{env}/rules/access/{id}"), accessDTO, env, id); - verify(routeService).findConditionRoute(id); + verify(routeService).findConditionRoute(id, false); // ConditionRouteDTO conditionRouteDTO = mock(ConditionRouteDTO.class); - when(routeService.findConditionRoute(id)).thenReturn(conditionRouteDTO); + when(routeService.findConditionRoute(id, false)).thenReturn(conditionRouteDTO); restTemplate.put(url("/api/{env}/rules/access/{id}"), accessDTO, env, id); verify(routeService).updateAccess(any(AccessDTO.class)); } diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java index ad7a340..7526322 100644 --- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java +++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java @@ -18,6 +18,7 @@ package org.apache.dubbo.admin.controller; import org.apache.dubbo.admin.AbstractSpringIntegrationTest; +import org.apache.dubbo.admin.common.util.Constants; import org.apache.dubbo.admin.common.util.YamlParser; import org.apache.dubbo.admin.model.dto.ConditionRouteDTO; import org.apache.dubbo.admin.model.store.RoutingRule; @@ -118,7 +119,7 @@ public class ConditionRoutesControllerTest extends AbstractSpringIntegrationTest + "priority: 0\n" + "runtime: false\n" + "scope: service"; - String path = "/dubbo/config/" + service + "/condition-router"; + String path = "/dubbo/config/dubbo/" + service + ":" + ":" + ".condition-router"; zkClient.create().creatingParentContainersIfNeeded().forPath(path); zkClient.setData().forPath(path, content.getBytes()); @@ -152,7 +153,7 @@ public class ConditionRoutesControllerTest extends AbstractSpringIntegrationTest + "priority: 0\n" + "runtime: false\n" + "scope: service"; - String path = "/dubbo/config/" + service + "/condition-router"; + String path = "/dubbo/config/dubbo/" + service + ":" + ":" + ".condition-router"; zkClient.create().creatingParentContainersIfNeeded().forPath(path); zkClient.setData().forPath(path, content.getBytes()); @@ -183,15 +184,15 @@ public class ConditionRoutesControllerTest extends AbstractSpringIntegrationTest + "priority: 0\n" + "runtime: false\n" + "scope: service"; - String path = "/dubbo/config/" + service + "/condition-router"; + String path = "/dubbo/config/dubbo/" + service + ":" + ":" + ".condition-router"; zkClient.create().creatingParentContainersIfNeeded().forPath(path); zkClient.setData().forPath(path, content.getBytes()); assertNotNull("zk path should not be null before deleting", zkClient.checkExists().forPath(path)); ResponseEntity<String> responseEntity = restTemplate.exchange( - url("/api/{env}/rules/route/condition/{service}"), HttpMethod.DELETE, - null, String.class, env, service + url("/api/{env}/rules/route/condition/{type}/{service}"), HttpMethod.DELETE, + null, String.class, env, Constants.SERVICE, service ); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); @@ -201,7 +202,7 @@ public class ConditionRoutesControllerTest extends AbstractSpringIntegrationTest @Test public void shouldThrowWhenDetailRouteWithUnknownId() { ResponseEntity<String> responseEntity = restTemplate.getForEntity( - url("/api/{env}/rules/route/condition/{id}"), String.class, env, "non-existed-service" + url("/api/{env}/rules/route/condition/{type}/{id}"), String.class, env, Constants.SERVICE, "non-existed-service" ); assertThat(responseEntity.getStatusCode(), is(HttpStatus.NOT_FOUND)); } @@ -218,12 +219,12 @@ public class ConditionRoutesControllerTest extends AbstractSpringIntegrationTest + "priority: 0\n" + "runtime: false\n" + "scope: service"; - String path = "/dubbo/config/" + service + "/condition-router"; + String path = "/dubbo/config/dubbo/" + service + ":" + ":" + ".condition-router"; zkClient.create().creatingParentContainersIfNeeded().forPath(path); zkClient.setData().forPath(path, content.getBytes()); ResponseEntity<ConditionRouteDTO> responseEntity = restTemplate.getForEntity( - url("/api/{env}/rules/route/condition/{id}"), ConditionRouteDTO.class, env, service + url("/api/{env}/rules/route/condition/{type}/{id}"), ConditionRouteDTO.class, env, Constants.SERVICE, service ); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); @@ -245,7 +246,7 @@ public class ConditionRoutesControllerTest extends AbstractSpringIntegrationTest + "priority: 0\n" + "runtime: false\n" + "scope: service"; - String path = "/dubbo/config/" + service + "/condition-router"; + String path = "/dubbo/config/dubbo/" + service + ":" + ":" + ".condition-router"; zkClient.create().creatingParentContainersIfNeeded().forPath(path); zkClient.setData().forPath(path, content.getBytes()); @@ -254,7 +255,7 @@ public class ConditionRoutesControllerTest extends AbstractSpringIntegrationTest RoutingRule rule = YamlParser.loadObject(updatedConfig, RoutingRule.class); assertFalse(rule.isEnabled()); - restTemplate.put(url("/api/{env}/rules/route/condition/enable/{id}"), null, env, service); + restTemplate.put(url("/api/{env}/rules/route/condition/enable/{type}/{id}"), null, env, Constants.SERVICE, service); bytes = zkClient.getData().forPath(path); updatedConfig = new String(bytes); @@ -274,7 +275,7 @@ public class ConditionRoutesControllerTest extends AbstractSpringIntegrationTest + "priority: 0\n" + "runtime: false\n" + "scope: service"; - String path = "/dubbo/config/" + service + "/condition-router"; + String path = "/dubbo/config/dubbo/" + service + ":" + ":" + ".condition-router"; zkClient.create().creatingParentContainersIfNeeded().forPath(path); zkClient.setData().forPath(path, content.getBytes()); @@ -283,7 +284,7 @@ public class ConditionRoutesControllerTest extends AbstractSpringIntegrationTest RoutingRule rule = YamlParser.loadObject(updatedConfig, RoutingRule.class); assertTrue(rule.isEnabled()); - restTemplate.put(url("/api/{env}/rules/route/condition/disable/{id}"), null, env, service); + restTemplate.put(url("/api/{env}/rules/route/condition/disable/{type}/{id}"), null, env, Constants.SERVICE, service); bytes = zkClient.getData().forPath(path); updatedConfig = new String(bytes); diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java index acade40..73b60ce 100644 --- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java +++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java @@ -19,6 +19,7 @@ package org.apache.dubbo.admin.controller; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.dubbo.admin.AbstractSpringIntegrationTest; +import org.apache.dubbo.admin.common.util.Constants; import org.apache.dubbo.admin.model.dto.BalancingDTO; import org.apache.dubbo.admin.service.OverrideService; import org.apache.dubbo.admin.service.ProviderService; @@ -40,7 +41,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -89,6 +89,7 @@ public class LoadBalanceControllerTest extends AbstractSpringIntegrationTest { public void updateLoadbalance() throws IOException { String id = "1"; BalancingDTO balancingDTO = new BalancingDTO(); + balancingDTO.setApplication(id); URI uri; ResponseEntity<String> response; // unknown id @@ -96,7 +97,7 @@ public class LoadBalanceControllerTest extends AbstractSpringIntegrationTest { assertFalse("should return a fail response, when id is null", (Boolean) objectMapper.readValue(response.getBody(), Map.class).get("success")); // valid id BalancingDTO balancing = mock(BalancingDTO.class); - when(overrideService.findBalance(id)).thenReturn(balancing); + when(overrideService.findBalance(id, false)).thenReturn(balancing); assertTrue(restTemplate.exchange(url("/api/{env}/rules/balancing/{id}"), HttpMethod.PUT, new HttpEntity<>(balancingDTO, null), Boolean.class, env, id).getBody()); verify(overrideService).saveBalance(any(BalancingDTO.class)); } @@ -111,14 +112,15 @@ public class LoadBalanceControllerTest extends AbstractSpringIntegrationTest { // service is valid response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, service, null); assertEquals(HttpStatus.OK, response.getStatusCode()); - verify(overrideService).findBalance(service); + verify(overrideService).findBalance(service, true); // application is valid response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, null, application); assertEquals(HttpStatus.OK, response.getStatusCode()); - verify(overrideService).findBalance(application); + verify(overrideService).findBalance(application, false); // findBalance return a notnull BalancingDTO balancingDTO = new BalancingDTO(); - when(overrideService.findBalance(anyString())).thenReturn(balancingDTO); + balancingDTO.setApplication("1"); + when(overrideService.findBalance(application, false)).thenReturn(balancingDTO); response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, null, application); assertEquals(HttpStatus.OK, response.getStatusCode()); assertEquals(1, objectMapper.readValue(response.getBody(), List.class).size()); @@ -129,12 +131,12 @@ public class LoadBalanceControllerTest extends AbstractSpringIntegrationTest { String id = "1"; ResponseEntity<String> response; // when balancing is not exist - response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{id}"), String.class, env, id); + response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{type}/{id}"), String.class, env, Constants.APPLICATION, id); assertFalse("should return a fail response, when id is null", (Boolean) objectMapper.readValue(response.getBody(), Map.class).get("success")); // when balancing is not null BalancingDTO balancingDTO = new BalancingDTO(); - when(overrideService.findBalance(id)).thenReturn(balancingDTO); - response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{id}"), String.class, env, id); + when(overrideService.findBalance(id, false)).thenReturn(balancingDTO); + response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{type}/{id}"), String.class, env, Constants.APPLICATION, id); assertEquals(HttpStatus.OK, response.getStatusCode()); } @@ -144,7 +146,7 @@ public class LoadBalanceControllerTest extends AbstractSpringIntegrationTest { URI uri; ResponseEntity<String> response; - response = restTemplate.exchange(url("/api/{env}/rules/balancing/{id}"), HttpMethod.DELETE, new HttpEntity<>(null), String.class, env, id); + response = restTemplate.exchange(url("/api/{env}/rules/balancing/{type}/{id}"), HttpMethod.DELETE, new HttpEntity<>(null), String.class, env, Constants.APPLICATION, id); assertEquals(HttpStatus.OK, response.getStatusCode()); assertTrue(Boolean.valueOf(response.getBody())); } diff --git a/dubbo-admin-ui/src/components/governance/AccessControl.vue b/dubbo-admin-ui/src/components/governance/AccessControl.vue index 40aa3ed..961835d 100644 --- a/dubbo-admin-ui/src/components/governance/AccessControl.vue +++ b/dubbo-admin-ui/src/components/governance/AccessControl.vue @@ -502,7 +502,8 @@ export default { }) }, deleteItem (id) { - this.$axios.delete('/rules/access/' + id) + let type = this.items[this.selected].value + this.$axios.delete('/rules/access/' + type + '/' + id) .then(response => { this.showSnackbar('success', 'Delete success') this.search(this.filter) diff --git a/dubbo-admin-ui/src/components/governance/LoadBalance.vue b/dubbo-admin-ui/src/components/governance/LoadBalance.vue index 905a790..5a902e3 100644 --- a/dubbo-admin-ui/src/components/governance/LoadBalance.vue +++ b/dubbo-admin-ui/src/components/governance/LoadBalance.vue @@ -420,6 +420,7 @@ }, itemOperation: function (icon, item) { let itemId = '' + let type = this.items[this.selected].value if (this.selected === 0) { itemId = item.service } else { @@ -430,7 +431,7 @@ } switch (icon) { case 'visibility': - this.$axios.get('/rules/balancing/' + itemId) + this.$axios.get('/rules/balancing/' + type + '/' + itemId) .then(response => { let balancing = response.data this.handleBalance(balancing, true) @@ -438,7 +439,7 @@ }) break case 'edit': - this.$axios.get('/rules/balancing/' + itemId) + this.$axios.get('/rules/balancing/' + type + '/' + itemId) .then(response => { let balancing = response.data this.handleBalance(balancing, false) @@ -467,7 +468,8 @@ this.height = window.innerHeight * 0.5 }, deleteItem: function (id) { - this.$axios.delete('/rules/balancing/' + id) + let type = this.items[this.selected].value + this.$axios.delete('/rules/balancing/' + type + '/' + id) .then(response => { if (response.status === 200) { this.warn = false diff --git a/dubbo-admin-ui/src/components/governance/Overrides.vue b/dubbo-admin-ui/src/components/governance/Overrides.vue index 5ffedd4..ef38bdc 100644 --- a/dubbo-admin-ui/src/components/governance/Overrides.vue +++ b/dubbo-admin-ui/src/components/governance/Overrides.vue @@ -374,6 +374,7 @@ }, itemOperation: function (icon, item) { let itemId = '' + let type = this.items[this.selected].value if (this.selected === 0) { itemId = item.service } else { @@ -384,7 +385,7 @@ } switch (icon) { case 'visibility': - this.$axios.get('/rules/override/' + itemId) + this.$axios.get('/rules/override/' + type + '/' + itemId) .then(response => { let config = response.data this.handleConfig(config, true) @@ -392,7 +393,7 @@ }) break case 'edit': - this.$axios.get('/rules/override/' + itemId) + this.$axios.get('/rules/override/' + type + '/' + itemId) .then(response => { let config = response.data this.handleConfig(config, false) @@ -443,9 +444,10 @@ }, deleteItem: function (warnStatus) { let id = warnStatus.id + let type = this.items[this.selected].value let operation = warnStatus.operation if (operation === 'delete') { - this.$axios.delete('/rules/override/' + id) + this.$axios.delete('/rules/override/' + type + '/' + id) .then(response => { if (response.status === 200) { this.warn = false @@ -454,7 +456,7 @@ } }) } else if (operation === 'disable') { - this.$axios.put('/rules/override/disable/' + id) + this.$axios.put('/rules/override/disable/' + type + '/' + id) .then(response => { if (response.status === 200) { this.warn = false @@ -463,7 +465,7 @@ } }) } else if (operation === 'enable') { - this.$axios.put('/rules/override/enable/' + id) + this.$axios.put('/rules/override/enable/' + type + '/' + id) .then(response => { if (response.status === 200) { this.warn = false diff --git a/dubbo-admin-ui/src/components/governance/RoutingRule.vue b/dubbo-admin-ui/src/components/governance/RoutingRule.vue index 7e86c30..c81cb3d 100644 --- a/dubbo-admin-ui/src/components/governance/RoutingRule.vue +++ b/dubbo-admin-ui/src/components/governance/RoutingRule.vue @@ -392,6 +392,7 @@ }, itemOperation: function (icon, item) { let itemId = '' + let type = this.items[this.selected].value if (this.selected === 0) { itemId = item.service } else { @@ -403,7 +404,7 @@ } switch (icon) { case 'visibility': - this.$axios.get('/rules/route/condition/' + itemId) + this.$axios.get('/rules/route/condition/' + type + '/' + itemId) .then(response => { let conditionRoute = response.data this.handleBalance(conditionRoute, true) @@ -411,7 +412,7 @@ }) break case 'edit': - this.$axios.get('/rules/route/condition/' + itemId) + this.$axios.get('/rules/route/condition/' + type + '/' + itemId) .then(response => { let conditionRoute = response.data this.handleBalance(conditionRoute, false) @@ -452,9 +453,10 @@ }, deleteItem: function (warnStatus) { let id = warnStatus.id + let type = this.items[this.selected].value let operation = warnStatus.operation if (operation === 'delete') { - this.$axios.delete('/rules/route/condition/' + id) + this.$axios.delete('/rules/route/condition/' + type + '/' + id) .then(response => { if (response.status === 200) { this.warn = false @@ -463,7 +465,7 @@ } }) } else if (operation === 'disable') { - this.$axios.put('/rules/route/condition/disable/' + id) + this.$axios.put('/rules/route/condition/disable/' + type + '/' + id) .then(response => { if (response.status === 200) { this.warn = false @@ -472,7 +474,7 @@ } }) } else if (operation === 'enable') { - this.$axios.put('/rules/route/condition/enable/' + id) + this.$axios.put('/rules/route/condition/enable/' + type + '/' + id) .then(response => { if (response.status === 200) { this.warn = false diff --git a/dubbo-admin-ui/src/components/governance/WeightAdjust.vue b/dubbo-admin-ui/src/components/governance/WeightAdjust.vue index d530fbc..0615116 100644 --- a/dubbo-admin-ui/src/components/governance/WeightAdjust.vue +++ b/dubbo-admin-ui/src/components/governance/WeightAdjust.vue @@ -407,6 +407,7 @@ }, itemOperation: function (icon, item) { let itemId = '' + let type = this.items[this.selected].value if (this.selected === 0) { itemId = item.service } else { @@ -417,7 +418,7 @@ } switch (icon) { case 'visibility': - this.$axios.get('/rules/weight/' + itemId) + this.$axios.get('/rules/weight/' + type + '/' + itemId) .then(response => { let weight = response.data this.handleWeight(weight, true) @@ -425,7 +426,7 @@ }) break case 'edit': - this.$axios.get('/rules/weight/' + itemId) + this.$axios.get('/rules/weight/' + type + '/' + itemId) .then(response => { let weight = response.data this.handleWeight(weight, false) @@ -453,7 +454,8 @@ this.height = window.innerHeight * 0.5 }, deleteItem: function (warnStatus) { - this.$axios.delete('/rules/weight/' + warnStatus.id) + let type = this.items[this.selected].value + this.$axios.delete('/rules/weight/' + type + '/' + warnStatus.id) .then(response => { if (response.status === 200) { this.warn = false
