From 8585e42c8621c2100fb92a791241cbc5a6d6863a Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Wed, 31 Jan 2018 21:14:51 +0800 Subject: [PATCH] Provide the getCPUTrend query. --- .../storage/dao/ICpuMetricUIDAO.java | 8 +-- .../storage/dao/IInstanceMetricUIDAO.java | 29 --------- .../collector/storage/ui/server/CPUTrend.java | 8 +++ .../storage/es/dao/CpuMetricEsUIDAO.java | 40 +++++------- .../storage/es/dao/InstanceMetricEsUIDAO.java | 53 ---------------- .../storage/h2/dao/CpuMetricH2UIDAO.java | 46 +++++--------- .../storage/h2/dao/InstanceMetricH2UIDAO.java | 63 +------------------ .../apm/collector/ui/query/ServerQuery.java | 6 +- .../ui/service/InstanceJVMService.java | 11 +--- .../collector/ui/service/ServerService.java | 20 ++++-- 10 files changed, 66 insertions(+), 218 deletions(-) diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ICpuMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ICpuMetricUIDAO.java index e1d3f9672..592e58e14 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ICpuMetricUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/ICpuMetricUIDAO.java @@ -18,14 +18,14 @@ package org.apache.skywalking.apm.collector.storage.dao; -import com.google.gson.JsonArray; +import java.util.List; import org.apache.skywalking.apm.collector.storage.base.dao.DAO; +import org.apache.skywalking.apm.collector.storage.ui.common.Step; +import org.apache.skywalking.apm.collector.storage.utils.DurationPoint; /** * @author peng-yongsheng */ public interface ICpuMetricUIDAO extends DAO { - int getMetric(int instanceId, long timeBucket); - - JsonArray getMetric(int instanceId, long startTimeBucket, long endTimeBucket); + List getCPUTrend(int instanceId, Step step, List durationPoints); } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/IInstanceMetricUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/IInstanceMetricUIDAO.java index 5d8603ecf..5410d71fa 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/IInstanceMetricUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/dao/IInstanceMetricUIDAO.java @@ -27,37 +27,8 @@ import org.apache.skywalking.apm.collector.storage.utils.DurationPoint; * @author peng-yongsheng */ public interface IInstanceMetricUIDAO extends DAO { - InstanceMetric get(long[] timeBuckets, int instanceId); - - long getTpsMetric(int instanceId, long timeBucket); List getServerTPSTrend(int instanceId, Step step, List durationPoints); - long getRespTimeMetric(int instanceId, long timeBucket); - List getResponseTimeTrend(int instanceId, Step step, List durationPoints); - - class InstanceMetric { - private final int instanceId; - private final long calls; - private final long durationSum; - - public InstanceMetric(int instanceId, long calls, long durationSum) { - this.instanceId = instanceId; - this.calls = calls; - this.durationSum = durationSum; - } - - public int getInstanceId() { - return instanceId; - } - - public long getCalls() { - return calls; - } - - public long getDurationSum() { - return durationSum; - } - } } diff --git a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/server/CPUTrend.java b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/server/CPUTrend.java index 062cfe213..5f894f76c 100644 --- a/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/server/CPUTrend.java +++ b/apm-collector/apm-collector-storage/collector-storage-define/src/main/java/org/apache/skywalking/apm/collector/storage/ui/server/CPUTrend.java @@ -25,4 +25,12 @@ import java.util.List; */ public class CPUTrend { private List cost; + + public List getCost() { + return cost; + } + + public void setCost(List cost) { + this.cost = cost; + } } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/CpuMetricEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/CpuMetricEsUIDAO.java index 788bc5fc1..21aef52d0 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/CpuMetricEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/CpuMetricEsUIDAO.java @@ -18,13 +18,16 @@ package org.apache.skywalking.apm.collector.storage.es.dao; -import com.google.gson.JsonArray; +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.Const; import org.apache.skywalking.apm.collector.storage.dao.ICpuMetricUIDAO; import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO; import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable; -import org.elasticsearch.action.get.GetResponse; +import org.apache.skywalking.apm.collector.storage.ui.common.Step; +import org.apache.skywalking.apm.collector.storage.utils.DurationPoint; +import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder; import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetRequestBuilder; import org.elasticsearch.action.get.MultiGetResponse; @@ -38,37 +41,26 @@ public class CpuMetricEsUIDAO extends EsDAO implements ICpuMetricUIDAO { super(client); } - @Override public int getMetric(int instanceId, long timeBucket) { - String id = timeBucket + Const.ID_SPLIT + instanceId; - GetResponse getResponse = getClient().prepareGet(CpuMetricTable.TABLE, id).get(); - - if (getResponse.isExists()) { - return ((Number)getResponse.getSource().get(CpuMetricTable.COLUMN_USAGE_PERCENT)).intValue(); - } - return 0; - } - - @Override public JsonArray getMetric(int instanceId, long startTimeBucket, long endTimeBucket) { + @Override public List getCPUTrend(int instanceId, Step step, List durationPoints) { MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); + String tableName = TimePyramidTableNameBuilder.build(step, CpuMetricTable.TABLE); - long timeBucket = startTimeBucket; - do { -// timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND, timeBucket, 1); - String id = timeBucket + Const.ID_SPLIT + instanceId; - prepareMultiGet.add(CpuMetricTable.TABLE, CpuMetricTable.TABLE_TYPE, id); - } - while (timeBucket <= endTimeBucket); + durationPoints.forEach(durationPoint -> { + String id = durationPoint.getPoint() + Const.ID_SPLIT + instanceId; + prepareMultiGet.add(tableName, CpuMetricTable.TABLE_TYPE, id); + }); - JsonArray metrics = new JsonArray(); + List cpuTrends = new LinkedList<>(); MultiGetResponse multiGetResponse = prepareMultiGet.get(); for (MultiGetItemResponse response : multiGetResponse.getResponses()) { if (response.getResponse().isExists()) { double cpuUsed = ((Number)response.getResponse().getSource().get(CpuMetricTable.COLUMN_USAGE_PERCENT)).doubleValue(); - metrics.add((int)(cpuUsed * 100)); + long times = ((Number)response.getResponse().getSource().get(CpuMetricTable.COLUMN_TIMES)).longValue(); + cpuTrends.add((int)((cpuUsed / times) * 100)); } else { - metrics.add(0); + cpuTrends.add(0); } } - return metrics; + return cpuTrends; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceMetricEsUIDAO.java b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceMetricEsUIDAO.java index d0bf73f1c..89459ab5e 100644 --- a/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceMetricEsUIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-es-provider/src/main/java/org/apache/skywalking/apm/collector/storage/es/dao/InstanceMetricEsUIDAO.java @@ -29,18 +29,9 @@ import org.apache.skywalking.apm.collector.storage.table.instance.InstanceMetric import org.apache.skywalking.apm.collector.storage.ui.common.Step; import org.apache.skywalking.apm.collector.storage.utils.DurationPoint; import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder; -import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.get.MultiGetItemResponse; import org.elasticsearch.action.get.MultiGetRequestBuilder; import org.elasticsearch.action.get.MultiGetResponse; -import org.elasticsearch.action.search.SearchRequestBuilder; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.action.search.SearchType; -import org.elasticsearch.index.query.BoolQueryBuilder; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.aggregations.AggregationBuilders; -import org.elasticsearch.search.aggregations.metrics.sum.Sum; -import org.elasticsearch.search.sort.SortOrder; /** * @author peng-yongsheng @@ -51,38 +42,6 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO super(client); } - @Override public InstanceMetric get(long[] timeBuckets, int instanceId) { - SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceMetricTable.TABLE); - searchRequestBuilder.setTypes(InstanceMetricTable.TABLE_TYPE); - searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); - - BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); - boolQuery.must().add(QueryBuilders.termQuery(InstanceMetricTable.COLUMN_INSTANCE_ID, instanceId)); - boolQuery.must().add(QueryBuilders.termsQuery(InstanceMetricTable.COLUMN_TIME_BUCKET, timeBuckets)); - - searchRequestBuilder.setQuery(boolQuery); - searchRequestBuilder.setSize(0); - searchRequestBuilder.addSort(InstanceMetricTable.COLUMN_INSTANCE_ID, SortOrder.ASC); - - searchRequestBuilder.addAggregation(AggregationBuilders.sum(InstanceMetricTable.COLUMN_TRANSACTION_CALLS).field(InstanceMetricTable.COLUMN_TRANSACTION_CALLS)); - searchRequestBuilder.addAggregation(AggregationBuilders.sum(InstanceMetricTable.COLUMN_TRANSACTION_DURATION_SUM).field(InstanceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)); - - SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); - Sum sumCalls = searchResponse.getAggregations().get(InstanceMetricTable.COLUMN_TRANSACTION_CALLS); - Sum sumCostTotal = searchResponse.getAggregations().get(InstanceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); - return new InstanceMetric(instanceId, (long)sumCalls.getValue(), (long)sumCostTotal.getValue()); - } - - @Override public long getTpsMetric(int instanceId, long timeBucket) { - String id = timeBucket + Const.ID_SPLIT + instanceId; - GetResponse getResponse = getClient().prepareGet(InstanceMetricTable.TABLE, id).get(); - - if (getResponse.isExists()) { - return ((Number)getResponse.getSource().get(InstanceMetricTable.COLUMN_TRANSACTION_CALLS)).longValue(); - } - return 0; - } - @Override public List getServerTPSTrend(int instanceId, Step step, List durationPoints) { MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); String tableName = TimePyramidTableNameBuilder.build(step, InstanceMetricTable.TABLE); @@ -107,18 +66,6 @@ public class InstanceMetricEsUIDAO extends EsDAO implements IInstanceMetricUIDAO return throughputTrend; } - @Override public long getRespTimeMetric(int instanceId, long timeBucket) { - String id = timeBucket + Const.ID_SPLIT + instanceId; - GetResponse getResponse = getClient().prepareGet(InstanceMetricTable.TABLE, id).get(); - - if (getResponse.isExists()) { - long callTimes = ((Number)getResponse.getSource().get(InstanceMetricTable.COLUMN_TRANSACTION_CALLS)).longValue(); - long costTotal = ((Number)getResponse.getSource().get(InstanceMetricTable.COLUMN_TRANSACTION_DURATION_SUM)).longValue(); - return costTotal / callTimes; - } - return 0; - } - @Override public List getResponseTimeTrend(int instanceId, Step step, List durationPoints) { MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); String tableName = TimePyramidTableNameBuilder.build(step, InstanceMetricTable.TABLE); diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/CpuMetricH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/CpuMetricH2UIDAO.java index e3ec3d908..0d4267925 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/CpuMetricH2UIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/CpuMetricH2UIDAO.java @@ -18,10 +18,9 @@ package org.apache.skywalking.apm.collector.storage.h2.dao; -import com.google.gson.JsonArray; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; +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; @@ -30,6 +29,9 @@ import org.apache.skywalking.apm.collector.storage.base.sql.SqlBuilder; import org.apache.skywalking.apm.collector.storage.dao.ICpuMetricUIDAO; import org.apache.skywalking.apm.collector.storage.h2.base.dao.H2DAO; import org.apache.skywalking.apm.collector.storage.table.jvm.CpuMetricTable; +import org.apache.skywalking.apm.collector.storage.ui.common.Step; +import org.apache.skywalking.apm.collector.storage.utils.DurationPoint; +import org.apache.skywalking.apm.collector.storage.utils.TimePyramidTableNameBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,48 +46,28 @@ public class CpuMetricH2UIDAO extends H2DAO implements ICpuMetricUIDAO { super(client); } - @Override public int getMetric(int instanceId, long timeBucket) { - String id = timeBucket + Const.ID_SPLIT + instanceId; + @Override public List getCPUTrend(int instanceId, Step step, List durationPoints) { H2Client client = getClient(); - String sql = SqlBuilder.buildSql(GET_CPU_METRIC_SQL, CpuMetricTable.TABLE, CpuMetricTable.COLUMN_ID); - Object[] params = new Object[] {id}; - try (ResultSet rs = client.executeQuery(sql, params)) { - if (rs.next()) { - return rs.getInt(CpuMetricTable.COLUMN_USAGE_PERCENT); - } - } catch (SQLException | H2ClientException e) { - logger.error(e.getMessage(), e); - } - return 0; - } + String tableName = TimePyramidTableNameBuilder.build(step, CpuMetricTable.TABLE); + String sql = SqlBuilder.buildSql(GET_CPU_METRIC_SQL, tableName, CpuMetricTable.COLUMN_ID); - @Override public JsonArray getMetric(int instanceId, long startTimeBucket, long endTimeBucket) { - H2Client client = getClient(); - String sql = SqlBuilder.buildSql(GET_CPU_METRIC_SQL, CpuMetricTable.TABLE, CpuMetricTable.COLUMN_ID); + List cpuTrends = new LinkedList<>(); + durationPoints.forEach(durationPoint -> { + String id = durationPoint.getPoint() + Const.ID_SPLIT + instanceId; - long timeBucket = startTimeBucket; - List idList = new ArrayList<>(); - do { -// timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND, timeBucket, 1); - String id = timeBucket + Const.ID_SPLIT + instanceId; - idList.add(id); - } - while (timeBucket <= endTimeBucket); - - JsonArray metrics = new JsonArray(); - idList.forEach(id -> { try (ResultSet rs = client.executeQuery(sql, new String[] {id})) { if (rs.next()) { double cpuUsed = rs.getDouble(CpuMetricTable.COLUMN_USAGE_PERCENT); - metrics.add((int)(cpuUsed * 100)); + long times = rs.getLong(CpuMetricTable.COLUMN_TIMES); + cpuTrends.add((int)((cpuUsed / times) * 100)); } else { - metrics.add(0); + cpuTrends.add(0); } } catch (SQLException | H2ClientException e) { logger.error(e.getMessage(), e); } }); - return metrics; + return cpuTrends; } } diff --git a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/InstanceMetricH2UIDAO.java b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/InstanceMetricH2UIDAO.java index 21d5b5bb3..f1ea9d9c2 100644 --- a/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/InstanceMetricH2UIDAO.java +++ b/apm-collector/apm-collector-storage/collector-storage-h2-provider/src/main/java/org/apache/skywalking/apm/collector/storage/h2/dao/InstanceMetricH2UIDAO.java @@ -42,58 +42,13 @@ import org.slf4j.LoggerFactory; public class InstanceMetricH2UIDAO extends H2DAO implements IInstanceMetricUIDAO { private final Logger logger = LoggerFactory.getLogger(InstanceMetricH2UIDAO.class); - private static final String GET_INSTANCE_METRIC_SQL = "select * from {0} where {1} = ? and {2} in ("; private static final String GET_TPS_METRIC_SQL = "select * from {0} where {1} = ?"; public InstanceMetricH2UIDAO(H2Client client) { super(client); } - @Override public InstanceMetric get(long[] timeBuckets, int instanceId) { - H2Client client = getClient(); - logger.info("the inst performance inst id = {}", instanceId); - String sql = SqlBuilder.buildSql(GET_INSTANCE_METRIC_SQL, InstanceMetricTable.TABLE, InstanceMetricTable.COLUMN_INSTANCE_ID, InstanceMetricTable.COLUMN_TIME_BUCKET); - StringBuilder builder = new StringBuilder(); - for (long timeBucket : timeBuckets) { - builder.append("?,"); - } - builder.delete(builder.length() - 1, builder.length()); - builder.append(")"); - sql = sql + builder; - Object[] params = new Object[timeBuckets.length + 1]; - for (int i = 0; i < timeBuckets.length; i++) { - params[i + 1] = timeBuckets[i]; - } - params[0] = instanceId; - try (ResultSet rs = client.executeQuery(sql, params)) { - if (rs.next()) { - long callTimes = rs.getInt(InstanceMetricTable.COLUMN_TRANSACTION_CALLS); - long costTotal = rs.getInt(InstanceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); - return new InstanceMetric(instanceId, callTimes, costTotal); - } - } catch (SQLException | H2ClientException e) { - logger.error(e.getMessage(), e); - } - return null; - } - - @Override public long getTpsMetric(int instanceId, long timeBucket) { - logger.info("getTpMetric instanceId = {}, startTimeBucket = {}", instanceId, timeBucket); - H2Client client = getClient(); - String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, InstanceMetricTable.TABLE, InstanceMetricTable.COLUMN_ID); - Object[] params = new Object[] {instanceId}; - try (ResultSet rs = client.executeQuery(sql, params)) { - if (rs.next()) { - return rs.getLong(InstanceMetricTable.COLUMN_TRANSACTION_CALLS); - } - } catch (SQLException | H2ClientException e) { - logger.error(e.getMessage(), e); - } - return 0; - } - - @Override - public List getServerTPSTrend(int instanceId, Step step, List durationPoints) { + @Override public List getServerTPSTrend(int instanceId, Step step, List durationPoints) { H2Client client = getClient(); String tableName = TimePyramidTableNameBuilder.build(step, InstanceMetricTable.TABLE); @@ -117,22 +72,6 @@ public class InstanceMetricH2UIDAO extends H2DAO implements IInstanceMetricUIDAO return throughputTrend; } - @Override public long getRespTimeMetric(int instanceId, long timeBucket) { - H2Client client = getClient(); - String sql = SqlBuilder.buildSql(GET_TPS_METRIC_SQL, InstanceMetricTable.TABLE, InstanceMetricTable.COLUMN_ID); - Object[] params = new Object[] {instanceId}; - try (ResultSet rs = client.executeQuery(sql, params)) { - if (rs.next()) { - long callTimes = rs.getLong(InstanceMetricTable.COLUMN_TRANSACTION_CALLS); - long costTotal = rs.getLong(InstanceMetricTable.COLUMN_TRANSACTION_DURATION_SUM); - return costTotal / callTimes; - } - } catch (SQLException | H2ClientException e) { - logger.error(e.getMessage(), e); - } - return 0; - } - @Override public List getResponseTimeTrend(int instanceId, Step step, List durationPoints) { H2Client client = getClient(); 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 c3c4af039..965848baa 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 @@ -76,8 +76,10 @@ public class ServerQuery implements Query { return getServerService().getServerTPSTrend(serverId, duration.getStep(), start, end); } - public CPUTrend getCPUTrend(int serverId, Duration duration) { - return null; + public CPUTrend getCPUTrend(int serverId, Duration duration) throws ParseException { + long start = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getStart()); + long end = DurationUtils.INSTANCE.exchangeToTimeBucket(duration.getEnd()); + return getServerService().getCPUTrend(serverId, duration.getStep(), start, end); } public GCTrend getGCTrend(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/InstanceJVMService.java b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/InstanceJVMService.java index 779a31fbd..ca1b03c7f 100644 --- a/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/InstanceJVMService.java +++ b/apm-collector/apm-collector-ui/collector-ui-jetty-provider/src/main/java/org/apache/skywalking/apm/collector/ui/service/InstanceJVMService.java @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.collector.ui.service; import com.google.gson.Gson; @@ -25,14 +24,14 @@ import java.util.Set; import org.apache.skywalking.apm.collector.core.UnexpectedException; 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.StorageModule; import org.apache.skywalking.apm.collector.storage.dao.ICpuMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.IGCMetricUIDAO; -import org.apache.skywalking.apm.collector.storage.dao.IMemoryMetricUIDAO; -import org.apache.skywalking.apm.collector.storage.table.register.Instance; -import org.apache.skywalking.apm.collector.storage.StorageModule; import org.apache.skywalking.apm.collector.storage.dao.IInstanceMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.IInstanceUIDAO; +import org.apache.skywalking.apm.collector.storage.dao.IMemoryMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.IMemoryPoolMetricUIDAO; +import org.apache.skywalking.apm.collector.storage.table.register.Instance; import org.apache.skywalking.apm.network.proto.PoolType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -75,13 +74,10 @@ public class InstanceJVMService { JsonObject metrics = new JsonObject(); for (String metricType : metricTypes) { if (metricType.toLowerCase().equals(MetricType.cpu.name())) { - metrics.addProperty(MetricType.cpu.name(), cpuMetricDAO.getMetric(instanceId, timeBucket)); } else if (metricType.toLowerCase().equals(MetricType.gc.name())) { metrics.add(MetricType.gc.name(), gcMetricDAO.getMetric(instanceId, timeBucket)); } else if (metricType.toLowerCase().equals(MetricType.tps.name())) { - metrics.addProperty(MetricType.tps.name(), instanceMetricUIDAO.getTpsMetric(instanceId, timeBucket)); } else if (metricType.toLowerCase().equals(MetricType.resptime.name())) { - metrics.addProperty(MetricType.resptime.name(), instanceMetricUIDAO.getRespTimeMetric(instanceId, timeBucket)); } else if (metricType.toLowerCase().equals(MetricType.heapmemory.name())) { metrics.add(MetricType.heapmemory.name(), memoryMetricDAO.getMetric(instanceId, timeBucket, true)); } else if (metricType.toLowerCase().equals(MetricType.nonheapmemory.name())) { @@ -108,7 +104,6 @@ public class InstanceJVMService { JsonObject metrics = new JsonObject(); for (String metricType : metricTypes) { if (metricType.toLowerCase().equals(MetricType.cpu.name())) { - metrics.add(MetricType.cpu.name(), cpuMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket)); } else if (metricType.toLowerCase().equals(MetricType.gc.name())) { metrics.add(MetricType.gc.name(), gcMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket)); } else if (metricType.toLowerCase().equals(MetricType.tps.name())) { 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 739760780..dbe4e1b83 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 @@ -28,12 +28,14 @@ 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.ICpuMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.IInstanceMetricUIDAO; import org.apache.skywalking.apm.collector.storage.dao.IInstanceUIDAO; import org.apache.skywalking.apm.collector.storage.ui.common.ResponseTimeTrend; import org.apache.skywalking.apm.collector.storage.ui.common.Step; import org.apache.skywalking.apm.collector.storage.ui.common.ThroughputTrend; 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.utils.DurationPoint; import org.apache.skywalking.apm.collector.ui.utils.DurationUtils; @@ -43,16 +45,18 @@ import org.apache.skywalking.apm.collector.ui.utils.DurationUtils; public class ServerService { private final Gson gson = new Gson(); - private final IInstanceUIDAO instanceDAO; + private final IInstanceUIDAO instanceUIDAO; + private final ICpuMetricUIDAO cpuMetricUIDAO; private final IInstanceMetricUIDAO instanceMetricUIDAO; public ServerService(ModuleManager moduleManager) { - this.instanceDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class); + this.instanceUIDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceUIDAO.class); + this.cpuMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(ICpuMetricUIDAO.class); this.instanceMetricUIDAO = moduleManager.find(StorageModule.NAME).getService(IInstanceMetricUIDAO.class); } public List searchServer(String keyword, long start, long end) { - List serverInfos = instanceDAO.searchServer(keyword, start, end); + List serverInfos = instanceUIDAO.searchServer(keyword, start, end); serverInfos.forEach(serverInfo -> { if (serverInfo.getId() == Const.NONE_INSTANCE_ID) { serverInfos.remove(serverInfo); @@ -64,7 +68,7 @@ public class ServerService { } public List getAllServer(int applicationId, long start, long end) { - List serverInfos = instanceDAO.getAllServer(applicationId, start, end); + List serverInfos = instanceUIDAO.getAllServer(applicationId, start, end); buildAppServerInfo(serverInfos); return serverInfos; } @@ -86,6 +90,14 @@ public class ServerService { return throughputTrend; } + public CPUTrend getCPUTrend(int instanceId, Step step, long start, long end) throws ParseException { + CPUTrend cpuTrend = new CPUTrend(); + List durationPoints = DurationUtils.INSTANCE.getDurationPoints(step, start, end); + List trends = cpuMetricUIDAO.getCPUTrend(instanceId, step, durationPoints); + cpuTrend.setCost(trends); + return cpuTrend; + } + private void buildAppServerInfo(List serverInfos) { serverInfos.forEach(serverInfo -> { if (StringUtils.isNotEmpty(serverInfo.getOsInfo())) {