From a220ae9c781237142ec9b82ee34d50cf75d67e63 Mon Sep 17 00:00:00 2001
From: pengys5 <8082209@qq.com>
Date: Sun, 30 Jul 2017 21:23:44 +0800
Subject: [PATCH] Create ui module
---
.../grpc/AgentJVMGRPCConfigParser.java | 3 ++
.../grpc/AgentRegisterGRPCConfigParser.java | 3 ++
.../apm-collector-agentserver/pom.xml | 5 ++
.../jetty/AgentServerJettyConfigParser.java | 3 ++
.../grpc/AgentStreamGRPCConfigParser.java | 3 ++
.../jetty/AgentStreamJettyConfigParser.java | 3 ++
.../src/main/resources/application.yml | 1 +
.../stream/grpc/StreamGRPCConfigParser.java | 3 ++
apm-collector/apm-collector-ui/pom.xml | 23 +++++++++
.../apm/collector/ui/UIModuleContext.java | 13 +++++
.../apm/collector/ui/UIModuleDefine.java | 51 +++++++++++++++++++
.../apm/collector/ui/UIModuleException.java | 16 ++++++
.../apm/collector/ui/UIModuleGroupDefine.java | 25 +++++++++
.../apm/collector/ui/UIModuleInstaller.java | 36 +++++++++++++
.../apm/collector/ui/jetty/UIJettyConfig.java | 10 ++++
.../ui/jetty/UIJettyConfigParser.java | 36 +++++++++++++
.../ui/jetty/UIJettyDataListener.java | 20 ++++++++
.../ui/jetty/UIJettyModuleDefine.java | 51 +++++++++++++++++++
.../ui/jetty/UIJettyModuleRegistration.java | 13 +++++
.../ui/jetty/handler/TraceDagGetHandler.java | 21 ++++++++
.../jetty/handler/UIJettyServerHandler.java | 36 +++++++++++++
.../resources/META-INF/defines/group.define | 1 +
.../resources/META-INF/defines/module.define | 1 +
23 files changed, 377 insertions(+)
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleContext.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleDefine.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleException.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleGroupDefine.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleInstaller.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyConfig.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyConfigParser.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyDataListener.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleRegistration.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/TraceDagGetHandler.java
create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/UIJettyServerHandler.java
create mode 100644 apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/group.define
create mode 100644 apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/module.define
diff --git a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/grpc/AgentJVMGRPCConfigParser.java b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/grpc/AgentJVMGRPCConfigParser.java
index d5d1996aae..f66ea0a8aa 100644
--- a/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/grpc/AgentJVMGRPCConfigParser.java
+++ b/apm-collector/apm-collector-agentjvm/src/main/java/org/skywalking/apm/collector/agentjvm/grpc/AgentJVMGRPCConfigParser.java
@@ -17,7 +17,10 @@ public class AgentJVMGRPCConfigParser implements ModuleConfigParser {
@Override public void parse(Map config) throws ConfigParseException {
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(HOST))) {
AgentJVMGRPCConfig.HOST = "localhost";
+ } else {
+ AgentJVMGRPCConfig.HOST = (String)config.get(HOST);
}
+
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(PORT))) {
AgentJVMGRPCConfig.PORT = 11800;
} else {
diff --git a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/AgentRegisterGRPCConfigParser.java b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/AgentRegisterGRPCConfigParser.java
index cf59cd8ef3..90f0d39dac 100644
--- a/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/AgentRegisterGRPCConfigParser.java
+++ b/apm-collector/apm-collector-agentregister/src/main/java/org/skywalking/apm/collector/agentregister/grpc/AgentRegisterGRPCConfigParser.java
@@ -17,7 +17,10 @@ public class AgentRegisterGRPCConfigParser implements ModuleConfigParser {
@Override public void parse(Map config) throws ConfigParseException {
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(HOST))) {
AgentRegisterGRPCConfig.HOST = "localhost";
+ } else {
+ AgentRegisterGRPCConfig.HOST = (String)config.get(HOST);
}
+
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(PORT))) {
AgentRegisterGRPCConfig.PORT = 11800;
} else {
diff --git a/apm-collector/apm-collector-agentserver/pom.xml b/apm-collector/apm-collector-agentserver/pom.xml
index 1451d0a0db..8f174702d3 100644
--- a/apm-collector/apm-collector-agentserver/pom.xml
+++ b/apm-collector/apm-collector-agentserver/pom.xml
@@ -33,5 +33,10 @@
apm-collector-agentregister
${project.version}
+
+ org.skywalking
+ apm-collector-ui
+ ${project.version}
+
\ No newline at end of file
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
index bac76bcfc2..2625be0784 100644
--- 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
@@ -20,7 +20,10 @@ public class AgentServerJettyConfigParser implements ModuleConfigParser {
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(HOST))) {
AgentServerJettyConfig.HOST = "localhost";
+ } else {
+ AgentServerJettyConfig.HOST = (String)config.get(HOST);
}
+
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(PORT))) {
AgentServerJettyConfig.PORT = 10800;
} else {
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCConfigParser.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCConfigParser.java
index 43a7ac543a..f6e8eca80e 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCConfigParser.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/grpc/AgentStreamGRPCConfigParser.java
@@ -17,7 +17,10 @@ public class AgentStreamGRPCConfigParser implements ModuleConfigParser {
@Override public void parse(Map config) throws ConfigParseException {
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(HOST))) {
AgentStreamGRPCConfig.HOST = "localhost";
+ } else {
+ AgentStreamGRPCConfig.HOST = (String)config.get(HOST);
}
+
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(PORT))) {
AgentStreamGRPCConfig.PORT = 11800;
} else {
diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyConfigParser.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyConfigParser.java
index 86eb65a2bb..d7e4c4cebe 100644
--- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyConfigParser.java
+++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/jetty/AgentStreamJettyConfigParser.java
@@ -20,7 +20,10 @@ public class AgentStreamJettyConfigParser implements ModuleConfigParser {
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(HOST))) {
AgentStreamJettyConfig.HOST = "localhost";
+ } else {
+ AgentStreamJettyConfig.HOST = (String)config.get(HOST);
}
+
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(PORT))) {
AgentStreamJettyConfig.PORT = 12800;
} else {
diff --git a/apm-collector/apm-collector-boot/src/main/resources/application.yml b/apm-collector/apm-collector-boot/src/main/resources/application.yml
index 5e1a6de331..b5619da81e 100644
--- a/apm-collector/apm-collector-boot/src/main/resources/application.yml
+++ b/apm-collector/apm-collector-boot/src/main/resources/application.yml
@@ -20,6 +20,7 @@ ui:
jetty:
host: localhost
port: 12800
+ context_path: /ui
storage:
elasticsearch:
cluster_name: CollectorDBCluster
diff --git a/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/grpc/StreamGRPCConfigParser.java b/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/grpc/StreamGRPCConfigParser.java
index 3a4899f1c5..621cdbf72b 100644
--- a/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/grpc/StreamGRPCConfigParser.java
+++ b/apm-collector/apm-collector-stream/src/main/java/org/skywalking/apm/collector/stream/grpc/StreamGRPCConfigParser.java
@@ -17,7 +17,10 @@ public class StreamGRPCConfigParser implements ModuleConfigParser {
@Override public void parse(Map config) throws ConfigParseException {
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(HOST))) {
StreamGRPCConfig.HOST = "localhost";
+ } else {
+ StreamGRPCConfig.HOST = (String)config.get(HOST);
}
+
if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(PORT))) {
StreamGRPCConfig.PORT = 11800;
} else {
diff --git a/apm-collector/apm-collector-ui/pom.xml b/apm-collector/apm-collector-ui/pom.xml
index 6ece91dd84..ff4bb505b1 100644
--- a/apm-collector/apm-collector-ui/pom.xml
+++ b/apm-collector/apm-collector-ui/pom.xml
@@ -11,4 +11,27 @@
apm-collector-ui
jar
+
+
+
+ org.skywalking
+ apm-collector-core
+ ${project.version}
+
+
+ org.skywalking
+ apm-collector-cluster
+ ${project.version}
+
+
+ org.skywalking
+ apm-collector-server
+ ${project.version}
+
+
+ org.skywalking
+ apm-collector-storage
+ ${project.version}
+
+
\ No newline at end of file
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleContext.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleContext.java
new file mode 100644
index 0000000000..5333eba1b3
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleContext.java
@@ -0,0 +1,13 @@
+package org.skywalking.apm.collector.ui;
+
+import org.skywalking.apm.collector.core.framework.Context;
+
+/**
+ * @author pengys5
+ */
+public class UIModuleContext extends Context {
+
+ public UIModuleContext(String groupName) {
+ super(groupName);
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleDefine.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleDefine.java
new file mode 100644
index 0000000000..2f43dfeb40
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleDefine.java
@@ -0,0 +1,51 @@
+package org.skywalking.apm.collector.ui;
+
+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.skywalking.apm.collector.core.server.ServerHolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author pengys5
+ */
+public abstract class UIModuleDefine extends ModuleDefine implements ClusterDataListenerDefine {
+
+ private final Logger logger = LoggerFactory.getLogger(UIModuleDefine.class);
+
+ @Override
+ public final void initialize(Map config, ServerHolder serverHolder) throws DefineException, ClientException {
+ try {
+ configParser().parse(config);
+ Server server = server();
+ serverHolder.holdServer(server, handlerList());
+
+ ((ClusterModuleContext)CollectorContextHelper.INSTANCE.getContext(ClusterModuleGroupDefine.GROUP_NAME)).getDataMonitor().addListener(listener(), registration());
+ } catch (ConfigParseException | ServerException e) {
+ throw new UIModuleException(e.getMessage(), e);
+ }
+ }
+
+ @Override protected final Client createClient(DataMonitor dataMonitor) {
+ throw new UnsupportedOperationException("");
+ }
+
+ @Override public final boolean defaultModule() {
+ return true;
+ }
+
+ public abstract List handlerList();
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleException.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleException.java
new file mode 100644
index 0000000000..34662eb14f
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleException.java
@@ -0,0 +1,16 @@
+package org.skywalking.apm.collector.ui;
+
+import org.skywalking.apm.collector.core.module.ModuleException;
+
+/**
+ * @author pengys5
+ */
+public class UIModuleException extends ModuleException {
+ public UIModuleException(String message) {
+ super(message);
+ }
+
+ public UIModuleException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleGroupDefine.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleGroupDefine.java
new file mode 100644
index 0000000000..575cd41753
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleGroupDefine.java
@@ -0,0 +1,25 @@
+package org.skywalking.apm.collector.ui;
+
+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 UIModuleGroupDefine implements ModuleGroupDefine {
+
+ public static final String GROUP_NAME = "ui";
+
+ @Override public String name() {
+ return GROUP_NAME;
+ }
+
+ @Override public Context groupContext() {
+ return new UIModuleContext(GROUP_NAME);
+ }
+
+ @Override public ModuleInstaller moduleInstaller() {
+ return new UIModuleInstaller();
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleInstaller.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleInstaller.java
new file mode 100644
index 0000000000..4bda90127e
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/UIModuleInstaller.java
@@ -0,0 +1,36 @@
+package org.skywalking.apm.collector.ui;
+
+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.server.ServerHolder;
+import org.skywalking.apm.collector.core.util.ObjectUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author pengys5
+ */
+public class UIModuleInstaller implements ModuleInstaller {
+
+ private final Logger logger = LoggerFactory.getLogger(UIModuleInstaller.class);
+
+ @Override public void install(Map moduleConfig,
+ Map moduleDefineMap, ServerHolder serverHolder) throws DefineException, ClientException {
+ logger.info("beginning ui module install");
+
+ UIModuleContext context = new UIModuleContext(UIModuleGroupDefine.GROUP_NAME);
+ CollectorContextHelper.INSTANCE.putContext(context);
+
+ 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, serverHolder);
+ }
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyConfig.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyConfig.java
new file mode 100644
index 0000000000..0f761058ab
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyConfig.java
@@ -0,0 +1,10 @@
+package org.skywalking.apm.collector.ui.jetty;
+
+/**
+ * @author pengys5
+ */
+public class UIJettyConfig {
+ public static String HOST;
+ public static int PORT;
+ public static String CONTEXT_PATH;
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyConfigParser.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyConfigParser.java
new file mode 100644
index 0000000000..4f1a5baf5e
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyConfigParser.java
@@ -0,0 +1,36 @@
+package org.skywalking.apm.collector.ui.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 UIJettyConfigParser 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 {
+ UIJettyConfig.CONTEXT_PATH = "/";
+
+ if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(HOST))) {
+ UIJettyConfig.HOST = "localhost";
+ } else {
+ UIJettyConfig.HOST = (String)config.get(HOST);
+ }
+
+ if (ObjectUtils.isEmpty(config) || StringUtils.isEmpty(config.get(PORT))) {
+ UIJettyConfig.PORT = 12800;
+ } else {
+ UIJettyConfig.PORT = (Integer)config.get(PORT);
+ }
+ if (ObjectUtils.isNotEmpty(config) && StringUtils.isNotEmpty(config.get(CONTEXT_PATH))) {
+ UIJettyConfig.CONTEXT_PATH = (String)config.get(CONTEXT_PATH);
+ }
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyDataListener.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyDataListener.java
new file mode 100644
index 0000000000..00a1104dd1
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyDataListener.java
@@ -0,0 +1,20 @@
+package org.skywalking.apm.collector.ui.jetty;
+
+import org.skywalking.apm.collector.cluster.ClusterModuleDefine;
+import org.skywalking.apm.collector.core.cluster.ClusterDataListener;
+import org.skywalking.apm.collector.ui.UIModuleGroupDefine;
+
+/**
+ * @author pengys5
+ */
+public class UIJettyDataListener extends ClusterDataListener {
+
+ public static final String PATH = ClusterModuleDefine.BASE_CATALOG + "." + UIModuleGroupDefine.GROUP_NAME + "." + UIJettyModuleDefine.MODULE_NAME;
+
+ @Override public String path() {
+ return PATH;
+ }
+
+ @Override public void addressChangedNotify() {
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java
new file mode 100644
index 0000000000..69f9bc5c21
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleDefine.java
@@ -0,0 +1,51 @@
+package org.skywalking.apm.collector.ui.jetty;
+
+import java.util.LinkedList;
+import java.util.List;
+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;
+import org.skywalking.apm.collector.ui.UIModuleDefine;
+import org.skywalking.apm.collector.ui.UIModuleGroupDefine;
+import org.skywalking.apm.collector.ui.jetty.handler.UIJettyServerHandler;
+
+/**
+ * @author pengys5
+ */
+public class UIJettyModuleDefine extends UIModuleDefine {
+
+ public static final String MODULE_NAME = "jetty";
+
+ @Override protected String group() {
+ return UIModuleGroupDefine.GROUP_NAME;
+ }
+
+ @Override public String name() {
+ return MODULE_NAME;
+ }
+
+ @Override protected ModuleConfigParser configParser() {
+ return new UIJettyConfigParser();
+ }
+
+ @Override protected Server server() {
+ return new JettyServer(UIJettyConfig.HOST, UIJettyConfig.PORT, UIJettyConfig.CONTEXT_PATH);
+ }
+
+ @Override protected ModuleRegistration registration() {
+ return new UIJettyModuleRegistration();
+ }
+
+ @Override public ClusterDataListener listener() {
+ return new UIJettyDataListener();
+ }
+
+ @Override public List handlerList() {
+ List handlers = new LinkedList<>();
+ handlers.add(new UIJettyServerHandler());
+ return handlers;
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleRegistration.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleRegistration.java
new file mode 100644
index 0000000000..c29a8cb4ea
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/UIJettyModuleRegistration.java
@@ -0,0 +1,13 @@
+package org.skywalking.apm.collector.ui.jetty;
+
+import org.skywalking.apm.collector.core.module.ModuleRegistration;
+
+/**
+ * @author pengys5
+ */
+public class UIJettyModuleRegistration extends ModuleRegistration {
+
+ @Override public Value buildValue() {
+ return new Value(UIJettyConfig.HOST, UIJettyConfig.PORT, UIJettyConfig.CONTEXT_PATH);
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/TraceDagGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/TraceDagGetHandler.java
new file mode 100644
index 0000000000..ca4e1da967
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/TraceDagGetHandler.java
@@ -0,0 +1,21 @@
+package org.skywalking.apm.collector.ui.jetty.handler;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.skywalking.apm.collector.server.jetty.JettyHandler;
+
+/**
+ * @author pengys5
+ */
+public class TraceDagGetHandler extends JettyHandler {
+
+ @Override public String pathSpec() {
+ return "/traceDag";
+ }
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/UIJettyServerHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/UIJettyServerHandler.java
new file mode 100644
index 0000000000..3a9580434b
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/UIJettyServerHandler.java
@@ -0,0 +1,36 @@
+package org.skywalking.apm.collector.ui.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.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;
+import org.skywalking.apm.collector.ui.jetty.UIJettyDataListener;
+
+/**
+ * @author pengys5
+ */
+public class UIJettyServerHandler extends JettyHandler {
+
+ @Override public String pathSpec() {
+ return "/ui/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(UIJettyDataListener.PATH);
+ JsonArray serverArray = new JsonArray();
+ servers.forEach(server -> {
+ serverArray.add(server);
+ });
+
+ reply(resp, serverArray, HttpServletResponse.SC_OK);
+ }
+}
diff --git a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/group.define b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/group.define
new file mode 100644
index 0000000000..35b83f180b
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/group.define
@@ -0,0 +1 @@
+org.skywalking.apm.collector.ui.UIModuleGroupDefine
\ No newline at end of file
diff --git a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/module.define b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/module.define
new file mode 100644
index 0000000000..285a6d99da
--- /dev/null
+++ b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/module.define
@@ -0,0 +1 @@
+org.skywalking.apm.collector.ui.jetty.UIJettyModuleDefine
\ No newline at end of file
--
GitLab