(improvement)(semantic) save metric default query config (#503)

Co-authored-by: jolunoluo
This commit is contained in:
LXW
2023-12-13 21:29:15 +08:00
committed by GitHub
parent 2c7afd0d55
commit f89be48e98
24 changed files with 255 additions and 84 deletions

View File

@@ -43,7 +43,6 @@ import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -183,12 +182,6 @@ public class DimensionServiceImpl implements DimensionService {
return null;
}
@Override
public DimensionResp getDimension(Long id) {
DimensionDO dimensionDO = dimensionRepository.getDimensionById(id);
return DimensionConverter.convert2DimensionResp(dimensionDO, new HashMap<>());
}
@Override
public PageInfo<DimensionResp> queryDimension(PageDimensionReq pageDimensionReq) {
DimensionFilter dimensionFilter = new DimensionFilter();
@@ -211,7 +204,8 @@ public class DimensionServiceImpl implements DimensionService {
public List<DimensionResp> getDimensions(MetaFilter metaFilter) {
DimensionFilter dimensionFilter = new DimensionFilter();
BeanUtils.copyProperties(metaFilter, dimensionFilter);
return convertList(dimensionRepository.getDimension(dimensionFilter), modelService.getModelMap());
List<DimensionDO> dimensionDOS = dimensionRepository.getDimension(dimensionFilter);
return convertList(dimensionDOS, modelService.getModelMap());
}
private List<DimensionResp> getDimensions(Long modelId) {
@@ -238,7 +232,8 @@ public class DimensionServiceImpl implements DimensionService {
List<DimensionResp> dimensionResps = Lists.newArrayList();
if (!CollectionUtils.isEmpty(dimensionDOS)) {
dimensionResps = dimensionDOS.stream()
.map(dimensionDO -> DimensionConverter.convert2DimensionResp(dimensionDO, modelRespMap))
.map(dimensionDO -> DimensionConverter
.convert2DimensionResp(dimensionDO, modelRespMap))
.collect(Collectors.toList());
}
return dimensionResps;

View File

@@ -13,9 +13,11 @@ import com.tencent.supersonic.common.pojo.enums.EventType;
import com.tencent.supersonic.common.pojo.enums.StatusEnum;
import com.tencent.supersonic.common.pojo.enums.TypeEnums;
import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException;
import com.tencent.supersonic.common.util.BeanMapper;
import com.tencent.supersonic.common.util.ChatGptHelper;
import com.tencent.supersonic.semantic.api.model.pojo.DrillDownDimension;
import com.tencent.supersonic.semantic.api.model.pojo.Measure;
import com.tencent.supersonic.semantic.api.model.pojo.MetricQueryDefaultConfig;
import com.tencent.supersonic.semantic.api.model.pojo.MetricTypeParams;
import com.tencent.supersonic.semantic.api.model.request.MetaBatchReq;
import com.tencent.supersonic.semantic.api.model.request.MetricReq;
@@ -29,6 +31,7 @@ import com.tencent.supersonic.semantic.model.domain.MetricService;
import com.tencent.supersonic.semantic.model.domain.ModelService;
import com.tencent.supersonic.semantic.model.domain.dataobject.CollectDO;
import com.tencent.supersonic.semantic.model.domain.dataobject.MetricDO;
import com.tencent.supersonic.semantic.model.domain.dataobject.MetricQueryDefaultConfigDO;
import com.tencent.supersonic.semantic.model.domain.pojo.MetaFilter;
import com.tencent.supersonic.semantic.model.domain.pojo.MetricFilter;
import com.tencent.supersonic.semantic.model.domain.repository.MetricRepository;
@@ -291,6 +294,29 @@ public class MetricServiceImpl implements MetricService {
return metricDOS.stream().map(this::getDataItem).collect(Collectors.toList());
}
@Override
public void saveOrUpdateMetricQueryDefaultConfig(MetricQueryDefaultConfig queryDefaultConfig, User user) {
MetricQueryDefaultConfigDO metricQueryDefaultConfigDO = new MetricQueryDefaultConfigDO();
if (queryDefaultConfig.getId() == null) {
queryDefaultConfig.createdBy(user.getName());
BeanMapper.mapper(queryDefaultConfig, metricQueryDefaultConfigDO);
metricRepository.saveDefaultQueryConfig(metricQueryDefaultConfigDO);
} else {
queryDefaultConfig.updatedBy(user.getName());
BeanMapper.mapper(queryDefaultConfig, metricQueryDefaultConfigDO);
metricRepository.updateDefaultQueryConfig(metricQueryDefaultConfigDO);
}
}
@Override
public MetricQueryDefaultConfig getMetricQueryDefaultConfig(Long metricId, User user) {
MetricQueryDefaultConfigDO metricQueryDefaultConfigDO =
metricRepository.getDefaultQueryConfig(metricId, user.getName());
MetricQueryDefaultConfig metricQueryDefaultConfig = new MetricQueryDefaultConfig();
BeanMapper.mapper(metricQueryDefaultConfigDO, metricQueryDefaultConfig);
return metricQueryDefaultConfig;
}
private void checkParam(MetricReq metricReq) {
MetricTypeParams typeParams = metricReq.getTypeParams();
List<Measure> measures = typeParams.getMeasures();

View File

@@ -211,8 +211,8 @@ public class ModelServiceImpl implements ModelService {
.stream().map(measure -> ModelConverter.convert(measure, modelResp))).collect(Collectors.toList());
}
private void batchCreateDimension(ModelDO datasourceDO, User user) throws Exception {
List<DimensionReq> dimensionReqs = ModelConverter.convertDimensionList(datasourceDO);
private void batchCreateDimension(ModelDO modelDO, User user) throws Exception {
List<DimensionReq> dimensionReqs = ModelConverter.convertDimensionList(modelDO);
dimensionService.createDimensionBatch(dimensionReqs, user);
}

View File

@@ -17,8 +17,6 @@ public interface DimensionService {
List<DimensionResp> getDimensions(MetaFilter metaFilter);
DimensionResp getDimension(Long id);
DimensionResp getDimension(String bizName, Long modelId);
void batchUpdateStatus(MetaBatchReq metaBatchReq, User user);

View File

@@ -5,6 +5,7 @@ import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.DataItem;
import com.tencent.supersonic.common.pojo.enums.EventType;
import com.tencent.supersonic.semantic.api.model.pojo.DrillDownDimension;
import com.tencent.supersonic.semantic.api.model.pojo.MetricQueryDefaultConfig;
import com.tencent.supersonic.semantic.api.model.request.MetaBatchReq;
import com.tencent.supersonic.semantic.api.model.request.MetricReq;
import com.tencent.supersonic.semantic.api.model.request.PageMetricReq;
@@ -41,5 +42,9 @@ public interface MetricService {
List<DataItem> getDataItems(Long modelId);
void saveOrUpdateMetricQueryDefaultConfig(MetricQueryDefaultConfig queryDefaultConfig, User user);
MetricQueryDefaultConfig getMetricQueryDefaultConfig(Long metricId, User user);
void sendMetricEventBatch(List<Long> modelIds, EventType eventType);
}

View File

@@ -98,4 +98,6 @@ public class MetricDO {
*/
private String typeParams;
private String ext;
}

View File

@@ -0,0 +1,33 @@
package com.tencent.supersonic.semantic.model.domain.dataobject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Data
@TableName("s2_metric_query_default_config")
public class MetricQueryDefaultConfigDO {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private Long metricId;
private String userName;
private String defaultConfig;
private Date createdAt;
private String createdBy;
private Date updatedAt;
private String updatedBy;
}

View File

@@ -1,6 +1,7 @@
package com.tencent.supersonic.semantic.model.domain.repository;
import com.tencent.supersonic.semantic.model.domain.dataobject.MetricQueryDefaultConfigDO;
import com.tencent.supersonic.semantic.model.domain.pojo.MetricFilter;
import com.tencent.supersonic.semantic.model.domain.dataobject.MetricDO;
import java.util.List;
@@ -19,4 +20,10 @@ public interface MetricRepository {
MetricDO getMetricById(Long id);
List<MetricDO> getMetric(MetricFilter metricFilter);
void saveDefaultQueryConfig(MetricQueryDefaultConfigDO defaultConfigDO);
void updateDefaultQueryConfig(MetricQueryDefaultConfigDO defaultConfigDO);
MetricQueryDefaultConfigDO getDefaultQueryConfig(Long metricId, String userName);
}

View File

@@ -34,6 +34,7 @@ public class MetricConverter {
metricDO.setTags(metricReq.getTag());
metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension()));
metricDO.setStatus(StatusEnum.ONLINE.getCode());
metricDO.setExt(JSONObject.toJSONString(metricReq.getExt()));
return metricDO;
}
@@ -47,6 +48,7 @@ public class MetricConverter {
metricDO.setRelateDimensions(JSONObject.toJSONString(metricReq.getRelateDimension()));
}
metricDO.setTags(metricReq.getTag());
metricDO.setExt(JSONObject.toJSONString(metricReq.getExt()));
return metricDO;
}
@@ -74,6 +76,9 @@ public class MetricConverter {
metricResp.setTag(metricDO.getTags());
metricResp.setRelateDimension(JSONObject.parseObject(metricDO.getRelateDimensions(),
RelateDimension.class));
if (metricDO.getExt() != null) {
metricResp.setExt(JSONObject.parseObject(metricDO.getExt(), Map.class));
}
return metricResp;
}

View File

@@ -0,0 +1,13 @@
package com.tencent.supersonic.semantic.model.infrastructure.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tencent.supersonic.semantic.model.domain.dataobject.MetricQueryDefaultConfigDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MetricQueryDefaultConfigDOMapper extends BaseMapper<MetricQueryDefaultConfigDO> {
}

View File

@@ -1,11 +1,15 @@
package com.tencent.supersonic.semantic.model.infrastructure.repository;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tencent.supersonic.semantic.model.domain.dataobject.MetricDO;
import com.tencent.supersonic.semantic.model.domain.dataobject.MetricQueryDefaultConfigDO;
import com.tencent.supersonic.semantic.model.domain.pojo.MetricFilter;
import com.tencent.supersonic.semantic.model.domain.repository.MetricRepository;
import com.tencent.supersonic.semantic.model.infrastructure.mapper.MetricDOCustomMapper;
import com.tencent.supersonic.semantic.model.infrastructure.mapper.MetricDOMapper;
import com.tencent.supersonic.semantic.model.infrastructure.mapper.MetricQueryDefaultConfigDOMapper;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -17,10 +21,14 @@ public class MetricRepositoryImpl implements MetricRepository {
private MetricDOCustomMapper metricDOCustomMapper;
private MetricQueryDefaultConfigDOMapper metricQueryDefaultConfigDOMapper;
public MetricRepositoryImpl(MetricDOMapper metricDOMapper,
MetricDOCustomMapper metricDOCustomMapper) {
MetricDOCustomMapper metricDOCustomMapper,
MetricQueryDefaultConfigDOMapper metricQueryDefaultConfigDOMapper) {
this.metricDOMapper = metricDOMapper;
this.metricDOCustomMapper = metricDOCustomMapper;
this.metricQueryDefaultConfigDOMapper = metricQueryDefaultConfigDOMapper;
}
@Override
@@ -54,4 +62,22 @@ public class MetricRepositoryImpl implements MetricRepository {
return metricDOCustomMapper.query(metricFilter);
}
@Override
public void saveDefaultQueryConfig(MetricQueryDefaultConfigDO defaultConfigDO) {
metricQueryDefaultConfigDOMapper.insert(defaultConfigDO);
}
@Override
public void updateDefaultQueryConfig(MetricQueryDefaultConfigDO defaultConfigDO) {
metricQueryDefaultConfigDOMapper.updateById(defaultConfigDO);
}
@Override
public MetricQueryDefaultConfigDO getDefaultQueryConfig(Long metricId, String userName) {
QueryWrapper<MetricQueryDefaultConfigDO> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(MetricQueryDefaultConfigDO::getMetricId, metricId)
.eq(MetricQueryDefaultConfigDO::getCreatedBy, userName);
return metricQueryDefaultConfigDOMapper.selectOne(queryWrapper);
}
}

View File

@@ -7,25 +7,26 @@ import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.auth.api.authentication.utils.UserHolder;
import com.tencent.supersonic.common.pojo.enums.SensitiveLevelEnum;
import com.tencent.supersonic.semantic.api.model.pojo.DrillDownDimension;
import com.tencent.supersonic.semantic.api.model.pojo.MetricQueryDefaultConfig;
import com.tencent.supersonic.semantic.api.model.request.MetaBatchReq;
import com.tencent.supersonic.semantic.api.model.request.MetricReq;
import com.tencent.supersonic.semantic.api.model.request.PageMetricReq;
import com.tencent.supersonic.semantic.api.model.response.MetricResp;
import com.tencent.supersonic.semantic.model.domain.MetricService;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.tencent.supersonic.semantic.model.domain.pojo.MetaFilter;
import com.tencent.supersonic.semantic.model.domain.pojo.MetricFilter;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Set;
@RestController
@@ -127,4 +128,22 @@ public class MetricController {
public List<DrillDownDimension> getDrillDownDimension(Long metricId) {
return metricService.getDrillDownDimension(metricId);
}
@PostMapping("/saveMetricQueryDefaultConfig")
public boolean saveMetricQueryDefaultConfig(@RequestBody MetricQueryDefaultConfig queryDefaultConfig,
HttpServletRequest request,
HttpServletResponse response) {
User user = UserHolder.findUser(request, response);
metricService.saveOrUpdateMetricQueryDefaultConfig(queryDefaultConfig, user);
return true;
}
@RequestMapping("getMetricQueryDefaultConfig/{metricId}")
public MetricQueryDefaultConfig getMetricQueryDefaultConfig(@PathVariable("metricId") Long metricId,
HttpServletRequest request,
HttpServletResponse response) {
User user = UserHolder.findUser(request, response);
return metricService.getMetricQueryDefaultConfig(metricId, user);
}
}