From b4bc92e5864a58aa192bf646cbdc61ea69124602 Mon Sep 17 00:00:00 2001 From: LXW <1264174498@qq.com> Date: Thu, 30 May 2024 19:39:23 +0800 Subject: [PATCH] (improvement)(launcher) Optimize Demo to distinguish domain and model sets (#1056) Co-authored-by: jolunoluo --- .../parse/ParseResultFormatProcessor.java | 6 +-- .../headless/api/pojo/request/CanvasReq.java | 13 +---- .../parser/llm/OnePassSCSqlGenStrategy.java | 6 +-- .../parser/llm/TwoPassSCSqlGenStrategy.java | 1 - .../repository/CanvasRepository.java | 18 ------- .../repository/impl/CanvasRepositoryImpl.java | 48 ----------------- .../server/processor/SqlInfoProcessor.java | 4 +- .../server/rest/CanvasController.java | 10 ++-- .../server/service/CanvasService.java | 19 +++++++ .../service/impl/CanvasServiceImpl.java | 48 ++++++++--------- .../service/impl/DomainServiceImpl.java | 13 +---- .../tencent/supersonic/demo/S2ArtistDemo.java | 19 +++++-- .../tencent/supersonic/demo/S2BaseDemo.java | 3 ++ .../tencent/supersonic/demo/S2VisitsDemo.java | 28 ++++++---- .../headless/QueryByMetricTest.java | 2 +- .../supersonic/headless/SchemaAuthTest.java | 53 ++++++++++--------- 16 files changed, 118 insertions(+), 173 deletions(-) delete mode 100644 headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/CanvasRepository.java delete mode 100644 headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/CanvasRepositoryImpl.java create mode 100644 headless/server/src/main/java/com/tencent/supersonic/headless/server/service/CanvasService.java diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseResultFormatProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseResultFormatProcessor.java index 7d39dc9d6..a214951df 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseResultFormatProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseResultFormatProcessor.java @@ -37,9 +37,9 @@ public class ParseResultFormatProcessor implements ParseResultProcessor { if (!CollectionUtils.isEmpty(dimensionNames)) { textBuilder.append("**维度:** ").append(String.join(",", dimensionNames)); } - textBuilder.append("\n**筛选条件:**\n"); + textBuilder.append("\n\n**筛选条件:** \n"); if (parseInfo.getDateInfo() != null) { - textBuilder.append("数据时间:").append(parseInfo.getDateInfo().getStartDate()).append("~") + textBuilder.append("**数据时间:** ").append(parseInfo.getDateInfo().getStartDate()).append("~") .append(parseInfo.getDateInfo().getEndDate()).append(" "); } if (!CollectionUtils.isEmpty(parseInfo.getDimensionFilters()) @@ -47,7 +47,7 @@ public class ParseResultFormatProcessor implements ParseResultProcessor { Set queryFilters = parseInfo.getDimensionFilters(); queryFilters.addAll(parseInfo.getMetricFilters()); for (QueryFilter queryFilter : queryFilters) { - textBuilder.append(queryFilter.getName()) + textBuilder.append("**").append(queryFilter.getName()).append("**") .append(" ") .append(queryFilter.getOperator().getValue()) .append(" ") diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/CanvasReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/CanvasReq.java index c422c6fc7..fe7711541 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/CanvasReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/CanvasReq.java @@ -1,11 +1,10 @@ package com.tencent.supersonic.headless.api.pojo.request; +import com.tencent.supersonic.common.pojo.RecordInfo; import lombok.Data; -import java.util.Date; - @Data -public class CanvasReq { +public class CanvasReq extends RecordInfo { private Long id; @@ -13,14 +12,6 @@ public class CanvasReq { private String type; - private Date createdAt; - - private String createdBy; - - private Date updatedAt; - - private String updatedBy; - private String config; } \ No newline at end of file diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/parser/llm/OnePassSCSqlGenStrategy.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/parser/llm/OnePassSCSqlGenStrategy.java index 296796faa..4e1c79aee 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/parser/llm/OnePassSCSqlGenStrategy.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/parser/llm/OnePassSCSqlGenStrategy.java @@ -48,12 +48,8 @@ public class OnePassSCSqlGenStrategy extends SqlGenStrategy { } ); //3.format response. - List schemaLinkingResults = llmResults.stream() - .map(llmResult -> OutputFormat.getSchemaLinks(llmResult)).collect(Collectors.toList()); - List candidateSortedList = OutputFormat.formatList(schemaLinkingResults); - Pair> linkingMap = OutputFormat.selfConsistencyVote(candidateSortedList); List sqlList = llmResults.stream() - .map(llmResult -> OutputFormat.getSql(llmResult)).collect(Collectors.toList()); + .map(OutputFormat::getSql).collect(Collectors.toList()); Pair> sqlMapPair = OutputFormat.selfConsistencyVote(sqlList); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/parser/llm/TwoPassSCSqlGenStrategy.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/parser/llm/TwoPassSCSqlGenStrategy.java index 9d4ad6550..9011a8160 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/parser/llm/TwoPassSCSqlGenStrategy.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/parser/llm/TwoPassSCSqlGenStrategy.java @@ -45,7 +45,6 @@ public class TwoPassSCSqlGenStrategy extends SqlGenStrategy { } ); List sortedList = OutputFormat.formatList(linkingResults); - Pair> linkingMap = OutputFormat.selfConsistencyVote(sortedList); //3.generator sql prompt,and parallel generate response. List sqlPromptPool = promptGenerator.generateSqlPromptPool(llmReq, sortedList, exampleListPool); List sqlTaskPool = new CopyOnWriteArrayList<>(); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/CanvasRepository.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/CanvasRepository.java deleted file mode 100644 index af7272947..000000000 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/CanvasRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.tencent.supersonic.headless.server.persistence.repository; - -import com.tencent.supersonic.headless.server.persistence.dataobject.CanvasDO; - -import java.util.List; - -public interface CanvasRepository { - - List getCanvasList(Long domainId); - - CanvasDO getCanvasById(Long id); - - void deleteCanvas(Long id); - - void createCanvas(CanvasDO canvasDO); - - void updateCanvas(CanvasDO canvasDO); -} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/CanvasRepositoryImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/CanvasRepositoryImpl.java deleted file mode 100644 index 568b58fc3..000000000 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/CanvasRepositoryImpl.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.tencent.supersonic.headless.server.persistence.repository.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.tencent.supersonic.headless.server.persistence.dataobject.CanvasDO; -import com.tencent.supersonic.headless.server.persistence.mapper.CanvasDOMapper; -import com.tencent.supersonic.headless.server.persistence.repository.CanvasRepository; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -public class CanvasRepositoryImpl implements CanvasRepository { - - - private CanvasDOMapper canvasDOMapper; - - public CanvasRepositoryImpl(CanvasDOMapper canvasDOMapper) { - this.canvasDOMapper = canvasDOMapper; - } - - @Override - public List getCanvasList(Long domainId) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(CanvasDO::getDomainId, domainId); - return canvasDOMapper.selectList(wrapper); - } - - @Override - public CanvasDO getCanvasById(Long id) { - return canvasDOMapper.selectById(id); - } - - @Override - public void deleteCanvas(Long id) { - canvasDOMapper.deleteById(id); - } - - @Override - public void createCanvas(CanvasDO canvasDO) { - canvasDOMapper.insert(canvasDO); - } - - @Override - public void updateCanvas(CanvasDO canvasDO) { - canvasDOMapper.updateById(canvasDO); - } - -} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/SqlInfoProcessor.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/SqlInfoProcessor.java index 74c686a76..19ac8121c 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/SqlInfoProcessor.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/SqlInfoProcessor.java @@ -75,8 +75,8 @@ public class SqlInfoProcessor implements ResultProcessor { } SqlInfo sqlInfo = parseInfo.getSqlInfo(); if (semanticQuery instanceof LLMSqlQuery) { - keyPipelineLog.info("SqlInfoProcessor results:\nParsed S2SQL:{}\nCorrected S2SQL:{}\nFinal SQL:{}", sqlInfo.getS2SQL(), - sqlInfo.getCorrectS2SQL(), explainSql); + keyPipelineLog.info("SqlInfoProcessor results:\nParsed S2SQL:{}\nCorrected S2SQL:{}\nFinal SQL:{}", + sqlInfo.getS2SQL(), sqlInfo.getCorrectS2SQL(), explainSql); } sqlInfo.setQuerySQL(explainSql); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/CanvasController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/CanvasController.java index 365cf5661..3b6befbf6 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/CanvasController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/CanvasController.java @@ -6,7 +6,8 @@ import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.headless.api.pojo.request.CanvasReq; import com.tencent.supersonic.headless.api.pojo.response.CanvasSchemaResp; import com.tencent.supersonic.headless.server.persistence.dataobject.CanvasDO; -import com.tencent.supersonic.headless.server.service.impl.CanvasServiceImpl; +import com.tencent.supersonic.headless.server.service.CanvasService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -23,11 +24,8 @@ import java.util.List; @RequestMapping("/api/semantic/viewInfo") public class CanvasController { - private CanvasServiceImpl canvasService; - - public CanvasController(CanvasServiceImpl canvasService) { - this.canvasService = canvasService; - } + @Autowired + private CanvasService canvasService; @PostMapping("/createOrUpdateViewInfo") public CanvasDO createOrUpdateCanvas(@RequestBody CanvasReq canvasReq, HttpServletRequest request, diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/CanvasService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/CanvasService.java new file mode 100644 index 000000000..12347616e --- /dev/null +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/CanvasService.java @@ -0,0 +1,19 @@ +package com.tencent.supersonic.headless.server.service; + +import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.headless.api.pojo.request.CanvasReq; +import com.tencent.supersonic.headless.api.pojo.response.CanvasSchemaResp; +import com.tencent.supersonic.headless.server.persistence.dataobject.CanvasDO; + +import java.util.List; + +public interface CanvasService { + + List getCanvasList(Long domainId); + + List getCanvasSchema(Long domainId, User user); + + CanvasDO createOrUpdateCanvas(CanvasReq canvasReq, User user); + + void deleteCanvas(Long id); +} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/CanvasServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/CanvasServiceImpl.java index ea26c8e13..31f45ed9b 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/CanvasServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/CanvasServiceImpl.java @@ -1,49 +1,49 @@ package com.tencent.supersonic.headless.server.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.headless.api.pojo.request.CanvasReq; +import com.tencent.supersonic.headless.api.pojo.response.CanvasSchemaResp; 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.ModelResp; -import com.tencent.supersonic.headless.api.pojo.response.CanvasSchemaResp; import com.tencent.supersonic.headless.server.persistence.dataobject.CanvasDO; -import com.tencent.supersonic.headless.server.persistence.repository.CanvasRepository; +import com.tencent.supersonic.headless.server.persistence.mapper.CanvasDOMapper; import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.CanvasService; import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.MetricService; import com.tencent.supersonic.headless.server.service.ModelService; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; import java.util.List; @Service -public class CanvasServiceImpl { - - private CanvasRepository canvasRepository; +public class CanvasServiceImpl extends ServiceImpl implements CanvasService { + @Autowired private ModelService modelService; + @Autowired private DimensionService dimensionService; + @Autowired private MetricService metricService; - public CanvasServiceImpl(CanvasRepository canvasRepository, ModelService modelService, - MetricService metricService, DimensionService dimensionService) { - this.canvasRepository = canvasRepository; - this.dimensionService = dimensionService; - this.metricService = metricService; - this.modelService = modelService; - } - + @Override public List getCanvasList(Long domainId) { - return canvasRepository.getCanvasList(domainId); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(CanvasDO::getDomainId, domainId); + return list(queryWrapper); } + @Override public List getCanvasSchema(Long domainId, User user) { List canvasSchemaResps = Lists.newArrayList(); List modelResps = modelService.getModelListWithAuth(user, domainId, AuthType.ADMIN); @@ -62,28 +62,26 @@ public class CanvasServiceImpl { return canvasSchemaResps; } + @Override public CanvasDO createOrUpdateCanvas(CanvasReq canvasReq, User user) { if (canvasReq.getId() == null) { + canvasReq.createdBy(user.getName()); CanvasDO viewInfoDO = new CanvasDO(); BeanUtils.copyProperties(canvasReq, viewInfoDO); - viewInfoDO.setCreatedAt(new Date()); - viewInfoDO.setCreatedBy(user.getName()); - viewInfoDO.setUpdatedAt(new Date()); - viewInfoDO.setUpdatedBy(user.getName()); - canvasRepository.createCanvas(viewInfoDO); + save(viewInfoDO); return viewInfoDO; } Long id = canvasReq.getId(); - CanvasDO viewInfoDO = canvasRepository.getCanvasById(id); + CanvasDO viewInfoDO = getById(id); + canvasReq.updatedBy(user.getName()); BeanUtils.copyProperties(canvasReq, viewInfoDO); - viewInfoDO.setUpdatedAt(new Date()); - viewInfoDO.setUpdatedBy(user.getName()); - canvasRepository.updateCanvas(viewInfoDO); + updateById(viewInfoDO); return viewInfoDO; } + @Override public void deleteCanvas(Long id) { - canvasRepository.deleteCanvas(id); + removeById(id); } } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DomainServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DomainServiceImpl.java index cfee9ef1f..5a849ce5c 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DomainServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DomainServiceImpl.java @@ -10,12 +10,10 @@ import com.tencent.supersonic.headless.api.pojo.request.DomainReq; import com.tencent.supersonic.headless.api.pojo.request.DomainUpdateReq; import com.tencent.supersonic.headless.api.pojo.response.DomainResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp; -import com.tencent.supersonic.headless.api.pojo.response.DataSetResp; import com.tencent.supersonic.headless.server.persistence.dataobject.DomainDO; import com.tencent.supersonic.headless.server.persistence.repository.DomainRepository; import com.tencent.supersonic.headless.server.service.DomainService; import com.tencent.supersonic.headless.server.service.ModelService; -import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.utils.DomainConvert; import lombok.extern.slf4j.Slf4j; import org.assertj.core.util.Sets; @@ -43,17 +41,13 @@ public class DomainServiceImpl implements DomainService { private final DomainRepository domainRepository; private final ModelService modelService; private final UserService userService; - private final DataSetService dataSetService; - public DomainServiceImpl(DomainRepository domainRepository, @Lazy ModelService modelService, - UserService userService, - @Lazy DataSetService dataSetService) { + UserService userService) { this.domainRepository = domainRepository; this.modelService = modelService; this.userService = userService; - this.dataSetService = dataSetService; } @Override @@ -112,11 +106,6 @@ public class DomainServiceImpl implements DomainService { if (!CollectionUtils.isEmpty(modelResps)) { domainWithAuthAll.addAll(getParentDomain(domainIdsFromModel)); } - List dataSetResps = dataSetService.getDataSets(user); - if (!CollectionUtils.isEmpty(dataSetResps)) { - List domainIds = dataSetResps.stream().map(DataSetResp::getDomainId).collect(Collectors.toList()); - domainWithAuthAll.addAll(getParentDomain(domainIds)); - } for (DomainResp domainResp : domainWithAuthAll) { if (domainIdsFromModel.contains(domainResp.getId())) { domainResp.setHasModel(true); diff --git a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2ArtistDemo.java b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2ArtistDemo.java index 9a2ad8717..fbdd3e0a3 100644 --- a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2ArtistDemo.java +++ b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2ArtistDemo.java @@ -53,15 +53,15 @@ public class S2ArtistDemo extends S2BaseDemo { public void doRun() { try { DomainResp singerDomain = addDomain(); + DomainResp singerModelSet = addModelSet(singerDomain); TagObjectResp singerTagObject = addTagObjectSinger(singerDomain); - ModelResp singerModel = addModel(singerDomain, demoDatabaseResp, singerTagObject); + ModelResp singerModel = addModel(singerModelSet, demoDatabaseResp, singerTagObject); addTags(singerModel); - long dataSetId = addDataSet(singerDomain, singerModel); + long dataSetId = addDataSet(singerDomain, singerModelSet, singerModel); addAgent(dataSetId); } catch (Exception e) { log.error("Failed to add model demo data", e); } - } @Override @@ -98,6 +98,15 @@ public class S2ArtistDemo extends S2BaseDemo { return domainService.createDomain(domainReq, user); } + public DomainResp addModelSet(DomainResp singerDomain) { + DomainReq domainReq = new DomainReq(); + domainReq.setName("标签模型集"); + domainReq.setBizName("singer_info"); + domainReq.setParentId(singerDomain.getId()); + domainReq.setStatus(StatusEnum.ONLINE.getCode()); + return domainService.createDomain(domainReq, user); + } + public ModelResp addModel(DomainResp singerDomain, DatabaseResp s2Database, TagObjectResp singerTagObject) throws Exception { ModelReq modelReq = new ModelReq(); @@ -154,14 +163,14 @@ public class S2ArtistDemo extends S2BaseDemo { TagDefineType.METRIC); } - public long addDataSet(DomainResp singerDomain, ModelResp singerModel) { + public long addDataSet(DomainResp singerDomain, DomainResp singerModelSet, ModelResp singerModel) { DataSetReq dataSetReq = new DataSetReq(); dataSetReq.setName("艺人库"); dataSetReq.setBizName("singer"); dataSetReq.setDomainId(singerDomain.getId()); dataSetReq.setDescription("包含艺人相关标签和指标信息"); dataSetReq.setAdmins(Lists.newArrayList("admin", "jack")); - List dataSetModelConfigs = getDataSetModelConfigs(singerDomain.getId()); + List dataSetModelConfigs = getDataSetModelConfigs(singerModelSet.getId()); DataSetDetail dataSetDetail = new DataSetDetail(); dataSetDetail.setDataSetModelConfigs(dataSetModelConfigs); dataSetReq.setDataSetDetail(dataSetDetail); diff --git a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2BaseDemo.java b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2BaseDemo.java index b94717f6d..a5b3457b4 100644 --- a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2BaseDemo.java +++ b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2BaseDemo.java @@ -23,6 +23,7 @@ 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.ParseResp; import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.CanvasService; import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.DatabaseService; import com.tencent.supersonic.headless.server.service.DimensionService; @@ -83,6 +84,8 @@ public abstract class S2BaseDemo implements CommandLineRunner { protected AgentService agentService; @Autowired protected SysParameterService sysParameterService; + @Autowired + protected CanvasService canvasService; @Value("${s2.demo.names:S2VisitsDemo}") protected List demoList; @Value("${s2.demo.enableLLM:true}") diff --git a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java index a06f3bf7f..9cb6236d6 100644 --- a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java +++ b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java @@ -80,14 +80,15 @@ public class S2VisitsDemo extends S2BaseDemo { try { // create domain DomainResp s2Domain = addDomain(); + DomainResp s2ModelSet = addModelSet(s2Domain); TagObjectResp s2TagObject = addTagObjectUser(s2Domain); // create models - ModelResp userModel = addModel_1(s2Domain, demoDatabaseResp, s2TagObject); - ModelResp pvUvModel = addModel_2(s2Domain, demoDatabaseResp); - ModelResp stayTimeModel = addModel_3(s2Domain, demoDatabaseResp); - addModelRela_1(s2Domain, userModel, pvUvModel); - addModelRela_2(s2Domain, userModel, stayTimeModel); + ModelResp userModel = addModel_1(s2ModelSet, demoDatabaseResp, s2TagObject); + ModelResp pvUvModel = addModel_2(s2ModelSet, demoDatabaseResp); + ModelResp stayTimeModel = addModel_3(s2ModelSet, demoDatabaseResp); + addModelRela_1(s2ModelSet, userModel, pvUvModel); + addModelRela_2(s2ModelSet, userModel, stayTimeModel); addTags(userModel); //create metrics and dimensions @@ -103,7 +104,7 @@ public class S2VisitsDemo extends S2BaseDemo { updateMetric_pv(pvUvModel, departmentDimension, userDimension, metricPv); //create data set - DataSetResp s2DataSet = addDataSet(s2Domain); + DataSetResp s2DataSet = addDataSet(s2Domain, s2ModelSet); addAuthGroup_1(stayTimeModel); addAuthGroup_2(stayTimeModel); @@ -189,9 +190,16 @@ public class S2VisitsDemo extends S2BaseDemo { domainReq.setParentId(0L); domainReq.setStatus(StatusEnum.ONLINE.getCode()); domainReq.setViewers(Arrays.asList("admin", "tom")); - domainReq.setViewOrgs(Collections.singletonList("1")); domainReq.setAdmins(Arrays.asList("admin", "jack")); - domainReq.setAdminOrgs(Collections.emptyList()); + return domainService.createDomain(domainReq, user); + } + + public DomainResp addModelSet(DomainResp s2Domain) { + DomainReq domainReq = new DomainReq(); + domainReq.setName("埋点模型集"); + domainReq.setBizName("visit_info"); + domainReq.setParentId(s2Domain.getId()); + domainReq.setStatus(StatusEnum.ONLINE.getCode()); return domainService.createDomain(domainReq, user); } @@ -451,14 +459,14 @@ public class S2VisitsDemo extends S2BaseDemo { return metricService.createMetric(metricReq, user); } - public DataSetResp addDataSet(DomainResp s2Domain) { + public DataSetResp addDataSet(DomainResp s2Domain, DomainResp s2ModelSet) { DataSetReq dataSetReq = new DataSetReq(); dataSetReq.setName("超音数"); dataSetReq.setBizName("s2"); dataSetReq.setDomainId(s2Domain.getId()); dataSetReq.setDescription("包含超音数访问统计相关的指标和维度等"); dataSetReq.setAdmins(Lists.newArrayList("admin")); - List dataSetModelConfigs = getDataSetModelConfigs(s2Domain.getId()); + List dataSetModelConfigs = getDataSetModelConfigs(s2ModelSet.getId()); DataSetDetail dataSetDetail = new DataSetDetail(); dataSetDetail.setDataSetModelConfigs(dataSetModelConfigs); dataSetReq.setDataSetDetail(dataSetDetail); diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByMetricTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByMetricTest.java index ff92d1623..6968e1af9 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByMetricTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByMetricTest.java @@ -48,7 +48,7 @@ public class QueryByMetricTest extends BaseTest { Assert.assertNotNull(queryResp.getResultList()); Assert.assertEquals(6, queryResp.getResultList().size()); - queryMetricReq.setDomainId(2L); + queryMetricReq.setDomainId(3L); queryMetricReq.setMetricNames(Arrays.asList("stay_hours", "pv")); queryMetricReq.setDimensionNames(Arrays.asList("user_name", "department")); assertThrows(IllegalArgumentException.class, diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/SchemaAuthTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/SchemaAuthTest.java index 64ee95dfa..de0e6d9a6 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/SchemaAuthTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/SchemaAuthTest.java @@ -22,7 +22,7 @@ public class SchemaAuthTest extends BaseTest { private DomainService domainService; @Autowired - private DataSetService viewService; + private DataSetService dataSetService; @Autowired private ModelService modelService; @@ -31,63 +31,64 @@ public class SchemaAuthTest extends BaseTest { public void test_getDomainList_alice() { User user = DataUtils.getUserAlice(); List domainResps = domainService.getDomainListWithAdminAuth(user); - List expectedDomainIds = Lists.newArrayList(1L, 2L); - Assertions.assertEquals(expectedDomainIds, - domainResps.stream().map(DomainResp::getId).collect(Collectors.toList())); + List expectedDomainBizNames = Lists.newArrayList("supersonic", "visit_info", "singer", "singer_info"); + Assertions.assertEquals(expectedDomainBizNames, + domainResps.stream().map(DomainResp::getBizName).collect(Collectors.toList())); } @Test public void test_getModelList_alice() { User user = DataUtils.getUserAlice(); List modelResps = modelService.getModelListWithAuth(user, null, AuthType.ADMIN); - List expectedModelIds = Lists.newArrayList(1L, 4L); - Assertions.assertEquals(expectedModelIds, - modelResps.stream().map(ModelResp::getId).collect(Collectors.toList())); + List expectedModelBizNames = Lists.newArrayList("user_department", "singer"); + Assertions.assertEquals(expectedModelBizNames, + modelResps.stream().map(ModelResp::getBizName).collect(Collectors.toList())); } @Test public void test_getVisibleModelList_alice() { User user = DataUtils.getUserAlice(); List modelResps = modelService.getModelListWithAuth(user, null, AuthType.VISIBLE); - List expectedModelIds = Lists.newArrayList(1L, 4L); - Assertions.assertEquals(expectedModelIds, - modelResps.stream().map(ModelResp::getId).collect(Collectors.toList())); + List expectedModelBizNames = Lists.newArrayList("user_department", "singer"); + Assertions.assertEquals(expectedModelBizNames, + modelResps.stream().map(ModelResp::getBizName).collect(Collectors.toList())); } @Test - public void test_getViewList_alice() { + public void test_getDataSetList_alice() { User user = DataUtils.getUserAlice(); - List modelResps = viewService.getDataSetsInheritAuth(user, 0L); - List expectedViewIds = Lists.newArrayList(2L); - Assertions.assertEquals(expectedViewIds, - modelResps.stream().map(DataSetResp::getId).collect(Collectors.toList())); + List dataSetResps = dataSetService.getDataSetsInheritAuth(user, 0L); + List expectedDataSetBizNames = Lists.newArrayList("singer"); + Assertions.assertEquals(expectedDataSetBizNames, + dataSetResps.stream().map(DataSetResp::getBizName).collect(Collectors.toList())); } @Test public void test_getDomainList_jack() { User user = DataUtils.getUserJack(); List domainResps = domainService.getDomainListWithAdminAuth(user); - List expectedDomainIds = Lists.newArrayList(1L, 2L); - Assertions.assertEquals(expectedDomainIds, - domainResps.stream().map(DomainResp::getId).collect(Collectors.toList())); + List expectedDomainBizNames = Lists.newArrayList("supersonic", "visit_info"); + Assertions.assertEquals(expectedDomainBizNames, + domainResps.stream().map(DomainResp::getBizName).collect(Collectors.toList())); } @Test public void test_getModelList_jack() { User user = DataUtils.getUserJack(); List modelResps = modelService.getModelListWithAuth(user, null, AuthType.ADMIN); - List expectedModelIds = Lists.newArrayList(1L, 2L, 3L); - Assertions.assertEquals(expectedModelIds, - modelResps.stream().map(ModelResp::getId).collect(Collectors.toList())); + List expectedModelBizNames = Lists.newArrayList("user_department", + "s2_pv_uv_statis", "s2_stay_time_statis"); + Assertions.assertEquals(expectedModelBizNames, + modelResps.stream().map(ModelResp::getBizName).collect(Collectors.toList())); } @Test - public void test_getViewList_jack() { + public void test_getDataSetList_jack() { User user = DataUtils.getUserJack(); - List modelResps = viewService.getDataSetsInheritAuth(user, 0L); - List expectedViewIds = Lists.newArrayList(1L, 2L); - Assertions.assertEquals(expectedViewIds, - modelResps.stream().map(DataSetResp::getId).collect(Collectors.toList())); + List dataSetResps = dataSetService.getDataSetsInheritAuth(user, 0L); + List expectedDataSetBizNames = Lists.newArrayList("s2", "singer"); + Assertions.assertEquals(expectedDataSetBizNames, + dataSetResps.stream().map(DataSetResp::getBizName).collect(Collectors.toList())); } }