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

修改container页面

git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@364 1a56cb94-b969-4eaa-88fa-be21384802f2
上级 8c6d53b3
......@@ -285,6 +285,14 @@ public class Constants {
public static final String CHANNEL_SEND_READONLYEVENT_KEY = "channel.readonly.send";
public static final String SUBSCRIBE_PROTOCOL = "subscribe";
public static final String LOOKUP_PROTOCOL = "lookup";
public static final String FORBID_PROTOCOL = "forbid";
public static final String ROUTE_PROTOCOL = "route";
private Constants(){
}
......
......@@ -39,6 +39,8 @@ public class JettyContainer implements Container {
public static final String JETTY_PORT = "jetty.port";
public static final String JETTY_PAGES = "jetty.pages";
public static final int DEFAULT_JETTY_PORT = 8080;
private SelectChannelConnector connector;
......@@ -55,6 +57,7 @@ public class JettyContainer implements Container {
connector.setPort(port);
ServletHandler handler = new ServletHandler();
ServletHolder holder = handler.addServletWithMapping(PageServlet.class, "/*");
holder.setInitParameter("pages", System.getProperty(JETTY_PAGES));
holder.setInitOrder(1);
Server server = new Server();
server.addConnector(connector);
......
/*
* 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.container.page;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Menu
*
* @author william.liangf
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Menu {
String name();
String desc() default "";
int order() default 0;
}
/*
* 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.container.page;
import java.util.Comparator;
/**
* MenuComparator
*
* @author william.liangf
*/
public class MenuComparator implements Comparator<PageHandler> {
public int compare(PageHandler o1, PageHandler o2) {
if (o1 == null && o2 == null) {
return 0;
}
if (o1 == null) {
return -1;
}
if (o2 == null) {
return 1;
}
return o1.equals(o2) ? 0 : (o1.getClass().getAnnotation(Menu.class).order()
> o2.getClass().getAnnotation(Menu.class).order() ? 1 : -1);
}
}
......@@ -17,19 +17,27 @@ package com.alibaba.dubbo.container.page;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.alibaba.dubbo.common.utils.StringUtils;
/**
* PageServlet
......@@ -44,21 +52,57 @@ public class PageServlet extends HttpServlet {
protected final Random random = new Random();
protected String applicationName;
protected final Map<String, PageHandler> pages = new ConcurrentHashMap<String, PageHandler>();
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
protected final List<PageHandler> menus = new ArrayList<PageHandler>();
private static PageServlet INSTANCE;
public static PageServlet getInstance() {
return INSTANCE;
}
@SuppressWarnings("unchecked")
public List<PageHandler> getMenus() {
return Collections.unmodifiableList(menus);
}
@Override
public void init() throws ServletException {
super.init();
INSTANCE = this;
String config = getServletConfig().getInitParameter("pages");
Collection<String> names;
if (config != null && config.length() > 0) {
names = Arrays.asList(Constants.COMMA_SPLIT_PATTERN.split(config));
} else {
names = ExtensionLoader.getExtensionLoader(PageHandler.class).getSupportedExtensions();
}
for (String name : names) {
PageHandler handler = ExtensionLoader.getExtensionLoader(PageHandler.class).getExtension(name);
pages.put(handler.getClass().getAnnotation(Extension.class).value(), handler);
Menu menu = handler.getClass().getAnnotation(Menu.class);
if (menu != null) {
menus.add(handler);
}
}
Collections.sort(menus, new MenuComparator());
}
@Override
protected final void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
@Override
protected final void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (! response.isCommitted()) {
PrintWriter writer = response.getWriter();
String uri = request.getRequestURI();
boolean isHtml = false;
if (uri == null || uri.length() == 0 || "/".equals(uri)) {
uri = "home";
uri = "index";
isHtml = true;
} else {
if (uri.startsWith("/")) {
......@@ -69,21 +113,48 @@ public class PageServlet extends HttpServlet {
isHtml = true;
}
}
PageHandler pageFactory = ExtensionLoader.getExtensionLoader(PageHandler.class).getExtension(uri);
PageHandler pageHandler = ExtensionLoader.getExtensionLoader(PageHandler.class).getExtension(uri);
if (isHtml) {
writer.println("<html><head><title>" + applicationName + " service server</title>");
writer.println("<html><head><title>Dubbo</title>");
writer.println("<style type=\"text/css\">html, body {margin: 10;padding: 0;background-color: #6D838C;font-family: Arial, Verdana;font-size: 12px;color: #FFFFFF;text-align: center;vertical-align: middle;word-break: break-all; } table {width: 800px;margin: 0px auto;border-collapse: collapse;border: 8px solid #FFFFFF; } thead tr {background-color: #253c46; } tbody tr {background-color: #8da5af; } th {padding-top: 4px;padding-bottom: 4px;font-size: 14px;height: 20px; } td {margin: 3px;padding: 3px;border: 2px solid #FFFFFF;height: 25px; } a {color: #FFFFFF;cursor: pointer;text-decoration: underline; } a:hover {text-decoration: none; }</style>");
writer.println("</head><body>");
}
if (pageFactory != null) {
Page page = pageFactory.handle(URL.valueOf(request.getRequestURL().toString()).addParameters(request.getParameterMap()));
if (pageHandler != null) {
Page page = null;
try {
String query = request.getQueryString();
page = pageHandler.handle(URL.valueOf(request.getRequestURL().toString()
+ (query == null || query.length() == 0 ? "" : "?" + query)));
} catch (Throwable t) {
if (isHtml) {
writer.println("<table>");
writer.println("<thead>");
writer.println(" <tr>");
writer.println(" <th>Error</th>");
writer.println(" </tr>");
writer.println("</thead>");
writer.println("<tbody>");
writer.println(" <tr>");
writer.println(" <td>");
writer.println(" " + StringUtils.toString(t).replace("<", "&lt;").replace(">", "&lt;").replace("\n", "<br/>"));
writer.println(" </td>");
writer.println(" </tr>");
writer.println("</tbody>");
writer.println("</table>");
writer.println("<br/>");
} else {
writer.println(StringUtils.toString(t));
}
}
if (page != null) {
if (isHtml) {
writeMenu(request, writer, page.getNavigation());
writeTable(writer, page.getTitle(), page.getColumns(),
page.getRows());
} else {
writer.println(page.getTitle());
if (page.getRows().size() > 0 && page.getRows().get(0).size() > 0) {
writer.println(page.getRows().get(0).get(0));
}
}
}
} else {
......@@ -118,14 +189,16 @@ public class PageServlet extends HttpServlet {
writer.println("<table>");
writer.println("<thead>");
writer.println(" <tr>");
for (String name : ExtensionLoader.getExtensionLoader(PageHandler.class).getSupportedExtensions()) {
writer.println(" <th><a href=\"" + name + ".html\">" + name + "</a></th>");
for (PageHandler handler : menus) {
String uri = handler.getClass().getAnnotation(Extension.class).value();
Menu menu = handler.getClass().getAnnotation(Menu.class);
writer.println(" <th><a href=\"" + uri + ".html\">" + menu.name() + "</a></th>");
}
writer.println(" </tr>");
writer.println("</thead>");
writer.println("<tbody>");
writer.println(" <tr>");
writer.println(" <td style=\"text-align: left\" colspan=\"7\">");
writer.println(" <td style=\"text-align: left\" colspan=\"" + menus.size() + "\">");
writer.println(nav);
writer.println(" </td>");
writer.println(" </tr>");
......
......@@ -22,16 +22,18 @@ import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.alibaba.dubbo.container.page.Menu;
import com.alibaba.dubbo.container.page.Page;
import com.alibaba.dubbo.container.page.PageHandler;
/**
* ConnectionPageHandler
* ConnectionsPageHandler
*
* @author william.liangf
*/
@Extension("connection")
public class ConnectionPageHandler implements PageHandler {
@Menu(name = "Connections", desc = "Connections", order = 12000)
@Extension("connections")
public class ConnectionsPageHandler implements PageHandler {
protected final Logger logger = LoggerFactory.getLogger(getClass());
......
......@@ -16,32 +16,35 @@
package com.alibaba.dubbo.container.page.pages;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.ExtensionLoader;
import com.alibaba.dubbo.common.URL;
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.container.page.PageServlet;
/**
* HomePageHandler
*
* @author william.liangf
*/
@Extension("home")
@Menu(name = "Home", desc = "Home", order = Integer.MIN_VALUE)
@Extension("index")
public class HomePageHandler implements PageHandler {
public Page handle(URL url) {
Collection<String> informationProviders = ExtensionLoader.getExtensionLoader(PageHandler.class).getSupportedExtensions();
List<List<String>> rows = new ArrayList<List<String>>();
for (String uri : informationProviders) {
for (PageHandler handler : PageServlet.getInstance().getMenus()) {
String uri = handler.getClass().getAnnotation(Extension.class).value();
Menu menu = handler.getClass().getAnnotation(Menu.class);
List<String> row = new ArrayList<String>();
row.add("<a href=\"" + uri + ".html\">" + uri + "</a>");
row.add("<a href=\"" + uri + ".html\">" + menu.name() + "</a>");
row.add(menu.desc());
rows.add(row);
}
return new Page("Home", "Menus", new String[] {"Menu"}, rows);
return new Page("Home", "Menus", new String[] {"Menu Name:", "Menu Desc:"}, rows);
}
}
\ No newline at end of file
......@@ -33,6 +33,7 @@ import org.apache.log4j.LogManager;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.container.page.Menu;
import com.alibaba.dubbo.container.page.Page;
import com.alibaba.dubbo.container.page.PageHandler;
......@@ -41,6 +42,7 @@ import com.alibaba.dubbo.container.page.PageHandler;
*
* @author william.liangf
*/
@Menu(name = "Log", desc = "Log", order = Integer.MAX_VALUE - 11000)
@Extension("log")
public class LogPageHandler implements PageHandler {
......
......@@ -22,6 +22,7 @@ import java.util.Set;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
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.registry.Registry;
......@@ -29,12 +30,13 @@ import com.alibaba.dubbo.registry.support.AbstractRegistry;
import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
/**
* ServicePageHandler
* RegisteredPageHandler
*
* @author william.liangf
*/
@Extension("service")
public class ServicePageHandler implements PageHandler {
@Menu(name = "Registered", desc = "Registered", order = 11000)
@Extension("registered")
public class RegisteredPageHandler implements PageHandler {
public Page handle(URL url) {
List<List<String>> rows = new ArrayList<List<String>>();
......
......@@ -21,18 +21,20 @@ import java.util.List;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
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.registry.Registry;
import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
/**
* RegistryPageHandler
* RegistriesPageHandler
*
* @author william.liangf
*/
@Extension("registry")
public class RegistryPageHandler implements PageHandler {
@Menu(name = "Registries", desc = "Registries", order = 10000)
@Extension("registries")
public class RegistriesPageHandler implements PageHandler {
public Page handle(URL url) {
List<List<String>> rows = new ArrayList<List<String>>();
......
......@@ -27,6 +27,7 @@ import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.status.Status;
import com.alibaba.dubbo.common.status.StatusChecker;
import com.alibaba.dubbo.common.status.support.StatusUtils;
import com.alibaba.dubbo.container.page.Menu;
import com.alibaba.dubbo.container.page.Page;
import com.alibaba.dubbo.container.page.PageHandler;
......@@ -35,6 +36,7 @@ import com.alibaba.dubbo.container.page.PageHandler;
*
* @author william.liangf
*/
@Menu(name = "Status", desc = "Status", order = Integer.MAX_VALUE - 12000)
@Extension("status")
public class StatusPageHandler implements PageHandler {
......@@ -53,12 +55,16 @@ public class StatusPageHandler implements PageHandler {
rows.add(row);
}
Status status = StatusUtils.getSummaryStatus(statuses);
List<String> row = new ArrayList<String>();
row.add("summary");
row.add(getLevelHtml(status.getLevel()));
row.add("<a href=\"/status\" target=\"_blank\">summary</a>");
rows.add(row);
return new Page("<a href=\"/\">Home</a> &gt; Status (<a href=\"/status\" target=\"_blank\">All</a>)", "Status", new String[] {"Name", "Status", "Description"}, rows);
if ("status".equals(url.getPath())) {
return new Page("", "", "", status.getLevel().toString());
} else {
List<String> row = new ArrayList<String>();
row.add("summary");
row.add(getLevelHtml(status.getLevel()));
row.add("<a href=\"/status\" target=\"_blank\">summary</a>");
rows.add(row);
return new Page("<a href=\"/\">Home</a> &gt; Status (<a href=\"/status\" target=\"_blank\">All</a>)", "Status", new String[] {"Name", "Status", "Description"}, rows);
}
}
private String getLevelHtml(Status.Level level) {
......
......@@ -23,6 +23,7 @@ import java.util.Locale;
import com.alibaba.dubbo.common.Extension;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.container.page.Menu;
import com.alibaba.dubbo.container.page.Page;
import com.alibaba.dubbo.container.page.PageHandler;
......@@ -31,6 +32,7 @@ import com.alibaba.dubbo.container.page.PageHandler;
*
* @author william.liangf
*/
@Menu(name = "System", desc = "System", order = Integer.MAX_VALUE - 10000)
@Extension("system")
public class SystemPageHandler implements PageHandler {
......
com.alibaba.dubbo.container.page.pages.HomePageHandler
com.alibaba.dubbo.container.page.pages.RegisteredPageHandler
com.alibaba.dubbo.container.page.pages.RegistriesPageHandler
com.alibaba.dubbo.container.page.pages.ConnectionsPageHandler
com.alibaba.dubbo.container.page.pages.StatusPageHandler
com.alibaba.dubbo.container.page.pages.LogPageHandler
com.alibaba.dubbo.container.page.pages.SystemPageHandler
\ No newline at end of file
......@@ -25,21 +25,21 @@ import com.alibaba.dubbo.common.URL;
* @author william.liangf
*/
public interface RegistryService {
/**
* 注册服务
*
* @param url 服务提供者地址
*/
void register(URL url);
/**
* 取消注册服务
*
* @param url 服务提供者地址
*/
void unregister(URL url);
/**
* 订阅服务
*
......@@ -47,7 +47,7 @@ public interface RegistryService {
* @param listener 服务变更事件监听器
*/
void subscribe(URL url, NotifyListener listener);
/**
* 取消订阅服务
*
......@@ -55,7 +55,7 @@ public interface RegistryService {
* @param listener 服务变更事件监听器
*/
void unsubscribe(URL url, NotifyListener listener);
/**
* 查询服务
*
......@@ -63,5 +63,5 @@ public interface RegistryService {
* @return 服务提供者者列表
*/
List<URL> lookup(URL url);
}
\ No newline at end of file
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册