From a6d9111d7cf47e9e141192419087e980a6c7fb81 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sun, 20 Aug 2017 14:27:08 +0800 Subject: [PATCH] no message --- .../apm/collector/ui/dao/IInstanceDAO.java | 3 ++ .../apm/collector/ui/dao/InstanceEsDAO.java | 20 ++++++++ .../apm/collector/ui/dao/InstanceH2DAO.java | 5 ++ .../InstanceMetricGetHandler.java | 49 +++++++++++++++++++ .../InstanceOsInfoGetHandler.java | 41 ++++++++++++++++ .../ui/service/InstanceJVMService.java | 43 ++++++++++++++++ 6 files changed, 161 insertions(+) create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancemetric/InstanceMetricGetHandler.java create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancemetric/InstanceOsInfoGetHandler.java create mode 100644 apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceJVMService.java diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstanceDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstanceDAO.java index 3d40c136b..ce652e15b 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstanceDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstanceDAO.java @@ -1,6 +1,7 @@ package org.skywalking.apm.collector.ui.dao; import java.util.List; +import org.skywalking.apm.collector.storage.table.instance.Instance; /** * @author pengys5 @@ -12,6 +13,8 @@ public interface IInstanceDAO { List getApplications(long time); + Instance getInstance(int instanceId); + class Application { private final int applicationId; private final long count; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java index ecef9bf0e..b851fafd1 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceEsDAO.java @@ -2,6 +2,8 @@ package org.skywalking.apm.collector.ui.dao; import java.util.LinkedList; import java.util.List; +import org.elasticsearch.action.get.GetRequestBuilder; +import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; @@ -16,6 +18,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortMode; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; +import org.skywalking.apm.collector.storage.table.instance.Instance; import org.skywalking.apm.collector.storage.table.register.InstanceTable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -93,4 +96,21 @@ public class InstanceEsDAO extends EsDAO implements IInstanceDAO { } return applications; } + + @Override public Instance getInstance(int instanceId) { + logger.debug("get instance info, instance id: {}", instanceId); + GetRequestBuilder requestBuilder = getClient().prepareGet(InstanceTable.TABLE, String.valueOf(instanceId)); + GetResponse getResponse = requestBuilder.get(); + if (getResponse.isExists()) { + Instance instance = new Instance(); + instance.setId(String.valueOf(instanceId)); + instance.setApplicationId(((Number)getResponse.getSource().get(InstanceTable.COLUMN_APPLICATION_ID)).intValue()); + instance.setAgentUUID((String)getResponse.getSource().get(InstanceTable.COLUMN_AGENT_UUID)); + instance.setRegisterTime(((Number)getResponse.getSource().get(InstanceTable.COLUMN_REGISTER_TIME)).longValue()); + instance.setHeartBeatTime(((Number)getResponse.getSource().get(InstanceTable.COLUMN_HEARTBEAT_TIME)).longValue()); + instance.setOsInfo((String)getResponse.getSource().get(InstanceTable.COLUMN_OS_INFO)); + return instance; + } + return null; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java index 2e1badda7..0ba423247 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstanceH2DAO.java @@ -2,6 +2,7 @@ package org.skywalking.apm.collector.ui.dao; import java.util.List; import org.skywalking.apm.collector.storage.h2.dao.H2DAO; +import org.skywalking.apm.collector.storage.table.instance.Instance; /** * @author pengys5 @@ -18,4 +19,8 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO { @Override public List getApplications(long time) { return null; } + + @Override public Instance getInstance(int instanceId) { + return null; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancemetric/InstanceMetricGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancemetric/InstanceMetricGetHandler.java new file mode 100644 index 000000000..5e32d090f --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancemetric/InstanceMetricGetHandler.java @@ -0,0 +1,49 @@ +package org.skywalking.apm.collector.ui.jetty.handler.instancemetric; + +import com.google.gson.JsonElement; +import javax.servlet.http.HttpServletRequest; +import org.skywalking.apm.collector.server.jetty.ArgumentsParseException; +import org.skywalking.apm.collector.server.jetty.JettyHandler; +import org.skywalking.apm.collector.ui.service.InstanceHealthService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class InstanceMetricGetHandler extends JettyHandler { + + private final Logger logger = LoggerFactory.getLogger(InstanceMetricGetHandler.class); + + @Override public String pathSpec() { + return "/instance/jvm/instanceId"; + } + + private InstanceHealthService service = new InstanceHealthService(); + + @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { + String timestampStr = req.getParameter("timestamp"); + String applicationIdStr = req.getParameter("applicationId"); + logger.debug("instance health get timestamp: {}", timestampStr); + + long timestamp; + try { + timestamp = Long.parseLong(timestampStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("timestamp must be long"); + } + + int applicationId; + try { + applicationId = Integer.parseInt(applicationIdStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("application id must be integer"); + } + + return service.getInstances(timestamp, applicationId); + } + + @Override protected JsonElement doPost(HttpServletRequest req) throws ArgumentsParseException { + throw new UnsupportedOperationException(); + } +} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancemetric/InstanceOsInfoGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancemetric/InstanceOsInfoGetHandler.java new file mode 100644 index 000000000..4d4180705 --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancemetric/InstanceOsInfoGetHandler.java @@ -0,0 +1,41 @@ +package org.skywalking.apm.collector.ui.jetty.handler.instancemetric; + +import com.google.gson.JsonElement; +import javax.servlet.http.HttpServletRequest; +import org.skywalking.apm.collector.server.jetty.ArgumentsParseException; +import org.skywalking.apm.collector.server.jetty.JettyHandler; +import org.skywalking.apm.collector.ui.service.InstanceJVMService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class InstanceOsInfoGetHandler extends JettyHandler { + + private final Logger logger = LoggerFactory.getLogger(InstanceOsInfoGetHandler.class); + + @Override public String pathSpec() { + return "/instance/os/instanceId"; + } + + private InstanceJVMService service = new InstanceJVMService(); + + @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { + String instanceIdStr = req.getParameter("instanceId"); + logger.debug("instance os info get, instance id: {}", instanceIdStr); + + int instanceId; + try { + instanceId = Integer.parseInt(instanceIdStr); + } catch (NumberFormatException e) { + throw new ArgumentsParseException("instance id must be integer"); + } + + return service.getInstanceOsInfo(instanceId); + } + + @Override protected JsonElement doPost(HttpServletRequest req) throws ArgumentsParseException { + throw new UnsupportedOperationException(); + } +} diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceJVMService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceJVMService.java new file mode 100644 index 000000000..5924bf367 --- /dev/null +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceJVMService.java @@ -0,0 +1,43 @@ +package org.skywalking.apm.collector.ui.service; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import org.skywalking.apm.collector.core.framework.UnexpectedException; +import org.skywalking.apm.collector.core.util.ObjectUtils; +import org.skywalking.apm.collector.storage.dao.DAOContainer; +import org.skywalking.apm.collector.storage.table.instance.Instance; +import org.skywalking.apm.collector.ui.dao.IInstanceDAO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author pengys5 + */ +public class InstanceJVMService { + + private final Logger logger = LoggerFactory.getLogger(InstanceJVMService.class); + + private Gson gson = new Gson(); + + public JsonObject getInstanceOsInfo(int instanceId) { + IInstanceDAO instanceDAO = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName()); + Instance instance = instanceDAO.getInstance(instanceId); + if (ObjectUtils.isEmpty(instance)) { + throw new UnexpectedException("instance id: " + instance + " not exist."); + } + + JsonObject response = gson.fromJson(instance.getOsInfo(), JsonObject.class); + return response; + } + + public JsonObject getInstanceJvmMetric(int instanceId, String metricType) { + + return null; + } + + public enum MetricType { + cpu, gc, tps, heapmemory, heappermgen, heapmetaspace, heapnewgen, + heapoldgen, heapsurvivor, nonheap, memory, nonheappermgen, nonheapmetaspace, + nonheapnewgen, nonheapoldgen, nonheapsurvivor + } +}