提交 bdf29e5a 编写于 作者: P pengys5

Jvm metric test success.

#365
上级 9b970184
...@@ -78,14 +78,34 @@ public class JVMMetricsServiceHandlerTestCase { ...@@ -78,14 +78,34 @@ public class JVMMetricsServiceHandlerTestCase {
} }
private static void buildMemoryPoolMetric(JVMMetric.Builder jvmMetric) { private static void buildMemoryPoolMetric(JVMMetric.Builder jvmMetric) {
MemoryPool.Builder builder_1 = MemoryPool.newBuilder(); jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.NEWGEN_USAGE, true).build());
builder_1.setType(PoolType.NEWGEN_USAGE); jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.NEWGEN_USAGE, false).build());
builder_1.setIsHeap(true);
builder_1.setInit(20); jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.OLDGEN_USAGE, true).build());
builder_1.setMax(100); jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.OLDGEN_USAGE, false).build());
builder_1.setUsed(50);
builder_1.setCommited(30); jvmMetric.addMemoryPool(buildMemoryPoolMetric(PoolType.METASPACE_USAGE, true).build());
jvmMetric.addMemoryPool(builder_1.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) { private static void buildGcMetric(JVMMetric.Builder jvmMetric) {
......
package org.skywalking.apm.collector.agentstream.worker.segment.cost.define; 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.ElasticSearchColumnDefine;
import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine; import org.skywalking.apm.collector.storage.elasticsearch.define.ElasticSearchTableDefine;
import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable;
/** /**
* @author pengys5 * @author pengys5
...@@ -27,7 +27,7 @@ public class SegmentCostEsTableDefine extends ElasticSearchTableDefine { ...@@ -27,7 +27,7 @@ public class SegmentCostEsTableDefine extends ElasticSearchTableDefine {
@Override public void initialize() { @Override public void initialize() {
addColumn(new ElasticSearchColumnDefine(SegmentCostTable.COLUMN_SEGMENT_ID, ElasticSearchColumnDefine.Type.Keyword.name())); 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_COST, ElasticSearchColumnDefine.Type.Long.name()));
addColumn(new ElasticSearchColumnDefine(SegmentCostTable.COLUMN_START_TIME, 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())); addColumn(new ElasticSearchColumnDefine(SegmentCostTable.COLUMN_END_TIME, ElasticSearchColumnDefine.Type.Long.name()));
......
...@@ -28,9 +28,9 @@ public class SegmentPost { ...@@ -28,9 +28,9 @@ public class SegmentPost {
InstanceEsDAO instanceEsDAO = new InstanceEsDAO(); InstanceEsDAO instanceEsDAO = new InstanceEsDAO();
instanceEsDAO.setClient(client); 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); 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); instanceEsDAO.save(providerInstance);
ApplicationEsDAO applicationEsDAO = new ApplicationEsDAO(); ApplicationEsDAO applicationEsDAO = new ApplicationEsDAO();
...@@ -64,10 +64,13 @@ public class SegmentPost { ...@@ -64,10 +64,13 @@ public class SegmentPost {
modifyTime(provider); modifyTime(provider);
HttpClientTools.INSTANCE.post("http://localhost:12800/segments", provider.toString()); HttpClientTools.INSTANCE.post("http://localhost:12800/segments", provider.toString());
diff = 0;
Thread.sleep(1000); Thread.sleep(1000);
} }
} }
private static long diff = 0;
private static void modifyTime(JsonElement jsonElement) { private static void modifyTime(JsonElement jsonElement) {
JsonArray segmentArray = jsonElement.getAsJsonArray(); JsonArray segmentArray = jsonElement.getAsJsonArray();
for (JsonElement element : segmentArray) { for (JsonElement element : segmentArray) {
...@@ -76,10 +79,28 @@ public class SegmentPost { ...@@ -76,10 +79,28 @@ public class SegmentPost {
for (JsonElement span : spans) { for (JsonElement span : spans) {
long startTime = span.getAsJsonObject().get("st").getAsLong(); long startTime = span.getAsJsonObject().get("st").getAsLong();
long endTime = span.getAsJsonObject().get("et").getAsLong(); long endTime = span.getAsJsonObject().get("et").getAsLong();
long currentTime = System.currentTimeMillis();
span.getAsJsonObject().addProperty("st", currentTime); if (diff == 0) {
span.getAsJsonObject().addProperty("et", currentTime + (endTime - startTime)); 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;
}
} }
...@@ -40,8 +40,8 @@ ...@@ -40,8 +40,8 @@
"tv": 0, "tv": 0,
"lv": 2, "lv": 2,
"ps": -1, "ps": -1,
"st": 1501858094883, "st": 1501858094726,
"et": 1501858096950, "et": 1501858096804,
"ci": 3, "ci": 3,
"cn": "", "cn": "",
"oi": 0, "oi": 0,
......
...@@ -53,7 +53,12 @@ public class ElasticSearchStorageInstaller extends StorageInstaller { ...@@ -53,7 +53,12 @@ public class ElasticSearchStorageInstaller extends StorageInstaller {
return Settings.builder() return Settings.builder()
.put("index.number_of_shards", tableDefine.numberOfShards()) .put("index.number_of_shards", tableDefine.numberOfShards())
.put("index.number_of_replicas", tableDefine.numberOfReplicas()) .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 { private XContentBuilder createMappingBuilder(ElasticSearchTableDefine tableDefine) throws IOException {
......
...@@ -16,7 +16,6 @@ import org.elasticsearch.search.aggregations.AggregationBuilders; ...@@ -16,7 +16,6 @@ import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.skywalking.apm.collector.core.util.Const; 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.define.jvm.GCMetricTable;
import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
import org.skywalking.apm.network.proto.GCPhrase; import org.skywalking.apm.network.proto.GCPhrase;
...@@ -92,8 +91,8 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { ...@@ -92,8 +91,8 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO {
MultiGetRequestBuilder youngPrepareMultiGet = getClient().prepareMultiGet(); MultiGetRequestBuilder youngPrepareMultiGet = getClient().prepareMultiGet();
int i = 0; int i = 0;
do { do {
String youngId = (startTimeBucket + i) + Const.ID_SPLIT + GCPhrase.NEW_VALUE + instanceId; String youngId = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.NEW_VALUE;
youngPrepareMultiGet.add(CpuMetricTable.TABLE, CpuMetricTable.TABLE_TYPE, youngId); youngPrepareMultiGet.add(GCMetricTable.TABLE, GCMetricTable.TABLE_TYPE, youngId);
i++; i++;
} }
while (startTimeBucket + i <= endTimeBucket); while (startTimeBucket + i <= endTimeBucket);
...@@ -102,7 +101,7 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { ...@@ -102,7 +101,7 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO {
MultiGetResponse multiGetResponse = youngPrepareMultiGet.get(); MultiGetResponse multiGetResponse = youngPrepareMultiGet.get();
for (MultiGetItemResponse itemResponse : multiGetResponse.getResponses()) { for (MultiGetItemResponse itemResponse : multiGetResponse.getResponses()) {
if (itemResponse.getResponse().isExists()) { 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 { } else {
youngArray.add(0); youngArray.add(0);
} }
...@@ -112,8 +111,8 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { ...@@ -112,8 +111,8 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO {
MultiGetRequestBuilder oldPrepareMultiGet = getClient().prepareMultiGet(); MultiGetRequestBuilder oldPrepareMultiGet = getClient().prepareMultiGet();
i = 0; i = 0;
do { do {
String oldId = (startTimeBucket + i) + Const.ID_SPLIT + GCPhrase.OLD_VALUE + instanceId; String oldId = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.OLD_VALUE;
oldPrepareMultiGet.add(CpuMetricTable.TABLE, CpuMetricTable.TABLE_TYPE, oldId); oldPrepareMultiGet.add(GCMetricTable.TABLE, GCMetricTable.TABLE_TYPE, oldId);
i++; i++;
} }
while (startTimeBucket + i <= endTimeBucket); while (startTimeBucket + i <= endTimeBucket);
...@@ -123,7 +122,7 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO { ...@@ -123,7 +122,7 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO {
multiGetResponse = oldPrepareMultiGet.get(); multiGetResponse = oldPrepareMultiGet.get();
for (MultiGetItemResponse itemResponse : multiGetResponse.getResponses()) { for (MultiGetItemResponse itemResponse : multiGetResponse.getResponses()) {
if (itemResponse.getResponse().isExists()) { 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 { } else {
oldArray.add(0); oldArray.add(0);
} }
......
...@@ -9,9 +9,13 @@ import java.util.List; ...@@ -9,9 +9,13 @@ import java.util.List;
public interface IInstPerformanceDAO { public interface IInstPerformanceDAO {
List<InstPerformance> getMultiple(long timeBucket, int applicationId); List<InstPerformance> 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 { class InstPerformance {
private final int instanceId; private final int instanceId;
......
...@@ -7,5 +7,9 @@ import com.google.gson.JsonObject; ...@@ -7,5 +7,9 @@ import com.google.gson.JsonObject;
*/ */
public interface ISegmentCostDAO { public interface ISegmentCostDAO {
JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, 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
}
} }
...@@ -18,7 +18,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms; ...@@ -18,7 +18,6 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.sum.Sum; import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.skywalking.apm.collector.core.util.Const; import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.storage.define.instance.InstPerformanceTable; 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; import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
/** /**
...@@ -68,7 +67,7 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { ...@@ -68,7 +67,7 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO {
return instPerformances; 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; String id = timeBucket + Const.ID_SPLIT + instanceId;
GetResponse getResponse = getClient().prepareGet(InstPerformanceTable.TABLE, id).get(); GetResponse getResponse = getClient().prepareGet(InstPerformanceTable.TABLE, id).get();
...@@ -78,13 +77,13 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { ...@@ -78,13 +77,13 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO {
return 0; 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(); MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet();
int i = 0; int i = 0;
do { do {
String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId; 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++; i++;
} }
while (startTimeBucket + i <= endTimeBucket); while (startTimeBucket + i <= endTimeBucket);
...@@ -100,4 +99,41 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO { ...@@ -100,4 +99,41 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO {
} }
return metrics; 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;
}
} }
...@@ -13,11 +13,19 @@ public class InstPerformanceH2DAO extends H2DAO implements IInstPerformanceDAO { ...@@ -13,11 +13,19 @@ public class InstPerformanceH2DAO extends H2DAO implements IInstPerformanceDAO {
return null; return null;
} }
@Override public int getMetric(int instanceId, long timeBucket) { @Override public int getTpsMetric(int instanceId, long timeBucket) {
return 0; 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; return null;
} }
} }
...@@ -44,9 +44,7 @@ public class MemoryMetricEsDAO extends EsDAO implements IMemoryMetricDAO { ...@@ -44,9 +44,7 @@ public class MemoryMetricEsDAO extends EsDAO implements IMemoryMetricDAO {
while (startTimeBucket + i <= endTimeBucket); while (startTimeBucket + i <= endTimeBucket);
JsonObject metric = new JsonObject(); JsonObject metric = new JsonObject();
JsonArray usedMetric = new JsonArray(); JsonArray usedMetric = new JsonArray();
MultiGetResponse multiGetResponse = prepareMultiGet.get(); MultiGetResponse multiGetResponse = prepareMultiGet.get();
for (MultiGetItemResponse response : multiGetResponse.getResponses()) { for (MultiGetItemResponse response : multiGetResponse.getResponses()) {
if (response.getResponse().isExists()) { if (response.getResponse().isExists()) {
...@@ -57,6 +55,7 @@ public class MemoryMetricEsDAO extends EsDAO implements IMemoryMetricDAO { ...@@ -57,6 +55,7 @@ public class MemoryMetricEsDAO extends EsDAO implements IMemoryMetricDAO {
usedMetric.add(0); usedMetric.add(0);
} }
} }
metric.add("used", usedMetric);
return metric; return metric;
} }
} }
...@@ -45,9 +45,7 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO ...@@ -45,9 +45,7 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO
while (startTimeBucket + i <= endTimeBucket); while (startTimeBucket + i <= endTimeBucket);
JsonObject metric = new JsonObject(); JsonObject metric = new JsonObject();
JsonArray usedMetric = new JsonArray(); JsonArray usedMetric = new JsonArray();
MultiGetResponse multiGetResponse = prepareMultiGet.get(); MultiGetResponse multiGetResponse = prepareMultiGet.get();
for (MultiGetItemResponse response : multiGetResponse.getResponses()) { for (MultiGetItemResponse response : multiGetResponse.getResponses()) {
if (response.getResponse().isExists()) { if (response.getResponse().isExists()) {
...@@ -58,6 +56,7 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO ...@@ -58,6 +56,7 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO
usedMetric.add(0); usedMetric.add(0);
} }
} }
metric.add("used", usedMetric);
return metric; return metric;
} }
} }
...@@ -15,9 +15,9 @@ import org.elasticsearch.search.sort.SortOrder; ...@@ -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.CollectionUtils;
import org.skywalking.apm.collector.core.util.StringUtils; import org.skywalking.apm.collector.core.util.StringUtils;
import org.skywalking.apm.collector.storage.dao.DAOContainer; 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.global.GlobalTraceTable;
import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable; import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable;
import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
/** /**
* @author pengys5 * @author pengys5
...@@ -25,7 +25,7 @@ import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable; ...@@ -25,7 +25,7 @@ import org.skywalking.apm.collector.storage.define.segment.SegmentCostTable;
public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO { public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO {
@Override public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, @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 searchRequestBuilder = getClient().prepareSearch(SegmentCostTable.TABLE);
searchRequestBuilder.setTypes(SegmentCostTable.TABLE_TYPE); searchRequestBuilder.setTypes(SegmentCostTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
...@@ -48,7 +48,11 @@ public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO { ...@@ -48,7 +48,11 @@ public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO {
mustQueryList.add(QueryBuilders.matchQuery(SegmentCostTable.COLUMN_SERVICE_NAME, operationName)); 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.setSize(limit);
searchRequestBuilder.setFrom(from); searchRequestBuilder.setFrom(from);
......
...@@ -8,7 +8,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO; ...@@ -8,7 +8,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
*/ */
public class SegmentCostH2DAO extends H2DAO implements ISegmentCostDAO { public class SegmentCostH2DAO extends H2DAO implements ISegmentCostDAO {
@Override public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, @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; return null;
} }
} }
...@@ -37,7 +37,7 @@ public class ServiceEntryEsDAO extends EsDAO implements IServiceEntryDAO { ...@@ -37,7 +37,7 @@ public class ServiceEntryEsDAO extends EsDAO implements IServiceEntryDAO {
boolQueryBuilder.must().add(QueryBuilders.matchQuery(ServiceEntryTable.COLUMN_APPLICATION_ID, applicationId)); boolQueryBuilder.must().add(QueryBuilders.matchQuery(ServiceEntryTable.COLUMN_APPLICATION_ID, applicationId));
} }
if (StringUtils.isNotEmpty(entryServiceName)) { 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); searchRequestBuilder.setQuery(boolQueryBuilder);
......
...@@ -17,6 +17,9 @@ import org.skywalking.apm.collector.ui.jetty.handler.TraceStackGetHandler; ...@@ -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.UIJettyServerHandler;
import org.skywalking.apm.collector.ui.jetty.handler.application.ApplicationsGetHandler; 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.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.EntryServiceGetHandler;
import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetHandler;
import org.skywalking.apm.collector.ui.jetty.handler.time.AllInstanceLastTimeGetHandler; import org.skywalking.apm.collector.ui.jetty.handler.time.AllInstanceLastTimeGetHandler;
...@@ -64,6 +67,9 @@ public class UIJettyModuleDefine extends UIModuleDefine { ...@@ -64,6 +67,9 @@ public class UIJettyModuleDefine extends UIModuleDefine {
handlers.add(new AllInstanceLastTimeGetHandler()); handlers.add(new AllInstanceLastTimeGetHandler());
handlers.add(new InstanceHealthGetHandler()); handlers.add(new InstanceHealthGetHandler());
handlers.add(new ApplicationsGetHandler()); handlers.add(new ApplicationsGetHandler());
handlers.add(new InstanceOsInfoGetHandler());
handlers.add(new InstanceMetricGetOneTimeBucketHandler());
handlers.add(new InstanceMetricGetRangeTimeBucketHandler());
handlers.add(new EntryServiceGetHandler()); handlers.add(new EntryServiceGetHandler());
handlers.add(new ServiceTreeGetHandler()); handlers.add(new ServiceTreeGetHandler());
return handlers; return handlers;
......
...@@ -4,6 +4,7 @@ import com.google.gson.JsonElement; ...@@ -4,6 +4,7 @@ import com.google.gson.JsonElement;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.skywalking.apm.collector.server.jetty.ArgumentsParseException; import org.skywalking.apm.collector.server.jetty.ArgumentsParseException;
import org.skywalking.apm.collector.server.jetty.JettyHandler; 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.skywalking.apm.collector.ui.service.SegmentTopService;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -77,7 +78,15 @@ public class SegmentTopGetHandler extends JettyHandler { ...@@ -77,7 +78,15 @@ public class SegmentTopGetHandler extends JettyHandler {
operationName = req.getParameter("operationName"); 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 { @Override protected JsonElement doPost(HttpServletRequest req) throws ArgumentsParseException {
......
...@@ -24,13 +24,13 @@ public class InstanceHealthGetHandler extends JettyHandler { ...@@ -24,13 +24,13 @@ public class InstanceHealthGetHandler extends JettyHandler {
private InstanceHealthService service = new InstanceHealthService(); private InstanceHealthService service = new InstanceHealthService();
@Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException {
String timestampStr = req.getParameter("timestamp"); String timeBucketStr = req.getParameter("timeBucket");
String[] applicationIdsStr = req.getParameterValues("applicationIds"); 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 { try {
timestamp = Long.parseLong(timestampStr); timeBucket = Long.parseLong(timeBucketStr);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
throw new ArgumentsParseException("timestamp must be long"); throw new ArgumentsParseException("timestamp must be long");
} }
...@@ -45,12 +45,12 @@ public class InstanceHealthGetHandler extends JettyHandler { ...@@ -45,12 +45,12 @@ public class InstanceHealthGetHandler extends JettyHandler {
} }
JsonObject response = new JsonObject(); JsonObject response = new JsonObject();
response.addProperty("timestamp", timestamp); response.addProperty("timeBucket", timeBucket);
JsonArray appInstances = new JsonArray(); JsonArray appInstances = new JsonArray();
response.add("appInstances", appInstances); response.add("appInstances", appInstances);
for (int applicationId : applicationIds) { for (int applicationId : applicationIds) {
appInstances.add(service.getInstances(timestamp, applicationId)); appInstances.add(service.getInstances(timeBucket, applicationId));
} }
return response; return response;
} }
......
...@@ -23,18 +23,18 @@ public class OneInstanceLastTimeGetHandler extends JettyHandler { ...@@ -23,18 +23,18 @@ public class OneInstanceLastTimeGetHandler extends JettyHandler {
private TimeSynchronousService service = new TimeSynchronousService(); private TimeSynchronousService service = new TimeSynchronousService();
@Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException { @Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException {
String applicationInstanceIdStr = req.getParameter("applicationInstanceId"); String instanceIdStr = req.getParameter("instanceId");
logger.debug("applicationInstanceId: {}", applicationInstanceIdStr); logger.debug("instanceId: {}", instanceIdStr);
int applicationInstanceId; int instanceId;
try { try {
applicationInstanceId = Integer.parseInt(applicationInstanceIdStr); instanceId = Integer.parseInt(instanceIdStr);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
throw new ArgumentsParseException("application instance id must be integer"); throw new ArgumentsParseException("application instance id must be integer");
} }
Long time = service.instanceLastTime(applicationInstanceId); Long time = service.instanceLastTime(instanceId);
logger.debug("application instance id: {}, instance last time: {}", applicationInstanceId, time); logger.debug("application instance id: {}, instance last time: {}", instanceId, time);
JsonObject timeJson = new JsonObject(); JsonObject timeJson = new JsonObject();
timeJson.addProperty("timeBucket", time); timeJson.addProperty("timeBucket", time);
return timeJson; return timeJson;
......
...@@ -18,11 +18,10 @@ public class InstanceHealthService { ...@@ -18,11 +18,10 @@ public class InstanceHealthService {
private final Logger logger = LoggerFactory.getLogger(InstanceHealthService.class); 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(); JsonObject response = new JsonObject();
long secondTimeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(timestamp); long s5TimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(timeBucket);
long s5TimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(secondTimeBucket);
IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName()); IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName());
List<IInstPerformanceDAO.InstPerformance> performances = instPerformanceDAO.getMultiple(s5TimeBucket, applicationId); List<IInstPerformanceDAO.InstPerformance> performances = instPerformanceDAO.getMultiple(s5TimeBucket, applicationId);
......
...@@ -14,9 +14,9 @@ public class SegmentTopService { ...@@ -14,9 +14,9 @@ public class SegmentTopService {
private final Logger logger = LoggerFactory.getLogger(SegmentTopService.class); private final Logger logger = LoggerFactory.getLogger(SegmentTopService.class);
public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName, 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); 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()); 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);
} }
} }
...@@ -8,6 +8,9 @@ org.skywalking.apm.collector.ui.dao.ApplicationEsDAO ...@@ -8,6 +8,9 @@ org.skywalking.apm.collector.ui.dao.ApplicationEsDAO
org.skywalking.apm.collector.ui.dao.ServiceNameEsDAO org.skywalking.apm.collector.ui.dao.ServiceNameEsDAO
org.skywalking.apm.collector.ui.dao.InstanceEsDAO org.skywalking.apm.collector.ui.dao.InstanceEsDAO
org.skywalking.apm.collector.ui.dao.InstPerformanceEsDAO 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.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.ServiceEntryEsDAO
org.skywalking.apm.collector.ui.dao.ServiceReferenceEsDAO org.skywalking.apm.collector.ui.dao.ServiceReferenceEsDAO
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册