mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-14 22:25:19 +00:00
(improvement)(semantic) save metric default query config (#503)
Co-authored-by: jolunoluo
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
package com.tencent.supersonic.semantic.api.model.pojo;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class MetricQueryDefaultConfig extends RecordInfo {
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long metricId;
|
||||
|
||||
private String userName;
|
||||
|
||||
//string of queryStruct
|
||||
private String defaultConfig;
|
||||
|
||||
}
|
||||
@@ -1,12 +1,15 @@
|
||||
package com.tencent.supersonic.semantic.api.model.request;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.DataFormat;
|
||||
import com.tencent.supersonic.semantic.api.model.pojo.RelateDimension;
|
||||
import com.tencent.supersonic.semantic.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.common.pojo.DataFormat;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@Data
|
||||
@@ -24,6 +27,8 @@ public class MetricBaseReq extends SchemaItem {
|
||||
|
||||
private RelateDimension relateDimension;
|
||||
|
||||
private Map<String, Object> ext = new HashMap<>();
|
||||
|
||||
public String getTag() {
|
||||
if (CollectionUtils.isEmpty(tags)) {
|
||||
return "";
|
||||
|
||||
@@ -14,7 +14,9 @@ import lombok.ToString;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -48,6 +50,8 @@ public class MetricResp extends SchemaItem {
|
||||
|
||||
private Boolean isCollect;
|
||||
|
||||
private Map<String, Object> ext = new HashMap<>();
|
||||
|
||||
public void setTag(String tag) {
|
||||
if (StringUtils.isBlank(tag)) {
|
||||
tags = Lists.newArrayList();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -98,4 +98,6 @@ public class MetricDO {
|
||||
*/
|
||||
private String typeParams;
|
||||
|
||||
private String ext;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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> {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.tencent.supersonic.common.pojo.Aggregator;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.Filter;
|
||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum;
|
||||
import com.tencent.supersonic.common.util.ContextUtils;
|
||||
import com.tencent.supersonic.common.util.JsonUtil;
|
||||
@@ -310,6 +311,7 @@ public class QueryServiceImpl implements QueryService {
|
||||
dateInfo.setUnit(1);
|
||||
}
|
||||
queryStructReq.setDateInfo(dateInfo);
|
||||
queryStructReq.setQueryType(QueryType.TAG);
|
||||
return queryStructReq;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user