提交 ff41faec 编写于 作者: W william.liangf

DUBBO-91 修改页面

git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@600 1a56cb94-b969-4eaa-88fa-be21384802f2
上级 95551710
...@@ -30,7 +30,7 @@ import com.alibaba.dubbo.container.page.PageServlet; ...@@ -30,7 +30,7 @@ import com.alibaba.dubbo.container.page.PageServlet;
* *
* @author william.liangf * @author william.liangf
*/ */
@Menu(name = "Home", desc = "Home", order = Integer.MIN_VALUE) @Menu(name = "Home", desc = "Home page.", order = Integer.MIN_VALUE)
@Extension("index") @Extension("index")
public class HomePageHandler implements PageHandler { public class HomePageHandler implements PageHandler {
......
...@@ -42,7 +42,7 @@ import com.alibaba.dubbo.container.page.PageHandler; ...@@ -42,7 +42,7 @@ import com.alibaba.dubbo.container.page.PageHandler;
* *
* @author william.liangf * @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") @Extension("log")
public class LogPageHandler implements PageHandler { public class LogPageHandler implements PageHandler {
......
...@@ -36,7 +36,7 @@ import com.alibaba.dubbo.container.page.PageHandler; ...@@ -36,7 +36,7 @@ import com.alibaba.dubbo.container.page.PageHandler;
* *
* @author william.liangf * @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") @Extension("status")
public class StatusPageHandler implements PageHandler { public class StatusPageHandler implements PageHandler {
......
...@@ -35,7 +35,7 @@ import com.alibaba.dubbo.container.page.PageHandler; ...@@ -35,7 +35,7 @@ import com.alibaba.dubbo.container.page.PageHandler;
* *
* @author william.liangf * @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") @Extension("system")
public class SystemPageHandler implements PageHandler { public class SystemPageHandler implements PageHandler {
......
...@@ -64,12 +64,12 @@ public class RegistryContainer implements Container { ...@@ -64,12 +64,12 @@ public class RegistryContainer implements Container {
private final Set<String> services = new ConcurrentHashSet<String>(); private final Set<String> services = new ConcurrentHashSet<String>();
private final Map<String, List<URL>> providers = new ConcurrentHashMap<String, List<URL>>(); private final Map<String, List<URL>> serviceProviders = new ConcurrentHashMap<String, List<URL>>();
private final Map<String, List<URL>> consumers = new ConcurrentHashMap<String, List<URL>>(); private final Map<String, List<URL>> serviceConsumers = new ConcurrentHashMap<String, List<URL>>();
private final Map<String, List<URL>> serviceRoutes = new ConcurrentHashMap<String, List<URL>>();
private final Map<String, List<URL>> routes = new ConcurrentHashMap<String, List<URL>>();
private Registry registry; private Registry registry;
private static RegistryContainer INSTANCE = null; private static RegistryContainer INSTANCE = null;
...@@ -93,66 +93,133 @@ public class RegistryContainer implements Container { ...@@ -93,66 +93,133 @@ public class RegistryContainer implements Container {
return Collections.unmodifiableSet(applications); return Collections.unmodifiableSet(applications);
} }
public Set<String> getDependencies(String application, boolean afferent) { public Set<String> getDependencies(String application, boolean reverse) {
return afferent ? getAfferentDependencies(application) : getEfferentDependencies(application); if (reverse) {
Set<String> dependencies = new HashSet<String>();
Set<String> services = providerApplicationServices.get(application);
if (services != null && services.size() > 0) {
for (String service : services) {
Set<String> applications = consumerServiceApplications.get(service);
if (applications != null && applications.size() > 0) {
dependencies.addAll(applications);
}
}
}
return dependencies;
} else {
Set<String> dependencies = new HashSet<String>();
Set<String> services = consumerApplicationServices.get(application);
if (services != null && services.size() > 0) {
for (String service : services) {
Set<String> applications = providerServiceApplications.get(service);
if (applications != null && applications.size() > 0) {
dependencies.addAll(applications);
}
}
}
return dependencies;
}
}
public Set<String> getServices() {
return Collections.unmodifiableSet(services);
}
public Map<String, List<URL>> getServiceProviders() {
return Collections.unmodifiableMap(serviceProviders);
}
public List<URL> getProvidersByService(String service) {
List<URL> urls = serviceProviders.get(service);
return urls == null ? null : Collections.unmodifiableList(urls);
} }
public Set<String> getAfferentDependencies(String application) { public List<URL> getProvidersByHost(String host) {
Set<String> dependencies = new HashSet<String>(); List<URL> urls = new ArrayList<URL>();
Set<String> services = providerApplicationServices.get(application); if (host != null && host.length() > 0) {
if (services != null && services.size() > 0) { for (List<URL> providers : serviceProviders.values()) {
for (String service : services) { for (URL url : providers) {
Set<String> applications = consumerServiceApplications.get(service); if (host.equals(url.getHost())) {
if (applications != null && applications.size() > 0) { urls.add(url);
dependencies.addAll(applications); }
} }
} }
} }
return dependencies; return urls;
} }
public Set<String> getEfferentDependencies(String application) { public List<URL> getProvidersByApplication(String application) {
Set<String> dependencies = new HashSet<String>(); List<URL> urls = new ArrayList<URL>();
Set<String> services = consumerApplicationServices.get(application); if (application != null && application.length() > 0) {
if (services != null && services.size() > 0) { for (List<URL> providers : serviceProviders.values()) {
for (String service : services) { for (URL url : providers) {
Set<String> applications = providerServiceApplications.get(service); if (application.equals(url.getParameter(Constants.APPLICATION_KEY))) {
if (applications != null && applications.size() > 0) { urls.add(url);
dependencies.addAll(applications); }
} }
} }
} }
return dependencies; return urls;
} }
public Set<String> getServices() { public Set<String> getHosts() {
return Collections.unmodifiableSet(services); Set<String> addresses = new HashSet<String>();
for (List<URL> providers : serviceProviders.values()) {
for (URL url : providers) {
addresses.add(url.getHost());
}
}
for (List<URL> providers : serviceConsumers.values()) {
for (URL url : providers) {
addresses.add(url.getHost());
}
}
return addresses;
} }
public Map<String, List<URL>> getProviders() { public Map<String, List<URL>> getServiceConsumers() {
return Collections.unmodifiableMap(providers); return Collections.unmodifiableMap(serviceConsumers);
} }
public List<URL> getProviders(String service) { public List<URL> getConsumersByService(String service) {
List<URL> urls = providers.get(service); List<URL> urls = serviceConsumers.get(service);
return urls == null ? null : Collections.unmodifiableList(urls); return urls == null ? null : Collections.unmodifiableList(urls);
} }
public Map<String, List<URL>> getConsumers() { public List<URL> getConsumersByHost(String host) {
return Collections.unmodifiableMap(consumers); List<URL> urls = new ArrayList<URL>();
if (host != null && host.length() > 0) {
for (List<URL> consumers : serviceConsumers.values()) {
for (URL url : consumers) {
if (host.equals(url.getHost())) {
urls.add(url);
}
}
}
}
return Collections.unmodifiableList(urls);
} }
public List<URL> getConsumers(String service) { public List<URL> getConsumersByApplication(String application) {
List<URL> urls = consumers.get(service); List<URL> urls = new ArrayList<URL>();
return urls == null ? null : Collections.unmodifiableList(urls); if (application != null && application.length() > 0) {
for (List<URL> consumers : serviceConsumers.values()) {
for (URL url : consumers) {
if (application.equals(url.getParameter(Constants.APPLICATION_KEY))) {
urls.add(url);
}
}
}
}
return urls;
} }
public Map<String, List<URL>> getRoutes() { public Map<String, List<URL>> getServiceRoutes() {
return Collections.unmodifiableMap(routes); return Collections.unmodifiableMap(serviceRoutes);
} }
public List<URL> getRoutes(String service) { public List<URL> getRoutesByService(String service) {
List<URL> urls = routes.get(service); List<URL> urls = serviceRoutes.get(service);
return urls == null ? null : Collections.unmodifiableList(urls); return urls == null ? null : Collections.unmodifiableList(urls);
} }
...@@ -241,23 +308,23 @@ public class RegistryContainer implements Container { ...@@ -241,23 +308,23 @@ public class RegistryContainer implements Container {
} }
} }
if (proivderMap != null && proivderMap.size() > 0) { if (proivderMap != null && proivderMap.size() > 0) {
providers.putAll(proivderMap); serviceProviders.putAll(proivderMap);
} }
if (consumerMap != null && consumerMap.size() > 0) { if (consumerMap != null && consumerMap.size() > 0) {
consumers.putAll(consumerMap); serviceConsumers.putAll(consumerMap);
} }
if (routeMap != null && routeMap.size() > 0) { if (routeMap != null && routeMap.size() > 0) {
routes.putAll(routeMap); serviceRoutes.putAll(routeMap);
} }
for (String service : notifiedServices) { for (String service : notifiedServices) {
if (! proivderMap.containsKey(service)) { if (! proivderMap.containsKey(service)) {
providers.remove(service); serviceProviders.remove(service);
} }
if (! consumerMap.containsKey(service)) { if (! consumerMap.containsKey(service)) {
consumers.remove(service); serviceConsumers.remove(service);
} }
if (! routeMap.containsKey(service)) { if (! routeMap.containsKey(service)) {
routes.remove(service); serviceRoutes.remove(service);
} }
} }
} }
......
...@@ -31,32 +31,55 @@ import com.alibaba.dubbo.monitor.simple.RegistryContainer; ...@@ -31,32 +31,55 @@ import com.alibaba.dubbo.monitor.simple.RegistryContainer;
* *
* @author william.liangf * @author william.liangf
*/ */
@Menu(name = "Applications", desc = "Applications", order = 2000) @Menu(name = "Applications", desc = "Show application dependencies.", order = 1000)
@Extension("applications") @Extension("applications")
public class ApplicationsPageHandler implements PageHandler { public class ApplicationsPageHandler implements PageHandler {
public Page handle(URL url) { public Page handle(URL url) {
Set<String> applications = RegistryContainer.getInstance().getApplications(); Set<String> applications = RegistryContainer.getInstance().getApplications();
List<List<String>> rows = new ArrayList<List<String>>(); List<List<String>> rows = new ArrayList<List<String>>();
int providersCount = 0;
int consumersCount = 0;
int efferentCount = 0; int efferentCount = 0;
int afferentCount = 0; int afferentCount = 0;
if (applications != null && applications.size() > 0) { if (applications != null && applications.size() > 0) {
for (String application : applications) { for (String application : applications) {
List<String> row = new ArrayList<String>(); List<String> row = new ArrayList<String>();
row.add(application); row.add(application);
Set<String> efferents = RegistryContainer.getInstance().getEfferentDependencies(application);
List<URL> providers = RegistryContainer.getInstance().getProvidersByApplication(application);
List<URL> 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 ? "<font color=\"blue\">No provider</font>" : "<a href=\"providers.html?application=" + application + "\">Providers(" + providersSize + ")</a>");
int consumersSize = consumers == null ? 0 : consumers.size();
consumersCount += consumersSize;
row.add(consumersSize == 0 ? "<font color=\"blue\">No consumer</font>" : "<a href=\"consumers.html?application=" + application + "\">Consumers(" + consumersSize + ")</a>");
Set<String> efferents = RegistryContainer.getInstance().getDependencies(application, false);
int efferentSize = efferents == null ? 0 : efferents.size(); int efferentSize = efferents == null ? 0 : efferents.size();
efferentCount += efferentSize; efferentCount += efferentSize;
row.add(efferentSize == 0 ? "<font color=\"blue\">No Efferent Dependencies</font>" : "<a href=\"dependencies.html?direction=efferent&application=" + application + "\">Efferent Dependencies(" + efferentSize + ")</a>"); row.add(efferentSize == 0 ? "<font color=\"blue\">No depends</font>" : "<a href=\"dependencies.html?application=" + application + "\">Depend On(" + efferentSize + ")</a>");
Set<String> afferents = RegistryContainer.getInstance().getAfferentDependencies(application);
Set<String> afferents = RegistryContainer.getInstance().getDependencies(application, true);
int afferentSize = afferents == null ? 0 : afferents.size(); int afferentSize = afferents == null ? 0 : afferents.size();
afferentCount += afferentSize; afferentCount += afferentSize;
row.add(afferentSize == 0 ? "<font color=\"blue\">No Afferent Dependencies</font>" : "<a href=\"dependencies.html?direction=afferent&application=" + application + "\">Afferent Dependencies(" + afferentSize + ")</a>"); row.add(afferentSize == 0 ? "<font color=\"blue\">No used</font>" : "<a href=\"dependencies.html?reverse=true&application=" + application + "\">Used By(" + afferentSize + ")</a>");
rows.add(row); rows.add(row);
} }
} }
return new Page("Apploications", "Apploications (" + rows.size() + ")", return new Page("Applications", "Applications (" + rows.size() + ")",
new String[] { "Application Name:", "Efferent Dependencies(" + efferentCount + ")", "Afferent Dependencies(" + afferentCount + ")" }, rows); new String[] { "Application Name:", "Owner", "Providers(" + providersCount + ")", "Consumers(" + consumersCount + ")", "Depend On(" + efferentCount + ")", "Used By(" + afferentCount + ")" }, rows);
} }
} }
...@@ -20,6 +20,7 @@ import java.util.List; ...@@ -20,6 +20,7 @@ import java.util.List;
import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL; 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.Page;
import com.alibaba.dubbo.container.page.PageHandler; import com.alibaba.dubbo.container.page.PageHandler;
import com.alibaba.dubbo.monitor.simple.RegistryContainer; import com.alibaba.dubbo.monitor.simple.RegistryContainer;
...@@ -34,24 +35,51 @@ public class ConsumersPageHandler implements PageHandler { ...@@ -34,24 +35,51 @@ public class ConsumersPageHandler implements PageHandler {
public Page handle(URL url) { public Page handle(URL url) {
String service = url.getParameter("service"); String service = url.getParameter("service");
if (service == null || service.length() == 0) { String host = url.getParameter("host");
throw new IllegalArgumentException("Please input service parameter."); String application = url.getParameter("application");
} if (service != null && service.length() > 0) {
List<List<String>> rows = new ArrayList<List<String>>(); List<List<String>> rows = new ArrayList<List<String>>();
List<URL> consumers = RegistryContainer.getInstance().getConsumers(service); List<URL> consumers = RegistryContainer.getInstance().getConsumersByService(service);
if (consumers != null && consumers.size() > 0) { if (consumers != null && consumers.size() > 0) {
for (URL consumer : consumers) { for (URL u : consumers) {
List<String> row = new ArrayList<String>(); List<String> row = new ArrayList<String>();
row.add(consumer.toFullString().replace("&", "&amp;")); row.add(u.toFullString().replace("&", "&amp;"));
rows.add(row); rows.add(row);
}
}
return new Page("<a href=\"services.html\">Services</a> &gt; " + service
+ " &gt; <a href=\"providers.html?service=" + service
+ "\">Providers</a> | Consumers | <a href=\"statistics.html?service=" + service
+ "\">Statistics</a> | <a href=\"charts.html?service=" + service
+ "\">Charts</a>", "Consumers (" + rows.size() + ")",
new String[] { "Consumer URL:" }, rows);
} else if (host != null && host.length() > 0) {
List<List<String>> rows = new ArrayList<List<String>>();
List<URL> consumers = RegistryContainer.getInstance().getConsumersByHost(host);
if (consumers != null && consumers.size() > 0) {
for (URL u : consumers) {
List<String> row = new ArrayList<String>();
row.add(u.toFullString().replace("&", "&amp;"));
rows.add(row);
}
}
return new Page("<a href=\"hosts.html\">Hosts</a> &gt; " + NetUtils.getHostName(host) + "/" + host + " &gt; <a href=\"providers.html?host=" + host + "\">Providers</a> | Consumers", "Consumers (" + rows.size() + ")",
new String[] { "Consumer URL:" }, rows);
} else if (application != null && application.length() > 0) {
List<List<String>> rows = new ArrayList<List<String>>();
List<URL> consumers = RegistryContainer.getInstance().getConsumersByApplication(application);
if (consumers != null && consumers.size() > 0) {
for (URL u : consumers) {
List<String> row = new ArrayList<String>();
row.add(u.toFullString().replace("&", "&amp;"));
rows.add(row);
}
} }
return new Page("<a href=\"applications.html\">Applications</a> &gt; " + application + " &gt; <a href=\"providers.html?application=" + application + "\">Providers</a> | Consumers", "Consumers (" + rows.size() + ")",
new String[] { "Consumer URL:" }, rows);
} else {
throw new IllegalArgumentException("Please input service or host or application parameter.");
} }
return new Page("<a href=\"services.html\">Services</a> &gt; " + service
+ " &gt; <a href=\"providers.html?service=" + service
+ "\">Providers</a> | Consumers | <a href=\"statistics.html?service=" + service
+ "\">Statistics</a> | <a href=\"charts.html?service=" + service
+ "\">Charts</a>", "Consumers (" + rows.size() + ")",
new String[] { "Consumer URL:" }, rows);
} }
} }
...@@ -39,22 +39,22 @@ public class DependenciesPageHandler implements PageHandler { ...@@ -39,22 +39,22 @@ public class DependenciesPageHandler implements PageHandler {
if (application == null || application.length() == 0) { if (application == null || application.length() == 0) {
throw new IllegalArgumentException("Please input application parameter."); throw new IllegalArgumentException("Please input application parameter.");
} }
boolean afferent = "afferent".equals(url.getParameter("direction")); boolean reverse = url.getParameter("reverse", false);
List<List<String>> rows = new ArrayList<List<String>>(); List<List<String>> rows = new ArrayList<List<String>>();
appendDependency(rows, afferent, application, 0, new HashSet<String>()); appendDependency(rows, reverse, application, 0, new HashSet<String>());
return new Page("<a href=\"applications.html\">Applications</a> &gt; " + application + return new Page("<a href=\"applications.html\">Applications</a> &gt; " + application +
(afferent ? " &gt; <a href=\"dependencies.html?direction=efferent&application=" + application + "\">Efferent Dependencies</a> | Afferent Dependencies" (reverse ? " &gt; <a href=\"dependencies.html?application=" + application + "\">Depend On</a> | Used By"
: " &gt; Efferent Dependencies | <a href=\"dependencies.html?direction=afferent&application=" + application + "\">Afferent Dependencies</a>"), (afferent ? "Afferent Dependencies" : "Efferent Dependencies") + " (" + rows.size() + ")", new String[] { "Application Name:"}, rows); : " &gt; Depend On | <a href=\"dependencies.html?reverse=true&application=" + application + "\">Used By</a>"), (reverse ? "Used By" : "Depend On") + " (" + rows.size() + ")", new String[] { "Application Name:"}, rows);
} }
private void appendDependency(List<List<String>> rows, boolean afferent, String application, int level, Set<String> appended) { private void appendDependency(List<List<String>> rows, boolean reverse, String application, int level, Set<String> appended) {
List<String> row = new ArrayList<String>(); List<String> row = new ArrayList<String>();
StringBuilder buf = new StringBuilder(); StringBuilder buf = new StringBuilder();
if (level > 0) { if (level > 0) {
for (int i = 0; i < level; i ++) { for (int i = 0; i < level; i ++) {
buf.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|"); buf.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|");
} }
buf.append(afferent ? "&lt;-- " : "--&gt; "); buf.append(reverse ? "&lt;-- " : "--&gt; ");
} }
boolean end = false; boolean end = false;
if (level > 5) { if (level > 5) {
...@@ -74,10 +74,10 @@ public class DependenciesPageHandler implements PageHandler { ...@@ -74,10 +74,10 @@ public class DependenciesPageHandler implements PageHandler {
} }
appended.add(application); appended.add(application);
Set<String> dependencies = RegistryContainer.getInstance().getDependencies(application, afferent); Set<String> dependencies = RegistryContainer.getInstance().getDependencies(application, reverse);
if (dependencies != null && dependencies.size() > 0) { if (dependencies != null && dependencies.size() > 0) {
for (String dependency : dependencies) { for (String dependency : dependencies) {
appendDependency(rows, afferent, dependency, level + 1, appended); appendDependency(rows, reverse, dependency, level + 1, appended);
} }
} }
appended.remove(application); appended.remove(application);
......
/*
* 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<List<String>> rows = new ArrayList<List<String>>();
Set<String> hosts = RegistryContainer.getInstance().getHosts();
int providersCount = 0;
int consumersCount = 0;
if (hosts != null && hosts.size() > 0) {
for (String host : hosts) {
List<String> row = new ArrayList<String>();
row.add(NetUtils.getHostName(host) + "/" + host);
List<URL> providers = RegistryContainer.getInstance().getProvidersByHost(host);
int proviedSize = providers == null ? 0 : providers.size();
providersCount += proviedSize;
row.add(proviedSize == 0 ? "<font color=\"blue\">No provider</font>" : "<a href=\"providers.html?host=" + host + "\">Providers(" + proviedSize + ")</a>");
List<URL> consumers = RegistryContainer.getInstance().getConsumersByHost(host);
int consumersSize = consumers == null ? 0 : consumers.size();
consumersCount += consumersSize;
row.add(consumersSize == 0 ? "<font color=\"blue\">No consumer</font>" : "<a href=\"consumers.html?host=" + host + "\">Consumers(" + consumersSize + ")</a>");
rows.add(row);
}
}
return new Page("Hosts", "Hosts (" + rows.size() + ")",
new String[] { "Host Name/IP:", "Providers(" + providersCount + ")", "Consumers(" + consumersCount + ")" }, rows);
}
}
...@@ -20,6 +20,7 @@ import java.util.List; ...@@ -20,6 +20,7 @@ import java.util.List;
import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL; 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.Page;
import com.alibaba.dubbo.container.page.PageHandler; import com.alibaba.dubbo.container.page.PageHandler;
import com.alibaba.dubbo.monitor.simple.RegistryContainer; import com.alibaba.dubbo.monitor.simple.RegistryContainer;
...@@ -34,24 +35,51 @@ public class ProvidersPageHandler implements PageHandler { ...@@ -34,24 +35,51 @@ public class ProvidersPageHandler implements PageHandler {
public Page handle(URL url) { public Page handle(URL url) {
String service = url.getParameter("service"); String service = url.getParameter("service");
if (service == null || service.length() == 0) { String host = url.getParameter("host");
throw new IllegalArgumentException("Please input service parameter."); String application = url.getParameter("application");
} if (service != null && service.length() > 0) {
List<List<String>> rows = new ArrayList<List<String>>(); List<List<String>> rows = new ArrayList<List<String>>();
List<URL> providers = RegistryContainer.getInstance().getProviders(service); List<URL> providers = RegistryContainer.getInstance().getProvidersByService(service);
if (providers != null && providers.size() > 0) { if (providers != null && providers.size() > 0) {
for (URL provider : providers) { for (URL u : providers) {
List<String> row = new ArrayList<String>(); List<String> row = new ArrayList<String>();
row.add(provider.toFullString().replace("&", "&amp;")); row.add(u.toFullString().replace("&", "&amp;"));
rows.add(row); rows.add(row);
}
}
return new Page("<a href=\"services.html\">Services</a> &gt; " + service
+ " &gt; Providers | <a href=\"consumers.html?service=" + service
+ "\">Consumers</a> | <a href=\"statistics.html?service=" + service
+ "\">Statistics</a> | <a href=\"charts.html?service=" + service
+ "\">Charts</a>", "Providers (" + rows.size() + ")",
new String[] { "Provider URL:" }, rows);
} else if (host != null && host.length() > 0) {
List<List<String>> rows = new ArrayList<List<String>>();
List<URL> providers = RegistryContainer.getInstance().getProvidersByHost(host);
if (providers != null && providers.size() > 0) {
for (URL u : providers) {
List<String> row = new ArrayList<String>();
row.add(u.toFullString().replace("&", "&amp;"));
rows.add(row);
}
}
return new Page("<a href=\"hosts.html\">Hosts</a> &gt; " + NetUtils.getHostName(host) + "/" + host + " &gt; Providers | <a href=\"consumers.html?host=" + host + "\">Consumers</a>", "Providers (" + rows.size() + ")",
new String[] { "Provider URL:" }, rows);
} else if (application != null && application.length() > 0) {
List<List<String>> rows = new ArrayList<List<String>>();
List<URL> providers = RegistryContainer.getInstance().getProvidersByApplication(application);
if (providers != null && providers.size() > 0) {
for (URL u : providers) {
List<String> row = new ArrayList<String>();
row.add(u.toFullString().replace("&", "&amp;"));
rows.add(row);
}
} }
return new Page("<a href=\"applications.html\">Applications</a> &gt; " + application + " &gt; Providers | <a href=\"consumers.html?application=" + application + "\">Consumers</a>", "Providers (" + rows.size() + ")",
new String[] { "Provider URL:" }, rows);
} else {
throw new IllegalArgumentException("Please input service or host or application parameter.");
} }
return new Page("<a href=\"services.html\">Services</a> &gt; " + service
+ " &gt; Providers | <a href=\"consumers.html?service=" + service
+ "\">Consumers</a> | <a href=\"statistics.html?service=" + service
+ "\">Statistics</a> | <a href=\"charts.html?service=" + service
+ "\">Charts</a>", "Providers (" + rows.size() + ")",
new String[] { "Provider URL:" }, rows);
} }
} }
...@@ -19,6 +19,7 @@ import java.util.ArrayList; ...@@ -19,6 +19,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.container.page.Menu; import com.alibaba.dubbo.container.page.Menu;
...@@ -31,7 +32,7 @@ import com.alibaba.dubbo.monitor.simple.RegistryContainer; ...@@ -31,7 +32,7 @@ import com.alibaba.dubbo.monitor.simple.RegistryContainer;
* *
* @author william.liangf * @author william.liangf
*/ */
@Menu(name = "Services", desc = "Services", order = 1000) @Menu(name = "Services", desc = "Show registered services.", order = 2000)
@Extension("services") @Extension("services")
public class ServicesPageHandler implements PageHandler { public class ServicesPageHandler implements PageHandler {
...@@ -44,11 +45,19 @@ public class ServicesPageHandler implements PageHandler { ...@@ -44,11 +45,19 @@ public class ServicesPageHandler implements PageHandler {
for (String service : services) { for (String service : services) {
List<String> row = new ArrayList<String>(); List<String> row = new ArrayList<String>();
row.add(service); row.add(service);
List<URL> providers = RegistryContainer.getInstance().getProviders(service); List<URL> providers = RegistryContainer.getInstance().getProvidersByService(service);
int providerSize = providers == null ? 0 : providers.size(); int providerSize = providers == null ? 0 : providers.size();
providerCount += providerSize; 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 ? "<font color=\"red\">No provider</a>" : "<a href=\"providers.html?service=" + service + "\">Providers(" + providerSize + ")</a>"); row.add(providerSize == 0 ? "<font color=\"red\">No provider</a>" : "<a href=\"providers.html?service=" + service + "\">Providers(" + providerSize + ")</a>");
List<URL> consumers = RegistryContainer.getInstance().getConsumers(service); List<URL> consumers = RegistryContainer.getInstance().getConsumersByService(service);
int consumerSize = consumers == null ? 0 : consumers.size(); int consumerSize = consumers == null ? 0 : consumers.size();
consumerCount += consumerSize; consumerCount += consumerSize;
row.add(consumerSize == 0 ? "<font color=\"blue\">No consumer</a>" : "<a href=\"consumers.html?service=" + service + "\">Consumers(" + consumerSize + ")</a>"); row.add(consumerSize == 0 ? "<font color=\"blue\">No consumer</a>" : "<a href=\"consumers.html?service=" + service + "\">Consumers(" + consumerSize + ")</a>");
...@@ -58,7 +67,7 @@ public class ServicesPageHandler implements PageHandler { ...@@ -58,7 +67,7 @@ public class ServicesPageHandler implements PageHandler {
} }
} }
return new Page("Services", "Services (" + rows.size() + ")", 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);
} }
} }
...@@ -4,4 +4,5 @@ com.alibaba.dubbo.monitor.simple.pages.ConsumersPageHandler ...@@ -4,4 +4,5 @@ com.alibaba.dubbo.monitor.simple.pages.ConsumersPageHandler
com.alibaba.dubbo.monitor.simple.pages.StatisticsPageHandler com.alibaba.dubbo.monitor.simple.pages.StatisticsPageHandler
com.alibaba.dubbo.monitor.simple.pages.ChartsPageHandler com.alibaba.dubbo.monitor.simple.pages.ChartsPageHandler
com.alibaba.dubbo.monitor.simple.pages.ApplicationsPageHandler com.alibaba.dubbo.monitor.simple.pages.ApplicationsPageHandler
com.alibaba.dubbo.monitor.simple.pages.DependenciesPageHandler com.alibaba.dubbo.monitor.simple.pages.DependenciesPageHandler
\ No newline at end of file com.alibaba.dubbo.monitor.simple.pages.HostsPageHandler
\ No newline at end of file
...@@ -75,7 +75,7 @@ public class RegisteredPageHandler implements PageHandler { ...@@ -75,7 +75,7 @@ public class RegisteredPageHandler implements PageHandler {
} }
} }
return new Page("<a href=\"registries.html\">Registries</a>" + select.toString() + " &gt; Registered | <a href=\"subscribed.html?registry=" + registryAddress + "\">Subscribed</a>", "Registered (" + rows.size() + ")", return new Page("<a href=\"registries.html\">Registries</a>" + select.toString() + " &gt; Registered | <a href=\"subscribed.html?registry=" + registryAddress + "\">Subscribed</a>", "Registered (" + rows.size() + ")",
new String[] { "Register URL:" }, rows); new String[] { "Provider URL:" }, rows);
} }
} }
\ No newline at end of file
...@@ -21,6 +21,7 @@ import java.util.List; ...@@ -21,6 +21,7 @@ import java.util.List;
import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL; 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.Menu;
import com.alibaba.dubbo.container.page.Page; import com.alibaba.dubbo.container.page.Page;
import com.alibaba.dubbo.container.page.PageHandler; import com.alibaba.dubbo.container.page.PageHandler;
...@@ -33,7 +34,7 @@ import com.alibaba.dubbo.registry.support.AbstractRegistryFactory; ...@@ -33,7 +34,7 @@ import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
* *
* @author william.liangf * @author william.liangf
*/ */
@Menu(name = "Registries", desc = "Registries", order = 10000) @Menu(name = "Registries", desc = "Show connected registries.", order = 10000)
@Extension("registries") @Extension("registries")
public class RegistriesPageHandler implements PageHandler { public class RegistriesPageHandler implements PageHandler {
...@@ -46,7 +47,7 @@ public class RegistriesPageHandler implements PageHandler { ...@@ -46,7 +47,7 @@ public class RegistriesPageHandler implements PageHandler {
for (Registry registry : registries) { for (Registry registry : registries) {
String server = registry.getUrl().getAddress(); String server = registry.getUrl().getAddress();
List<String> row = new ArrayList<String>(); List<String> row = new ArrayList<String>();
row.add(server); row.add(NetUtils.getHostName(server) + "/" + server);
if (registry.isAvailable()) { if (registry.isAvailable()) {
row.add("<font color=\"green\">Connected</font>"); row.add("<font color=\"green\">Connected</font>");
} else { } else {
...@@ -66,7 +67,7 @@ public class RegistriesPageHandler implements PageHandler { ...@@ -66,7 +67,7 @@ public class RegistriesPageHandler implements PageHandler {
} }
} }
return new Page("Registries", "Registries (" + rows.size() + ")", 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
...@@ -75,7 +75,7 @@ public class SubscribedPageHandler implements PageHandler { ...@@ -75,7 +75,7 @@ public class SubscribedPageHandler implements PageHandler {
} }
} }
return new Page("<a href=\"registries.html\">Registries</a>" + select.toString() + " &gt; <a href=\"registered.html?registry=" + registryAddress + "\">Registered</a> | Subscribed", "Subscribed (" + rows.size() + ")", return new Page("<a href=\"registries.html\">Registries</a>" + select.toString() + " &gt; <a href=\"registered.html?registry=" + registryAddress + "\">Registered</a> | Subscribed", "Subscribed (" + rows.size() + ")",
new String[] { "Subscribe URL:" }, rows); new String[] { "Consumer URL:" }, rows);
} }
} }
\ No newline at end of file
...@@ -68,7 +68,8 @@ public class ClientsPageHandler implements PageHandler { ...@@ -68,7 +68,8 @@ public class ClientsPageHandler implements PageHandler {
Collection<ExchangeChannel> channels = server.getExchangeChannels(); Collection<ExchangeChannel> channels = server.getExchangeChannels();
for (ExchangeChannel c : channels) { for (ExchangeChannel c : channels) {
List<String> row = new ArrayList<String>(); List<String> row = new ArrayList<String>();
row.add(NetUtils.toAddressString(c.getRemoteAddress())); String address = NetUtils.toAddressString(c.getRemoteAddress());
row.add(NetUtils.getHostName(address) + "/" + address);
rows.add(row); rows.add(row);
} }
} }
......
...@@ -21,6 +21,7 @@ import java.util.List; ...@@ -21,6 +21,7 @@ import java.util.List;
import com.alibaba.dubbo.common.Extension; import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL; 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.Menu;
import com.alibaba.dubbo.container.page.Page; import com.alibaba.dubbo.container.page.Page;
import com.alibaba.dubbo.container.page.PageHandler; import com.alibaba.dubbo.container.page.PageHandler;
...@@ -32,7 +33,7 @@ import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol; ...@@ -32,7 +33,7 @@ import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
* *
* @author william.liangf * @author william.liangf
*/ */
@Menu(name = "Servers", desc="Servers", order = 14000) @Menu(name = "Servers", desc="Show exported service servers.", order = 14000)
@Extension("servers") @Extension("servers")
public class ServersPageHandler implements PageHandler { public class ServersPageHandler implements PageHandler {
...@@ -43,7 +44,8 @@ public class ServersPageHandler implements PageHandler { ...@@ -43,7 +44,8 @@ public class ServersPageHandler implements PageHandler {
if (servers != null && servers.size() > 0) { if (servers != null && servers.size() > 0) {
for (ExchangeServer s : servers) { for (ExchangeServer s : servers) {
List<String> row = new ArrayList<String>(); List<String> row = new ArrayList<String>();
row.add(s.getUrl().getAddress()); String address = s.getUrl().getAddress();
row.add(NetUtils.getHostName(address) + "/" + address);
int clientSize = s.getExchangeChannels().size(); int clientSize = s.getExchangeChannels().size();
clientCount += clientSize; clientCount += clientSize;
row.add("<a href=\"clients.html?port=" + s.getUrl().getPort() + "\">Clients(" + clientSize + ")</a>"); row.add("<a href=\"clients.html?port=" + s.getUrl().getPort() + "\">Clients(" + clientSize + ")</a>");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册