提交 3bde71ce 编写于 作者: 彭勇升 pengys 提交者: wu-sheng

Fixed/918 (#919)

* Fixed #918

* 1. Fixed the remote serialize exception bug when there was a null value in string array.
2. Fixed the topology null exception bug when source or target application id is 0.
上级 a5f634a6
......@@ -18,6 +18,8 @@
package org.apache.skywalking.apm.collector.remote.grpc.service;
import org.apache.skywalking.apm.collector.core.util.Const;
import org.apache.skywalking.apm.collector.core.util.StringUtils;
import org.apache.skywalking.apm.collector.remote.grpc.proto.RemoteData;
import org.apache.skywalking.apm.collector.remote.service.RemoteSerializeService;
......@@ -29,7 +31,11 @@ public class GRPCRemoteSerializeService implements RemoteSerializeService<Remote
@Override public RemoteData.Builder serialize(org.apache.skywalking.apm.collector.core.data.RemoteData data) {
RemoteData.Builder builder = RemoteData.newBuilder();
for (int i = 0; i < data.getDataStringsCount(); i++) {
builder.addDataStrings(data.getDataString(i));
if (StringUtils.isNotEmpty(data.getDataString(i))) {
builder.addDataStrings(data.getDataString(i));
} else {
builder.addDataStrings(Const.EMPTY_STRING);
}
}
for (int i = 0; i < data.getDataIntegersCount(); i++) {
builder.addDataIntegers(data.getDataInteger(i));
......
......@@ -160,7 +160,7 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO {
@Override
public List<AppServerInfo> searchServer(String keyword, long startSecondTimeBucket, long endSecondTimeBucket) {
logger.debug("get instances info, keyword: {}, start: {}, end: {}", keyword, startSecondTimeBucket, endSecondTimeBucket);
logger.debug("get instances info, keyword: {}, startSecondTimeBucket: {}, endSecondTimeBucket: {}", keyword, startSecondTimeBucket, endSecondTimeBucket);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE);
searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
......@@ -172,7 +172,6 @@ public class InstanceEsUIDAO extends EsDAO implements IInstanceUIDAO {
}
boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_IS_ADDRESS, BooleanUtils.FALSE));
//TODO second
BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery();
timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_REGISTER_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket));
timeBoolQuery.should().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(startSecondTimeBucket).lte(endSecondTimeBucket));
......
......@@ -21,6 +21,7 @@ package org.apache.skywalking.apm.collector.storage.es.dao.ui;
import java.util.LinkedList;
import java.util.List;
import org.apache.skywalking.apm.collector.client.elasticsearch.ElasticSearchClient;
import org.apache.skywalking.apm.collector.core.util.StringUtils;
import org.apache.skywalking.apm.collector.storage.dao.ui.IServiceNameServiceUIDAO;
import org.apache.skywalking.apm.collector.storage.es.base.dao.EsDAO;
import org.apache.skywalking.apm.collector.storage.table.register.ServiceNameTable;
......@@ -59,11 +60,14 @@ public class ServiceNameServiceEsUIDAO extends EsDAO implements IServiceNameServ
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setSize(topN);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_SERVICE_NAME, keyword));
boolQuery.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, SpanType.Entry_VALUE));
searchRequestBuilder.setQuery(boolQuery);
if (StringUtils.isNotEmpty(keyword)) {
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.matchQuery(ServiceNameTable.COLUMN_SERVICE_NAME, keyword));
boolQuery.must().add(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, SpanType.Entry_VALUE));
searchRequestBuilder.setQuery(boolQuery);
} else {
searchRequestBuilder.setQuery(QueryBuilders.termQuery(ServiceNameTable.COLUMN_SRC_SPAN_TYPE, SpanType.Entry_VALUE));
}
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
SearchHit[] searchHits = searchResponse.getHits().getHits();
......
......@@ -77,6 +77,9 @@ class TopologyBuilder {
Map<Integer, String> components = changeNodeComp2Map(applicationComponents);
Map<Integer, Integer> mappings = changeMapping2Map(applicationMappings);
filterZeroSourceOrTargetReference(callerReferenceMetric);
filterZeroSourceOrTargetReference(calleeReferenceMetric);
calleeReferenceMetric = calleeReferenceMetricFilter(calleeReferenceMetric);
List<Node> nodes = new LinkedList<>();
......@@ -124,20 +127,24 @@ class TopologyBuilder {
});
List<Call> calls = new LinkedList<>();
Set<Integer> nodeIds = new HashSet<>();
callerReferenceMetric.forEach(referenceMetric -> {
Application source = applicationCacheService.getApplicationById(referenceMetric.getSource());
Application target = applicationCacheService.getApplicationById(referenceMetric.getTarget());
if (BooleanUtils.valueToBoolean(target.getIsAddress()) && !mappings.containsKey(target.getApplicationId())) {
ConjecturalNode conjecturalNode = new ConjecturalNode();
conjecturalNode.setId(target.getApplicationId());
conjecturalNode.setName(target.getApplicationCode());
conjecturalNode.setType(components.getOrDefault(target.getApplicationId(), Const.UNKNOWN));
nodes.add(conjecturalNode);
if (!nodeIds.contains(target.getApplicationId())) {
ConjecturalNode conjecturalNode = new ConjecturalNode();
conjecturalNode.setId(target.getApplicationId());
conjecturalNode.setName(target.getApplicationCode());
conjecturalNode.setType(components.getOrDefault(target.getApplicationId(), Const.UNKNOWN));
nodes.add(conjecturalNode);
nodeIds.add(target.getApplicationId());
}
}
Set<Integer> nodeIds = buildNodeIds(nodes);
if (!nodeIds.contains(source.getApplicationId())) {
Set<Integer> applicationNodeIds = buildNodeIds(nodes);
if (!applicationNodeIds.contains(source.getApplicationId())) {
ApplicationNode applicationNode = new ApplicationNode();
applicationNode.setId(source.getApplicationId());
applicationNode.setName(source.getApplicationCode());
......@@ -170,19 +177,25 @@ class TopologyBuilder {
Application target = applicationCacheService.getApplicationById(referenceMetric.getTarget());
if (source.getApplicationId() == Const.NONE_APPLICATION_ID) {
VisualUserNode visualUserNode = new VisualUserNode();
visualUserNode.setId(source.getApplicationId());
visualUserNode.setName(Const.USER_CODE);
visualUserNode.setType(Const.USER_CODE.toUpperCase());
nodes.add(visualUserNode);
if (!nodeIds.contains(source.getApplicationId())) {
VisualUserNode visualUserNode = new VisualUserNode();
visualUserNode.setId(source.getApplicationId());
visualUserNode.setName(Const.USER_CODE);
visualUserNode.setType(Const.USER_CODE.toUpperCase());
nodes.add(visualUserNode);
nodeIds.add(source.getApplicationId());
}
}
if (BooleanUtils.valueToBoolean(source.getIsAddress())) {
ConjecturalNode conjecturalNode = new ConjecturalNode();
conjecturalNode.setId(source.getApplicationId());
conjecturalNode.setName(source.getApplicationCode());
conjecturalNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN));
nodes.add(conjecturalNode);
if (!nodeIds.contains(source.getApplicationId())) {
ConjecturalNode conjecturalNode = new ConjecturalNode();
conjecturalNode.setId(source.getApplicationId());
conjecturalNode.setName(source.getApplicationCode());
conjecturalNode.setType(components.getOrDefault(source.getApplicationId(), Const.UNKNOWN));
nodeIds.add(source.getApplicationId());
nodes.add(conjecturalNode);
}
}
Call call = new Call();
......@@ -248,4 +261,14 @@ class TopologyBuilder {
});
return components;
}
private void filterZeroSourceOrTargetReference(
List<IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric> referenceMetric) {
for (int i = referenceMetric.size() - 1; i >= 0; i--) {
IApplicationReferenceMetricUIDAO.ApplicationReferenceMetric applicationReferenceMetric = referenceMetric.get(i);
if (applicationReferenceMetric.getSource() == 0 || applicationReferenceMetric.getTarget() == 0) {
referenceMetric.remove(i);
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册