From e586d887edc7b2b965d9339caa8f932e8f5dbe57 Mon Sep 17 00:00:00 2001 From: lexluo09 <39718951+lexluo09@users.noreply.github.com> Date: Fri, 9 Aug 2024 20:23:14 +0800 Subject: [PATCH] (improvement)(chat) If no partition date is configured, remove the date passed from the frontend. (#1547) --- .../headless/server/pojo/ModelCluster.java | 5 ++++- .../server/service/impl/MetricServiceImpl.java | 11 ++++++++--- .../server/utils/ModelClusterBuilder.java | 18 ++++++++++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ModelCluster.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ModelCluster.java index 725632adf..63dd6aab8 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ModelCluster.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ModelCluster.java @@ -12,10 +12,13 @@ public class ModelCluster { private static final String split = "_"; private Set modelIds = new LinkedHashSet<>(); private String key; - public static ModelCluster build(Set modelIds) { + private boolean containsPartitionDimensions; + + public static ModelCluster build(Set modelIds, Boolean containsPartitionDimensions) { ModelCluster modelCluster = new ModelCluster(); modelCluster.setModelIds(modelIds); modelCluster.setKey(StringUtils.join(modelIds, split)); + modelCluster.setContainsPartitionDimensions(containsPartitionDimensions); return modelCluster; } } \ No newline at end of file diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java index 6a182180b..2e733f11b 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java @@ -13,6 +13,7 @@ import com.tencent.supersonic.common.pojo.Aggregator; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.DataEvent; import com.tencent.supersonic.common.pojo.DataItem; +import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.Filter; import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.pojo.enums.EventType; @@ -750,6 +751,9 @@ public class MetricServiceImpl extends ServiceImpl if (modelCluster == null) { throw new IllegalArgumentException("Invalid input parameters, unable to obtain valid metrics"); } + if (!modelCluster.isContainsPartitionDimensions()) { + queryMetricReq.setDateInfo(null); + } //4. set groups List dimensionBizNames = dimensionResps.stream() .filter(entry -> modelCluster.getModelIds().contains(entry.getModelId())) @@ -759,8 +763,9 @@ public class MetricServiceImpl extends ServiceImpl .map(SchemaItem::getBizName).collect(Collectors.toList()); QueryStructReq queryStructReq = new QueryStructReq(); - if (queryMetricReq.getDateInfo().isGroupByDate()) { - queryStructReq.getGroups().add(queryMetricReq.getDateInfo().getGroupByTimeDimension()); + DateConf dateInfo = queryMetricReq.getDateInfo(); + if (Objects.nonNull(dateInfo) && dateInfo.isGroupByDate()) { + queryStructReq.getGroups().add(dateInfo.getGroupByTimeDimension()); } if (!CollectionUtils.isEmpty(dimensionBizNames)) { queryStructReq.getGroups().addAll(dimensionBizNames); @@ -795,7 +800,7 @@ public class MetricServiceImpl extends ServiceImpl } queryStructReq.setDimensionFilters(filters); //7. set dateInfo - queryStructReq.setDateInfo(queryMetricReq.getDateInfo()); + queryStructReq.setDateInfo(dateInfo); return queryStructReq; } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelClusterBuilder.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelClusterBuilder.java index 161d34889..a808cd856 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelClusterBuilder.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelClusterBuilder.java @@ -5,10 +5,13 @@ import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.headless.api.pojo.response.ModelSchemaResp; import com.tencent.supersonic.headless.server.pojo.ModelCluster; import com.tencent.supersonic.headless.server.service.SchemaService; +import org.apache.commons.collections.CollectionUtils; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -29,12 +32,23 @@ public class ModelClusterBuilder { modelClusters.add(modelCluster); } } - return modelClusters.stream().map(ModelCluster::build) + + return modelClusters.stream() + .map(modelCluster -> getModelCluster(modelIdToModelSchema, modelCluster)) .collect(Collectors.toMap(ModelCluster::getKey, value -> value, (k1, k2) -> k1)); } + private static ModelCluster getModelCluster(Map modelIdToModelSchema, Set modelIds) { + boolean containsPartitionDimensions = modelIds.stream() + .map(modelIdToModelSchema::get) + .filter(Objects::nonNull) + .anyMatch(modelSchemaResp -> CollectionUtils.isNotEmpty(modelSchemaResp.getTimeDimension())); + + return ModelCluster.build(modelIds, containsPartitionDimensions); + } + private static void dfs(ModelSchemaResp model, Map modelMap, - Set visited, Set modelCluster) { + Set visited, Set modelCluster) { visited.add(model.getId()); modelCluster.add(model.getId()); for (Long neighborId : model.getModelClusterSet()) {