add TagTest and correctDateConf logic (#799)

This commit is contained in:
daikon
2024-03-09 09:19:51 +08:00
committed by GitHub
parent eeb54e0f73
commit f6ff0d19da
7 changed files with 88 additions and 20 deletions

View File

@@ -61,6 +61,8 @@ public class MetricResp extends SchemaItem {
private MetricDefineByMetricParams metricDefineByMetricParams; private MetricDefineByMetricParams metricDefineByMetricParams;
private int isTag;
public void setTag(String tag) { public void setTag(String tag) {
if (StringUtils.isBlank(tag)) { if (StringUtils.isBlank(tag)) {
tags = Lists.newArrayList(); tags = Lists.newArrayList();

View File

@@ -2,6 +2,8 @@ package com.tencent.supersonic.headless.server.pojo;
import java.util.List; import java.util.List;
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import lombok.Data; import lombok.Data;
@Data @Data
@@ -9,5 +11,6 @@ public class TagFilter extends MetaFilter {
private String type; private String type;
private List<Integer> statusList; private List<Integer> statusList;
private TagDefineType tagDefineType;
} }

View File

@@ -1,6 +1,7 @@
package com.tencent.supersonic.headless.server.pojo; package com.tencent.supersonic.headless.server.pojo;
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import com.tencent.supersonic.headless.api.pojo.request.PageSchemaItemReq; import com.tencent.supersonic.headless.api.pojo.request.PageSchemaItemReq;
import java.util.List; import java.util.List;
@@ -8,4 +9,5 @@ import java.util.List;
public class TagFilterPage extends PageSchemaItemReq { public class TagFilterPage extends PageSchemaItemReq {
private String type; private String type;
private List<Integer> statusList; private List<Integer> statusList;
private TagDefineType tagDefineType;
} }

View File

@@ -18,6 +18,7 @@ import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException;
import com.tencent.supersonic.common.util.ChatGptHelper; import com.tencent.supersonic.common.util.ChatGptHelper;
import com.tencent.supersonic.headless.api.pojo.DimValueMap; import com.tencent.supersonic.headless.api.pojo.DimValueMap;
import com.tencent.supersonic.headless.api.pojo.ModelDetail; import com.tencent.supersonic.headless.api.pojo.ModelDetail;
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import com.tencent.supersonic.headless.api.pojo.request.DimensionReq; import com.tencent.supersonic.headless.api.pojo.request.DimensionReq;
import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq; import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq;
import com.tencent.supersonic.headless.api.pojo.request.PageDimensionReq; import com.tencent.supersonic.headless.api.pojo.request.PageDimensionReq;
@@ -26,16 +27,19 @@ import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp;
import com.tencent.supersonic.headless.api.pojo.response.DimensionResp; import com.tencent.supersonic.headless.api.pojo.response.DimensionResp;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.api.pojo.response.TagResp;
import com.tencent.supersonic.headless.server.persistence.dataobject.DimensionDO; import com.tencent.supersonic.headless.server.persistence.dataobject.DimensionDO;
import com.tencent.supersonic.headless.server.persistence.repository.DimensionRepository; import com.tencent.supersonic.headless.server.persistence.repository.DimensionRepository;
import com.tencent.supersonic.headless.server.pojo.DimensionFilter; import com.tencent.supersonic.headless.server.pojo.DimensionFilter;
import com.tencent.supersonic.headless.server.pojo.DimensionsFilter; import com.tencent.supersonic.headless.server.pojo.DimensionsFilter;
import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.pojo.MetaFilter;
import com.tencent.supersonic.headless.server.pojo.TagFilter;
import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.DataSetService;
import com.tencent.supersonic.headless.server.service.DatabaseService; import com.tencent.supersonic.headless.server.service.DatabaseService;
import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.DimensionService;
import com.tencent.supersonic.headless.server.service.ModelRelaService; import com.tencent.supersonic.headless.server.service.ModelRelaService;
import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.ModelService;
import com.tencent.supersonic.headless.server.service.TagMetaService;
import com.tencent.supersonic.headless.server.utils.DimensionConverter; import com.tencent.supersonic.headless.server.utils.DimensionConverter;
import com.tencent.supersonic.headless.server.utils.NameCheckUtils; import com.tencent.supersonic.headless.server.utils.NameCheckUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -50,6 +54,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@@ -69,6 +74,8 @@ public class DimensionServiceImpl implements DimensionService {
private DataSetService dataSetService; private DataSetService dataSetService;
private TagMetaService tagMetaService;
@Autowired @Autowired
private ApplicationEventPublisher eventPublisher; private ApplicationEventPublisher eventPublisher;
@@ -78,13 +85,15 @@ public class DimensionServiceImpl implements DimensionService {
ChatGptHelper chatGptHelper, ChatGptHelper chatGptHelper,
DatabaseService databaseService, DatabaseService databaseService,
ModelRelaService modelRelaService, ModelRelaService modelRelaService,
DataSetService dataSetService) { DataSetService dataSetService,
TagMetaService tagMetaService) {
this.modelService = modelService; this.modelService = modelService;
this.dimensionRepository = dimensionRepository; this.dimensionRepository = dimensionRepository;
this.chatGptHelper = chatGptHelper; this.chatGptHelper = chatGptHelper;
this.databaseService = databaseService; this.databaseService = databaseService;
this.modelRelaService = modelRelaService; this.modelRelaService = modelRelaService;
this.dataSetService = dataSetService; this.dataSetService = dataSetService;
this.tagMetaService = tagMetaService;
} }
@Override @Override
@@ -280,9 +289,28 @@ public class DimensionServiceImpl implements DimensionService {
.convert2DimensionResp(dimensionDO, modelRespMap)) .convert2DimensionResp(dimensionDO, modelRespMap))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
fillTagInfo(dimensionResps);
return dimensionResps; return dimensionResps;
} }
private void fillTagInfo(List<DimensionResp> dimensionResps) {
if (CollectionUtils.isEmpty(dimensionResps)) {
return;
}
TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(TagDefineType.DIMENSION);
Map<String, TagResp> keyAndTagMap = tagMetaService.getTags(tagFilter).stream()
.collect(Collectors.toMap(tag -> tag.getModelId() + "_" + tag.getBizName(), tag -> tag));
if (Objects.nonNull(keyAndTagMap)) {
dimensionResps.stream().forEach(dim -> {
String key = dim.getModelId() + "_" + dim.getBizName();
if (keyAndTagMap.containsKey(key)) {
dim.setIsTag(1);
}
});
}
}
@Override @Override
public List<String> mockAlias(DimensionReq dimensionReq, String mockType, User user) { public List<String> mockAlias(DimensionReq dimensionReq, String mockType, User user) {
String mockAlias = chatGptHelper.mockAlias(mockType, dimensionReq.getName(), dimensionReq.getBizName(), String mockAlias = chatGptHelper.mockAlias(mockType, dimensionReq.getName(), dimensionReq.getBizName(),

View File

@@ -23,6 +23,7 @@ import com.tencent.supersonic.headless.api.pojo.MetricParam;
import com.tencent.supersonic.headless.api.pojo.MetricQueryDefaultConfig; import com.tencent.supersonic.headless.api.pojo.MetricQueryDefaultConfig;
import com.tencent.supersonic.headless.api.pojo.SchemaItem; import com.tencent.supersonic.headless.api.pojo.SchemaItem;
import com.tencent.supersonic.headless.api.pojo.enums.MetricDefineType; import com.tencent.supersonic.headless.api.pojo.enums.MetricDefineType;
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq; import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq;
import com.tencent.supersonic.headless.api.pojo.request.MetricBaseReq; import com.tencent.supersonic.headless.api.pojo.request.MetricBaseReq;
import com.tencent.supersonic.headless.api.pojo.request.MetricReq; import com.tencent.supersonic.headless.api.pojo.request.MetricReq;
@@ -33,6 +34,7 @@ import com.tencent.supersonic.headless.api.pojo.response.DataSetResp;
import com.tencent.supersonic.headless.api.pojo.response.DimensionResp; import com.tencent.supersonic.headless.api.pojo.response.DimensionResp;
import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.MetricResp;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
import com.tencent.supersonic.headless.api.pojo.response.TagResp;
import com.tencent.supersonic.headless.server.persistence.dataobject.CollectDO; import com.tencent.supersonic.headless.server.persistence.dataobject.CollectDO;
import com.tencent.supersonic.headless.server.persistence.dataobject.MetricDO; import com.tencent.supersonic.headless.server.persistence.dataobject.MetricDO;
import com.tencent.supersonic.headless.server.persistence.dataobject.MetricQueryDefaultConfigDO; import com.tencent.supersonic.headless.server.persistence.dataobject.MetricQueryDefaultConfigDO;
@@ -42,11 +44,13 @@ import com.tencent.supersonic.headless.server.pojo.MetaFilter;
import com.tencent.supersonic.headless.server.pojo.MetricFilter; import com.tencent.supersonic.headless.server.pojo.MetricFilter;
import com.tencent.supersonic.headless.server.pojo.MetricsFilter; import com.tencent.supersonic.headless.server.pojo.MetricsFilter;
import com.tencent.supersonic.headless.server.pojo.ModelCluster; import com.tencent.supersonic.headless.server.pojo.ModelCluster;
import com.tencent.supersonic.headless.server.pojo.TagFilter;
import com.tencent.supersonic.headless.server.service.CollectService; import com.tencent.supersonic.headless.server.service.CollectService;
import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.DataSetService;
import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.DimensionService;
import com.tencent.supersonic.headless.server.service.MetricService; import com.tencent.supersonic.headless.server.service.MetricService;
import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.ModelService;
import com.tencent.supersonic.headless.server.service.TagMetaService;
import com.tencent.supersonic.headless.server.utils.MetricCheckUtils; import com.tencent.supersonic.headless.server.utils.MetricCheckUtils;
import com.tencent.supersonic.headless.server.utils.MetricConverter; import com.tencent.supersonic.headless.server.utils.MetricConverter;
import com.tencent.supersonic.headless.server.utils.ModelClusterBuilder; import com.tencent.supersonic.headless.server.utils.ModelClusterBuilder;
@@ -64,6 +68,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -85,13 +90,16 @@ public class MetricServiceImpl implements MetricService {
private ApplicationEventPublisher eventPublisher; private ApplicationEventPublisher eventPublisher;
private TagMetaService tagMetaService;
public MetricServiceImpl(MetricRepository metricRepository, public MetricServiceImpl(MetricRepository metricRepository,
ModelService modelService, ModelService modelService,
ChatGptHelper chatGptHelper, ChatGptHelper chatGptHelper,
CollectService collectService, CollectService collectService,
DataSetService dataSetService, DataSetService dataSetService,
ApplicationEventPublisher eventPublisher, ApplicationEventPublisher eventPublisher,
DimensionService dimensionService) { DimensionService dimensionService,
TagMetaService tagMetaService) {
this.metricRepository = metricRepository; this.metricRepository = metricRepository;
this.modelService = modelService; this.modelService = modelService;
this.chatGptHelper = chatGptHelper; this.chatGptHelper = chatGptHelper;
@@ -99,6 +107,7 @@ public class MetricServiceImpl implements MetricService {
this.collectService = collectService; this.collectService = collectService;
this.dataSetService = dataSetService; this.dataSetService = dataSetService;
this.dimensionService = dimensionService; this.dimensionService = dimensionService;
this.tagMetaService = tagMetaService;
} }
@Override @Override
@@ -217,6 +226,7 @@ public class MetricServiceImpl implements MetricService {
BeanUtils.copyProperties(metricDOPageInfo, pageInfo); BeanUtils.copyProperties(metricDOPageInfo, pageInfo);
List<MetricResp> metricResps = convertList(metricDOPageInfo.getList(), collectIds); List<MetricResp> metricResps = convertList(metricDOPageInfo.getList(), collectIds);
fillAdminRes(metricResps, user); fillAdminRes(metricResps, user);
fillTagInfo(metricResps);
pageInfo.setList(metricResps); pageInfo.setList(metricResps);
return pageInfo; return pageInfo;
} }
@@ -240,6 +250,24 @@ public class MetricServiceImpl implements MetricService {
return metricResps; return metricResps;
} }
private void fillTagInfo(List<MetricResp> metricRespList) {
if (CollectionUtils.isEmpty(metricRespList)) {
return;
}
TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(TagDefineType.METRIC);
Map<String, TagResp> keyAndTagMap = tagMetaService.getTags(tagFilter).stream()
.collect(Collectors.toMap(tag -> tag.getModelId() + "_" + tag.getBizName(), tag -> tag));
if (Objects.nonNull(keyAndTagMap)) {
metricRespList.stream().forEach(metric -> {
String key = metric.getModelId() + "_" + metric.getBizName();
if (keyAndTagMap.containsKey(key)) {
metric.setIsTag(1);
}
});
}
}
private List<MetricResp> filterByField(List<MetricResp> metricResps, List<String> fields) { private List<MetricResp> filterByField(List<MetricResp> metricResps, List<String> fields) {
Set<MetricResp> metricRespFiltered = Sets.newHashSet(); Set<MetricResp> metricRespFiltered = Sets.newHashSet();
for (MetricResp metricResp : metricResps) { for (MetricResp metricResp : metricResps) {
@@ -450,6 +478,7 @@ public class MetricServiceImpl implements MetricService {
private List<MetricResp> convertList(List<MetricDO> metricDOS, List<Long> collect) { private List<MetricResp> convertList(List<MetricDO> metricDOS, List<Long> collect) {
List<MetricResp> metricResps = Lists.newArrayList(); List<MetricResp> metricResps = Lists.newArrayList();
Map<Long, ModelResp> modelMap = modelService.getModelMap(); Map<Long, ModelResp> modelMap = modelService.getModelMap();
if (!CollectionUtils.isEmpty(metricDOS)) { if (!CollectionUtils.isEmpty(metricDOS)) {
metricResps = metricDOS.stream() metricResps = metricDOS.stream()

View File

@@ -67,6 +67,9 @@
<if test="type != null and type != ''"> <if test="type != null and type != ''">
and type = #{type} and type = #{type}
</if> </if>
<if test="tagDefineType != null">
and define_type = #{tagDefineType}
</if>
<if test="key != null and key != ''"> <if test="key != null and key != ''">
and ( id like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or and ( id like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or

View File

@@ -69,8 +69,9 @@ public class MetricServiceImplTest {
ApplicationEventPublisher eventPublisher = Mockito.mock(ApplicationEventPublisher.class); ApplicationEventPublisher eventPublisher = Mockito.mock(ApplicationEventPublisher.class);
DataSetService dataSetService = Mockito.mock(DataSetServiceImpl.class); DataSetService dataSetService = Mockito.mock(DataSetServiceImpl.class);
DimensionService dimensionService = Mockito.mock(DimensionService.class); DimensionService dimensionService = Mockito.mock(DimensionService.class);
TagMetaService tagMetaService = Mockito.mock(TagMetaService.class);
return new MetricServiceImpl(metricRepository, modelService, chatGptHelper, collectService, dataSetService, return new MetricServiceImpl(metricRepository, modelService, chatGptHelper, collectService, dataSetService,
eventPublisher, dimensionService); eventPublisher, dimensionService, tagMetaService);
} }
private MetricReq buildMetricReq() { private MetricReq buildMetricReq() {