diff --git a/apm-collector/apm-collector-agentserver/pom.xml b/apm-collector/apm-collector-agentserver/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..b4f26c8bf0a9ad0f1d7e280d0eeaa74dff3f5eaa --- /dev/null +++ b/apm-collector/apm-collector-agentserver/pom.xml @@ -0,0 +1,32 @@ + + + + apm-collector + org.skywalking + 3.2-2017 + + 4.0.0 + + apm-collector-agentserver + jar + + + + org.skywalking + apm-collector-cluster + ${project.version} + + + org.skywalking + apm-collector-server + ${project.version} + + + org.skywalking + apm-collector-agentstream + ${project.version} + + + \ No newline at end of file diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleContext.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleContext.java new file mode 100644 index 0000000000000000000000000000000000000000..f6db9c4ab8ecd95704b33701d7eeefd927e81388 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleContext.java @@ -0,0 +1,13 @@ +package org.skywalking.apm.collector.agentserver; + +import org.skywalking.apm.collector.core.framework.Context; + +/** + * @author pengys5 + */ +public class AgentServerModuleContext extends Context { + + public AgentServerModuleContext(String groupName) { + super(groupName); + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleDefine.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleDefine.java new file mode 100644 index 0000000000000000000000000000000000000000..7e1adb82a8e268cb2e32f6e252153dd380cb109a --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleDefine.java @@ -0,0 +1,47 @@ +package org.skywalking.apm.collector.agentserver; + +import java.util.List; +import java.util.Map; +import org.skywalking.apm.collector.cluster.ClusterModuleGroupDefine; +import org.skywalking.apm.collector.core.client.Client; +import org.skywalking.apm.collector.core.client.ClientException; +import org.skywalking.apm.collector.core.client.DataMonitor; +import org.skywalking.apm.collector.core.cluster.ClusterDataListenerDefine; +import org.skywalking.apm.collector.core.cluster.ClusterModuleContext; +import org.skywalking.apm.collector.core.config.ConfigParseException; +import org.skywalking.apm.collector.core.framework.CollectorContextHelper; +import org.skywalking.apm.collector.core.framework.DefineException; +import org.skywalking.apm.collector.core.framework.Handler; +import org.skywalking.apm.collector.core.module.ModuleDefine; +import org.skywalking.apm.collector.core.server.Server; +import org.skywalking.apm.collector.core.server.ServerException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public abstract class AgentServerModuleDefine extends ModuleDefine implements ClusterDataListenerDefine { + + private final Logger logger = LoggerFactory.getLogger(AgentServerModuleDefine.class); + + @Override public final void initialize(Map config) throws DefineException, ClientException { + try { + configParser().parse(config); + Server server = server(); + server.initialize(); + handlerList().forEach(handler -> server.addHandler(handler)); + server.start(); + + ((ClusterModuleContext)CollectorContextHelper.INSTANCE.getContext(ClusterModuleGroupDefine.GROUP_NAME)).getDataMonitor().addListener(listener(), registration()); + } catch (ConfigParseException | ServerException e) { + throw new AgentServerModuleException(e.getMessage(), e); + } + } + + @Override protected final Client createClient(DataMonitor dataMonitor) { + throw new UnsupportedOperationException(""); + } + + public abstract List handlerList(); +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleException.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleException.java new file mode 100644 index 0000000000000000000000000000000000000000..c9f7d2a975636b7483f3454120714b12ee501b80 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleException.java @@ -0,0 +1,17 @@ +package org.skywalking.apm.collector.agentserver; + +import org.skywalking.apm.collector.core.module.ModuleException; + +/** + * @author pengys5 + */ +public class AgentServerModuleException extends ModuleException { + + public AgentServerModuleException(String message) { + super(message); + } + + public AgentServerModuleException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleGroupDefine.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleGroupDefine.java new file mode 100644 index 0000000000000000000000000000000000000000..9539be419d5cb93b39189c026c0092e5094dbd9f --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleGroupDefine.java @@ -0,0 +1,25 @@ +package org.skywalking.apm.collector.agentserver; + +import org.skywalking.apm.collector.core.framework.Context; +import org.skywalking.apm.collector.core.module.ModuleGroupDefine; +import org.skywalking.apm.collector.core.module.ModuleInstaller; + +/** + * @author pengys5 + */ +public class AgentServerModuleGroupDefine implements ModuleGroupDefine { + + public static final String GROUP_NAME = "agent_server"; + + @Override public String name() { + return GROUP_NAME; + } + + @Override public Context groupContext() { + return new AgentServerModuleContext(GROUP_NAME); + } + + @Override public ModuleInstaller moduleInstaller() { + return new AgentServerModuleInstaller(); + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleInstaller.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleInstaller.java new file mode 100644 index 0000000000000000000000000000000000000000..10756f95088f28b8c29b74c7a1a1b9201e1c04ae --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/AgentServerModuleInstaller.java @@ -0,0 +1,36 @@ +package org.skywalking.apm.collector.agentserver; + +import java.util.Iterator; +import java.util.Map; +import org.skywalking.apm.collector.core.client.ClientException; +import org.skywalking.apm.collector.core.framework.CollectorContextHelper; +import org.skywalking.apm.collector.core.framework.DefineException; +import org.skywalking.apm.collector.core.module.ModuleDefine; +import org.skywalking.apm.collector.core.module.ModuleInstaller; +import org.skywalking.apm.collector.core.util.ObjectUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class AgentServerModuleInstaller implements ModuleInstaller { + + private final Logger logger = LoggerFactory.getLogger(AgentServerModuleInstaller.class); + + @Override public void install(Map moduleConfig, + Map moduleDefineMap) throws DefineException, ClientException { + logger.info("beginning agent server module install"); + + AgentServerModuleContext context = new AgentServerModuleContext(AgentServerModuleGroupDefine.GROUP_NAME); + CollectorContextHelper.INSTANCE.putContext(context); + + logger.info("could not configure agent server module, use the default"); + Iterator> moduleDefineEntry = moduleDefineMap.entrySet().iterator(); + while (moduleDefineEntry.hasNext()) { + ModuleDefine moduleDefine = moduleDefineEntry.next().getValue(); + logger.info("module {} initialize", moduleDefine.getClass().getName()); + moduleDefine.initialize((ObjectUtils.isNotEmpty(moduleConfig) && moduleConfig.containsKey(moduleDefine.name())) ? moduleConfig.get(moduleDefine.name()) : null); + } + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyConfig.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..1bad21878d3b1b013d8e4be05abe9aad0d07e9e6 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyConfig.java @@ -0,0 +1,10 @@ +package org.skywalking.apm.collector.agentserver.jetty; + +/** + * @author pengys5 + */ +public class AgentServerJettyConfig { + public static String HOST; + public static int PORT; + public static String CONTEXT_PATH; +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyConfigParser.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyConfigParser.java new file mode 100644 index 0000000000000000000000000000000000000000..bac76bcfc29b29f39f73dc85d49234798c8351d0 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyConfigParser.java @@ -0,0 +1,33 @@ +package org.skywalking.apm.collector.agentserver.jetty; + +import java.util.Map; +import org.skywalking.apm.collector.core.config.ConfigParseException; +import org.skywalking.apm.collector.core.module.ModuleConfigParser; +import org.skywalking.apm.collector.core.util.ObjectUtils; +import org.skywalking.apm.collector.core.util.StringUtils; + +/** + * @author pengys5 + */ +public class AgentServerJettyConfigParser implements ModuleConfigParser { + + private static final String HOST = "host"; + private static final String PORT = "port"; + public static final String CONTEXT_PATH = "contextPath"; + + @Override public void parse(Map config) throws ConfigParseException { + AgentServerJettyConfig.CONTEXT_PATH = "/"; + + if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(HOST))) { + AgentServerJettyConfig.HOST = "localhost"; + } + if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(PORT))) { + AgentServerJettyConfig.PORT = 10800; + } else { + AgentServerJettyConfig.PORT = (Integer)config.get(PORT); + } + if (ObjectUtils.isNotEmpty(config) && StringUtils.isNotEmpty(config.get(CONTEXT_PATH))) { + AgentServerJettyConfig.CONTEXT_PATH = (String)config.get(CONTEXT_PATH); + } + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyDataListener.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyDataListener.java new file mode 100644 index 0000000000000000000000000000000000000000..9035ca2976d995016696af06c4a12aee2bfebe4d --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyDataListener.java @@ -0,0 +1,15 @@ +package org.skywalking.apm.collector.agentserver.jetty; + +import org.skywalking.apm.collector.agentserver.AgentServerModuleGroupDefine; +import org.skywalking.apm.collector.cluster.ClusterModuleDefine; +import org.skywalking.apm.collector.core.cluster.ClusterDataListener; + +/** + * @author pengys5 + */ +public class AgentServerJettyDataListener extends ClusterDataListener { + + @Override public String path() { + return ClusterModuleDefine.BASE_CATALOG + "." + AgentServerModuleGroupDefine.GROUP_NAME + "." + AgentServerJettyModuleDefine.MODULE_NAME; + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyModuleDefine.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyModuleDefine.java new file mode 100644 index 0000000000000000000000000000000000000000..43314323c327116f44c9ac5c7b394f98b2790f44 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyModuleDefine.java @@ -0,0 +1,57 @@ +package org.skywalking.apm.collector.agentserver.jetty; + +import java.util.LinkedList; +import java.util.List; +import org.skywalking.apm.collector.agentserver.AgentServerModuleDefine; +import org.skywalking.apm.collector.agentserver.AgentServerModuleGroupDefine; +import org.skywalking.apm.collector.agentserver.jetty.handler.AgentStreamGRPCServerHandler; +import org.skywalking.apm.collector.agentserver.jetty.handler.AgentStreamJettyServerHandler; +import org.skywalking.apm.collector.core.cluster.ClusterDataListener; +import org.skywalking.apm.collector.core.framework.Handler; +import org.skywalking.apm.collector.core.module.ModuleConfigParser; +import org.skywalking.apm.collector.core.module.ModuleRegistration; +import org.skywalking.apm.collector.core.server.Server; +import org.skywalking.apm.collector.server.jetty.JettyServer; + +/** + * @author pengys5 + */ +public class AgentServerJettyModuleDefine extends AgentServerModuleDefine { + + public static final String MODULE_NAME = "jetty"; + + @Override protected String group() { + return AgentServerModuleGroupDefine.GROUP_NAME; + } + + @Override public String name() { + return MODULE_NAME; + } + + @Override public boolean defaultModule() { + return true; + } + + @Override protected ModuleConfigParser configParser() { + return new AgentServerJettyConfigParser(); + } + + @Override protected Server server() { + return new JettyServer(AgentServerJettyConfig.HOST, AgentServerJettyConfig.PORT, AgentServerJettyConfig.CONTEXT_PATH); + } + + @Override protected ModuleRegistration registration() { + return new AgentServerJettyModuleRegistration(); + } + + @Override public ClusterDataListener listener() { + return new AgentServerJettyDataListener(); + } + + @Override public List handlerList() { + List handlers = new LinkedList<>(); + handlers.add(new AgentStreamGRPCServerHandler()); + handlers.add(new AgentStreamJettyServerHandler()); + return handlers; + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyModuleRegistration.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyModuleRegistration.java new file mode 100644 index 0000000000000000000000000000000000000000..5f2f2e0bf0658069bd920eabdcc528475a7f9263 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/AgentServerJettyModuleRegistration.java @@ -0,0 +1,13 @@ +package org.skywalking.apm.collector.agentserver.jetty; + +import org.skywalking.apm.collector.core.module.ModuleRegistration; + +/** + * @author pengys5 + */ +public class AgentServerJettyModuleRegistration extends ModuleRegistration { + + @Override public Value buildValue() { + return new Value(AgentServerJettyConfig.HOST, AgentServerJettyConfig.PORT, AgentServerJettyConfig.CONTEXT_PATH); + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/handler/AgentStreamGRPCServerHandler.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/handler/AgentStreamGRPCServerHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..1a95037d71574cf61df79232759ca8eccb91a4a2 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/handler/AgentStreamGRPCServerHandler.java @@ -0,0 +1,36 @@ +package org.skywalking.apm.collector.agentserver.jetty.handler; + +import com.google.gson.JsonArray; +import java.io.IOException; +import java.util.List; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.skywalking.apm.collector.agentstream.grpc.AgentStreamGRPCDataListener; +import org.skywalking.apm.collector.cluster.ClusterModuleGroupDefine; +import org.skywalking.apm.collector.core.cluster.ClusterModuleContext; +import org.skywalking.apm.collector.core.cluster.ClusterModuleRegistrationReader; +import org.skywalking.apm.collector.core.framework.CollectorContextHelper; +import org.skywalking.apm.collector.server.jetty.JettyHandler; + +/** + * @author pengys5 + */ +public class AgentStreamGRPCServerHandler extends JettyHandler { + + @Override public String pathSpec() { + return "/agentstream/grpc"; + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + ClusterModuleRegistrationReader reader = ((ClusterModuleContext)CollectorContextHelper.INSTANCE.getContext(ClusterModuleGroupDefine.GROUP_NAME)).getReader(); + List servers = reader.read(AgentStreamGRPCDataListener.PATH); + JsonArray serverArray = new JsonArray(); + servers.forEach(server -> { + serverArray.add(server); + }); + + reply(resp, serverArray, HttpServletResponse.SC_OK); + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/handler/AgentStreamJettyServerHandler.java b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/handler/AgentStreamJettyServerHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..3eab72a3277c63cec9564b8ab3bf52d026d84ec3 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/java/org/skywalking/apm/collector/agentserver/jetty/handler/AgentStreamJettyServerHandler.java @@ -0,0 +1,36 @@ +package org.skywalking.apm.collector.agentserver.jetty.handler; + +import com.google.gson.JsonArray; +import java.io.IOException; +import java.util.List; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.skywalking.apm.collector.agentstream.jetty.AgentStreamJettyDataListener; +import org.skywalking.apm.collector.cluster.ClusterModuleGroupDefine; +import org.skywalking.apm.collector.core.cluster.ClusterModuleContext; +import org.skywalking.apm.collector.core.cluster.ClusterModuleRegistrationReader; +import org.skywalking.apm.collector.core.framework.CollectorContextHelper; +import org.skywalking.apm.collector.server.jetty.JettyHandler; + +/** + * @author pengys5 + */ +public class AgentStreamJettyServerHandler extends JettyHandler { + + @Override public String pathSpec() { + return "/agentstream/jetty"; + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + ClusterModuleRegistrationReader reader = ((ClusterModuleContext)CollectorContextHelper.INSTANCE.getContext(ClusterModuleGroupDefine.GROUP_NAME)).getReader(); + List servers = reader.read(AgentStreamJettyDataListener.PATH); + JsonArray serverArray = new JsonArray(); + servers.forEach(server -> { + serverArray.add(server); + }); + + reply(resp, serverArray, HttpServletResponse.SC_OK); + } +} diff --git a/apm-collector/apm-collector-agentserver/src/main/resources/META-INF/defines/group.define b/apm-collector/apm-collector-agentserver/src/main/resources/META-INF/defines/group.define new file mode 100644 index 0000000000000000000000000000000000000000..229ed8a563dd999a063917f3ff4fbf8d8bad9cb0 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/resources/META-INF/defines/group.define @@ -0,0 +1 @@ +org.skywalking.apm.collector.agentserver.AgentServerModuleGroupDefine \ No newline at end of file diff --git a/apm-collector/apm-collector-agentserver/src/main/resources/META-INF/defines/module.define b/apm-collector/apm-collector-agentserver/src/main/resources/META-INF/defines/module.define new file mode 100644 index 0000000000000000000000000000000000000000..cdd20e3bfa21148ac65341def6b1a9268fde2c69 --- /dev/null +++ b/apm-collector/apm-collector-agentserver/src/main/resources/META-INF/defines/module.define @@ -0,0 +1 @@ +org.skywalking.apm.collector.agentserver.jetty.AgentServerJettyModuleDefine \ No newline at end of file diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCDataListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCDataListener.java index 0b749e0037518842251a8e4d069f11a3b0dc15a1..2fc79a258b5358772f02d38dfa9752b6254f140e 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCDataListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCDataListener.java @@ -9,11 +9,9 @@ import org.skywalking.apm.collector.core.cluster.ClusterDataListener; */ public class AgentStreamGRPCDataListener extends ClusterDataListener { - public AgentStreamGRPCDataListener(String moduleName) { - super(moduleName); - } + public static final String PATH = ClusterModuleDefine.BASE_CATALOG + "." + AgentStreamModuleGroupDefine.GROUP_NAME + "." + AgentStreamGRPCModuleDefine.MODULE_NAME; @Override public String path() { - return ClusterModuleDefine.BASE_CATALOG + "." + AgentStreamModuleGroupDefine.GROUP_NAME + "." + moduleName(); + return PATH; } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCModuleDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCModuleDefine.java index f9dcf28f4d81f532b7fe1d77cf4ca3bf7fa21bce..f485682165b360725b254ab3daa8052466c3289c 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCModuleDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCModuleDefine.java @@ -13,12 +13,14 @@ import org.skywalking.apm.collector.server.grpc.GRPCServer; */ public class AgentStreamGRPCModuleDefine extends AgentStreamModuleDefine { + public static final String MODULE_NAME = "grpc"; + @Override protected String group() { return AgentStreamModuleGroupDefine.GROUP_NAME; } @Override public String name() { - return "grpc"; + return MODULE_NAME; } @Override protected ModuleConfigParser configParser() { @@ -34,6 +36,6 @@ public class AgentStreamGRPCModuleDefine extends AgentStreamModuleDefine { } @Override public ClusterDataListener listener() { - return new AgentStreamGRPCDataListener(name()); + return new AgentStreamGRPCDataListener(); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyDataListener.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyDataListener.java index 8ee9e4a72934f3e7257907db9923f5c31df741d2..0ec18d14ab20bb9adc96608e8058a28415019960 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyDataListener.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyDataListener.java @@ -9,11 +9,9 @@ import org.skywalking.apm.collector.core.cluster.ClusterDataListener; */ public class AgentStreamJettyDataListener extends ClusterDataListener { - public AgentStreamJettyDataListener(String moduleName) { - super(moduleName); - } + public static final String PATH = ClusterModuleDefine.BASE_CATALOG + "." + AgentStreamModuleGroupDefine.GROUP_NAME + "." + AgentStreamJettyModuleDefine.MODULE_NAME; @Override public String path() { - return ClusterModuleDefine.BASE_CATALOG + "." + AgentStreamModuleGroupDefine.GROUP_NAME + "." + moduleName(); + return PATH; } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyModuleDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyModuleDefine.java index fff051e45f56260ab6e1448d3a9dcb5b710997dc..42a86e729ba6d429741f0af29a18019925b0a136 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyModuleDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyModuleDefine.java @@ -13,12 +13,14 @@ import org.skywalking.apm.collector.server.jetty.JettyServer; */ public class AgentStreamJettyModuleDefine extends AgentStreamModuleDefine { + public static final String MODULE_NAME = "jetty"; + @Override protected String group() { return AgentStreamModuleGroupDefine.GROUP_NAME; } @Override public String name() { - return "jetty"; + return MODULE_NAME; } @Override protected ModuleConfigParser configParser() { @@ -34,6 +36,6 @@ public class AgentStreamJettyModuleDefine extends AgentStreamModuleDefine { } @Override public ClusterDataListener listener() { - return new AgentStreamJettyDataListener(name()); + return new AgentStreamJettyDataListener(); } } diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyModuleRegistration.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyModuleRegistration.java index 3968fb8f7ec013cafb2766d98aadfb2c4af449f7..0b6527306e0f7007bb3c48dc08e04ba202eec332 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyModuleRegistration.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyModuleRegistration.java @@ -1,6 +1,5 @@ package org.skywalking.apm.collector.agentstream.jetty; -import com.google.gson.JsonObject; import org.skywalking.apm.collector.core.module.ModuleRegistration; /** @@ -9,8 +8,6 @@ import org.skywalking.apm.collector.core.module.ModuleRegistration; public class AgentStreamJettyModuleRegistration extends ModuleRegistration { @Override public Value buildValue() { - JsonObject data = new JsonObject(); - data.addProperty(AgentStreamJettyConfigParser.CONTEXT_PATH, AgentStreamJettyConfig.CONTEXT_PATH); - return new Value(AgentStreamJettyConfig.HOST, AgentStreamJettyConfig.PORT, data); + return new Value(AgentStreamJettyConfig.HOST, AgentStreamJettyConfig.PORT, AgentStreamJettyConfig.CONTEXT_PATH); } } diff --git a/apm-collector/apm-collector-boot/pom.xml b/apm-collector/apm-collector-boot/pom.xml index 2c66d9874234795884fa0aef19ea517c1e85a981..ae4b7501df4b9c6a33ef962aed0f0f0f71028cf4 100644 --- a/apm-collector/apm-collector-boot/pom.xml +++ b/apm-collector/apm-collector-boot/pom.xml @@ -28,6 +28,11 @@ apm-collector-ui ${project.version} + + org.skywalking + apm-collector-agentserver + ${project.version} + org.skywalking apm-collector-agentstream diff --git a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/ClusterModuleDefine.java b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/ClusterModuleDefine.java index 846c9664a2844b61525ebe014f3a8b708cc67121..a1bd2df54e4fae5826933d65b6cbc867c8ed2401 100644 --- a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/ClusterModuleDefine.java +++ b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/ClusterModuleDefine.java @@ -31,7 +31,10 @@ public abstract class ClusterModuleDefine extends ModuleDefine { client.initialize(); dataMonitor.setClient(client); + ClusterModuleRegistrationReader reader = registrationReader(dataMonitor); + ((ClusterModuleContext)CollectorContextHelper.INSTANCE.getContext(group())).setDataMonitor(dataMonitor); + ((ClusterModuleContext)CollectorContextHelper.INSTANCE.getContext(group())).setReader(reader); } catch (ConfigParseException | ClientException e) { throw new ClusterModuleException(e.getMessage(), e); } @@ -51,5 +54,5 @@ public abstract class ClusterModuleDefine extends ModuleDefine { public abstract DataMonitor dataMonitor(); - public abstract ClusterModuleRegistrationReader registrationReader(); + public abstract ClusterModuleRegistrationReader registrationReader(DataMonitor dataMonitor); } diff --git a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterRedisModuleDefine.java b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterRedisModuleDefine.java index 9f11286bd9133d2d51a7a84fb7a959199e661bd4..b946cd70931f327990717f9eea718d1420cff136 100644 --- a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterRedisModuleDefine.java +++ b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterRedisModuleDefine.java @@ -39,7 +39,7 @@ public class ClusterRedisModuleDefine extends ClusterModuleDefine { return new RedisClient(ClusterRedisConfig.HOST, ClusterRedisConfig.PORT); } - @Override public ClusterModuleRegistrationReader registrationReader() { - return new ClusterRedisModuleRegistrationReader(); + @Override public ClusterModuleRegistrationReader registrationReader(DataMonitor dataMonitor) { + return new ClusterRedisModuleRegistrationReader(dataMonitor); } } diff --git a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterRedisModuleRegistrationReader.java b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterRedisModuleRegistrationReader.java index 9871151dd26b209c29e35165e0e2a9590a018563..6f767232386028ba40e9ee4457dfb3044419f31d 100644 --- a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterRedisModuleRegistrationReader.java +++ b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/redis/ClusterRedisModuleRegistrationReader.java @@ -1,13 +1,14 @@ package org.skywalking.apm.collector.cluster.redis; -import java.util.List; +import org.skywalking.apm.collector.core.client.DataMonitor; import org.skywalking.apm.collector.core.cluster.ClusterModuleRegistrationReader; /** * @author pengys5 */ -public class ClusterRedisModuleRegistrationReader implements ClusterModuleRegistrationReader { - @Override public List read(String key) { - return null; +public class ClusterRedisModuleRegistrationReader extends ClusterModuleRegistrationReader { + + public ClusterRedisModuleRegistrationReader(DataMonitor dataMonitor) { + super(dataMonitor); } } diff --git a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterStandaloneModuleDefine.java b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterStandaloneModuleDefine.java index 4375bec3a328561d33a3d3602302a248a88b5fc9..1c95e0642f44398b8f5bf50e31c9f42f58f09617 100644 --- a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterStandaloneModuleDefine.java +++ b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterStandaloneModuleDefine.java @@ -39,7 +39,7 @@ public class ClusterStandaloneModuleDefine extends ClusterModuleDefine { return new H2Client(); } - @Override public ClusterModuleRegistrationReader registrationReader() { - return new ClusterStandaloneModuleRegistrationReader(); + @Override public ClusterModuleRegistrationReader registrationReader(DataMonitor dataMonitor) { + return new ClusterStandaloneModuleRegistrationReader(dataMonitor); } } diff --git a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterStandaloneModuleRegistrationReader.java b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterStandaloneModuleRegistrationReader.java index 2049060ba44484075ff7e8e86bb56fd88281d70f..f08f821becc50d17efbdcfdaa0d7ad3632c22e3b 100644 --- a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterStandaloneModuleRegistrationReader.java +++ b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterStandaloneModuleRegistrationReader.java @@ -1,14 +1,14 @@ package org.skywalking.apm.collector.cluster.standalone; -import java.util.List; +import org.skywalking.apm.collector.core.client.DataMonitor; import org.skywalking.apm.collector.core.cluster.ClusterModuleRegistrationReader; /** * @author pengys5 */ -public class ClusterStandaloneModuleRegistrationReader implements ClusterModuleRegistrationReader { +public class ClusterStandaloneModuleRegistrationReader extends ClusterModuleRegistrationReader { - @Override public List read(String key) { - return null; + public ClusterStandaloneModuleRegistrationReader(DataMonitor dataMonitor) { + super(dataMonitor); } } diff --git a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKDataMonitor.java b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKDataMonitor.java index 3f3bb2362e50afdad414040068724f494a30344f..c6be3bbe8531b401e00520eae6331b68bdd85fa5 100644 --- a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKDataMonitor.java +++ b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKDataMonitor.java @@ -37,7 +37,21 @@ public class ClusterZKDataMonitor implements DataMonitor, Watcher { @Override public void process(WatchedEvent event) { logger.debug("changed path {}", event.getPath()); if (listeners.containsKey(event.getPath())) { - putDataIntoListener(listeners.get(event.getPath()), event.getPath()); + List paths = null; + try { + paths = client.getChildren(event.getPath(), true); + listeners.get(event.getPath()).clearData(); + if (CollectionUtils.isNotEmpty(paths)) { + for (String serverPath : paths) { + byte[] data = client.getData(event.getPath() + "/" + serverPath, false, null); + String dataStr = new String(data); + logger.debug("path children has been changed, path: {}, data: {}", event.getPath() + "/" + serverPath, dataStr); + listeners.get(event.getPath()).addAddress(serverPath + dataStr); + } + } + } catch (ZookeeperClientException e) { + logger.error(e.getMessage(), e); + } } } @@ -51,16 +65,20 @@ public class ClusterZKDataMonitor implements DataMonitor, Watcher { logger.info("listener path: {}", path); listeners.put(path, listener); createPath(path); - List paths = client.getChildren(path, true); - - if (CollectionUtils.isNotEmpty(paths)) { - paths.forEach(subPath -> { - putDataIntoListener(listener, subPath); - }); - } ModuleRegistration.Value value = registration.buildValue(); - setData(path + "/" + value.getHostPort(), value.getData() == null ? "" : value.getData().toString()); + String contextPath = value.getContextPath() == null ? "" : value.getContextPath(); + + client.getChildren(path, true); + String serverPath = path + "/" + value.getHostPort(); + listener.addAddress(value.getHostPort() + contextPath); + + setData(serverPath, contextPath); + } + + @Override public ClusterDataListener getListener(String path) { + path = PathUtils.convertKey2Path(path); + return listeners.get(path); } @Override public void createPath(String path) throws ClientException { @@ -82,14 +100,4 @@ public class ClusterZKDataMonitor implements DataMonitor, Watcher { client.setData(path, value.getBytes(), -1); } } - - private void putDataIntoListener(ClusterDataListener listener, String path) { - try { - byte[] data = client.getData(path, false, null); - String dataStr = String.valueOf(data); - listener.setData(new ClusterDataListener.Data(path, dataStr)); - } catch (ZookeeperClientException e) { - logger.error(e.getMessage(), e); - } - } } diff --git a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKModuleDefine.java b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKModuleDefine.java index 6a51939e4cd9c65be638f6dbff11b7ef9b9dd958..c53676407609b01a97953e95d3837c7d94ce70f2 100644 --- a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKModuleDefine.java +++ b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKModuleDefine.java @@ -40,7 +40,7 @@ public class ClusterZKModuleDefine extends ClusterModuleDefine { return new ZookeeperClient(ClusterZKConfig.HOST_PORT, ClusterZKConfig.SESSION_TIMEOUT, (Watcher)dataMonitor); } - @Override public ClusterModuleRegistrationReader registrationReader() { - return new ClusterZKModuleRegistrationReader(); + @Override public ClusterModuleRegistrationReader registrationReader(DataMonitor dataMonitor) { + return new ClusterZKModuleRegistrationReader(dataMonitor); } } diff --git a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKModuleRegistrationReader.java b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKModuleRegistrationReader.java index 44dec48611a14b62f2fd703855776adc1c482248..1236116872c085a8de4563aa4b879346b74d0d8a 100644 --- a/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKModuleRegistrationReader.java +++ b/apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/zookeeper/ClusterZKModuleRegistrationReader.java @@ -1,13 +1,14 @@ package org.skywalking.apm.collector.cluster.zookeeper; -import java.util.List; +import org.skywalking.apm.collector.core.client.DataMonitor; import org.skywalking.apm.collector.core.cluster.ClusterModuleRegistrationReader; /** * @author pengys5 */ -public class ClusterZKModuleRegistrationReader implements ClusterModuleRegistrationReader { - @Override public List read(String key) { - return null; +public class ClusterZKModuleRegistrationReader extends ClusterModuleRegistrationReader { + + public ClusterZKModuleRegistrationReader(DataMonitor dataMonitor) { + super(dataMonitor); } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/client/DataMonitor.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/client/DataMonitor.java index 883db3769497bfb8b23b77fad02a5d3e53a8a4a2..c5e8d537d9c9b17025c5fe50fdf7a4d0a489a72b 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/client/DataMonitor.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/client/DataMonitor.java @@ -11,6 +11,8 @@ public interface DataMonitor { void addListener(ClusterDataListener listener, ModuleRegistration registration) throws ClientException; + ClusterDataListener getListener(String path); + void createPath(String path) throws ClientException; void setData(String path, String value) throws ClientException; diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/cluster/ClusterDataListener.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/cluster/ClusterDataListener.java index 03b2177b0507def29e57e25ee0a9108201a03557..7b14e7a33ec259b261bc8c26d611c77b22c871b0 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/cluster/ClusterDataListener.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/cluster/ClusterDataListener.java @@ -9,31 +9,23 @@ import org.skywalking.apm.collector.core.framework.Listener; */ public abstract class ClusterDataListener implements Listener { - private final String moduleName; - private List datas; + private List addresses; - public ClusterDataListener(String moduleName) { - this.moduleName = moduleName; - datas = new LinkedList<>(); - } - - public final String moduleName() { - return moduleName; + public ClusterDataListener() { + addresses = new LinkedList<>(); } public abstract String path(); - public final void setData(Data data) { - datas.add(data); + public final void addAddress(String address) { + addresses.add(address); } - public static class Data { - private final String key; - private final String value; + public final List getAddresses() { + return addresses; + } - public Data(String key, String value) { - this.key = key; - this.value = value; - } + public final void clearData() { + addresses.clear(); } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/cluster/ClusterModuleRegistrationReader.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/cluster/ClusterModuleRegistrationReader.java index d9ad04e02ab72def6bc073479a2e599ce4104d8c..ddfcdd56adb853f7caeb4d9501e90ea4f97b6a8c 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/cluster/ClusterModuleRegistrationReader.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/cluster/ClusterModuleRegistrationReader.java @@ -1,10 +1,20 @@ package org.skywalking.apm.collector.core.cluster; import java.util.List; +import org.skywalking.apm.collector.core.client.DataMonitor; /** * @author pengys5 */ -public interface ClusterModuleRegistrationReader { - List read(String key); +public abstract class ClusterModuleRegistrationReader { + + private final DataMonitor dataMonitor; + + public ClusterModuleRegistrationReader(DataMonitor dataMonitor) { + this.dataMonitor = dataMonitor; + } + + public final List read(String path) { + return dataMonitor.getListener(path).getAddresses(); + } } diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/framework/Handler.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/framework/Handler.java new file mode 100644 index 0000000000000000000000000000000000000000..0ae17b083f2f21d53ee321de6b45fdf06189f55f --- /dev/null +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/framework/Handler.java @@ -0,0 +1,7 @@ +package org.skywalking.apm.collector.core.framework; + +/** + * @author pengys5 + */ +public interface Handler { +} diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleRegistration.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleRegistration.java index 959fccddad4ca4ff5565727c06401a8db2859b28..90dd9afe99a898007769f769b48e1a58006842fa 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleRegistration.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/module/ModuleRegistration.java @@ -1,7 +1,5 @@ package org.skywalking.apm.collector.core.module; -import com.google.gson.JsonObject; - /** * @author pengys5 */ @@ -12,12 +10,12 @@ public abstract class ModuleRegistration { public static class Value { private final String host; private final int port; - private final JsonObject data; + private final String contextPath; - public Value(String host, int port, JsonObject data) { + public Value(String host, int port, String contextPath) { this.host = host; this.port = port; - this.data = data; + this.contextPath = contextPath; } public String getHost() { @@ -32,8 +30,8 @@ public abstract class ModuleRegistration { return host + ":" + port; } - public JsonObject getData() { - return data; + public String getContextPath() { + return contextPath; } } } \ No newline at end of file diff --git a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/server/Server.java b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/server/Server.java index eede89b810e73aac3f504c2dd5d12bc5c2149e14..4b246095ff205832a6b942b822d9f169f40f0af0 100644 --- a/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/server/Server.java +++ b/apm-collector/apm-collector-core/src/main/java/org/skywalking/apm/collector/core/server/Server.java @@ -1,9 +1,15 @@ package org.skywalking.apm.collector.core.server; +import org.skywalking.apm.collector.core.framework.Handler; + /** * @author pengys5 */ public interface Server { void initialize() throws ServerException; + + void start() throws ServerException; + + void addHandler(Handler handler); } diff --git a/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/grpc/GRPCServer.java b/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/grpc/GRPCServer.java index 7a92a2eb989069d0d861b66cea04d55e7c23a946..505ce43c6a1cf41bce84cb16be9a895b33f6b9cf 100644 --- a/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/grpc/GRPCServer.java +++ b/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/grpc/GRPCServer.java @@ -3,6 +3,7 @@ package org.skywalking.apm.collector.server.grpc; import io.grpc.netty.NettyServerBuilder; import java.io.IOException; import java.net.InetSocketAddress; +import org.skywalking.apm.collector.core.framework.Handler; import org.skywalking.apm.collector.core.server.Server; import org.skywalking.apm.collector.core.server.ServerException; import org.slf4j.Logger; @@ -33,4 +34,12 @@ public class GRPCServer implements Server { } logger.info("Server started, host {} listening on {}", host, port); } + + @Override public void start() throws ServerException { + + } + + @Override public void addHandler(Handler handler) { + + } } diff --git a/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/jetty/JettyHandler.java b/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/jetty/JettyHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..b80db810d8dbe93d5a31800e8c5b6abb41434a5a --- /dev/null +++ b/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/jetty/JettyHandler.java @@ -0,0 +1,27 @@ +package org.skywalking.apm.collector.server.jetty; + +import com.google.gson.JsonElement; +import java.io.IOException; +import java.io.PrintWriter; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletResponse; +import org.skywalking.apm.collector.core.framework.Handler; + +/** + * @author pengys5 + */ +public abstract class JettyHandler extends HttpServlet implements Handler { + + public abstract String pathSpec(); + + protected final void reply(HttpServletResponse response, JsonElement resJson, int status) throws IOException { + response.setContentType("text/json"); + response.setCharacterEncoding("utf-8"); + response.setStatus(status); + + PrintWriter out = response.getWriter(); + out.print(resJson); + out.flush(); + out.close(); + } +} diff --git a/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/jetty/JettyServer.java b/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/jetty/JettyServer.java index 984e76269d28ec8abf6a069367eba8d6462c57b4..3997a20b31369f018af54f53a2f471bb51d16cb4 100644 --- a/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/jetty/JettyServer.java +++ b/apm-collector/apm-collector-server/src/main/java/org/skywalking/apm/collector/server/jetty/JettyServer.java @@ -1,7 +1,10 @@ package org.skywalking.apm.collector.server.jetty; import java.net.InetSocketAddress; +import javax.servlet.http.HttpServlet; import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.skywalking.apm.collector.core.framework.Handler; import org.skywalking.apm.collector.core.server.Server; import org.skywalking.apm.collector.core.server.ServerException; import org.slf4j.Logger; @@ -17,6 +20,8 @@ public class JettyServer implements Server { private final String host; private final int port; private final String contextPath; + private org.eclipse.jetty.server.Server server; + private ServletContextHandler servletContextHandler; public JettyServer(String host, int port, String contextPath) { this.host = host; @@ -25,13 +30,22 @@ public class JettyServer implements Server { } @Override public void initialize() throws ServerException { - org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server(new InetSocketAddress(host, port)); + server = new org.eclipse.jetty.server.Server(new InetSocketAddress(host, port)); - ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); + servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); servletContextHandler.setContextPath(contextPath); logger.info("http server root context path: {}", contextPath); server.setHandler(servletContextHandler); + } + + @Override public void addHandler(Handler handler) { + ServletHolder servletHolder = new ServletHolder(); + servletHolder.setServlet((HttpServlet)handler); + servletContextHandler.addServlet(servletHolder, ((JettyHandler)handler).pathSpec()); + } + + @Override public void start() throws ServerException { try { server.start(); } catch (Exception e) { diff --git a/apm-collector/pom.xml b/apm-collector/pom.xml index 9fd1fbfb12c5b359203d5f167325e2345a623515..d544f0a0b76ff020e86507a1049e640195c10121 100644 --- a/apm-collector/pom.xml +++ b/apm-collector/pom.xml @@ -15,6 +15,7 @@ apm-collector-boot apm-collector-remote apm-collector-stream + apm-collector-agentserver apm