From cd78b93029c62d28af0ce63480c0e397bedd1925 Mon Sep 17 00:00:00 2001 From: pengys5 <8082209@qq.com> Date: Sat, 9 Sep 2017 20:42:43 +0800 Subject: [PATCH] service reference merge id and name row --- .../ui/dao/ServiceReferenceEsDAO.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java index e10b99c5f..fa5c4c25f 100644 --- a/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java +++ b/apm-collector/apm-collector-ui/src/main/java/org/skywalking/apm/collector/ui/dao/ServiceReferenceEsDAO.java @@ -2,6 +2,8 @@ package org.skywalking.apm.collector.ui.dao; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import java.util.LinkedHashMap; +import java.util.Map; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; @@ -132,6 +134,8 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO private void parseSubAggregate(JsonArray serviceReferenceArray, Terms.Bucket frontServiceBucket, int frontServiceId) { + Map serviceReferenceMap = new LinkedHashMap<>(); + Terms behindServiceIdTerms = frontServiceBucket.getAggregations().get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID); for (Terms.Bucket behindServiceIdBucket : behindServiceIdTerms.getBuckets()) { int behindServiceId = behindServiceIdBucket.getKeyAsNumber().intValue(); @@ -165,7 +169,7 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), (long)error.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), (long)summary.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), (long)costSum.getValue()); - serviceReferenceArray.add(serviceReference); + merge(serviceReferenceMap, serviceReference); } } @@ -198,8 +202,33 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), (long)error.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), (long)summary.getValue()); serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), (long)costSum.getValue()); - serviceReferenceArray.add(serviceReference); + merge(serviceReferenceMap, serviceReference); } } + + serviceReferenceMap.values().forEach(serviceReferenceArray::add); + } + + private void merge(Map serviceReferenceMap, JsonObject serviceReference) { + String id = serviceReference.get(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID) + Const.ID_SPLIT + serviceReference.get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID); + + if (serviceReferenceMap.containsKey(id)) { + JsonObject reference = serviceReferenceMap.get(id); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S1_LTE)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S3_LTE)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_LTE)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_GT)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY)); + add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY)); + } else { + serviceReferenceMap.put(id, serviceReference); + } + } + + private void add(JsonObject oldReference, JsonObject newReference, String key) { + long oldValue = oldReference.get(key).getAsLong(); + long newValue = newReference.get(key).getAsLong(); + oldReference.addProperty(key, oldValue + newValue); } }