From f177ebd909d1dbe5efd84adb10d0dbf6da83b4d7 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Sat, 27 Jan 2018 09:13:48 +0800 Subject: [PATCH] Provide the search server query, but only completed es storage and non tps. --- .../json/instance-register-consumer.json | 9 ++- .../json/instance-register-provider.json | 9 ++- .../collector/storage/dao/IInstanceUIDAO.java | 3 +- .../ui/application/ApplicationNode.java | 6 +- .../apm/collector/storage/ui/common/Call.java | 18 ++--- .../storage/ui/server/AppServerInfo.java | 63 ++++++++++++++- .../storage/es/dao/InstanceEsUIDAO.java | 28 ++++--- .../storage/h2/dao/InstanceH2UIDAO.java | 27 +++---- .../ui/jetty/handler/GraphQLHandler.java | 5 +- .../apm/collector/ui/query/ServerQuery.java | 28 ++++++- .../service/ApplicationTopologyService.java | 6 +- .../collector/ui/service/ServerService.java | 80 +++++++++++++++++++ .../collector/ui/service/TopologyBuilder.java | 6 +- .../ui-graphql/server-layer.graphqls | 4 +- 14 files changed, 231 insertions(+), 61 deletions(-) create mode 100644 apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java diff --git a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/test/resources/json/instance-register-consumer.json b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/test/resources/json/instance-register-consumer.json index 139dc5743..e2cb6e068 100644 --- a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/test/resources/json/instance-register-consumer.json +++ b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/test/resources/json/instance-register-consumer.json @@ -3,7 +3,12 @@ "au": "dubbox-consumer", "rt": 1501858094526, "oi": { - "any_name": "any_value", - "any_name1": "any_value1" + "osName": "MacOS XX", + "hostName": "pengys", + "processId": "1001", + "ipv4s": [ + "10.0.0.3", + "10.0.0.4" + ] } } \ No newline at end of file diff --git a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/test/resources/json/instance-register-provider.json b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/test/resources/json/instance-register-provider.json index 976928f9c..304de7c4f 100644 --- a/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/test/resources/json/instance-register-provider.json +++ b/apm-collector/apm-collector-agent/agent-jetty/agent-jetty-provider/src/test/resources/json/instance-register-provider.json @@ -3,7 +3,12 @@ "au": "dubbox-provider", "rt": 1501858094526, "oi": { - "any_name": "any_value", - "any_name1": "any_value1" + "osName": "MacOS X", + "hostName": "peng-yongsheng", + "processId": "1000", + "ipv4s": [ + "10.0.0.1", + "10.0.0.2" + ] } } \ No newline at end of file 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 6a2413f1f..9db7121f3 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 @@ -22,6 +22,7 @@ import java.util.List; import org.apache.skywalking.apm.collector.storage.base.dao.DAO; import org.apache.skywalking.apm.collector.storage.table.register.Instance; import org.apache.skywalking.apm.collector.storage.ui.application.Application; +import org.apache.skywalking.apm.collector.storage.ui.server.AppServerInfo; /** * @author peng-yongsheng @@ -35,5 +36,5 @@ public interface IInstanceUIDAO extends DAO { Instance getInstance(int instanceId); - List getInstances(int applicationId, long timeBucket); + List getInstances(String keyword, long start, long end); } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/application/ApplicationNode.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/application/ApplicationNode.java index 88ca7f14f..66f3a8d82 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/application/ApplicationNode.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/application/ApplicationNode.java @@ -27,7 +27,7 @@ public class ApplicationNode extends Node { private Float sla; private Long callsPerSec; - private Integer responseTimePerSec; + private Long responseTimePerSec; private Float apdex; private Boolean isAlarm; private Integer numOfServer; @@ -50,11 +50,11 @@ public class ApplicationNode extends Node { this.callsPerSec = callsPerSec; } - public Integer getResponseTimePerSec() { + public Long getResponseTimePerSec() { return responseTimePerSec; } - public void setResponseTimePerSec(Integer responseTimePerSec) { + public void setResponseTimePerSec(Long responseTimePerSec) { this.responseTimePerSec = responseTimePerSec; } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/common/Call.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/common/Call.java index 74151ce0d..70956ef73 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/common/Call.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/common/Call.java @@ -28,10 +28,10 @@ public class Call { private String targetName; private boolean isAlert; private String callType; - private int calls; - private int callsPerSec; + private long calls; + private long callsPerSec; private long responseTimes; - private int responseTimePerSec; + private long responseTimePerSec; public int getSource() { return source; @@ -81,19 +81,19 @@ public class Call { this.callType = callType; } - public int getCalls() { + public long getCalls() { return calls; } - public void setCalls(int calls) { + public void setCalls(long calls) { this.calls = calls; } - public int getCallsPerSec() { + public long getCallsPerSec() { return callsPerSec; } - public void setCallsPerSec(int callsPerSec) { + public void setCallsPerSec(long callsPerSec) { this.callsPerSec = callsPerSec; } @@ -105,11 +105,11 @@ public class Call { this.responseTimes = responseTimes; } - public int getResponseTimePerSec() { + public long getResponseTimePerSec() { return responseTimePerSec; } - public void setResponseTimePerSec(int responseTimePerSec) { + public void setResponseTimePerSec(long responseTimePerSec) { this.responseTimePerSec = responseTimePerSec; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/server/AppServerInfo.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/server/AppServerInfo.java index 4d4c7cc93..9989ecbbc 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/server/AppServerInfo.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/server/AppServerInfo.java @@ -18,16 +18,73 @@ package org.apache.skywalking.apm.collector.storage.ui.server; +import java.util.List; + /** * @author peng-yongsheng */ public class AppServerInfo { private int id; + private String osInfo; private String name; private int tps; - private String os; private String host; private int pid; - private String ipv4; - private String ipv6; + private List ipv4; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getOsInfo() { + return osInfo; + } + + public void setOsInfo(String osInfo) { + this.osInfo = osInfo; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getTps() { + return tps; + } + + public void setTps(int tps) { + this.tps = tps; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPid() { + return pid; + } + + public void setPid(int pid) { + this.pid = pid; + } + + public List getIpv4() { + return ipv4; + } + + public void setIpv4(List ipv4) { + this.ipv4 = ipv4; + } } 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 b8b3dd1bc..50d88250c 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 @@ -21,12 +21,15 @@ package org.apache.skywalking.apm.collector.storage.es.dao; import java.util.LinkedList; import java.util.List; import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient; +import org.apache.skywalking.apm.collector.core.util.BooleanUtils; +import org.apache.skywalking.apm.collector.core.util.StringUtils; import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils; import org.apache.skywalking.apm.collector.storage.dao.IInstanceUIDAO; import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO; import org.apache.skywalking.apm.collector.storage.table.register.Instance; import org.apache.skywalking.apm.collector.storage.table.register.InstanceTable; import org.apache.skywalking.apm.collector.storage.ui.application.Application; +import org.apache.skywalking.apm.collector.storage.ui.server.AppServerInfo; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchRequestBuilder; @@ -146,30 +149,31 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO { return null; } - @Override public List getInstances(int applicationId, long timeBucket) { - logger.debug("get instances info, application id: {}, timeBucket: {}", applicationId, timeBucket); + @Override public List getInstances(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); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSize(1000); BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(timeBucket)); - boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId)); + boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(start).lte(end)); + if (StringUtils.isNotEmpty(keyword)) { + boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_OS_INFO, keyword)); + } + boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE)); searchRequestBuilder.setQuery(boolQuery); SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); SearchHit[] searchHits = searchResponse.getHits().getHits(); - List instanceList = new LinkedList<>(); + List appServerInfos = new LinkedList<>(); for (SearchHit searchHit : searchHits) { - Instance instance = new Instance(); - instance.setId(searchHit.getId()); - instance.setApplicationId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_APPLICATION_ID)).intValue()); - instance.setHeartBeatTime(((Number)searchHit.getSource().get(InstanceTable.COLUMN_HEARTBEAT_TIME)).longValue()); - instance.setInstanceId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_INSTANCE_ID)).intValue()); - instanceList.add(instance); + AppServerInfo appServerInfo = new AppServerInfo(); + appServerInfo.setId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_INSTANCE_ID)).intValue()); + appServerInfo.setOsInfo((String)searchHit.getSource().get(InstanceTable.COLUMN_OS_INFO)); + appServerInfos.add(appServerInfo); } - return instanceList; + return appServerInfos; } } 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 488a08332..62a9762e7 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 @@ -24,6 +24,7 @@ import java.util.LinkedList; import java.util.List; import org.apache.skywalking.apm.collector.client.h2.H2Client; import org.apache.skywalking.apm.collector.client.h2.H2ClientException; +import org.apache.skywalking.apm.collector.core.util.BooleanUtils; import org.apache.skywalking.apm.collector.core.util.TimeBucketUtils; import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder; import org.apache.skywalking.apm.collector.storage.dao.IInstanceUIDAO; @@ -31,6 +32,7 @@ import org.apache.skywalking.apm.collector.storage.h2.base.dao.H2DAO; import org.apache.skywalking.apm.collector.storage.table.register.Instance; import org.apache.skywalking.apm.collector.storage.table.register.InstanceTable; import org.apache.skywalking.apm.collector.storage.ui.application.Application; +import org.apache.skywalking.apm.collector.storage.ui.server.AppServerInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,7 +50,7 @@ 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} = ? and {2} >= ?"; + 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 @@ -130,25 +132,22 @@ public class InstanceH2UIDAO extends H2DAO implements IInstanceUIDAO { return null; } - @Override - public List getInstances(int applicationId, long timeBucket) { - logger.debug("get instances info, application id: {}, timeBucket: {}", applicationId, timeBucket); - List instanceList = new LinkedList<>(); + @Override public List getInstances(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_APPLICATION_ID, InstanceTable.COLUMN_HEARTBEAT_TIME); - Object[] params = new Object[] {applicationId, timeBucket}; + String sql = SqlBuilder.buildSql(GET_INSTANCES_SQL, InstanceTable.TABLE, InstanceTable.COLUMN_OS_INFO, InstanceTable.COLUMN_HEARTBEAT_TIME, InstanceTable.COLUMN_IS_ADDRESS); + Object[] params = new Object[] {keyword, start, end, BooleanUtils.FALSE}; try (ResultSet rs = client.executeQuery(sql, params)) { while (rs.next()) { - Instance instance = new Instance(); - instance.setId(rs.getString(InstanceTable.COLUMN_ID)); - instance.setApplicationId(rs.getInt(InstanceTable.COLUMN_APPLICATION_ID)); - instance.setHeartBeatTime(rs.getLong(InstanceTable.COLUMN_HEARTBEAT_TIME)); - instance.setInstanceId(rs.getInt(InstanceTable.COLUMN_INSTANCE_ID)); - instanceList.add(instance); + AppServerInfo appServerInfo = new AppServerInfo(); + appServerInfo.setId(rs.getInt(InstanceTable.COLUMN_INSTANCE_ID)); + appServerInfo.setOsInfo(rs.getString(InstanceTable.COLUMN_OS_INFO)); + appServerInfos.add(appServerInfo); } } catch (SQLException | H2ClientException e) { logger.error(e.getMessage(), e); } - return instanceList; + return appServerInfos; } } diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/jetty/handler/GraphQLHandler.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/jetty/handler/GraphQLHandler.java index 3deeb3b1a..82f7cdf44 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/jetty/handler/GraphQLHandler.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/jetty/handler/GraphQLHandler.java @@ -60,7 +60,6 @@ public class GraphQLHandler extends JettyHandler { private final Logger logger = LoggerFactory.getLogger(GraphQLHandler.class); - private final ModuleManager moduleManager; private final Gson gson = new Gson(); private final GraphQL graphQL; private static final String QUERY = "query"; @@ -69,8 +68,6 @@ public class GraphQLHandler extends JettyHandler { private static final String MESSAGE = "message"; public GraphQLHandler(ModuleManager moduleManager) { - this.moduleManager = moduleManager; - GraphQLSchema schema = SchemaParser.newParser() .file("ui-graphql/alarm.graphqls") .file("ui-graphql/application-layer.graphqls") @@ -81,7 +78,7 @@ public class GraphQLHandler extends JettyHandler { .file("ui-graphql/service-layer.graphqls") .file("ui-graphql/trace.graphqls") .resolvers(new VersionQuery(), new VersionMutation(), new AlarmQuery(), new ApplicationQuery(moduleManager)) - .resolvers(new OverViewLayerQuery(moduleManager), new ServerQuery(), new ServiceQuery(), new TraceQuery()) + .resolvers(new OverViewLayerQuery(moduleManager), new ServerQuery(moduleManager), new ServiceQuery(), new TraceQuery()) .resolvers(new ConfigQuery(), new ConfigMutation()) .dictionary(ConjecturalNode.class, VisualUserNode.class, ApplicationNode.class) .build() 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 7871337dc..be03305f7 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 @@ -18,8 +18,10 @@ package org.apache.skywalking.apm.collector.ui.query; +import java.text.ParseException; import java.util.List; -import org.apache.skywalking.apm.collector.ui.graphql.Query; +import org.apache.skywalking.apm.collector.core.module.ModuleManager; +import org.apache.skywalking.apm.collector.core.util.ObjectUtils; import org.apache.skywalking.apm.collector.storage.ui.common.Duration; import org.apache.skywalking.apm.collector.storage.ui.common.ResponseTimeTrend; import org.apache.skywalking.apm.collector.storage.ui.common.ThroughputTrend; @@ -27,13 +29,33 @@ import org.apache.skywalking.apm.collector.storage.ui.server.AppServerInfo; import org.apache.skywalking.apm.collector.storage.ui.server.CPUTrend; import org.apache.skywalking.apm.collector.storage.ui.server.GCTrend; import org.apache.skywalking.apm.collector.storage.ui.server.MemoryTrend; +import org.apache.skywalking.apm.collector.ui.graphql.Query; +import org.apache.skywalking.apm.collector.ui.service.ServerService; +import org.apache.skywalking.apm.collector.ui.utils.DurationUtils; /** * @author peng-yongsheng */ public class ServerQuery implements Query { - public List searchServer(String keyword, Duration duration) { - return null; + + private final ModuleManager moduleManager; + private ServerService serverService; + + public ServerQuery(ModuleManager moduleManager) { + this.moduleManager = moduleManager; + } + + private ServerService getServerService() { + if (ObjectUtils.isEmpty(serverService)) { + this.serverService = new ServerService(moduleManager); + } + return serverService; + } + + public List searchServer(String keyword, Duration duration) throws ParseException { + long start = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getStart()); + long end = DurationUtils.INSTANCE.durationToSecondTimeBucket(duration.getStep(), duration.getEnd()); + return getServerService().searchServer(keyword, start, end); } public List getAllServer(String applicationId, Duration duration) { diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java index e53c52b43..821a435a4 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ApplicationTopologyService.java @@ -119,10 +119,10 @@ public class ApplicationTopologyService { Topology topology = builder.build(applicationComponents, applicationMappings, callerCalls, calleeCalls, secondsBetween); topology.getCalls().forEach(call -> { - int calls = call.getCalls(); + long calls = call.getCalls(); long responseTimes = call.getResponseTimes(); - call.setCallsPerSec((int)(calls / secondsBetween)); - call.setResponseTimePerSec((int)(responseTimes / secondsBetween)); + call.setCallsPerSec(calls / secondsBetween); + call.setResponseTimePerSec(responseTimes / secondsBetween); }); return topology; } 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 new file mode 100644 index 000000000..85b5af80d --- /dev/null +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/ServerService.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.skywalking.apm.collector.ui.service; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import java.util.LinkedList; +import java.util.List; +import org.apache.skywalking.apm.collector.core.module.ModuleManager; +import org.apache.skywalking.apm.collector.core.util.Const; +import org.apache.skywalking.apm.collector.core.util.StringUtils; +import org.apache.skywalking.apm.collector.storage.StorageModule; +import org.apache.skywalking.apm.collector.storage.dao.IInstanceUIDAO; +import org.apache.skywalking.apm.collector.storage.ui.server.AppServerInfo; + +/** + * @author peng-yongsheng + */ +public class ServerService { + + private final Gson gson = new Gson(); + private final IInstanceUIDAO instanceDAO; + + public ServerService(ModuleManager moduleManager) { + this.instanceDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class); + } + + public List searchServer(String keyword, long start, long end) { + List serverInfos = instanceDAO.getInstances(keyword, start, end); + serverInfos.forEach(serverInfo -> { + if (serverInfo.getId() == Const.NONE_INSTANCE_ID) { + serverInfos.remove(serverInfo); + } + }); + + serverInfos.forEach(serverInfo -> { + if (StringUtils.isNotEmpty(serverInfo.getOsInfo())) { + JsonObject osInfoJson = gson.fromJson(serverInfo.getOsInfo(), JsonObject.class); + if (osInfoJson.has("osName")) { + serverInfo.setName(osInfoJson.get("osName").getAsString()); + } + if (osInfoJson.has("hostName")) { + serverInfo.setHost(osInfoJson.get("hostName").getAsString()); + } + if (osInfoJson.has("processId")) { + serverInfo.setPid(osInfoJson.get("processId").getAsInt()); + } + + if (osInfoJson.has("ipv4s")) { + JsonArray ipv4Array = osInfoJson.get("ipv4s").getAsJsonArray(); + + List ipv4s = new LinkedList<>(); + ipv4Array.forEach(ipv4 -> { + ipv4s.add(ipv4.getAsString()); + }); + serverInfo.setIpv4(ipv4s); + } + } + }); + + return serverInfos; + } +} diff --git a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java index 97ea1265a..fabdf601e 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/TopologyBuilder.java @@ -95,10 +95,12 @@ class TopologyBuilder { calleeCalls.forEach(call -> { if (call.getTarget() == nodeId) { - call.setCallsPerSec((int)(call.getCalls() / secondsBetween)); - call.setResponseTimePerSec((int)(call.getResponseTimes() / secondsBetween)); + call.setCallsPerSec(call.getCalls() / secondsBetween); + call.setResponseTimePerSec(call.getResponseTimes() / secondsBetween); } }); + applicationNode.setCallsPerSec(100L); + applicationNode.setResponseTimePerSec(100L); nodes.add(applicationNode); } } diff --git a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/server-layer.graphqls b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/server-layer.graphqls index ddd41c680..fdf1d1bcd 100644 --- a/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/server-layer.graphqls +++ b/apm-protocol/apm-ui-protocol/src/main/resources/ui-graphql/server-layer.graphqls @@ -7,11 +7,9 @@ type AppServerInfo { id: ID! name: String! tps: Int! - os: String host: String pid: Int - ipv4: String - ipv6: String + ipv4: [String!]! } type CPUTrend {