diff --git a/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/HomePageHandler.java b/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/HomePageHandler.java index 13b74b257df8413e0d5576ba0dba64283e0c21e6..28619e5b2777d4fea908ba6ce32c5155547224d5 100644 --- a/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/HomePageHandler.java +++ b/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/HomePageHandler.java @@ -30,7 +30,7 @@ import com.alibaba.dubbo.container.page.PageServlet; * * @author william.liangf */ -@Menu(name = "Home", desc = "Home", order = Integer.MIN_VALUE) +@Menu(name = "Home", desc = "Home page.", order = Integer.MIN_VALUE) @Extension("index") public class HomePageHandler implements PageHandler { diff --git a/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/LogPageHandler.java b/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/LogPageHandler.java index ed0f58fa494dcb6051ddfbcb1697963ad1f2c981..90d08440b8c3710c6ad134c1b119d30f7b1511cf 100644 --- a/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/LogPageHandler.java +++ b/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/LogPageHandler.java @@ -42,7 +42,7 @@ import com.alibaba.dubbo.container.page.PageHandler; * * @author william.liangf */ -@Menu(name = "Log", desc = "Log", order = Integer.MAX_VALUE - 11000) +@Menu(name = "Log", desc = "Show system log.", order = Integer.MAX_VALUE - 11000) @Extension("log") public class LogPageHandler implements PageHandler { diff --git a/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/StatusPageHandler.java b/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/StatusPageHandler.java index 94a42dfd33b4a2efa36c1574b3f56f5434d8de6b..51c924b5d9a93ccbbcaacc37cd595c797a7afb45 100644 --- a/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/StatusPageHandler.java +++ b/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/StatusPageHandler.java @@ -36,7 +36,7 @@ import com.alibaba.dubbo.container.page.PageHandler; * * @author william.liangf */ -@Menu(name = "Status", desc = "Status", order = Integer.MAX_VALUE - 12000) +@Menu(name = "Status", desc = "Show system status.", order = Integer.MAX_VALUE - 12000) @Extension("status") public class StatusPageHandler implements PageHandler { diff --git a/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/SystemPageHandler.java b/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/SystemPageHandler.java index 3f284e6dec4516ac52f3121be61c6fd9d69bd1a9..2a2ae261ffad26ef74eaa98c00b3bbe3e166b925 100644 --- a/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/SystemPageHandler.java +++ b/dubbo-container/src/main/java/com/alibaba/dubbo/container/page/pages/SystemPageHandler.java @@ -35,7 +35,7 @@ import com.alibaba.dubbo.container.page.PageHandler; * * @author william.liangf */ -@Menu(name = "System", desc = "System", order = Integer.MAX_VALUE - 10000) +@Menu(name = "System", desc = "Show system environment information.", order = Integer.MAX_VALUE - 10000) @Extension("system") public class SystemPageHandler implements PageHandler { diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/RegistryContainer.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/RegistryContainer.java index abf3628f612d35784c97a9e6a75daea7f388fb09..69e715e8443e6cff6709e757d225ba466d29a181 100644 --- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/RegistryContainer.java +++ b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/RegistryContainer.java @@ -64,12 +64,12 @@ public class RegistryContainer implements Container { private final Set services = new ConcurrentHashSet(); - private final Map> providers = new ConcurrentHashMap>(); + private final Map> serviceProviders = new ConcurrentHashMap>(); - private final Map> consumers = new ConcurrentHashMap>(); + private final Map> serviceConsumers = new ConcurrentHashMap>(); + + private final Map> serviceRoutes = new ConcurrentHashMap>(); - private final Map> routes = new ConcurrentHashMap>(); - private Registry registry; private static RegistryContainer INSTANCE = null; @@ -93,66 +93,133 @@ public class RegistryContainer implements Container { return Collections.unmodifiableSet(applications); } - public Set getDependencies(String application, boolean afferent) { - return afferent ? getAfferentDependencies(application) : getEfferentDependencies(application); + public Set getDependencies(String application, boolean reverse) { + if (reverse) { + Set dependencies = new HashSet(); + Set services = providerApplicationServices.get(application); + if (services != null && services.size() > 0) { + for (String service : services) { + Set applications = consumerServiceApplications.get(service); + if (applications != null && applications.size() > 0) { + dependencies.addAll(applications); + } + } + } + return dependencies; + } else { + Set dependencies = new HashSet(); + Set services = consumerApplicationServices.get(application); + if (services != null && services.size() > 0) { + for (String service : services) { + Set applications = providerServiceApplications.get(service); + if (applications != null && applications.size() > 0) { + dependencies.addAll(applications); + } + } + } + return dependencies; + } + } + + public Set getServices() { + return Collections.unmodifiableSet(services); + } + + public Map> getServiceProviders() { + return Collections.unmodifiableMap(serviceProviders); + } + + public List getProvidersByService(String service) { + List urls = serviceProviders.get(service); + return urls == null ? null : Collections.unmodifiableList(urls); } - public Set getAfferentDependencies(String application) { - Set dependencies = new HashSet(); - Set services = providerApplicationServices.get(application); - if (services != null && services.size() > 0) { - for (String service : services) { - Set applications = consumerServiceApplications.get(service); - if (applications != null && applications.size() > 0) { - dependencies.addAll(applications); + public List getProvidersByHost(String host) { + List urls = new ArrayList(); + if (host != null && host.length() > 0) { + for (List providers : serviceProviders.values()) { + for (URL url : providers) { + if (host.equals(url.getHost())) { + urls.add(url); + } } } } - return dependencies; + return urls; } - public Set getEfferentDependencies(String application) { - Set dependencies = new HashSet(); - Set services = consumerApplicationServices.get(application); - if (services != null && services.size() > 0) { - for (String service : services) { - Set applications = providerServiceApplications.get(service); - if (applications != null && applications.size() > 0) { - dependencies.addAll(applications); + public List getProvidersByApplication(String application) { + List urls = new ArrayList(); + if (application != null && application.length() > 0) { + for (List providers : serviceProviders.values()) { + for (URL url : providers) { + if (application.equals(url.getParameter(Constants.APPLICATION_KEY))) { + urls.add(url); + } } } } - return dependencies; + return urls; } - public Set getServices() { - return Collections.unmodifiableSet(services); + public Set getHosts() { + Set addresses = new HashSet(); + for (List providers : serviceProviders.values()) { + for (URL url : providers) { + addresses.add(url.getHost()); + } + } + for (List providers : serviceConsumers.values()) { + for (URL url : providers) { + addresses.add(url.getHost()); + } + } + return addresses; } - public Map> getProviders() { - return Collections.unmodifiableMap(providers); + public Map> getServiceConsumers() { + return Collections.unmodifiableMap(serviceConsumers); } - public List getProviders(String service) { - List urls = providers.get(service); + public List getConsumersByService(String service) { + List urls = serviceConsumers.get(service); return urls == null ? null : Collections.unmodifiableList(urls); } - public Map> getConsumers() { - return Collections.unmodifiableMap(consumers); + public List getConsumersByHost(String host) { + List urls = new ArrayList(); + if (host != null && host.length() > 0) { + for (List consumers : serviceConsumers.values()) { + for (URL url : consumers) { + if (host.equals(url.getHost())) { + urls.add(url); + } + } + } + } + return Collections.unmodifiableList(urls); } - public List getConsumers(String service) { - List urls = consumers.get(service); - return urls == null ? null : Collections.unmodifiableList(urls); + public List getConsumersByApplication(String application) { + List urls = new ArrayList(); + if (application != null && application.length() > 0) { + for (List consumers : serviceConsumers.values()) { + for (URL url : consumers) { + if (application.equals(url.getParameter(Constants.APPLICATION_KEY))) { + urls.add(url); + } + } + } + } + return urls; } - public Map> getRoutes() { - return Collections.unmodifiableMap(routes); + public Map> getServiceRoutes() { + return Collections.unmodifiableMap(serviceRoutes); } - public List getRoutes(String service) { - List urls = routes.get(service); + public List getRoutesByService(String service) { + List urls = serviceRoutes.get(service); return urls == null ? null : Collections.unmodifiableList(urls); } @@ -241,23 +308,23 @@ public class RegistryContainer implements Container { } } if (proivderMap != null && proivderMap.size() > 0) { - providers.putAll(proivderMap); + serviceProviders.putAll(proivderMap); } if (consumerMap != null && consumerMap.size() > 0) { - consumers.putAll(consumerMap); + serviceConsumers.putAll(consumerMap); } if (routeMap != null && routeMap.size() > 0) { - routes.putAll(routeMap); + serviceRoutes.putAll(routeMap); } for (String service : notifiedServices) { if (! proivderMap.containsKey(service)) { - providers.remove(service); + serviceProviders.remove(service); } if (! consumerMap.containsKey(service)) { - consumers.remove(service); + serviceConsumers.remove(service); } if (! routeMap.containsKey(service)) { - routes.remove(service); + serviceRoutes.remove(service); } } } diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ApplicationsPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ApplicationsPageHandler.java index b5d2651ede75b7ac227b6f2ce32ab5ea5ea394c1..b82d8cfb1407a06ca28531deb98f47a8423bc61f 100644 --- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ApplicationsPageHandler.java +++ b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ApplicationsPageHandler.java @@ -31,32 +31,55 @@ import com.alibaba.dubbo.monitor.simple.RegistryContainer; * * @author william.liangf */ -@Menu(name = "Applications", desc = "Applications", order = 2000) +@Menu(name = "Applications", desc = "Show application dependencies.", order = 1000) @Extension("applications") public class ApplicationsPageHandler implements PageHandler { public Page handle(URL url) { Set applications = RegistryContainer.getInstance().getApplications(); List> rows = new ArrayList>(); + int providersCount = 0; + int consumersCount = 0; int efferentCount = 0; int afferentCount = 0; if (applications != null && applications.size() > 0) { for (String application : applications) { List row = new ArrayList(); row.add(application); - Set efferents = RegistryContainer.getInstance().getEfferentDependencies(application); + + List providers = RegistryContainer.getInstance().getProvidersByApplication(application); + List consumers = RegistryContainer.getInstance().getConsumersByApplication(application); + + if (providers != null && providers.size() > 0 + || consumers != null && consumers.size() > 0) { + URL provider = (providers != null && providers.size() > 0 ? providers.iterator().next() : consumers.iterator().next()); + row.add(provider.getParameter("owner", "") + (provider.hasParameter("organization") ? " (" + provider.getParameter("organization") + ")" : "")); + } else { + row.add(""); + } + + int providersSize = providers == null ? 0 : providers.size(); + providersCount += providersSize; + row.add(providersSize == 0 ? "No provider" : "Providers(" + providersSize + ")"); + + int consumersSize = consumers == null ? 0 : consumers.size(); + consumersCount += consumersSize; + row.add(consumersSize == 0 ? "No consumer" : "Consumers(" + consumersSize + ")"); + + Set efferents = RegistryContainer.getInstance().getDependencies(application, false); int efferentSize = efferents == null ? 0 : efferents.size(); efferentCount += efferentSize; - row.add(efferentSize == 0 ? "No Efferent Dependencies" : "Efferent Dependencies(" + efferentSize + ")"); - Set afferents = RegistryContainer.getInstance().getAfferentDependencies(application); + row.add(efferentSize == 0 ? "No depends" : "Depend On(" + efferentSize + ")"); + + Set afferents = RegistryContainer.getInstance().getDependencies(application, true); int afferentSize = afferents == null ? 0 : afferents.size(); afferentCount += afferentSize; - row.add(afferentSize == 0 ? "No Afferent Dependencies" : "Afferent Dependencies(" + afferentSize + ")"); + row.add(afferentSize == 0 ? "No used" : "Used By(" + afferentSize + ")"); rows.add(row); } } - return new Page("Apploications", "Apploications (" + rows.size() + ")", - new String[] { "Application Name:", "Efferent Dependencies(" + efferentCount + ")", "Afferent Dependencies(" + afferentCount + ")" }, rows); + return new Page("Applications", "Applications (" + rows.size() + ")", + new String[] { "Application Name:", "Owner", "Providers(" + providersCount + ")", "Consumers(" + consumersCount + ")", "Depend On(" + efferentCount + ")", "Used By(" + afferentCount + ")" }, rows); } } diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ConsumersPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ConsumersPageHandler.java index ecfe34646b2825bd398751928d2ef027ce4b9725..bd466b98d8a050c93880967342fab0c6e7e755fa 100644 --- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ConsumersPageHandler.java +++ b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ConsumersPageHandler.java @@ -20,6 +20,7 @@ import java.util.List; import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.utils.NetUtils; import com.alibaba.dubbo.container.page.Page; import com.alibaba.dubbo.container.page.PageHandler; import com.alibaba.dubbo.monitor.simple.RegistryContainer; @@ -34,24 +35,51 @@ public class ConsumersPageHandler implements PageHandler { public Page handle(URL url) { String service = url.getParameter("service"); - if (service == null || service.length() == 0) { - throw new IllegalArgumentException("Please input service parameter."); - } - List> rows = new ArrayList>(); - List consumers = RegistryContainer.getInstance().getConsumers(service); - if (consumers != null && consumers.size() > 0) { - for (URL consumer : consumers) { - List row = new ArrayList(); - row.add(consumer.toFullString().replace("&", "&")); - rows.add(row); + String host = url.getParameter("host"); + String application = url.getParameter("application"); + if (service != null && service.length() > 0) { + List> rows = new ArrayList>(); + List consumers = RegistryContainer.getInstance().getConsumersByService(service); + if (consumers != null && consumers.size() > 0) { + for (URL u : consumers) { + List row = new ArrayList(); + row.add(u.toFullString().replace("&", "&")); + rows.add(row); + } + } + return new Page("Services > " + service + + " > Providers | Consumers | Statistics | Charts", "Consumers (" + rows.size() + ")", + new String[] { "Consumer URL:" }, rows); + } else if (host != null && host.length() > 0) { + List> rows = new ArrayList>(); + List consumers = RegistryContainer.getInstance().getConsumersByHost(host); + if (consumers != null && consumers.size() > 0) { + for (URL u : consumers) { + List row = new ArrayList(); + row.add(u.toFullString().replace("&", "&")); + rows.add(row); + } + } + return new Page("Hosts > " + NetUtils.getHostName(host) + "/" + host + " > Providers | Consumers", "Consumers (" + rows.size() + ")", + new String[] { "Consumer URL:" }, rows); + } else if (application != null && application.length() > 0) { + List> rows = new ArrayList>(); + List consumers = RegistryContainer.getInstance().getConsumersByApplication(application); + if (consumers != null && consumers.size() > 0) { + for (URL u : consumers) { + List row = new ArrayList(); + row.add(u.toFullString().replace("&", "&")); + rows.add(row); + } } + return new Page("Applications > " + application + " > Providers | Consumers", "Consumers (" + rows.size() + ")", + new String[] { "Consumer URL:" }, rows); + } else { + throw new IllegalArgumentException("Please input service or host or application parameter."); } - return new Page("Services > " + service - + " > Providers | Consumers | Statistics | Charts", "Consumers (" + rows.size() + ")", - new String[] { "Consumer URL:" }, rows); } } diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/DependenciesPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/DependenciesPageHandler.java index 6895d8e7059e0b3b9db5d868f399b987ff952392..4b146f85f62529a9f7e82f3bfe4ddf0564cc0d36 100644 --- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/DependenciesPageHandler.java +++ b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/DependenciesPageHandler.java @@ -39,22 +39,22 @@ public class DependenciesPageHandler implements PageHandler { if (application == null || application.length() == 0) { throw new IllegalArgumentException("Please input application parameter."); } - boolean afferent = "afferent".equals(url.getParameter("direction")); + boolean reverse = url.getParameter("reverse", false); List> rows = new ArrayList>(); - appendDependency(rows, afferent, application, 0, new HashSet()); + appendDependency(rows, reverse, application, 0, new HashSet()); return new Page("Applications > " + application + - (afferent ? " > Efferent Dependencies | Afferent Dependencies" - : " > Efferent Dependencies | Afferent Dependencies"), (afferent ? "Afferent Dependencies" : "Efferent Dependencies") + " (" + rows.size() + ")", new String[] { "Application Name:"}, rows); + (reverse ? " > Depend On | Used By" + : " > Depend On | Used By"), (reverse ? "Used By" : "Depend On") + " (" + rows.size() + ")", new String[] { "Application Name:"}, rows); } - private void appendDependency(List> rows, boolean afferent, String application, int level, Set appended) { + private void appendDependency(List> rows, boolean reverse, String application, int level, Set appended) { List row = new ArrayList(); StringBuilder buf = new StringBuilder(); if (level > 0) { for (int i = 0; i < level; i ++) { buf.append("        |"); } - buf.append(afferent ? "<-- " : "--> "); + buf.append(reverse ? "<-- " : "--> "); } boolean end = false; if (level > 5) { @@ -74,10 +74,10 @@ public class DependenciesPageHandler implements PageHandler { } appended.add(application); - Set dependencies = RegistryContainer.getInstance().getDependencies(application, afferent); + Set dependencies = RegistryContainer.getInstance().getDependencies(application, reverse); if (dependencies != null && dependencies.size() > 0) { for (String dependency : dependencies) { - appendDependency(rows, afferent, dependency, level + 1, appended); + appendDependency(rows, reverse, dependency, level + 1, appended); } } appended.remove(application); diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/HostsPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/HostsPageHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..7394c3cbeb1b4b54a07ef7928ad0cb87f209c9c4 --- /dev/null +++ b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/HostsPageHandler.java @@ -0,0 +1,66 @@ +/* + * Copyright 1999-2011 Alibaba Group. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.dubbo.monitor.simple.pages; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import com.alibaba.dubbo.common.Extension; +import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.utils.NetUtils; +import com.alibaba.dubbo.container.page.Menu; +import com.alibaba.dubbo.container.page.Page; +import com.alibaba.dubbo.container.page.PageHandler; +import com.alibaba.dubbo.monitor.simple.RegistryContainer; + +/** + * HostsPageHandler + * + * @author william.liangf + */ +@Menu(name = "Hosts", desc = "Show provider and consumer hosts", order = 3000) +@Extension("hosts") +public class HostsPageHandler implements PageHandler { + + public Page handle(URL url) { + List> rows = new ArrayList>(); + Set hosts = RegistryContainer.getInstance().getHosts(); + int providersCount = 0; + int consumersCount = 0; + if (hosts != null && hosts.size() > 0) { + for (String host : hosts) { + List row = new ArrayList(); + row.add(NetUtils.getHostName(host) + "/" + host); + + List providers = RegistryContainer.getInstance().getProvidersByHost(host); + int proviedSize = providers == null ? 0 : providers.size(); + providersCount += proviedSize; + row.add(proviedSize == 0 ? "No provider" : "Providers(" + proviedSize + ")"); + + List consumers = RegistryContainer.getInstance().getConsumersByHost(host); + int consumersSize = consumers == null ? 0 : consumers.size(); + consumersCount += consumersSize; + row.add(consumersSize == 0 ? "No consumer" : "Consumers(" + consumersSize + ")"); + + rows.add(row); + } + } + return new Page("Hosts", "Hosts (" + rows.size() + ")", + new String[] { "Host Name/IP:", "Providers(" + providersCount + ")", "Consumers(" + consumersCount + ")" }, rows); + } + +} diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ProvidersPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ProvidersPageHandler.java index 1975f83e3ea1c9d88ad06f73ccbe98570873e8eb..c268f30f55bcfa1fda8ee8dc9d4e600a4dd929c1 100644 --- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ProvidersPageHandler.java +++ b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ProvidersPageHandler.java @@ -20,6 +20,7 @@ import java.util.List; import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.utils.NetUtils; import com.alibaba.dubbo.container.page.Page; import com.alibaba.dubbo.container.page.PageHandler; import com.alibaba.dubbo.monitor.simple.RegistryContainer; @@ -34,24 +35,51 @@ public class ProvidersPageHandler implements PageHandler { public Page handle(URL url) { String service = url.getParameter("service"); - if (service == null || service.length() == 0) { - throw new IllegalArgumentException("Please input service parameter."); - } - List> rows = new ArrayList>(); - List providers = RegistryContainer.getInstance().getProviders(service); - if (providers != null && providers.size() > 0) { - for (URL provider : providers) { - List row = new ArrayList(); - row.add(provider.toFullString().replace("&", "&")); - rows.add(row); + String host = url.getParameter("host"); + String application = url.getParameter("application"); + if (service != null && service.length() > 0) { + List> rows = new ArrayList>(); + List providers = RegistryContainer.getInstance().getProvidersByService(service); + if (providers != null && providers.size() > 0) { + for (URL u : providers) { + List row = new ArrayList(); + row.add(u.toFullString().replace("&", "&")); + rows.add(row); + } + } + return new Page("Services > " + service + + " > Providers | Consumers | Statistics | Charts", "Providers (" + rows.size() + ")", + new String[] { "Provider URL:" }, rows); + } else if (host != null && host.length() > 0) { + List> rows = new ArrayList>(); + List providers = RegistryContainer.getInstance().getProvidersByHost(host); + if (providers != null && providers.size() > 0) { + for (URL u : providers) { + List row = new ArrayList(); + row.add(u.toFullString().replace("&", "&")); + rows.add(row); + } + } + return new Page("Hosts > " + NetUtils.getHostName(host) + "/" + host + " > Providers | Consumers", "Providers (" + rows.size() + ")", + new String[] { "Provider URL:" }, rows); + } else if (application != null && application.length() > 0) { + List> rows = new ArrayList>(); + List providers = RegistryContainer.getInstance().getProvidersByApplication(application); + if (providers != null && providers.size() > 0) { + for (URL u : providers) { + List row = new ArrayList(); + row.add(u.toFullString().replace("&", "&")); + rows.add(row); + } } + return new Page("Applications > " + application + " > Providers | Consumers", "Providers (" + rows.size() + ")", + new String[] { "Provider URL:" }, rows); + } else { + throw new IllegalArgumentException("Please input service or host or application parameter."); } - return new Page("Services > " + service - + " > Providers | Consumers | Statistics | Charts", "Providers (" + rows.size() + ")", - new String[] { "Provider URL:" }, rows); } } diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServicesPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServicesPageHandler.java index 50da56544cd314da0a6ed913ff00204a7f145e12..c668f0e6016f620d8e68474a09930343303cdac3 100644 --- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServicesPageHandler.java +++ b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServicesPageHandler.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import com.alibaba.dubbo.common.Constants; import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.container.page.Menu; @@ -31,7 +32,7 @@ import com.alibaba.dubbo.monitor.simple.RegistryContainer; * * @author william.liangf */ -@Menu(name = "Services", desc = "Services", order = 1000) +@Menu(name = "Services", desc = "Show registered services.", order = 2000) @Extension("services") public class ServicesPageHandler implements PageHandler { @@ -44,11 +45,19 @@ public class ServicesPageHandler implements PageHandler { for (String service : services) { List row = new ArrayList(); row.add(service); - List providers = RegistryContainer.getInstance().getProviders(service); + List providers = RegistryContainer.getInstance().getProvidersByService(service); int providerSize = providers == null ? 0 : providers.size(); providerCount += providerSize; + if (providers != null && providers.size() > 0) { + URL provider = providers.iterator().next(); + row.add(provider.getParameter(Constants.APPLICATION_KEY, "")); + row.add(provider.getParameter("owner", "") + (provider.hasParameter("organization") ? " (" + provider.getParameter("organization") + ")" : "")); + } else { + row.add(""); + row.add(""); + } row.add(providerSize == 0 ? "No provider" : "Providers(" + providerSize + ")"); - List consumers = RegistryContainer.getInstance().getConsumers(service); + List consumers = RegistryContainer.getInstance().getConsumersByService(service); int consumerSize = consumers == null ? 0 : consumers.size(); consumerCount += consumerSize; row.add(consumerSize == 0 ? "No consumer" : "Consumers(" + consumerSize + ")"); @@ -58,7 +67,7 @@ public class ServicesPageHandler implements PageHandler { } } return new Page("Services", "Services (" + rows.size() + ")", - new String[] { "Service Name:", "Providers(" + providerCount + ")", "Consumers(" + consumerCount + ")", "Statistics", "Charts" }, rows); + new String[] { "Service Name:", "Application", "Owner", "Providers(" + providerCount + ")", "Consumers(" + consumerCount + ")", "Statistics", "Charts" }, rows); } } diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/services/com.alibaba.dubbo.container.page.PageHandler b/dubbo-monitor-simple/src/main/resources/META-INF/services/com.alibaba.dubbo.container.page.PageHandler index 56a05f4ca2c87e8001b7e4b6cfb9567c5d46cb28..30524fa5d68cc7de2412dba45e1c697aebd4500d 100644 --- a/dubbo-monitor-simple/src/main/resources/META-INF/services/com.alibaba.dubbo.container.page.PageHandler +++ b/dubbo-monitor-simple/src/main/resources/META-INF/services/com.alibaba.dubbo.container.page.PageHandler @@ -4,4 +4,5 @@ com.alibaba.dubbo.monitor.simple.pages.ConsumersPageHandler com.alibaba.dubbo.monitor.simple.pages.StatisticsPageHandler com.alibaba.dubbo.monitor.simple.pages.ChartsPageHandler com.alibaba.dubbo.monitor.simple.pages.ApplicationsPageHandler -com.alibaba.dubbo.monitor.simple.pages.DependenciesPageHandler \ No newline at end of file +com.alibaba.dubbo.monitor.simple.pages.DependenciesPageHandler +com.alibaba.dubbo.monitor.simple.pages.HostsPageHandler \ No newline at end of file diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/RegisteredPageHandler.java b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/RegisteredPageHandler.java index 5d8d931523e1b19eb47731c5c06802d5d36a268a..f56bbd9ad8cead483e75e3ead3f74d4635398090 100644 --- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/RegisteredPageHandler.java +++ b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/RegisteredPageHandler.java @@ -75,7 +75,7 @@ public class RegisteredPageHandler implements PageHandler { } } return new Page("Registries" + select.toString() + " > Registered | Subscribed", "Registered (" + rows.size() + ")", - new String[] { "Register URL:" }, rows); + new String[] { "Provider URL:" }, rows); } } \ No newline at end of file diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/RegistriesPageHandler.java b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/RegistriesPageHandler.java index 8574ba74e8202349ec3dedc864bccc95d044ae85..244e8076d878427beae4f7f1245b264807710e06 100644 --- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/RegistriesPageHandler.java +++ b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/RegistriesPageHandler.java @@ -21,6 +21,7 @@ import java.util.List; import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.utils.NetUtils; import com.alibaba.dubbo.container.page.Menu; import com.alibaba.dubbo.container.page.Page; import com.alibaba.dubbo.container.page.PageHandler; @@ -33,7 +34,7 @@ import com.alibaba.dubbo.registry.support.AbstractRegistryFactory; * * @author william.liangf */ -@Menu(name = "Registries", desc = "Registries", order = 10000) +@Menu(name = "Registries", desc = "Show connected registries.", order = 10000) @Extension("registries") public class RegistriesPageHandler implements PageHandler { @@ -46,7 +47,7 @@ public class RegistriesPageHandler implements PageHandler { for (Registry registry : registries) { String server = registry.getUrl().getAddress(); List row = new ArrayList(); - row.add(server); + row.add(NetUtils.getHostName(server) + "/" + server); if (registry.isAvailable()) { row.add("Connected"); } else { @@ -66,7 +67,7 @@ public class RegistriesPageHandler implements PageHandler { } } return new Page("Registries", "Registries (" + rows.size() + ")", - new String[] { "Registry Address:", "Ststus:", "Registered(" + registeredCount + ")", "Subscribed(" + subscribedCount + ")" }, rows); + new String[] { "Registry Address:", "Ststus", "Registered(" + registeredCount + ")", "Subscribed(" + subscribedCount + ")" }, rows); } } \ No newline at end of file diff --git a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/SubscribedPageHandler.java b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/SubscribedPageHandler.java index 9073c0524e499ace121f3c1f0ef28a23bfba63d4..6feaa223d352595907846f940b1a2f2d49cdc9bb 100644 --- a/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/SubscribedPageHandler.java +++ b/dubbo-registry/src/main/java/com/alibaba/dubbo/registry/pages/SubscribedPageHandler.java @@ -75,7 +75,7 @@ public class SubscribedPageHandler implements PageHandler { } } return new Page("Registries" + select.toString() + " > Registered | Subscribed", "Subscribed (" + rows.size() + ")", - new String[] { "Subscribe URL:" }, rows); + new String[] { "Consumer URL:" }, rows); } } \ No newline at end of file diff --git a/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/page/ClientsPageHandler.java b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/page/ClientsPageHandler.java index 205709ba99d1c48b26b1a3030d4829510a6576f3..f4ebf2b7072ead1ad93a54115982046d34d305e9 100644 --- a/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/page/ClientsPageHandler.java +++ b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/page/ClientsPageHandler.java @@ -68,7 +68,8 @@ public class ClientsPageHandler implements PageHandler { Collection channels = server.getExchangeChannels(); for (ExchangeChannel c : channels) { List row = new ArrayList(); - row.add(NetUtils.toAddressString(c.getRemoteAddress())); + String address = NetUtils.toAddressString(c.getRemoteAddress()); + row.add(NetUtils.getHostName(address) + "/" + address); rows.add(row); } } diff --git a/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/page/ServersPageHandler.java b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/page/ServersPageHandler.java index 5f396adf77db5a911aa5056c8505c121fece4308..3052fef0d0a4c4a6644271cd6588001423ce193e 100644 --- a/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/page/ServersPageHandler.java +++ b/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/page/ServersPageHandler.java @@ -21,6 +21,7 @@ import java.util.List; import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.URL; +import com.alibaba.dubbo.common.utils.NetUtils; import com.alibaba.dubbo.container.page.Menu; import com.alibaba.dubbo.container.page.Page; import com.alibaba.dubbo.container.page.PageHandler; @@ -32,7 +33,7 @@ import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol; * * @author william.liangf */ -@Menu(name = "Servers", desc="Servers", order = 14000) +@Menu(name = "Servers", desc="Show exported service servers.", order = 14000) @Extension("servers") public class ServersPageHandler implements PageHandler { @@ -43,7 +44,8 @@ public class ServersPageHandler implements PageHandler { if (servers != null && servers.size() > 0) { for (ExchangeServer s : servers) { List row = new ArrayList(); - row.add(s.getUrl().getAddress()); + String address = s.getUrl().getAddress(); + row.add(NetUtils.getHostName(address) + "/" + address); int clientSize = s.getExchangeChannels().size(); clientCount += clientSize; row.add("Clients(" + clientSize + ")");