From 0ee4b1c30d2309b54444c336060d2d355d1d2bd1 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 27 Jan 2018 09:37:30 +0800 Subject: [PATCH] Provide the getAllServer query, but only completed es storage and non tps. --- .../collector/storage/dao/IInstanceUIDAO.java | 4 ++- .../storage/es/dao/InstanceEsUIDAO.java | 25 ++++++++++++++++++- .../storage/h2/dao/InstanceH2UIDAO.java | 23 +++++++++++++---- .../apm/collector/ui/query/ServerQuery.java | 6 +++-- .../collector/ui/service/ServerService.java | 15 ++++++++--- 5 files changed, 61 insertions(+), 12 deletions(-) diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/IInstanceUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/IInstanceUIDAO.java index 9db7121f3..51177357f 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/IInstanceUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/IInstanceUIDAO.java @@ -36,5 +36,7 @@ public interface IInstanceUIDAO extends DAO { Instance getInstance(int instanceId); - List getInstances(String keyword, long start, long end); + List searchServer(String keyword, long start, long end); + + List getAllServer(int applicationId, long start, long end); } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceEsUIDAO.java index 50d88250c..93291e09a 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceEsUIDAO.java @@ -149,7 +149,7 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { return null; } - @Override public List getInstances(String keyword, long start, long end) { + @Override public List searchServer(String keyword, long start, long end) { logger.debug("get instances info, keyword: {}, start: {}, end: {}", keyword, start, end); SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); @@ -167,6 +167,29 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchHit[] searchHits = searchResponse.getHits().getHits(); + return buildAppServerInfo(searchHits); + } + + @Override public List getAllServer(int applicationId, long start, long end) { + logger.debug("get instances info, applicationId: {}, start: {}, end: {}", applicationId, start, end); + SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE); + searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE); + searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); + searchRequestBuilder.setSize(1000); + + BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); + boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(start).lte(end)); + boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId)); + boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); + searchRequestBuilder.setQuery(boolQuery); + + SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); + SearchHit[] searchHits = searchResponse.getHits().getHits(); + + return buildAppServerInfo(searchHits); + } + + private List buildAppServerInfo(SearchHit[] searchHits) { List appServerInfos = new LinkedList<>(); for (SearchHit searchHit : searchHits) { AppServerInfo appServerInfo = new AppServerInfo(); diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/InstanceH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/InstanceH2UIDAO.java index 62a9762e7..aeecc3989 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/InstanceH2UIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/InstanceH2UIDAO.java @@ -50,7 +50,6 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO { private static final String GET_LAST_HEARTBEAT_TIME_SQL = "select {0} from {1} where {2} > ? limit 1"; private static final String GET_INST_LAST_HEARTBEAT_TIME_SQL = "select {0} from {1} where {2} > ? and {3} = ? limit 1"; private static final String GET_INSTANCE_SQL = "select * from {0} where {1} = ?"; - private static final String GET_INSTANCES_SQL = "select * from {0} where {1} like ? and {2} >= ? and {2} <= ? and {3} = ?"; private static final String GET_APPLICATIONS_SQL = "select {3}, count({0}) as cnt from {1} where {2} >= ? group by {3} limit 100"; @Override @@ -132,12 +131,26 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO { return null; } - @Override public List getInstances(String keyword, long start, long end) { + @Override public List searchServer(String keyword, long start, long end) { logger.debug("get instances info, keyword: {}, start: {}, end: {}", keyword, start, end); - List appServerInfos = new LinkedList<>(); - H2Client client = getClient(); - String sql = SqlBuilder.buildSql(GET_INSTANCES_SQL, InstanceTable.TABLE, InstanceTable.COLUMN_OS_INFO, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_IS_ADDRESS); + String dynamicSql = "select * from {0} where {1} like ? and {2} >= ? and {2} <= ? and {3} = ?"; + String sql = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.COLUMN_OS_INFO, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_IS_ADDRESS); Object[] params = new Object[] {keyword, start, end, BooleanUtils.FALSE}; + return buildAppServerInfo(sql, params); + } + + @Override public List getAllServer(int applicationId, long start, long end) { + logger.debug("get instances info, applicationId: {}, start: {}, end: {}", applicationId, start, end); + String dynamicSql = "select * from {0} where {1} = ? and {2} >= ? and {2} <= ? and {3} = ?"; + String sql = SqlBuilder.buildSql(dynamicSql, InstanceTable.TABLE, InstanceTable.COLUMN_APPLICATION_ID, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_IS_ADDRESS); + Object[] params = new Object[] {applicationId, start, end, BooleanUtils.FALSE}; + return buildAppServerInfo(sql, params); + } + + private List buildAppServerInfo(String sql, Object[] params) { + H2Client client = getClient(); + + List appServerInfos = new LinkedList<>(); try (ResultSet rs = client.executeQuery(sql, params)) { while (rs.next()) { AppServerInfo appServerInfo = new AppServerInfo(); diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/ServerQuery.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/ServerQuery.java index be03305f7..9a6f32135 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/ServerQuery.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/query/ServerQuery.java @@ -58,8 +58,10 @@ public class ServerQuery implements Query { return getServerService().searchServer(keyword, start, end); } - public List getAllServer(String applicationId, Duration duration) { - return null; + public List getAllServer(int applicationId, Duration duration) throws ParseException { + long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); + long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); + return getServerService().getAllServer(applicationId, start, end); } public ResponseTimeTrend getServerResponseTimeTrend(int serverId, Duration duration) { diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java index 85b5af80d..6df24adf4 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java @@ -43,13 +43,24 @@ public class ServerService { } public List searchServer(String keyword, long start, long end) { - List serverInfos = instanceDAO.getInstances(keyword, start, end); + List serverInfos = instanceDAO.searchServer(keyword, start, end); serverInfos.forEach(serverInfo -> { if (serverInfo.getId() == Const.NONE_INSTANCE_ID) { serverInfos.remove(serverInfo); } }); + + buildAppServerInfo(serverInfos); + return serverInfos; + } + public List getAllServer(int applicationId, long start, long end) { + List serverInfos = instanceDAO.getAllServer(applicationId, start, end); + buildAppServerInfo(serverInfos); + return serverInfos; + } + + private void buildAppServerInfo(List serverInfos) { serverInfos.forEach(serverInfo -> { if (StringUtils.isNotEmpty(serverInfo.getOsInfo())) { JsonObject osInfoJson = gson.fromJson(serverInfo.getOsInfo(), JsonObject.class); @@ -74,7 +85,5 @@ public class ServerService { } } }); - - return serverInfos; } }