diff --git a/src/org/redkale/boot/watch/ServerWatchService.java b/src/org/redkale/boot/watch/ServerWatchService.java index 70a21ea7d..74a21e5b4 100644 --- a/src/org/redkale/boot/watch/ServerWatchService.java +++ b/src/org/redkale/boot/watch/ServerWatchService.java @@ -5,7 +5,13 @@ */ package org.redkale.boot.watch; -import org.redkale.net.http.RestService; +import java.util.*; +import javax.annotation.Resource; +import org.redkale.boot.*; +import org.redkale.net.Server; +import org.redkale.net.http.*; +import org.redkale.service.RetResult; +import org.redkale.util.Comment; /** * @@ -14,4 +20,66 @@ import org.redkale.net.http.RestService; @RestService(name = "server", catalog = "watch", repair = false) public class ServerWatchService extends AbstractWatchService { + @Comment("不存在的Server节点") + public static final int RET_SERVER_NOT_EXISTS = 1602_0001; + + @Resource + private Application application; + + @RestMapping(name = "info", comment = "单个Server信息查询") + public RetResult info(@RestParam(name = "#port:") int port) { + NodeServer node = null; + for (NodeServer ns : application.getNodeServers()) { + if (ns.getServer().getSocketAddress().getPort() == port) { + node = ns; + break; + } + } + if (node == null) return new RetResult(RET_SERVER_NOT_EXISTS, "Server(port=" + port + ") not found"); + return new RetResult(formatToMap(node)); + } + + @RestMapping(name = "infos", comment = "Server信息查询") + public RetResult infos() { + Map rs = new LinkedHashMap<>(); + for (NodeServer ns : application.getNodeServers()) { + Server server = ns.getServer(); + rs.put("" + server.getSocketAddress().getPort(), formatToMap(ns)); + } + return new RetResult(rs); + } + + private Map formatToMap(NodeServer node) { + Server server = node.getServer(); + Map rs = new LinkedHashMap<>(); + String protocol = server.getProtocol(); + if (node instanceof NodeSncpServer) { + protocol += "/SNCP"; + } else if (node instanceof NodeWatchServer) { + protocol += "/WATCH"; + } else if (node instanceof NodeHttpServer) { + protocol += "/HTTP"; + } else { + NodeProtocol np = node.getClass().getAnnotation(NodeProtocol.class); + if (np != null && np.value().length > 0) protocol += "/" + np.value()[0]; + } + rs.put("name", server.getName()); + rs.put("protocol", protocol); + rs.put("address", server.getSocketAddress()); + rs.put("threads", server.getThreads()); + rs.put("backlog", server.getBacklog()); + rs.put("bufferCapacity", server.getBufferCapacity()); + rs.put("bufferPoolSize", server.getBufferPoolSize()); + rs.put("charset", server.getCharset() == null ? "UTF-8" : server.getCharset().name()); + rs.put("maxbody", server.getMaxbody()); + rs.put("maxconns", server.getMaxconns()); + rs.put("serverStartTime", server.getServerStartTime()); + rs.put("responsePoolSize", server.getResponsePoolSize()); + rs.put("readTimeoutSeconds", server.getReadTimeoutSeconds()); + rs.put("writeTimeoutSeconds", server.getWriteTimeoutSeconds()); + rs.put("createConnectionCount", server.getCreateConnectionCount()); + rs.put("livingConnectionCount", server.getLivingConnectionCount()); + rs.put("closedConnectionCount", server.getClosedConnectionCount()); + return rs; + } } diff --git a/src/org/redkale/net/Server.java b/src/org/redkale/net/Server.java index 054b9ab80..3b08bd80a 100644 --- a/src/org/redkale/net/Server.java +++ b/src/org/redkale/net/Server.java @@ -211,6 +211,54 @@ public abstract class Server