From bdf29e5a92fc40c24c6a36a6d55c1decc77b0a61 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sat, 2 Sep 2017 18:11:53 +0800 Subject: [PATCH] Jvm metric test success. #365 --- .../JVMMetricsServiceHandlerTestCase.java | 36 +++- .../cost/define/SegmentCostEsTableDefine.java | 4 +- .../agentstream/mock/SegmentPost.java | 31 ++- .../json/segment/normal/dubbox-provider.json | 4 +- .../define/ElasticSearchStorageInstaller.java | 7 +- .../apm/collector/ui/dao/GCMetricEsDAO.java | 13 +- .../collector/ui/dao/IInstPerformanceDAO.java | 8 +- .../apm/collector/ui/dao/ISegmentCostDAO.java | 6 +- .../ui/dao/InstPerformanceEsDAO.java | 44 +++- .../ui/dao/InstPerformanceH2DAO.java | 12 +- .../collector/ui/dao/MemoryMetricEsDAO.java | 3 +- .../ui/dao/MemoryPoolMetricEsDAO.java | 3 +- .../collector/ui/dao/SegmentCostEsDAO.java | 10 +- .../collector/ui/dao/SegmentCostH2DAO.java | 2 +- .../collector/ui/dao/ServiceEntryEsDAO.java | 2 +- .../ui/jetty/UIJettyModuleDefine.java | 6 + .../jetty/handler/SegmentTopGetHandler.java | 11 +- .../InstanceHealthGetHandler.java | 12 +- .../time/OneInstanceLastTimeGetHandler.java | 12 +- .../ui/service/InstanceHealthService.java | 5 +- .../ui/service/InstanceJVMService.java | 201 +++++++++--------- .../ui/service/SegmentTopService.java | 4 +- .../resources/META-INF/defines/es_dao.define | 3 + 23 files changed, 283 insertions(+), 156 deletions(-) diff --git a/apm-collector/apm-collector-agentjvm/src/test/java/org/skywalking/apm/collector/agentjvm/grpc/handler/JVMMetricsServiceHandlerTestCase.java b/apm-collector/apm-collector-agentjvm/src/test/java/org/skywalking/apm/collector/agentjvm/grpc/handler/JVMMetricsServiceHandlerTestCase.java index 6183381fb..8c36e2c83 100644 --- a/apm-collector/apm-collector-agentjvm/src/test/java/org/skywalking/apm/collector/agentjvm/grpc/handler/JVMMetricsServiceHandlerTestCase.java +++ b/apm-collector/apm-collector-agentjvm/src/test/java/org/skywalking/apm/collector/agentjvm/grpc/handler/JVMMetricsServiceHandlerTestCase.java @@ -78,14 +78,34 @@ public class JVMMetricsServiceHandlerTestCase { } private static void buildMemoryPoolMetric(JVMMetric.Builder jvmMetric) { - MemoryPool.Builder builder_1 = MemoryPool.newBuilder(); - builder_1.setType(PoolType.NEWGEN_USAGE); - builder_1.setIsHeap(true); - builder_1.setInit(20); - builder_1.setMax(100); - builder_1.setUsed(50); - builder_1.setCommited(30); - jvmMetric.addMemoryPool(builder_1.build()); + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.NEWGEN_USAGE, true).build()); + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.NEWGEN_USAGE, false).build()); + + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.OLDGEN_USAGE, true).build()); + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.OLDGEN_USAGE, false).build()); + + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.METASPACE_USAGE, true).build()); + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.METASPACE_USAGE, false).build()); + + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.PERMGEN_USAGE, true).build()); + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.PERMGEN_USAGE, false).build()); + + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.SURVIVOR_USAGE, true).build()); + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.SURVIVOR_USAGE, false).build()); + + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.CODE_CACHE_USAGE, true).build()); + jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.CODE_CACHE_USAGE, false).build()); + } + + private static MemoryPool.Builder buildMemoryPoolMetric(PoolType poolType, boolean isHeap) { + MemoryPool.Builder builder = MemoryPool.newBuilder(); + builder.setType(poolType); + builder.setIsHeap(isHeap); + builder.setInit(20); + builder.setMax(100); + builder.setUsed(50); + builder.setCommited(30); + return builder; } private static void buildGcMetric(JVMMetric.Builder jvmMetric) { diff --git a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/define/SegmentCostEsTableDefine.java b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/define/SegmentCostEsTableDefine.java index 3e047134c..a25bf0fba 100644 --- a/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/define/SegmentCostEsTableDefine.java +++ b/apm-collector/apm-collector-agentstream/src/main/java/org/skywalking/apm/collector/agentstream/worker/segment/cost/define/SegmentCostEsTableDefine.java @@ -1,8 +1,8 @@ package org.skywalking.apm.collector.agentstream.worker.segment.cost.define; +import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable; import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchColumnDefine; import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine; -import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable; /** * @author pengys5 @@ -27,7 +27,7 @@ public class SegmentCostEsTableDefine extends ElasticSearchTableDefine { @Override public void initialize() { addColumn(new ElasticSearchColumnDefine(SegmentCostTable.COLUMN_SEGMENT_ID, ElasticSearchColumnDefine.Type.Keyword.name())); - addColumn(new ElasticSearchColumnDefine(SegmentCostTable.COLUMN_SERVICE_NAME, ElasticSearchColumnDefine.Type.Keyword.name())); + addColumn(new ElasticSearchColumnDefine(SegmentCostTable.COLUMN_SERVICE_NAME, ElasticSearchColumnDefine.Type.Text.name())); addColumn(new ElasticSearchColumnDefine(SegmentCostTable.COLUMN_COST, ElasticSearchColumnDefine.Type.Long.name())); addColumn(new ElasticSearchColumnDefine(SegmentCostTable.COLUMN_START_TIME, ElasticSearchColumnDefine.Type.Long.name())); addColumn(new ElasticSearchColumnDefine(SegmentCostTable.COLUMN_END_TIME, ElasticSearchColumnDefine.Type.Long.name())); diff --git a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java index 26dd7ce04..23293258b 100644 --- a/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java +++ b/apm-collector/apm-collector-agentstream/src/test/java/org/skywalking/apm/collector/agentstream/mock/SegmentPost.java @@ -28,9 +28,9 @@ public class SegmentPost { InstanceEsDAO instanceEsDAO = new InstanceEsDAO(); instanceEsDAO.setClient(client); - InstanceDataDefine.Instance consumerInstance = new InstanceDataDefine.Instance("2", 2, "dubbox-consumer", now, 2, now, ""); + InstanceDataDefine.Instance consumerInstance = new InstanceDataDefine.Instance("2", 2, "dubbox-consumer", now, 2, now, osInfo("consumer").toString()); instanceEsDAO.save(consumerInstance); - InstanceDataDefine.Instance providerInstance = new InstanceDataDefine.Instance("3", 3, "dubbox-provider", now, 3, now, ""); + InstanceDataDefine.Instance providerInstance = new InstanceDataDefine.Instance("3", 3, "dubbox-provider", now, 3, now, osInfo("provider").toString()); instanceEsDAO.save(providerInstance); ApplicationEsDAO applicationEsDAO = new ApplicationEsDAO(); @@ -64,10 +64,13 @@ public class SegmentPost { modifyTime(provider); HttpClientTools.INSTANCE.post("http://localhost:12800/segments", provider.toString()); + diff = 0; Thread.sleep(1000); } } + private static long diff = 0; + private static void modifyTime(JsonElement jsonElement) { JsonArray segmentArray = jsonElement.getAsJsonArray(); for (JsonElement element : segmentArray) { @@ -76,10 +79,28 @@ public class SegmentPost { for (JsonElement span : spans) { long startTime = span.getAsJsonObject().get("st").getAsLong(); long endTime = span.getAsJsonObject().get("et").getAsLong(); - long currentTime = System.currentTimeMillis(); - span.getAsJsonObject().addProperty("st", currentTime); - span.getAsJsonObject().addProperty("et", currentTime + (endTime - startTime)); + + if (diff == 0) { + diff = System.currentTimeMillis() - startTime; + } + + span.getAsJsonObject().addProperty("st", startTime + diff); + span.getAsJsonObject().addProperty("et", endTime + diff); } } } + + private static JsonObject osInfo(String hostName) { + JsonObject osInfoJson = new JsonObject(); + osInfoJson.addProperty("osName", "Linux"); + osInfoJson.addProperty("hostName", hostName); + osInfoJson.addProperty("processId", 1); + + JsonArray ipv4Array = new JsonArray(); + ipv4Array.add("123.123.123.123"); + ipv4Array.add("124.124.124.124"); + osInfoJson.add("ipv4s", ipv4Array); + + return osInfoJson; + } } diff --git a/apm-collector/apm-collector-agentstream/src/test/resources/json/segment/normal/dubbox-provider.json b/apm-collector/apm-collector-agentstream/src/test/resources/json/segment/normal/dubbox-provider.json index 6da99d6f7..28a61aee0 100644 --- a/apm-collector/apm-collector-agentstream/src/test/resources/json/segment/normal/dubbox-provider.json +++ b/apm-collector/apm-collector-agentstream/src/test/resources/json/segment/normal/dubbox-provider.json @@ -40,8 +40,8 @@ "tv": 0, "lv": 2, "ps": -1, - "st": 1501858094883, - "et": 1501858096950, + "st": 1501858094726, + "et": 1501858096804, "ci": 3, "cn": "", "oi": 0, diff --git a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchStorageInstaller.java b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchStorageInstaller.java index 040349742..05e3f2738 100644 --- a/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchStorageInstaller.java +++ b/apm-collector/apm-collector-storage/src/main/java/org/skywalking/apm/collector/storage/elasticsearch/define/ElasticSearchStorageInstaller.java @@ -53,7 +53,12 @@ public class ElasticSearchStorageInstaller extends StorageInstaller { return Settings.builder() .put("index.number_of_shards", tableDefine.numberOfShards()) .put("index.number_of_replicas", tableDefine.numberOfReplicas()) - .put("index.refresh_interval", String.valueOf(tableDefine.refreshInterval()) + "s").build(); + .put("index.refresh_interval", String.valueOf(tableDefine.refreshInterval()) + "s") + + .put("analysis.analyzer.collector_analyzer.tokenizer", "collector_tokenizer") + .put("analysis.tokenizer.collector_tokenizer.type", "standard") + .put("analysis.tokenizer.collector_tokenizer.max_token_length", 5) + .build(); } private XContentBuilder createMappingBuilder(ElasticSearchTableDefine tableDefine) throws IOException { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java index 0e6ce7a45..16b441e5e 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/GCMetricEsDAO.java @@ -16,7 +16,6 @@ import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.skywalking.apm.collector.core.util.Const; -import org.skywalking.apm.collector.storage.define.jvm.CpuMetricTable; import org.skywalking.apm.collector.storage.define.jvm.GCMetricTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.skywalking.apm.network.proto.GCPhrase; @@ -92,8 +91,8 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { MultiGetRequestBuilder youngPrepareMultiGet = getClient().prepareMultiGet(); int i = 0; do { - String youngId = (startTimeBucket + i) + Const.ID_SPLIT + GCPhrase.NEW_VALUE + instanceId; - youngPrepareMultiGet.add(CpuMetricTable.TABLE, CpuMetricTable.TABLE_TYPE, youngId); + String youngId = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.NEW_VALUE; + youngPrepareMultiGet.add(GCMetricTable.TABLE, GCMetricTable.TABLE_TYPE, youngId); i++; } while (startTimeBucket + i <= endTimeBucket); @@ -102,7 +101,7 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { MultiGetResponse multiGetResponse = youngPrepareMultiGet.get(); for (MultiGetItemResponse itemResponse : multiGetResponse.getResponses()) { if (itemResponse.getResponse().isExists()) { - youngArray.add(((Number)itemResponse.getResponse().getSource().get(CpuMetricTable.COLUMN_USAGE_PERCENT)).intValue()); + youngArray.add(((Number)itemResponse.getResponse().getSource().get(GCMetricTable.COLUMN_COUNT)).intValue()); } else { youngArray.add(0); } @@ -112,8 +111,8 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { MultiGetRequestBuilder oldPrepareMultiGet = getClient().prepareMultiGet(); i = 0; do { - String oldId = (startTimeBucket + i) + Const.ID_SPLIT + GCPhrase.OLD_VALUE + instanceId; - oldPrepareMultiGet.add(CpuMetricTable.TABLE, CpuMetricTable.TABLE_TYPE, oldId); + String oldId = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.OLD_VALUE; + oldPrepareMultiGet.add(GCMetricTable.TABLE, GCMetricTable.TABLE_TYPE, oldId); i++; } while (startTimeBucket + i <= endTimeBucket); @@ -123,7 +122,7 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { multiGetResponse = oldPrepareMultiGet.get(); for (MultiGetItemResponse itemResponse : multiGetResponse.getResponses()) { if (itemResponse.getResponse().isExists()) { - oldArray.add(((Number)itemResponse.getResponse().getSource().get(CpuMetricTable.COLUMN_USAGE_PERCENT)).intValue()); + oldArray.add(((Number)itemResponse.getResponse().getSource().get(GCMetricTable.COLUMN_COUNT)).intValue()); } else { oldArray.add(0); } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstPerformanceDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstPerformanceDAO.java index 488df87b0..850872e38 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstPerformanceDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/IInstPerformanceDAO.java @@ -9,9 +9,13 @@ import java.util.List; public interface IInstPerformanceDAO { List getMultiple(long timeBucket, int applicationId); - int getMetric(int instanceId, long timeBucket); + int getTpsMetric(int instanceId, long timeBucket); - JsonArray getMetric(int instanceId, long startTimeBucket, long endTimeBucket); + JsonArray getTpsMetric(int instanceId, long startTimeBucket, long endTimeBucket); + + int getRespTimeMetric(int instanceId, long timeBucket); + + JsonArray getRespTimeMetric(int instanceId, long startTimeBucket, long endTimeBucket); class InstPerformance { private final int instanceId; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ISegmentCostDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ISegmentCostDAO.java index 43466b991..99c09d34e 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ISegmentCostDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ISegmentCostDAO.java @@ -7,5 +7,9 @@ import com.google.gson.JsonObject; */ public interface ISegmentCostDAO { JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, - String globalTraceId, int limit, int from); + String globalTraceId, int limit, int from, Sort sort); + + public enum Sort { + Cost, Time + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java index f307512a3..e7dcd7dbd 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceEsDAO.java @@ -18,7 +18,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.storage.define.instance.InstPerformanceTable; -import org.skywalking.apm.collector.storage.define.jvm.CpuMetricTable; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; /** @@ -68,7 +67,7 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { return instPerformances; } - @Override public int getMetric(int instanceId, long timeBucket) { + @Override public int getTpsMetric(int instanceId, long timeBucket) { String id = timeBucket + Const.ID_SPLIT + instanceId; GetResponse getResponse = getClient().prepareGet(InstPerformanceTable.TABLE, id).get(); @@ -78,13 +77,13 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { return 0; } - @Override public JsonArray getMetric(int instanceId, long startTimeBucket, long endTimeBucket) { + @Override public JsonArray getTpsMetric(int instanceId, long startTimeBucket, long endTimeBucket) { MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); int i = 0; do { String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId; - prepareMultiGet.add(CpuMetricTable.TABLE, InstPerformanceTable.TABLE_TYPE, id); + prepareMultiGet.add(InstPerformanceTable.TABLE, InstPerformanceTable.TABLE_TYPE, id); i++; } while (startTimeBucket + i <= endTimeBucket); @@ -100,4 +99,41 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { } return metrics; } + + @Override public int getRespTimeMetric(int instanceId, long timeBucket) { + String id = timeBucket + Const.ID_SPLIT + instanceId; + GetResponse getResponse = getClient().prepareGet(InstPerformanceTable.TABLE, id).get(); + + if (getResponse.isExists()) { + int callTimes = ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue(); + int costTotal = ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_COST_TOTAL)).intValue(); + return costTotal / callTimes; + } + return 0; + } + + @Override public JsonArray getRespTimeMetric(int instanceId, long startTimeBucket, long endTimeBucket) { + MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet(); + + int i = 0; + do { + String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId; + prepareMultiGet.add(InstPerformanceTable.TABLE, InstPerformanceTable.TABLE_TYPE, id); + i++; + } + while (startTimeBucket + i <= endTimeBucket); + + JsonArray metrics = new JsonArray(); + MultiGetResponse multiGetResponse = prepareMultiGet.get(); + for (MultiGetItemResponse response : multiGetResponse.getResponses()) { + if (response.getResponse().isExists()) { + int callTimes = ((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue(); + int costTotal = ((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_COST_TOTAL)).intValue(); + metrics.add(costTotal / callTimes); + } else { + metrics.add(0); + } + } + return metrics; + } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java index a480c7ce3..fcb20253b 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/InstPerformanceH2DAO.java @@ -13,11 +13,19 @@ public class InstPerformanceH2DAO extends H2DAO implements IInstPerformanceDAO { return null; } - @Override public int getMetric(int instanceId, long timeBucket) { + @Override public int getTpsMetric(int instanceId, long timeBucket) { return 0; } - @Override public JsonArray getMetric(int instanceId, long startTimeBucket, long endTimeBucket) { + @Override public JsonArray getTpsMetric(int instanceId, long startTimeBucket, long endTimeBucket) { + return null; + } + + @Override public int getRespTimeMetric(int instanceId, long timeBucket) { + return 0; + } + + @Override public JsonArray getRespTimeMetric(int instanceId, long startTimeBucket, long endTimeBucket) { return null; } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricEsDAO.java index 3e481a587..e441b0e1c 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryMetricEsDAO.java @@ -44,9 +44,7 @@ public class MemoryMetricEsDAO extends EsDAO implements IMemoryMetricDAO { while (startTimeBucket + i <= endTimeBucket); JsonObject metric = new JsonObject(); - JsonArray usedMetric = new JsonArray(); - MultiGetResponse multiGetResponse = prepareMultiGet.get(); for (MultiGetItemResponse response : multiGetResponse.getResponses()) { if (response.getResponse().isExists()) { @@ -57,6 +55,7 @@ public class MemoryMetricEsDAO extends EsDAO implements IMemoryMetricDAO { usedMetric.add(0); } } + metric.add("used", usedMetric); return metric; } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricEsDAO.java index a2cbbc10d..01b78c3ee 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/MemoryPoolMetricEsDAO.java @@ -45,9 +45,7 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO while (startTimeBucket + i <= endTimeBucket); JsonObject metric = new JsonObject(); - JsonArray usedMetric = new JsonArray(); - MultiGetResponse multiGetResponse = prepareMultiGet.get(); for (MultiGetItemResponse response : multiGetResponse.getResponses()) { if (response.getResponse().isExists()) { @@ -58,6 +56,7 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO usedMetric.add(0); } } + metric.add("used", usedMetric); return metric; } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostEsDAO.java index 32e32bc75..f724a7451 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostEsDAO.java @@ -15,9 +15,9 @@ import org.elasticsearch.search.sort.SortOrder; import org.skywalking.apm.collector.core.util.CollectionUtils; import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.storage.dao.DAOContainer; -import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.skywalking.apm.collector.storage.define.global.GlobalTraceTable; import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable; +import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; /** * @author pengys5 @@ -25,7 +25,7 @@ import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable; public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO { @Override public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, - String globalTraceId, int limit, int from) { + String globalTraceId, int limit, int from, Sort sort) { SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(SegmentCostTable.TABLE); searchRequestBuilder.setTypes(SegmentCostTable.TABLE_TYPE); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); @@ -48,7 +48,11 @@ public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO { mustQueryList.add(QueryBuilders.matchQuery(SegmentCostTable.COLUMN_SERVICE_NAME, operationName)); } - searchRequestBuilder.addSort(SegmentCostTable.COLUMN_COST, SortOrder.DESC); + if (Sort.Cost.equals(sort)) { + searchRequestBuilder.addSort(SegmentCostTable.COLUMN_COST, SortOrder.DESC); + } else if (Sort.Time.equals(sort)) { + searchRequestBuilder.addSort(SegmentCostTable.COLUMN_START_TIME, SortOrder.DESC); + } searchRequestBuilder.setSize(limit); searchRequestBuilder.setFrom(from); diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostH2DAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostH2DAO.java index fcafd0f60..644eab487 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostH2DAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/SegmentCostH2DAO.java @@ -8,7 +8,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO; */ public class SegmentCostH2DAO extends H2DAO implements ISegmentCostDAO { @Override public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, - String globalTraceId, int limit, int from) { + String globalTraceId, int limit, int from, Sort sort) { return null; } } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java index 299c4ae46..8d0145a59 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceEntryEsDAO.java @@ -37,7 +37,7 @@ public class ServiceEntryEsDAO extends EsDAO implements IServiceEntryDAO { boolQueryBuilder.must().add(QueryBuilders.matchQuery(ServiceEntryTable.COLUMN_APPLICATION_ID, applicationId)); } if (StringUtils.isNotEmpty(entryServiceName)) { - boolQueryBuilder.must().add(QueryBuilders.termQuery(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, entryServiceName)); + boolQueryBuilder.must().add(QueryBuilders.matchQuery(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, entryServiceName)); } searchRequestBuilder.setQuery(boolQueryBuilder); 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 index b78deae2e..1b367ec8a 100644 --- 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 @@ -17,6 +17,9 @@ import org.skywalking.apm.collector.ui.jetty.handler.TraceStackGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.UIJettyServerHandler; import org.skywalking.apm.collector.ui.jetty.handler.application.ApplicationsGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.instancehealth.InstanceHealthGetHandler; +import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceMetricGetOneTimeBucketHandler; +import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceMetricGetRangeTimeBucketHandler; +import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceOsInfoGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.servicetree.EntryServiceGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.time.AllInstanceLastTimeGetHandler; @@ -64,6 +67,9 @@ public class UIJettyModuleDefine extends UIModuleDefine { handlers.add(new AllInstanceLastTimeGetHandler()); handlers.add(new InstanceHealthGetHandler()); handlers.add(new ApplicationsGetHandler()); + handlers.add(new InstanceOsInfoGetHandler()); + handlers.add(new InstanceMetricGetOneTimeBucketHandler()); + handlers.add(new InstanceMetricGetRangeTimeBucketHandler()); handlers.add(new EntryServiceGetHandler()); handlers.add(new ServiceTreeGetHandler()); return handlers; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/SegmentTopGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/SegmentTopGetHandler.java index 003d37e55..5de03a313 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/SegmentTopGetHandler.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/SegmentTopGetHandler.java @@ -4,6 +4,7 @@ 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.dao.ISegmentCostDAO; import org.skywalking.apm.collector.ui.service.SegmentTopService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -77,7 +78,15 @@ public class SegmentTopGetHandler extends JettyHandler { operationName = req.getParameter("operationName"); } - return service.loadTop(startTime, endTime, minCost, maxCost, operationName, globalTraceId, limit, from); + ISegmentCostDAO.Sort sort = ISegmentCostDAO.Sort.Cost; + if (req.getParameterMap().containsKey("sort")) { + String sortStr = req.getParameter("sort"); + if (sortStr.toLowerCase().equals(ISegmentCostDAO.Sort.Time.name().toLowerCase())) { + sort = ISegmentCostDAO.Sort.Time; + } + } + + return service.loadTop(startTime, endTime, minCost, maxCost, operationName, globalTraceId, limit, from, sort); } @Override protected JsonElement doPost(HttpServletRequest req) throws ArgumentsParseException { diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancehealth/InstanceHealthGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancehealth/InstanceHealthGetHandler.java index 57832ba20..92ac0b206 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancehealth/InstanceHealthGetHandler.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/instancehealth/InstanceHealthGetHandler.java @@ -24,13 +24,13 @@ public class InstanceHealthGetHandler extends JettyHandler { private InstanceHealthService service = new InstanceHealthService(); @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { - String timestampStr = req.getParameter("timestamp"); + String timeBucketStr = req.getParameter("timeBucket"); String[] applicationIdsStr = req.getParameterValues("applicationIds"); - logger.debug("instance health get timestamp: {}, applicationIdsStr: {}", timestampStr, applicationIdsStr); + logger.debug("instance health get timeBucket: {}, applicationIdsStr: {}", timeBucketStr, applicationIdsStr); - long timestamp; + long timeBucket; try { - timestamp = Long.parseLong(timestampStr); + timeBucket = Long.parseLong(timeBucketStr); } catch (NumberFormatException e) { throw new ArgumentsParseException("timestamp must be long"); } @@ -45,12 +45,12 @@ public class InstanceHealthGetHandler extends JettyHandler { } JsonObject response = new JsonObject(); - response.addProperty("timestamp", timestamp); + response.addProperty("timeBucket", timeBucket); JsonArray appInstances = new JsonArray(); response.add("appInstances", appInstances); for (int applicationId : applicationIds) { - appInstances.add(service.getInstances(timestamp, applicationId)); + appInstances.add(service.getInstances(timeBucket, applicationId)); } return response; } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/OneInstanceLastTimeGetHandler.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/OneInstanceLastTimeGetHandler.java index 3e29f4c08..e9891b9dd 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/OneInstanceLastTimeGetHandler.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/jetty/handler/time/OneInstanceLastTimeGetHandler.java @@ -23,18 +23,18 @@ public class OneInstanceLastTimeGetHandler extends JettyHandler { private TimeSynchronousService service = new TimeSynchronousService(); @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { - String applicationInstanceIdStr = req.getParameter("applicationInstanceId"); - logger.debug("applicationInstanceId: {}", applicationInstanceIdStr); + String instanceIdStr = req.getParameter("instanceId"); + logger.debug("instanceId: {}", instanceIdStr); - int applicationInstanceId; + int instanceId; try { - applicationInstanceId = Integer.parseInt(applicationInstanceIdStr); + instanceId = Integer.parseInt(instanceIdStr); } catch (NumberFormatException e) { throw new ArgumentsParseException("application instance id must be integer"); } - Long time = service.instanceLastTime(applicationInstanceId); - logger.debug("application instance id: {}, instance last time: {}", applicationInstanceId, time); + Long time = service.instanceLastTime(instanceId); + logger.debug("application instance id: {}, instance last time: {}", instanceId, time); JsonObject timeJson = new JsonObject(); timeJson.addProperty("timeBucket", time); return timeJson; diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java index 2b380df53..fff48a03f 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/InstanceHealthService.java @@ -18,11 +18,10 @@ public class InstanceHealthService { private final Logger logger = LoggerFactory.getLogger(InstanceHealthService.class); - public JsonObject getInstances(long timestamp, int applicationId) { + public JsonObject getInstances(long timeBucket, int applicationId) { JsonObject response = new JsonObject(); - long secondTimeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(timestamp); - long s5TimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(secondTimeBucket); + long s5TimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(timeBucket); IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); List performances = instPerformanceDAO.getMultiple(s5TimeBucket, applicationId); 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 index d84aee2dc..8b8fb00a5 100644 --- 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 @@ -39,53 +39,58 @@ public class InstanceJVMService { public JsonObject getInstanceJvmMetric(int instanceId, Set metricTypes, long timeBucket) { JsonObject metrics = new JsonObject(); - if (metricTypes.contains(MetricType.cpu.name())) { - ICpuMetricDAO cpuMetricDAO = (ICpuMetricDAO)DAOContainer.INSTANCE.get(ICpuMetricDAO.class.getName()); - metrics.addProperty(MetricType.cpu.name(), cpuMetricDAO.getMetric(instanceId, timeBucket)); - } else if (metricTypes.contains(MetricType.gc.name())) { - IGCMetricDAO gcMetricDAO = (IGCMetricDAO)DAOContainer.INSTANCE.get(IGCMetricDAO.class.getName()); - metrics.add(MetricType.gc.name(), gcMetricDAO.getMetric(instanceId, timeBucket)); - } else if (metricTypes.contains(MetricType.tps.name())) { - IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); - metrics.addProperty(MetricType.tps.name(), instPerformanceDAO.getMetric(instanceId, timeBucket)); - } else if (metricTypes.contains(MetricType.heapmemory.name())) { - IMemoryMetricDAO memoryMetricDAO = (IMemoryMetricDAO)DAOContainer.INSTANCE.get(IMemoryMetricDAO.class.getName()); - metrics.add(MetricType.heapmemory.name(), memoryMetricDAO.getMetric(instanceId, timeBucket, true)); - } else if (metricTypes.contains(MetricType.nonheapmemory.name())) { - IMemoryMetricDAO memoryMetricDAO = (IMemoryMetricDAO)DAOContainer.INSTANCE.get(IMemoryMetricDAO.class.getName()); - metrics.add(MetricType.heapmemory.name(), memoryMetricDAO.getMetric(instanceId, timeBucket, false)); - } else if (metricTypes.contains(MetricType.heappermgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heappermgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.PERMGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.heapmetaspace.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heapmetaspace.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.METASPACE_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.heapnewgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.NEWGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.heapoldgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heapoldgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.OLDGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.heapsurvivor.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heapsurvivor.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.SURVIVOR_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheappermgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheappermgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.PERMGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheapmetaspace.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheapmetaspace.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.METASPACE_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheapnewgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.NEWGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheapoldgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.OLDGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheapsurvivor.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheapsurvivor.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.OLDGEN_USAGE_VALUE)); - } else { - throw new UnexpectedException("unexpected metric type"); + for (String metricType : metricTypes) { + if (metricType.toLowerCase().equals(MetricType.cpu.name())) { + ICpuMetricDAO cpuMetricDAO = (ICpuMetricDAO)DAOContainer.INSTANCE.get(ICpuMetricDAO.class.getName()); + metrics.addProperty(MetricType.cpu.name(), cpuMetricDAO.getMetric(instanceId, timeBucket)); + } else if (metricType.toLowerCase().equals(MetricType.gc.name())) { + IGCMetricDAO gcMetricDAO = (IGCMetricDAO)DAOContainer.INSTANCE.get(IGCMetricDAO.class.getName()); + metrics.add(MetricType.gc.name(), gcMetricDAO.getMetric(instanceId, timeBucket)); + } else if (metricType.toLowerCase().equals(MetricType.tps.name())) { + IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); + metrics.addProperty(MetricType.tps.name(), instPerformanceDAO.getTpsMetric(instanceId, timeBucket)); + } else if (metricType.toLowerCase().equals(MetricType.resptime.name())) { + IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); + metrics.addProperty(MetricType.resptime.name(), instPerformanceDAO.getRespTimeMetric(instanceId, timeBucket)); + } else if (metricType.toLowerCase().equals(MetricType.heapmemory.name())) { + IMemoryMetricDAO memoryMetricDAO = (IMemoryMetricDAO)DAOContainer.INSTANCE.get(IMemoryMetricDAO.class.getName()); + metrics.add(MetricType.heapmemory.name(), memoryMetricDAO.getMetric(instanceId, timeBucket, true)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapmemory.name())) { + IMemoryMetricDAO memoryMetricDAO = (IMemoryMetricDAO)DAOContainer.INSTANCE.get(IMemoryMetricDAO.class.getName()); + metrics.add(MetricType.nonheapmemory.name(), memoryMetricDAO.getMetric(instanceId, timeBucket, false)); + } else if (metricType.toLowerCase().equals(MetricType.heappermgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heappermgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.PERMGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.heapmetaspace.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heapmetaspace.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.METASPACE_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.heapnewgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.NEWGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.heapoldgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heapoldgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.OLDGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.heapsurvivor.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heapsurvivor.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, true, PoolType.SURVIVOR_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheappermgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheappermgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.PERMGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapmetaspace.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheapmetaspace.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.METASPACE_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapnewgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.NEWGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapoldgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.OLDGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapsurvivor.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheapsurvivor.name(), memoryPoolMetricDAO.getMetric(instanceId, timeBucket, false, PoolType.OLDGEN_USAGE_VALUE)); + } else { + throw new UnexpectedException("unexpected metric type"); + } } return metrics; } @@ -93,59 +98,65 @@ public class InstanceJVMService { public JsonObject getInstanceJvmMetrics(int instanceId, Set metricTypes, long startTimeBucket, long endTimeBucket) { JsonObject metrics = new JsonObject(); - if (metricTypes.contains(MetricType.cpu.name())) { - ICpuMetricDAO cpuMetricDAO = (ICpuMetricDAO)DAOContainer.INSTANCE.get(ICpuMetricDAO.class.getName()); - metrics.add(MetricType.cpu.name(), cpuMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket)); - } else if (metricTypes.contains(MetricType.gc.name())) { - IGCMetricDAO gcMetricDAO = (IGCMetricDAO)DAOContainer.INSTANCE.get(IGCMetricDAO.class.getName()); - metrics.add(MetricType.gc.name(), gcMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket)); - } else if (metricTypes.contains(MetricType.tps.name())) { - IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); - metrics.add(MetricType.tps.name(), instPerformanceDAO.getMetric(instanceId, startTimeBucket, endTimeBucket)); - } else if (metricTypes.contains(MetricType.heapmemory.name())) { - IMemoryMetricDAO memoryMetricDAO = (IMemoryMetricDAO)DAOContainer.INSTANCE.get(IMemoryMetricDAO.class.getName()); - metrics.add(MetricType.heapmemory.name(), memoryMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true)); - } else if (metricTypes.contains(MetricType.nonheapmemory.name())) { - IMemoryMetricDAO memoryMetricDAO = (IMemoryMetricDAO)DAOContainer.INSTANCE.get(IMemoryMetricDAO.class.getName()); - metrics.add(MetricType.heapmemory.name(), memoryMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false)); - } else if (metricTypes.contains(MetricType.heappermgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heappermgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.PERMGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.heapmetaspace.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heapmetaspace.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.METASPACE_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.heapnewgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.NEWGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.heapoldgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heapoldgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.OLDGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.heapsurvivor.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.heapsurvivor.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.SURVIVOR_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheappermgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheappermgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.PERMGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheapmetaspace.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheapmetaspace.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.METASPACE_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheapnewgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.NEWGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheapoldgen.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.OLDGEN_USAGE_VALUE)); - } else if (metricTypes.contains(MetricType.nonheapsurvivor.name())) { - IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); - metrics.add(MetricType.nonheapsurvivor.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.OLDGEN_USAGE_VALUE)); - } else { - throw new UnexpectedException("unexpected metric type"); + for (String metricType : metricTypes) { + if (metricType.toLowerCase().equals(MetricType.cpu.name())) { + ICpuMetricDAO cpuMetricDAO = (ICpuMetricDAO)DAOContainer.INSTANCE.get(ICpuMetricDAO.class.getName()); + metrics.add(MetricType.cpu.name(), cpuMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket)); + } else if (metricType.toLowerCase().equals(MetricType.gc.name())) { + IGCMetricDAO gcMetricDAO = (IGCMetricDAO)DAOContainer.INSTANCE.get(IGCMetricDAO.class.getName()); + metrics.add(MetricType.gc.name(), gcMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket)); + } else if (metricType.toLowerCase().equals(MetricType.tps.name())) { + IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); + metrics.add(MetricType.tps.name(), instPerformanceDAO.getTpsMetric(instanceId, startTimeBucket, endTimeBucket)); + } else if (metricType.toLowerCase().equals(MetricType.resptime.name())) { + IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); + metrics.add(MetricType.resptime.name(), instPerformanceDAO.getRespTimeMetric(instanceId, startTimeBucket, endTimeBucket)); + } else if (metricType.toLowerCase().equals(MetricType.heapmemory.name())) { + IMemoryMetricDAO memoryMetricDAO = (IMemoryMetricDAO)DAOContainer.INSTANCE.get(IMemoryMetricDAO.class.getName()); + metrics.add(MetricType.heapmemory.name(), memoryMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapmemory.name())) { + IMemoryMetricDAO memoryMetricDAO = (IMemoryMetricDAO)DAOContainer.INSTANCE.get(IMemoryMetricDAO.class.getName()); + metrics.add(MetricType.nonheapmemory.name(), memoryMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false)); + } else if (metricType.toLowerCase().equals(MetricType.heappermgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heappermgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.PERMGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.heapmetaspace.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heapmetaspace.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.METASPACE_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.heapnewgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.NEWGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.heapoldgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heapoldgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.OLDGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.heapsurvivor.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.heapsurvivor.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, true, PoolType.SURVIVOR_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheappermgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheappermgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.PERMGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapmetaspace.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheapmetaspace.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.METASPACE_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapnewgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.NEWGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapoldgen.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheapnewgen.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.OLDGEN_USAGE_VALUE)); + } else if (metricType.toLowerCase().equals(MetricType.nonheapsurvivor.name())) { + IMemoryPoolMetricDAO memoryPoolMetricDAO = (IMemoryPoolMetricDAO)DAOContainer.INSTANCE.get(IMemoryPoolMetricDAO.class.getName()); + metrics.add(MetricType.nonheapsurvivor.name(), memoryPoolMetricDAO.getMetric(instanceId, startTimeBucket, endTimeBucket, false, PoolType.OLDGEN_USAGE_VALUE)); + } else { + throw new UnexpectedException("unexpected metric type"); + } } + return metrics; } public enum MetricType { - cpu, gc, tps, heapmemory, heappermgen, heapmetaspace, heapnewgen, + cpu, gc, tps, resptime, heapmemory, heappermgen, heapmetaspace, heapnewgen, heapoldgen, heapsurvivor, nonheapmemory, nonheappermgen, nonheapmetaspace, nonheapnewgen, nonheapoldgen, nonheapsurvivor } diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SegmentTopService.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SegmentTopService.java index 97958b48b..48ed414af 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SegmentTopService.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/service/SegmentTopService.java @@ -14,9 +14,9 @@ public class SegmentTopService { private final Logger logger = LoggerFactory.getLogger(SegmentTopService.class); public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, - String globalTraceId, int limit, int from) { + String globalTraceId, int limit, int from, ISegmentCostDAO.Sort sort) { logger.debug("startTime: {}, endTime: {}, minCost: {}, maxCost: {}, operationName: {}, globalTraceId: {}, limit: {}, from: {}", startTime, endTime, minCost, maxCost, operationName, globalTraceId, limit, from); ISegmentCostDAO segmentCostDAO = (ISegmentCostDAO)DAOContainer.INSTANCE.get(ISegmentCostDAO.class.getName()); - return segmentCostDAO.loadTop(startTime, endTime, minCost, maxCost, operationName, globalTraceId, limit, from); + return segmentCostDAO.loadTop(startTime, endTime, minCost, maxCost, operationName, globalTraceId, limit, from, sort); } } diff --git a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define index 6d5f760ce..554fbdddb 100644 --- a/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define +++ b/apm-collector/apm-collector-ui/src/main/resources/META-INF/defines/es_dao.define @@ -8,6 +8,9 @@ org.skywalking.apm.collector.ui.dao.ApplicationEsDAO org.skywalking.apm.collector.ui.dao.ServiceNameEsDAO org.skywalking.apm.collector.ui.dao.InstanceEsDAO org.skywalking.apm.collector.ui.dao.InstPerformanceEsDAO +org.skywalking.apm.collector.ui.dao.CpuMetricEsDAO org.skywalking.apm.collector.ui.dao.GCMetricEsDAO +org.skywalking.apm.collector.ui.dao.MemoryMetricEsDAO +org.skywalking.apm.collector.ui.dao.MemoryPoolMetricEsDAO org.skywalking.apm.collector.ui.dao.ServiceEntryEsDAO org.skywalking.apm.collector.ui.dao.ServiceReferenceEsDAO \ No newline at end of file