(improvement)(Headless) Modify metric category name, add information about whether metrics and dimensions are tags in fetchDataSetSchema (#857)

This commit is contained in:
lexluo09
2024-03-25 15:37:11 +08:00
committed by GitHub
parent aa5f3c9a83
commit f6aefe2fb0
17 changed files with 127 additions and 86 deletions

View File

@@ -23,20 +23,22 @@ public class MetricBaseReq extends SchemaItem {
private DataFormat dataFormat; private DataFormat dataFormat;
private List<String> tags; private List<String> classifications;
private RelateDimension relateDimension; private RelateDimension relateDimension;
private int isTag;
private Map<String, Object> ext = new HashMap<>(); private Map<String, Object> ext = new HashMap<>();
public String getTag() { public String getClassifications() {
if (tags == null) { if (classifications == null) {
return null; return null;
} }
if (CollectionUtils.isEmpty(tags)) { if (CollectionUtils.isEmpty(classifications)) {
return ""; return "";
} }
return StringUtils.join(tags, ","); return StringUtils.join(classifications, ",");
} }
} }

View File

@@ -43,7 +43,7 @@ public class MetricResp extends SchemaItem {
private String alias; private String alias;
private List<String> tags; private List<String> classifications;
private RelateDimension relateDimension; private RelateDimension relateDimension;
@@ -63,11 +63,11 @@ public class MetricResp extends SchemaItem {
private int isTag; private int isTag;
public void setTag(String tag) { public void setClassifications(String tag) {
if (StringUtils.isBlank(tag)) { if (StringUtils.isBlank(tag)) {
tags = Lists.newArrayList(); classifications = Lists.newArrayList();
} else { } else {
tags = Arrays.asList(tag.split(",")); classifications = Arrays.asList(tag.split(","));
} }
} }

View File

@@ -87,7 +87,7 @@ public class MetricDO {
/** /**
* *
*/ */
private String tags; private String classifications;
/** /**
* *

View File

@@ -2,9 +2,11 @@ package com.tencent.supersonic.headless.server.service;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import com.tencent.supersonic.headless.api.pojo.request.TagDeleteReq; import com.tencent.supersonic.headless.api.pojo.request.TagDeleteReq;
import com.tencent.supersonic.headless.api.pojo.request.TagFilterPageReq; import com.tencent.supersonic.headless.api.pojo.request.TagFilterPageReq;
import com.tencent.supersonic.headless.api.pojo.request.TagReq; import com.tencent.supersonic.headless.api.pojo.request.TagReq;
import com.tencent.supersonic.headless.api.pojo.response.TagItem;
import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp;
import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO; import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
import com.tencent.supersonic.headless.server.pojo.TagFilter; import com.tencent.supersonic.headless.server.pojo.TagFilter;
@@ -28,4 +30,6 @@ public interface TagMetaService {
List<TagDO> getTagDOList(TagFilter tagFilter, User user); List<TagDO> getTagDOList(TagFilter tagFilter, User user);
PageInfo<TagResp> queryTagMarketPage(TagFilterPageReq tagMarketPageReq, User user); PageInfo<TagResp> queryTagMarketPage(TagFilterPageReq tagMarketPageReq, User user);
List<TagItem> getTagItems(User user, List<Long> itemIds, TagDefineType tagDefineType);
} }

View File

@@ -26,22 +26,13 @@ import com.tencent.supersonic.headless.api.pojo.response.DomainResp;
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.TagItem; import com.tencent.supersonic.headless.api.pojo.response.TagItem;
import com.tencent.supersonic.headless.server.persistence.dataobject.DataSetDO; import com.tencent.supersonic.headless.server.persistence.dataobject.DataSetDO;
import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
import com.tencent.supersonic.headless.server.persistence.mapper.DataSetDOMapper; import com.tencent.supersonic.headless.server.persistence.mapper.DataSetDOMapper;
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.DimensionService; import com.tencent.supersonic.headless.server.service.DimensionService;
import com.tencent.supersonic.headless.server.service.DomainService; import com.tencent.supersonic.headless.server.service.DomainService;
import com.tencent.supersonic.headless.server.service.MetricService; import com.tencent.supersonic.headless.server.service.MetricService;
import com.tencent.supersonic.headless.server.service.TagMetaService; import com.tencent.supersonic.headless.server.service.TagMetaService;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
@@ -52,6 +43,13 @@ import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@Service @Service
public class DataSetServiceImpl public class DataSetServiceImpl
@@ -164,21 +162,6 @@ public class DataSetServiceImpl
domainIds.contains(dataSetResp.getDomainId())).collect(Collectors.toList()); domainIds.contains(dataSetResp.getDomainId())).collect(Collectors.toList());
} }
private List<TagItem> getTagItems(User user, List<Long> dimensionIds, TagDefineType tagDefineType) {
TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(tagDefineType);
tagFilter.setItemIds(dimensionIds);
Set<Long> dimensionItemSet = tagMetaService.getTagDOList(tagFilter, user).stream().map(TagDO::getItemId)
.collect(Collectors.toSet());
return dimensionIds.stream().map(entry -> {
TagItem tagItem = new TagItem();
tagItem.setIsTag(Boolean.compare(dimensionItemSet.contains(entry), false));
tagItem.setItemId(entry);
return tagItem;
}
).collect(Collectors.toList());
}
private DataSetResp convert(DataSetDO dataSetDO, User user) { private DataSetResp convert(DataSetDO dataSetDO, User user) {
DataSetResp dataSetResp = new DataSetResp(); DataSetResp dataSetResp = new DataSetResp();
BeanMapper.mapper(dataSetDO, dataSetResp); BeanMapper.mapper(dataSetDO, dataSetResp);
@@ -191,10 +174,11 @@ public class DataSetServiceImpl
dataSetResp.setAdminOrgs(StringUtils.isBlank(dataSetDO.getAdminOrg()) dataSetResp.setAdminOrgs(StringUtils.isBlank(dataSetDO.getAdminOrg())
? Lists.newArrayList() : Arrays.asList(dataSetDO.getAdminOrg().split(","))); ? Lists.newArrayList() : Arrays.asList(dataSetDO.getAdminOrg().split(",")));
dataSetResp.setTypeEnum(TypeEnums.DATASET); dataSetResp.setTypeEnum(TypeEnums.DATASET);
List<TagItem> dimensionItems = getTagItems(user, dataSetResp.dimensionIds(), TagDefineType.DIMENSION); List<TagItem> dimensionItems = tagMetaService.getTagItems(user, dataSetResp.dimensionIds(),
TagDefineType.DIMENSION);
dataSetResp.setAllDimensions(dimensionItems); dataSetResp.setAllDimensions(dimensionItems);
List<TagItem> metricItems = getTagItems(user, dataSetResp.metricIds(), TagDefineType.METRIC); List<TagItem> metricItems = tagMetaService.getTagItems(user, dataSetResp.metricIds(), TagDefineType.METRIC);
dataSetResp.setAllMetrics(metricItems); dataSetResp.setAllMetrics(metricItems);
return dataSetResp; return dataSetResp;
} }

View File

@@ -27,6 +27,7 @@ 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.TagItem;
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.dataobject.TagDO; import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
import com.tencent.supersonic.headless.server.persistence.repository.DimensionRepository; import com.tencent.supersonic.headless.server.persistence.repository.DimensionRepository;
@@ -240,6 +241,22 @@ public class DimensionServiceImpl implements DimensionService {
BeanUtils.copyProperties(metaFilter, dimensionFilter); BeanUtils.copyProperties(metaFilter, dimensionFilter);
List<DimensionDO> dimensionDOS = dimensionRepository.getDimension(dimensionFilter); List<DimensionDO> dimensionDOS = dimensionRepository.getDimension(dimensionFilter);
List<DimensionResp> dimensionResps = convertList(dimensionDOS, modelService.getModelMap()); List<DimensionResp> dimensionResps = convertList(dimensionDOS, modelService.getModelMap());
List<Long> dimensionIds = dimensionResps.stream().map(dimensionResp -> dimensionResp.getId())
.collect(Collectors.toList());
List<TagItem> tagItems = tagMetaService.getTagItems(User.getFakeUser(), dimensionIds, TagDefineType.METRIC);
Map<Long, TagItem> itemIdToTagItem = tagItems.stream()
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag));
if (Objects.nonNull(itemIdToTagItem)) {
dimensionResps.stream().forEach(metricResp -> {
Long metricRespId = metricResp.getId();
if (itemIdToTagItem.containsKey(metricRespId)) {
metricResp.setIsTag(itemIdToTagItem.get(metricRespId).getIsTag());
}
});
}
if (!CollectionUtils.isEmpty(metaFilter.getFieldsDepend())) { if (!CollectionUtils.isEmpty(metaFilter.getFieldsDepend())) {
return filterByField(dimensionResps, metaFilter.getFieldsDepend()); return filterByField(dimensionResps, metaFilter.getFieldsDepend());
} }

View File

@@ -34,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.TagItem;
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;
@@ -240,6 +241,20 @@ public class MetricServiceImpl implements MetricService {
MetricFilter metricFilter = new MetricFilter(); MetricFilter metricFilter = new MetricFilter();
BeanUtils.copyProperties(metaFilter, metricFilter); BeanUtils.copyProperties(metaFilter, metricFilter);
List<MetricResp> metricResps = convertList(queryMetric(metricFilter)); List<MetricResp> metricResps = convertList(queryMetric(metricFilter));
List<Long> metricIds = metricResps.stream().map(metricResp -> metricResp.getId()).collect(Collectors.toList());
List<TagItem> tagItems = tagMetaService.getTagItems(User.getFakeUser(), metricIds, TagDefineType.METRIC);
Map<Long, TagItem> itemIdToTagItem = tagItems.stream()
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag));
if (Objects.nonNull(itemIdToTagItem)) {
metricResps.stream().forEach(metricResp -> {
Long metricRespId = metricResp.getId();
if (itemIdToTagItem.containsKey(metricRespId)) {
metricResp.setIsTag(itemIdToTagItem.get(metricRespId).getIsTag());
}
});
}
if (!CollectionUtils.isEmpty(metaFilter.getFieldsDepend())) { if (!CollectionUtils.isEmpty(metaFilter.getFieldsDepend())) {
return filterByField(metricResps, metaFilter.getFieldsDepend()); return filterByField(metricResps, metaFilter.getFieldsDepend());
} }
@@ -254,6 +269,7 @@ public class MetricServiceImpl implements MetricService {
if (CollectionUtils.isEmpty(metricRespList)) { if (CollectionUtils.isEmpty(metricRespList)) {
return; return;
} }
TagFilter tagFilter = new TagFilter(); TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(TagDefineType.METRIC); tagFilter.setTagDefineType(TagDefineType.METRIC);
List<Long> metricIds = metricRespList.stream().map(metric -> metric.getId()) List<Long> metricIds = metricRespList.stream().map(metric -> metric.getId())
@@ -391,7 +407,7 @@ public class MetricServiceImpl implements MetricService {
return new HashSet<>(); return new HashSet<>();
} }
return metricResps.stream().flatMap(metricResp -> return metricResps.stream().flatMap(metricResp ->
metricResp.getTags().stream()).collect(Collectors.toSet()); metricResp.getClassifications().stream()).collect(Collectors.toSet());
} }
@Override @Override

View File

@@ -15,6 +15,7 @@ import com.tencent.supersonic.headless.api.pojo.response.DimensionResp;
import com.tencent.supersonic.headless.api.pojo.response.DomainResp; import com.tencent.supersonic.headless.api.pojo.response.DomainResp;
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.TagItem;
import com.tencent.supersonic.headless.api.pojo.response.TagObjectResp; import com.tencent.supersonic.headless.api.pojo.response.TagObjectResp;
import com.tencent.supersonic.headless.api.pojo.response.TagResp; 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;
@@ -155,10 +156,10 @@ public class TagMetaServiceImpl implements TagMetaService {
TagFilter tagFilter = new TagFilter(); TagFilter tagFilter = new TagFilter();
BeanUtils.copyProperties(tagMarketPageReq, tagFilter); BeanUtils.copyProperties(tagMarketPageReq, tagFilter);
List<CollectDO> collectList = collectService.getCollectList(user.getName()); List<CollectDO> collectList = collectService.getCollectList(user.getName());
if (tagMarketPageReq.isHasCollect()) {
List<Long> collectIds = collectList.stream() List<Long> collectIds = collectList.stream()
.filter(collectDO -> SchemaElementType.TAG.name().equalsIgnoreCase(collectDO.getType())) .filter(collectDO -> SchemaElementType.TAG.name().equalsIgnoreCase(collectDO.getType()))
.map(CollectDO::getCollectId).collect(Collectors.toList()); .map(CollectDO::getCollectId).collect(Collectors.toList());
if (tagMarketPageReq.isHasCollect()) {
if (CollectionUtils.isEmpty(collectIds)) { if (CollectionUtils.isEmpty(collectIds)) {
tagFilter.setIds(Lists.newArrayList(-1L)); tagFilter.setIds(Lists.newArrayList(-1L));
} else { } else {
@@ -364,4 +365,19 @@ public class TagMetaServiceImpl implements TagMetaService {
tagDO.setType(tagReq.getTagDefineType().name()); tagDO.setType(tagReq.getTagDefineType().name());
return tagDO; return tagDO;
} }
public List<TagItem> getTagItems(User user, List<Long> itemIds, TagDefineType tagDefineType) {
TagFilter tagFilter = new TagFilter();
tagFilter.setTagDefineType(tagDefineType);
tagFilter.setItemIds(itemIds);
Set<Long> dimensionItemSet = getTagDOList(tagFilter, user).stream().map(TagDO::getItemId)
.collect(Collectors.toSet());
return itemIds.stream().map(entry -> {
TagItem tagItem = new TagItem();
tagItem.setIsTag(Boolean.compare(dimensionItemSet.contains(entry), false));
tagItem.setItemId(entry);
return tagItem;
}
).collect(Collectors.toList());
}
} }

View File

@@ -31,7 +31,7 @@ public class MetricConverter {
metricDO.setType(metricReq.getMetricType().name()); metricDO.setType(metricReq.getMetricType().name());
metricDO.setTypeParams(metricReq.getTypeParamsJson()); metricDO.setTypeParams(metricReq.getTypeParamsJson());
metricDO.setDataFormat(JSONObject.toJSONString(metricReq.getDataFormat())); metricDO.setDataFormat(JSONObject.toJSONString(metricReq.getDataFormat()));
metricDO.setTags(metricReq.getTag()); metricDO.setClassifications(metricReq.getClassifications());
metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension())); metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension()));
metricDO.setStatus(StatusEnum.ONLINE.getCode()); metricDO.setStatus(StatusEnum.ONLINE.getCode());
metricDO.setExt(JSONObject.toJSONString(metricReq.getExt())); metricDO.setExt(JSONObject.toJSONString(metricReq.getExt()));
@@ -48,8 +48,8 @@ public class MetricConverter {
if (metricReq.getRelateDimension() != null) { if (metricReq.getRelateDimension() != null) {
metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension())); metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension()));
} }
if (metricReq.getTag() != null) { if (metricReq.getClassifications() != null) {
metricDO.setTags(metricReq.getTag()); metricDO.setClassifications(metricReq.getClassifications());
} }
if (metricReq.getExt() != null) { if (metricReq.getExt() != null) {
metricDO.setExt(JSONObject.toJSONString(metricReq.getExt())); metricDO.setExt(JSONObject.toJSONString(metricReq.getExt()));
@@ -76,7 +76,7 @@ public class MetricConverter {
metricResp.setDomainId(modelResp.getDomainId()); metricResp.setDomainId(modelResp.getDomainId());
} }
metricResp.setIsCollect(collect != null && collect.contains(metricDO.getId())); metricResp.setIsCollect(collect != null && collect.contains(metricDO.getId()));
metricResp.setTag(metricDO.getTags()); metricResp.setClassifications(metricDO.getClassifications());
metricResp.setRelateDimension(JSONObject.parseObject(metricDO.getRelateDimensions(), metricResp.setRelateDimension(JSONObject.parseObject(metricDO.getRelateDimensions(),
RelateDimension.class)); RelateDimension.class));
if (metricDO.getExt() != null) { if (metricDO.getExt() != null) {

View File

@@ -19,7 +19,7 @@
<result column="data_format_type" jdbcType="VARCHAR" property="dataFormatType"/> <result column="data_format_type" jdbcType="VARCHAR" property="dataFormatType"/>
<result column="data_format" jdbcType="VARCHAR" property="dataFormat"/> <result column="data_format" jdbcType="VARCHAR" property="dataFormat"/>
<result column="alias" jdbcType="VARCHAR" property="alias"/> <result column="alias" jdbcType="VARCHAR" property="alias"/>
<result column="tags" jdbcType="VARCHAR" property="tags"/> <result column="classifications" jdbcType="VARCHAR" property="classifications"/>
<result column="define_type" jdbcType="VARCHAR" property="defineType"/> <result column="define_type" jdbcType="VARCHAR" property="defineType"/>
</resultMap> </resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs"
@@ -60,7 +60,7 @@
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id id
, model_id, name, biz_name, description, status, sensitive_level, type, created_at, , model_id, name, biz_name, description, status, sensitive_level, type, created_at,
created_by, updated_at, updated_by, data_format_type, data_format, alias, tags, define_type created_by, updated_at, updated_by, data_format_type, data_format, alias, classifications, define_type
</sql> </sql>
<sql id="Blob_Column_List"> <sql id="Blob_Column_List">
type_params type_params
@@ -110,7 +110,7 @@
biz_name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or biz_name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
description like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or description like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
alias like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or alias like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
tags like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or classifications like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
created_by like CONCAT('%',#{key , jdbcType=VARCHAR},'%') ) created_by like CONCAT('%',#{key , jdbcType=VARCHAR},'%') )
</if> </if>
<if test="id != null"> <if test="id != null">

View File

@@ -1,5 +1,8 @@
package com.tencent.supersonic.headless.server.service; package com.tencent.supersonic.headless.server.service;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.DataFormat; import com.tencent.supersonic.common.pojo.DataFormat;
@@ -22,16 +25,12 @@ import com.tencent.supersonic.headless.server.persistence.repository.MetricRepos
import com.tencent.supersonic.headless.server.service.impl.DataSetServiceImpl; import com.tencent.supersonic.headless.server.service.impl.DataSetServiceImpl;
import com.tencent.supersonic.headless.server.service.impl.MetricServiceImpl; import com.tencent.supersonic.headless.server.service.impl.MetricServiceImpl;
import com.tencent.supersonic.headless.server.utils.MetricConverter; import com.tencent.supersonic.headless.server.utils.MetricConverter;
import java.util.HashMap;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import java.util.HashMap;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
public class MetricServiceImplTest { public class MetricServiceImplTest {
@Test @Test
@@ -94,7 +93,7 @@ public class MetricServiceImplTest {
new MeasureParam("s2_uv", "department='hr'"))); new MeasureParam("s2_uv", "department='hr'")));
typeParams.setExpr("s2_pv/s2_uv"); typeParams.setExpr("s2_pv/s2_uv");
metricReq.setMetricDefineByMeasureParams(typeParams); metricReq.setMetricDefineByMeasureParams(typeParams);
metricReq.setTags(Lists.newArrayList("核心指标")); metricReq.setClassifications(Lists.newArrayList("核心指标"));
metricReq.setRelateDimension( metricReq.setRelateDimension(
RelateDimension.builder().drillDownDimensions(Lists.newArrayList( RelateDimension.builder().drillDownDimensions(Lists.newArrayList(
new DrillDownDimension(1L), new DrillDownDimension(1L),
@@ -125,7 +124,7 @@ public class MetricServiceImplTest {
new MeasureParam("s2_uv", "department='hr'"))); new MeasureParam("s2_uv", "department='hr'")));
typeParams.setExpr("s2_pv/s2_uv"); typeParams.setExpr("s2_pv/s2_uv");
metricResp.setMetricDefineByMeasureParams(typeParams); metricResp.setMetricDefineByMeasureParams(typeParams);
metricResp.setTags(Lists.newArrayList("核心指标")); metricResp.setClassifications("核心指标");
metricResp.setRelateDimension( metricResp.setRelateDimension(
RelateDimension.builder().drillDownDimensions(Lists.newArrayList( RelateDimension.builder().drillDownDimensions(Lists.newArrayList(
new DrillDownDimension(1L), new DrillDownDimension(1L),

View File

@@ -114,7 +114,7 @@ CREATE TABLE IF NOT EXISTS `s2_metric` (
`data_format_type` varchar(50) DEFAULT NULL , `data_format_type` varchar(50) DEFAULT NULL ,
`data_format` varchar(500) DEFAULT NULL, `data_format` varchar(500) DEFAULT NULL,
`alias` varchar(500) DEFAULT NULL, `alias` varchar(500) DEFAULT NULL,
`tags` varchar(500) DEFAULT NULL, `classifications` varchar(500) DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL, `relate_dimensions` varchar(500) DEFAULT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
); );

View File

@@ -411,7 +411,7 @@ public class ModelDemoDataLoader {
metricReq.setBizName("stay_hours"); metricReq.setBizName("stay_hours");
metricReq.setSensitiveLevel(SensitiveLevelEnum.HIGH.getCode()); metricReq.setSensitiveLevel(SensitiveLevelEnum.HIGH.getCode());
metricReq.setDescription("停留时长"); metricReq.setDescription("停留时长");
metricReq.setTags(Collections.singletonList("核心指标")); metricReq.setClassifications(Collections.singletonList("核心指标"));
metricReq.setAlias("访问时长"); metricReq.setAlias("访问时长");
MetricDefineByMeasureParams metricTypeParams = new MetricDefineByMeasureParams(); MetricDefineByMeasureParams metricTypeParams = new MetricDefineByMeasureParams();
metricTypeParams.setExpr("s2_stay_time_statis_stay_hours"); metricTypeParams.setExpr("s2_stay_time_statis_stay_hours");
@@ -476,7 +476,7 @@ public class ModelDemoDataLoader {
metricReq.setBizName("pv_avg"); metricReq.setBizName("pv_avg");
metricReq.setSensitiveLevel(SensitiveLevelEnum.HIGH.getCode()); metricReq.setSensitiveLevel(SensitiveLevelEnum.HIGH.getCode());
metricReq.setDescription("每个用户平均访问的次数"); metricReq.setDescription("每个用户平均访问的次数");
metricReq.setTags(Collections.singletonList("核心指标")); metricReq.setClassifications(Collections.singletonList("核心指标"));
metricReq.setAlias("平均访问次数"); metricReq.setAlias("平均访问次数");
MetricDefineByMetricParams metricTypeParams = new MetricDefineByMetricParams(); MetricDefineByMetricParams metricTypeParams = new MetricDefineByMetricParams();
metricTypeParams.setExpr("pv/uv"); metricTypeParams.setExpr("pv/uv");

View File

@@ -286,3 +286,6 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` (
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
); );
COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; COMMENT ON TABLE s2_query_rule IS 'tag query rule table';
--20240325
ALTER TABLE s2_metric RENAME COLUMN tags TO classifications;

View File

@@ -186,7 +186,7 @@ CREATE TABLE IF NOT EXISTS `s2_metric` (
`data_format_type` varchar(50) DEFAULT NULL , `data_format_type` varchar(50) DEFAULT NULL ,
`data_format` varchar(500) DEFAULT NULL, `data_format` varchar(500) DEFAULT NULL,
`alias` varchar(500) DEFAULT NULL, `alias` varchar(500) DEFAULT NULL,
`tags` varchar(500) DEFAULT NULL, `classifications` varchar(500) DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL, `relate_dimensions` varchar(500) DEFAULT NULL,
`ext` LONGVARCHAR DEFAULT NULL , `ext` LONGVARCHAR DEFAULT NULL ,
`define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC `define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC

View File

@@ -291,7 +291,7 @@ CREATE TABLE `s2_metric`
`data_format_type` varchar(50) DEFAULT NULL COMMENT '数值类型', `data_format_type` varchar(50) DEFAULT NULL COMMENT '数值类型',
`data_format` varchar(500) DEFAULT NULL COMMENT '数值类型参数', `data_format` varchar(500) DEFAULT NULL COMMENT '数值类型参数',
`alias` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `alias` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`tags` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `classifications` varchar(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL COMMENT '指标相关维度', `relate_dimensions` varchar(500) DEFAULT NULL COMMENT '指标相关维度',
`ext` text DEFAULT NULL, `ext` text DEFAULT NULL,
`define_type` varchar(50) DEFAULT NULL, -- MEASURE, FIELD, METRIC `define_type` varchar(50) DEFAULT NULL, -- MEASURE, FIELD, METRIC

View File

@@ -186,7 +186,7 @@ CREATE TABLE IF NOT EXISTS `s2_metric` (
`data_format_type` varchar(50) DEFAULT NULL , `data_format_type` varchar(50) DEFAULT NULL ,
`data_format` varchar(500) DEFAULT NULL, `data_format` varchar(500) DEFAULT NULL,
`alias` varchar(500) DEFAULT NULL, `alias` varchar(500) DEFAULT NULL,
`tags` varchar(500) DEFAULT NULL, `classifications` varchar(500) DEFAULT NULL,
`relate_dimensions` varchar(500) DEFAULT NULL, `relate_dimensions` varchar(500) DEFAULT NULL,
`ext` LONGVARCHAR DEFAULT NULL , `ext` LONGVARCHAR DEFAULT NULL ,
`define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC `define_type` varchar(50) NOT NULL, -- MEASURE, FIELD, METRIC