From d985458c215c53362586fd06fb3a75c30b9cd367 Mon Sep 17 00:00:00 2001 From: liangfei0201 Date: Tue, 17 Jul 2012 23:53:39 +0800 Subject: [PATCH] =?UTF-8?q?DUBBO-489=20=E4=BF=AE=E6=94=B9=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../governance/service/OwnerService.java | 4 + .../service/impl/OwnerServiceImpl.java | 99 +++++++++++++++---- .../governance/web/common/pulltool/Tool.java | 2 +- .../web/governance/module/screen/Owners.java | 46 ++++++++- .../dubbo/registry/common/domain/User.java | 2 +- .../templates/governance/layout/default.vm | 2 +- .../governance/screen/accesses/add.vm | 14 ++- .../governance/screen/addresses/add.vm | 0 .../governance/screen/consumers/index.vm | 4 +- .../templates/governance/screen/owners/add.vm | 92 +++++++---------- .../governance/screen/owners/index.vm | 13 +++ .../governance/screen/providers/add.vm | 2 +- .../governance/screen/providers/index.vm | 4 +- .../governance/screen/weights/add.vm | 15 ++- .../WEB-INF/templates/home/control/menu.vm | 4 +- .../WEB-INF/templates/home/screen/index.vm | 4 +- dubbo-admin/src/main/webapp/index.html | 12 --- 17 files changed, 205 insertions(+), 114 deletions(-) delete mode 100644 dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/addresses/add.vm delete mode 100644 dubbo-admin/src/main/webapp/index.html diff --git a/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/service/OwnerService.java b/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/service/OwnerService.java index d4dfd841e..6034ae09c 100644 --- a/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/service/OwnerService.java +++ b/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/service/OwnerService.java @@ -18,4 +18,8 @@ public interface OwnerService { Owner findById(Long id); + void saveOwner(Owner owner); + + void deleteOwner(Owner owner); + } diff --git a/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/service/impl/OwnerServiceImpl.java b/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/service/impl/OwnerServiceImpl.java index b9498a81b..30476cb77 100644 --- a/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/service/impl/OwnerServiceImpl.java +++ b/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/service/impl/OwnerServiceImpl.java @@ -1,14 +1,18 @@ package com.alibaba.dubbo.governance.service.impl; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; -import com.alibaba.dubbo.governance.service.ConsumerService; +import com.alibaba.dubbo.common.Constants; +import com.alibaba.dubbo.common.utils.StringUtils; +import com.alibaba.dubbo.governance.service.OverrideService; import com.alibaba.dubbo.governance.service.OwnerService; import com.alibaba.dubbo.governance.service.ProviderService; -import com.alibaba.dubbo.registry.common.domain.Consumer; +import com.alibaba.dubbo.registry.common.domain.Override; import com.alibaba.dubbo.registry.common.domain.Owner; import com.alibaba.dubbo.registry.common.domain.Provider; @@ -18,7 +22,7 @@ public class OwnerServiceImpl extends AbstractService implements OwnerService { ProviderService providerService; @Autowired - ConsumerService consumerService; + OverrideService overrideService; public List findAllServiceNames() { // TODO Auto-generated method stub @@ -37,17 +41,13 @@ public class OwnerServiceImpl extends AbstractService implements OwnerService { public List findByService(String serviceName) { List pList = providerService.findByService(serviceName); - - List cList = consumerService.findByService(serviceName); - + List cList = overrideService.findByServiceAndAddress(serviceName, Constants.ANYHOST_VALUE); return toOverrideLiset(pList,cList); } public List findAll() { List pList = providerService.findAll(); - - List cList = consumerService.findAll(); - + List cList = overrideService.findAll(); return toOverrideLiset(pList,cList); } @@ -56,26 +56,85 @@ public class OwnerServiceImpl extends AbstractService implements OwnerService { return null; } - private List toOverrideLiset(List pList , List cList){ - List oList = new ArrayList(); + private List toOverrideLiset(List pList, List cList){ + Map oList = new HashMap(); for(Provider p : pList){ if(p.getUsername() != null){ Owner o = new Owner(); o.setService(p.getService()); o.setUsername(p.getUsername()); - oList.add(o); + oList.put(o.getService() + "/" + o.getUsername(), o); } } - - for(Consumer c : cList){ - if(c.getUsername() != null){ - Owner o = new Owner(); - o.setService(c.getService()); - o.setUsername(c.getUsername()); - oList.add(o); + for(Override c : cList){ + Map params = StringUtils.parseQueryString(c.getParams()); + String usernames = params.get("owner"); + if(usernames != null && usernames.length() > 0){ + for (String username : Constants.COMMA_SPLIT_PATTERN.split(usernames)) { + Owner o = new Owner(); + o.setService(c.getService()); + o.setUsername(username); + oList.put(o.getService() + "/" + o.getUsername(), o); + } } } - return oList; + return new ArrayList(oList.values()); } + public void saveOwner(Owner owner) { + List overrides = overrideService.findByServiceAndAddress(owner.getService(), Constants.ANYHOST_VALUE); + if (overrides == null || overrides.size() == 0) { + Override override = new Override(); + override.setAddress(Constants.ANYHOST_VALUE); + override.setService(owner.getService()); + override.setEnabled(true); + override.setParams("owner=" + owner.getUsername()); + overrideService.saveOverride(override); + } else { + for(Override override : overrides){ + Map params = StringUtils.parseQueryString(override.getParams()); + String usernames = params.get("owner"); + if (usernames == null || usernames.length() == 0) { + usernames = owner.getUsername(); + } else { + usernames = usernames + "," + owner.getUsername(); + } + params.put("owner", usernames); + override.setParams(StringUtils.toQueryString(params)); + overrideService.updateOverride(override); + } + } + } + + public void deleteOwner(Owner owner) { + List overrides = overrideService.findByServiceAndAddress(owner.getService(), Constants.ANYHOST_VALUE); + if (overrides == null || overrides.size() == 0) { + Override override = new Override(); + override.setAddress(Constants.ANYHOST_VALUE); + override.setService(owner.getService()); + override.setEnabled(true); + override.setParams("owner=" + owner.getUsername()); + overrideService.saveOverride(override); + } else { + for(Override override : overrides){ + Map params = StringUtils.parseQueryString(override.getParams()); + String usernames = params.get("owner"); + if (usernames != null && usernames.length() > 0) { + if (usernames.equals(owner.getUsername())) { + params.remove("owner"); + } else { + usernames = usernames.replace(owner.getUsername() + ",", "").replace("," + owner.getUsername(), ""); + params.put("owner", usernames); + } + if (params.size() > 0) { + override.setParams(StringUtils.toQueryString(params)); + overrideService.updateOverride(override); + } else { + overrideService.deleteOverride(override.getId()); + } + } + } + } + } + } diff --git a/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/web/common/pulltool/Tool.java b/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/web/common/pulltool/Tool.java index 2fe24e84b..435767664 100644 --- a/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/web/common/pulltool/Tool.java +++ b/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/web/common/pulltool/Tool.java @@ -82,7 +82,7 @@ public class Tool { public static String getHostPrefix(String address) { if (address != null && address.length() > 0) { String hostname = getHostName(address); - if (! address.equals(hostname)) { + if (! address.startsWith(hostname)) { return "(" + hostname + ")"; } } diff --git a/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/web/governance/module/screen/Owners.java b/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/web/governance/module/screen/Owners.java index 6301bb50f..cedad8fea 100644 --- a/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/web/governance/module/screen/Owners.java +++ b/dubbo-admin/src/main/java/com/alibaba/dubbo/governance/web/governance/module/screen/Owners.java @@ -7,14 +7,17 @@ */ package com.alibaba.dubbo.governance.web.governance.module.screen; +import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import com.alibaba.dubbo.governance.service.OwnerService; +import com.alibaba.dubbo.governance.service.ProviderService; import com.alibaba.dubbo.governance.web.common.module.screen.Restful; import com.alibaba.dubbo.registry.common.domain.Owner; +import com.alibaba.dubbo.registry.common.util.Tool; /** * Providers. URI: /services/$service/owners @@ -25,6 +28,9 @@ public class Owners extends Restful { @Autowired private OwnerService ownerService; + + @Autowired + private ProviderService providerService; public void index(Map context) { String service = (String) context.get("service"); @@ -38,10 +44,46 @@ public class Owners extends Restful { } public void add(Map context) { + String service = (String) context.get("service"); + if (service == null || service.length() == 0) { + List serviceList = Tool.sortSimpleName(new ArrayList(providerService.findServices())); + context.put("serviceList", serviceList); + } } - public void create(Owner owner, Map context) { - owner.getUsername(); + public boolean create(Owner owner, Map context) { + String service = owner.getService(); + String username = owner.getUsername(); + if (service == null || service.length() == 0 + || username == null || username.length() == 0){ + context.put("message", getMessage("NoSuchOperationData")); + return false; + } + if (! super.currentUser.hasServicePrivilege(service)) { + context.put("message", getMessage("HaveNoServicePrivilege", service)); + return false; + } + ownerService.saveOwner(owner); + return true; + } + + public boolean delete(Long[] ids, Map context) { + String service = (String) context.get("service"); + String username = (String) context.get("username"); + Owner owner = new Owner(); + owner.setService(service); + owner.setUsername(username); + if (service == null || service.length() == 0 + || username == null || username.length() == 0){ + context.put("message", getMessage("NoSuchOperationData")); + return false; + } + if (! super.currentUser.hasServicePrivilege(service)) { + context.put("message", getMessage("HaveNoServicePrivilege", service)); + return false; + } + ownerService.deleteOwner(owner); + return true; } } diff --git a/dubbo-admin/src/main/java/com/alibaba/dubbo/registry/common/domain/User.java b/dubbo-admin/src/main/java/com/alibaba/dubbo/registry/common/domain/User.java index 32db2586e..a470d2522 100644 --- a/dubbo-admin/src/main/java/com/alibaba/dubbo/registry/common/domain/User.java +++ b/dubbo-admin/src/main/java/com/alibaba/dubbo/registry/common/domain/User.java @@ -186,7 +186,7 @@ public class User extends Entity { public boolean hasServicePrivilege(String service) { if (service == null || service.length() == 0) - throw new IllegalArgumentException("service == null"); + return false; if (role == null || GUEST.equalsIgnoreCase(role)) { return false; } diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/layout/default.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/layout/default.vm index b05ded728..68d63d19d 100644 --- a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/layout/default.vm +++ b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/layout/default.vm @@ -90,7 +90,7 @@ #set($tabs = ["services", "addresses", "overrides"]) #else #if($_type != "services" && $_type != "applications" && $_type != "addresses") - #set($tabs = ["accesses", "weights", "loadbalances", "routes", "owners", "overrides"]) + #set($tabs = ["routes", "overrides", "accesses", "weights", "loadbalances", "owners"]) #end #end #if($tabs.size() > 0) diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/accesses/add.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/accesses/add.vm index b8257adfa..f63991f11 100644 --- a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/accesses/add.vm +++ b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/accesses/add.vm @@ -6,22 +6,21 @@ - - @@ -29,10 +28,10 @@ #if($address) $tool.getIP($address) #else - + #end + $i18n.get("BatchAddressTip") - @@ -41,13 +40,12 @@ + $i18n.get("AccessControlTip") - -
$i18n.get("service")  * + #if($service) $service #else - + #if ($serviceList && $serviceList.size() > 0) #end #end
$i18n.get("ConsumerAddress"):  * $i18n.get("BatchAddressTip")
$i18n.get("status"): $i18n.get("AccessControlTip")
diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/addresses/add.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/addresses/add.vm deleted file mode 100644 index e69de29bb..000000000 diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/consumers/index.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/consumers/index.vm index 08d9a38f0..1858a1127 100644 --- a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/consumers/index.vm +++ b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/consumers/index.vm @@ -71,8 +71,9 @@ $i18n.get("NoProvider") #end - #if($currentUser.hasServicePrivilege($consumer.service)) + #if($currentUser.role != "G") + #if($currentUser.hasServicePrivilege($consumer.service)) $i18n.get("edit") | #if($tool.isInBlackList($consumer)) @@ -94,6 +95,7 @@ | $i18n.get("fail.mock") #end + #end #end diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/owners/add.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/owners/add.vm index edf81a3ce..e7b807601 100644 --- a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/owners/add.vm +++ b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/owners/add.vm @@ -1,75 +1,51 @@
-
+ - #if(! $service) - #if($provider.service) - - #else - - - - - #end - #end - - - - - - - - - + - + + + + + +
$i18n.get("service"): - -
$i18n.get("url"):
$i18n.get("type"):$i18n.get("static")
$i18n.get("status"): $i18n.get("service")  * - + #if($service) + $service + #else + + #if ($serviceList && $serviceList.size() > 0) + + #end + #end
$i18n.get("Username")  *
- - - \ No newline at end of file diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/owners/index.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/owners/index.vm index c22bc70c2..e61f3d1af 100644 --- a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/owners/index.vm +++ b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/owners/index.vm @@ -1,3 +1,8 @@ +
+ #if($currentUser.role != "G") + $i18n.get("add") + #end +

@@ -5,6 +10,7 @@ #if(! $service) #end + #if($currentUser.role != "G")#end #foreach($owner in $owners) @@ -12,6 +18,13 @@ #if(! $service) #end + #if($currentUser.role != "G") + + #end #end
$i18n.get("service"):  $i18n.get("operation")
$owner.service + #if($currentUser.hasServicePrivilege($owner.service)) + $i18n.get("delete") + #end +
diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/providers/add.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/providers/add.vm index 75109b0cd..a14d05cd9 100644 --- a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/providers/add.vm +++ b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/providers/add.vm @@ -14,7 +14,7 @@ diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/providers/index.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/providers/index.vm index f6872f393..294d434dc 100644 --- a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/providers/index.vm +++ b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/providers/index.vm @@ -64,8 +64,9 @@ $i18n.get("ok") #end - #if($currentUser.hasServicePrivilege($provider.service)) + #if($currentUser.role != "G") + #if($currentUser.hasServicePrivilege($provider.service)) $i18n.get("edit") | $i18n.get("copy") @@ -83,6 +84,7 @@ | $i18n.get("delete") #end + #end #end diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/weights/add.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/weights/add.vm index 976941e09..cf2d2648a 100644 --- a/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/weights/add.vm +++ b/dubbo-admin/src/main/webapp/WEB-INF/templates/governance/screen/weights/add.vm @@ -10,12 +10,12 @@ #if($service) $service #else - + #if ($serviceList && $serviceList.size() > 0) #end @@ -28,15 +28,16 @@ #if($address) $tool.getIP($address) #else - $i18n.get("BatchAddressTip") + #if ($addressList && $addressList.size() > 0) - #foreach ($s in $addressList) #end #end + $i18n.get("BatchAddressTip") #end @@ -64,6 +65,12 @@ function fnSetService(obj){ } } +function fnSetAddress(obj){ + if(obj.value!=''){ + byId('address').value = (byId('address').value.length > 0 ? byId('address').value + "\n" : "" ) + obj.value; + } +} + function checkService(service) { //if(service.indexOf(',') != -1) return false; diff --git a/dubbo-admin/src/main/webapp/WEB-INF/templates/home/control/menu.vm b/dubbo-admin/src/main/webapp/WEB-INF/templates/home/control/menu.vm index 720b23f53..78b958f56 100644 --- a/dubbo-admin/src/main/webapp/WEB-INF/templates/home/control/menu.vm +++ b/dubbo-admin/src/main/webapp/WEB-INF/templates/home/control/menu.vm @@ -54,12 +54,12 @@
  • $i18n.get("home")