mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 03:58:14 +00:00
(feature)(headless) Add a new headless-api module and Change old headless-api module to headless-common (#582)
* (improvement)(headless) Add headless-api module * (improvement)(headless) Change old headless-api module to headless-common --------- Co-authored-by: jolunoluo <jolunoluo@tencent.com>
This commit is contained in:
@@ -1,69 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>headless</artifactId>
|
||||
<version>${revision}</version>
|
||||
<version>0.8.2-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>headless-api</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>ru.yandex.clickhouse</groupId>-->
|
||||
<!-- <artifactId>clickhouse-jdbc</artifactId>-->
|
||||
<!-- <version>${clickhouse.jdbc.version}</version>-->
|
||||
<!-- </dependency>-->
|
||||
<dependency>
|
||||
<groupId>com.clickhouse</groupId>
|
||||
<artifactId>clickhouse-jdbc</artifactId>
|
||||
<version>${clickhouse.jdbc.version}</version>
|
||||
<!-- use uber jar with all dependencies included, change classifier to http for smaller jar -->
|
||||
<classifier>all</classifier>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.validation</groupId>
|
||||
<artifactId>jakarta.validation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-core</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>${fastjson.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>auth-api</artifactId>
|
||||
<artifactId>headless-query</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
||||
</project>
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.query.annotation;
|
||||
package com.tencent.supersonic.headless.api.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
@@ -7,6 +7,6 @@ import java.lang.annotation.Target;
|
||||
|
||||
@Target({ElementType.PARAMETER, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface ApiDataPermission {
|
||||
public @interface ApiHeaderCheck {
|
||||
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.tencent.supersonic.headless.query.aspect;
|
||||
package com.tencent.supersonic.headless.api.aspect;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.Pair;
|
||||
import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException;
|
||||
import com.tencent.supersonic.common.util.SignatureUtils;
|
||||
import com.tencent.supersonic.headless.api.model.enums.AppStatusEnum;
|
||||
import com.tencent.supersonic.headless.api.model.response.AppDetailResp;
|
||||
import com.tencent.supersonic.headless.model.domain.AppService;
|
||||
import com.tencent.supersonic.headless.api.service.AppService;
|
||||
import com.tencent.supersonic.headless.common.model.enums.AppStatusEnum;
|
||||
import com.tencent.supersonic.headless.common.model.response.AppDetailResp;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
@@ -15,13 +15,14 @@ import org.aspectj.lang.annotation.Pointcut;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
@Component
|
||||
@Aspect
|
||||
@Order(1)
|
||||
@Slf4j
|
||||
public class ApiDataAspect {
|
||||
public class ApiHeaderCheckAspect {
|
||||
|
||||
public static final String APPID = "appId";
|
||||
|
||||
@@ -32,7 +33,7 @@ public class ApiDataAspect {
|
||||
@Autowired
|
||||
private AppService appService;
|
||||
|
||||
@Pointcut("@annotation(com.tencent.supersonic.headless.query.annotation.ApiDataPermission)")
|
||||
@Pointcut("@annotation(com.tencent.supersonic.headless.api.annotation.ApiHeaderCheck)")
|
||||
private void apiPermissionCheck() {
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.enums;
|
||||
|
||||
|
||||
public enum UpdateCycleEnum {
|
||||
DAY,
|
||||
WEEK,
|
||||
MONTH
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
|
||||
|
||||
public enum MetricTypeEnum {
|
||||
|
||||
ATOMIC,
|
||||
DERIVED
|
||||
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class AppConfig {
|
||||
|
||||
private List<Item> items = Lists.newArrayList();
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.model.domain.dataobject;
|
||||
package com.tencent.supersonic.headless.api.persistence.dataobject;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
@@ -12,7 +12,7 @@ import java.util.Date;
|
||||
public class AppDO {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
private Integer id;
|
||||
|
||||
private String name;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.headless.model.infrastructure.mapper;
|
||||
package com.tencent.supersonic.headless.api.persistence.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.tencent.supersonic.headless.model.domain.dataobject.AppDO;
|
||||
import com.tencent.supersonic.headless.api.persistence.dataobject.AppDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
@@ -1,15 +0,0 @@
|
||||
package com.tencent.supersonic.headless.api.query.pojo;
|
||||
|
||||
|
||||
import com.tencent.supersonic.headless.api.model.pojo.Item;
|
||||
import com.tencent.supersonic.headless.api.model.response.QueryResultWithSchemaResp;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ApiQuerySingleResult {
|
||||
|
||||
private Item item;
|
||||
|
||||
private QueryResultWithSchemaResp result;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.tencent.supersonic.headless.api.rest;
|
||||
|
||||
import com.tencent.supersonic.headless.api.service.ApiQueryService;
|
||||
import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp;
|
||||
import com.tencent.supersonic.headless.common.query.request.MetaQueryApiReq;
|
||||
import com.tencent.supersonic.headless.common.query.request.QueryApiReq;
|
||||
import com.tencent.supersonic.headless.common.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.headless.common.query.response.ApiQueryResultResp;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/semantic/apiQuery")
|
||||
@Slf4j
|
||||
public class ApiQueryController {
|
||||
|
||||
@Autowired
|
||||
private ApiQueryService apiQueryService;
|
||||
|
||||
@PostMapping("/metricDataQueryById")
|
||||
public ApiQueryResultResp metricDataQueryById(@RequestBody QueryApiReq queryApiReq,
|
||||
HttpServletRequest request) throws Exception {
|
||||
return apiQueryService.metricDataQueryById(queryApiReq, request);
|
||||
}
|
||||
|
||||
@PostMapping("/metaQuery")
|
||||
public Object metaQuery(@RequestBody MetaQueryApiReq metaQueryApiReq, HttpServletRequest request) {
|
||||
return apiQueryService.metaQuery(metaQueryApiReq, request);
|
||||
}
|
||||
|
||||
@PostMapping("/dataQueryByStruct")
|
||||
public QueryResultWithSchemaResp dataQueryByStruct(QueryStructReq queryStructReq,
|
||||
HttpServletRequest request) throws Exception {
|
||||
return apiQueryService.dataQueryByStruct(queryStructReq, request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.tencent.supersonic.headless.model.rest;
|
||||
package com.tencent.supersonic.headless.api.rest;
|
||||
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.auth.api.authentication.utils.UserHolder;
|
||||
import com.tencent.supersonic.headless.api.model.request.AppQueryReq;
|
||||
import com.tencent.supersonic.headless.api.model.request.AppReq;
|
||||
import com.tencent.supersonic.headless.api.model.response.AppDetailResp;
|
||||
import com.tencent.supersonic.headless.api.model.response.AppResp;
|
||||
import com.tencent.supersonic.headless.model.domain.AppService;
|
||||
import com.tencent.supersonic.headless.api.service.AppService;
|
||||
import com.tencent.supersonic.headless.common.model.request.AppQueryReq;
|
||||
import com.tencent.supersonic.headless.common.model.request.AppReq;
|
||||
import com.tencent.supersonic.headless.common.model.response.AppDetailResp;
|
||||
import com.tencent.supersonic.headless.common.model.response.AppResp;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.tencent.supersonic.headless.api.service;
|
||||
|
||||
import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp;
|
||||
import com.tencent.supersonic.headless.common.query.request.MetaQueryApiReq;
|
||||
import com.tencent.supersonic.headless.common.query.request.QueryApiReq;
|
||||
import com.tencent.supersonic.headless.common.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.headless.common.query.response.ApiQueryResultResp;
|
||||
import com.tencent.supersonic.headless.api.annotation.ApiHeaderCheck;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
/**
|
||||
* Api service for other apps to query meta info and data
|
||||
*/
|
||||
public interface ApiQueryService {
|
||||
|
||||
/**
|
||||
* Query the metric data based on the metric id.
|
||||
* The data will be drilled down based on the information configured when applying for the APP.
|
||||
* @param queryApiReq
|
||||
* @param request
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@ApiHeaderCheck
|
||||
ApiQueryResultResp metricDataQueryById(QueryApiReq queryApiReq, HttpServletRequest request) throws Exception;
|
||||
|
||||
/**
|
||||
* Query data based on structure
|
||||
* @param queryStructReq
|
||||
* @param request
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@ApiHeaderCheck
|
||||
QueryResultWithSchemaResp dataQueryByStruct(QueryStructReq queryStructReq,
|
||||
HttpServletRequest request) throws Exception;
|
||||
|
||||
/**
|
||||
* Query the meta information of the metric, dimension and tag
|
||||
* @param metaQueryApiReq
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@ApiHeaderCheck
|
||||
Object metaQuery(MetaQueryApiReq metaQueryApiReq, HttpServletRequest request);
|
||||
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.tencent.supersonic.headless.model.domain;
|
||||
package com.tencent.supersonic.headless.api.service;
|
||||
|
||||
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.headless.api.model.request.AppQueryReq;
|
||||
import com.tencent.supersonic.headless.api.model.request.AppReq;
|
||||
import com.tencent.supersonic.headless.api.model.response.AppDetailResp;
|
||||
import com.tencent.supersonic.headless.api.model.response.AppResp;
|
||||
import com.tencent.supersonic.headless.common.model.request.AppQueryReq;
|
||||
import com.tencent.supersonic.headless.common.model.request.AppReq;
|
||||
import com.tencent.supersonic.headless.common.model.response.AppDetailResp;
|
||||
import com.tencent.supersonic.headless.common.model.response.AppResp;
|
||||
|
||||
public interface AppService {
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
package com.tencent.supersonic.headless.api.service.impl;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.common.pojo.Aggregator;
|
||||
import com.tencent.supersonic.common.pojo.Constants;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.enums.ApiItemType;
|
||||
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
|
||||
import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException;
|
||||
import com.tencent.supersonic.headless.api.aspect.ApiHeaderCheckAspect;
|
||||
import com.tencent.supersonic.headless.api.service.ApiQueryService;
|
||||
import com.tencent.supersonic.headless.api.service.AppService;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.Item;
|
||||
import com.tencent.supersonic.headless.common.model.response.AppDetailResp;
|
||||
import com.tencent.supersonic.headless.common.model.response.DimensionResp;
|
||||
import com.tencent.supersonic.headless.common.model.response.MetricResp;
|
||||
import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp;
|
||||
import com.tencent.supersonic.headless.common.query.pojo.ApiQuerySingleResult;
|
||||
import com.tencent.supersonic.headless.common.query.request.MetaQueryApiReq;
|
||||
import com.tencent.supersonic.headless.common.query.request.QueryApiReq;
|
||||
import com.tencent.supersonic.headless.common.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.headless.common.query.response.ApiQueryResultResp;
|
||||
import com.tencent.supersonic.headless.model.domain.DimensionService;
|
||||
import com.tencent.supersonic.headless.model.domain.MetricService;
|
||||
import com.tencent.supersonic.headless.model.domain.pojo.DimensionFilter;
|
||||
import com.tencent.supersonic.headless.model.domain.pojo.MetaFilter;
|
||||
import com.tencent.supersonic.headless.api.annotation.ApiHeaderCheck;
|
||||
import com.tencent.supersonic.headless.query.service.QueryService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@Service
|
||||
public class ApiQueryServiceImpl implements ApiQueryService {
|
||||
|
||||
private static final long result_size = 10000;
|
||||
|
||||
private AppService appService;
|
||||
|
||||
private MetricService metricService;
|
||||
|
||||
private DimensionService dimensionService;
|
||||
|
||||
private QueryService queryService;
|
||||
|
||||
public ApiQueryServiceImpl(AppService appService,
|
||||
MetricService metricService,
|
||||
DimensionService dimensionService,
|
||||
QueryService queryService) {
|
||||
this.appService = appService;
|
||||
this.metricService = metricService;
|
||||
this.dimensionService = dimensionService;
|
||||
this.queryService = queryService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ApiHeaderCheck
|
||||
public ApiQueryResultResp metricDataQueryById(QueryApiReq queryApiReq,
|
||||
HttpServletRequest request) throws Exception {
|
||||
AppDetailResp appDetailResp = getAppDetailResp(request);
|
||||
authCheck(appDetailResp, queryApiReq.getIds(), ApiItemType.METRIC);
|
||||
List<ApiQuerySingleResult> results = Lists.newArrayList();
|
||||
Map<Long, Item> map = appDetailResp.getConfig().getItems().stream()
|
||||
.collect(Collectors.toMap(Item::getId, i -> i));
|
||||
for (Long id : queryApiReq.getIds()) {
|
||||
Item item = map.get(id);
|
||||
ApiQuerySingleResult apiQuerySingleResult = dataQuery(appDetailResp.getId(),
|
||||
item, queryApiReq.getDateConf());
|
||||
results.add(apiQuerySingleResult);
|
||||
}
|
||||
return ApiQueryResultResp.builder().results(results).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ApiHeaderCheck
|
||||
public QueryResultWithSchemaResp dataQueryByStruct(QueryStructReq queryStructReq,
|
||||
HttpServletRequest request) throws Exception {
|
||||
AppDetailResp appDetailResp = getAppDetailResp(request);
|
||||
structAuthCheck(appDetailResp, queryStructReq);
|
||||
return queryService.queryByStruct(queryStructReq, User.getAppUser(appDetailResp.getId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ApiHeaderCheck
|
||||
public Object metaQuery(MetaQueryApiReq metaQueryApiReq, HttpServletRequest request) {
|
||||
AppDetailResp appDetailResp = getAppDetailResp(request);
|
||||
MetaFilter metaFilter = new MetaFilter();
|
||||
metaFilter.setIds(metaQueryApiReq.getIds());
|
||||
if (ApiItemType.METRIC.equals(metaQueryApiReq.getType())) {
|
||||
authCheck(appDetailResp, metaQueryApiReq.getIds(), ApiItemType.METRIC);
|
||||
return metricService.getMetrics(metaFilter);
|
||||
} else if (ApiItemType.DIMENSION.equals(metaQueryApiReq.getType())) {
|
||||
authCheck(appDetailResp, metaQueryApiReq.getIds(), ApiItemType.DIMENSION);
|
||||
return dimensionService.getDimensions(metaFilter);
|
||||
} else if (ApiItemType.TAG.equals(metaQueryApiReq.getType())) {
|
||||
throw new InvalidArgumentException("标签元数据类型正在支持中");
|
||||
}
|
||||
throw new InvalidArgumentException("不支持的元数据类型:" + metaQueryApiReq.getType());
|
||||
}
|
||||
|
||||
private ApiQuerySingleResult dataQuery(Integer appId, Item item, DateConf dateConf) throws Exception {
|
||||
MetricResp metricResp = metricService.getMetric(item.getId());
|
||||
List<Item> items = item.getRelateItems();
|
||||
List<DimensionResp> dimensionResps = Lists.newArrayList();
|
||||
if (!CollectionUtils.isEmpty(items)) {
|
||||
List<Long> ids = items.stream().map(Item::getId).collect(Collectors.toList());
|
||||
DimensionFilter dimensionFilter = new DimensionFilter();
|
||||
dimensionFilter.setIds(ids);
|
||||
dimensionResps = dimensionService.getDimensions(dimensionFilter);
|
||||
}
|
||||
QueryStructReq queryStructReq = buildQueryStructReq(dimensionResps, metricResp, dateConf);
|
||||
QueryResultWithSchemaResp queryResultWithSchemaResp =
|
||||
queryService.queryByStruct(queryStructReq, User.getAppUser(appId));
|
||||
ApiQuerySingleResult apiQuerySingleResult = new ApiQuerySingleResult();
|
||||
apiQuerySingleResult.setItem(item);
|
||||
apiQuerySingleResult.setResult(queryResultWithSchemaResp);
|
||||
return apiQuerySingleResult;
|
||||
}
|
||||
|
||||
private AppDetailResp getAppDetailResp(HttpServletRequest request) {
|
||||
int appId = Integer.parseInt(request.getHeader(ApiHeaderCheckAspect.APPID));
|
||||
return appService.getApp(appId);
|
||||
}
|
||||
|
||||
private void authCheck(AppDetailResp appDetailResp, List<Long> ids, ApiItemType type) {
|
||||
Set<Long> idsInApp = appDetailResp.getConfig().getAllItems().stream()
|
||||
.filter(item -> type.equals(item.getType())).map(Item::getId).collect(Collectors.toSet());
|
||||
if (!idsInApp.containsAll(ids)) {
|
||||
throw new InvalidArgumentException("查询范围超过应用申请范围, 请检查");
|
||||
}
|
||||
}
|
||||
|
||||
private void structAuthCheck(AppDetailResp appDetailResp, QueryStructReq queryStructReq) {
|
||||
List<Long> metricIdsToQuery = metricService.getMetrics(new MetaFilter(queryStructReq.getModelIds()))
|
||||
.stream().filter(metricResp -> queryStructReq.getMetrics().contains(metricResp.getBizName()))
|
||||
.map(MetricResp::getId).collect(Collectors.toList());
|
||||
List<Long> dimensionIdsToQuery = dimensionService.getDimensions(new MetaFilter(queryStructReq.getModelIds()))
|
||||
.stream().filter(dimensionResp -> queryStructReq.getGroups().contains(dimensionResp.getBizName()))
|
||||
.map(DimensionResp::getId).collect(Collectors.toList());
|
||||
authCheck(appDetailResp, metricIdsToQuery, ApiItemType.METRIC);
|
||||
authCheck(appDetailResp, dimensionIdsToQuery, ApiItemType.DIMENSION);
|
||||
}
|
||||
|
||||
private QueryStructReq buildQueryStructReq(List<DimensionResp> dimensionResps,
|
||||
MetricResp metricResp, DateConf dateConf) {
|
||||
Set<Long> modelIds = dimensionResps.stream().map(DimensionResp::getModelId).collect(Collectors.toSet());
|
||||
modelIds.add(metricResp.getModelId());
|
||||
QueryStructReq queryStructReq = new QueryStructReq();
|
||||
queryStructReq.setGroups(dimensionResps.stream()
|
||||
.map(DimensionResp::getBizName).collect(Collectors.toList()));
|
||||
queryStructReq.getGroups().add(0, getTimeDimension(dateConf));
|
||||
Aggregator aggregator = new Aggregator();
|
||||
aggregator.setColumn(metricResp.getBizName());
|
||||
queryStructReq.setAggregators(Lists.newArrayList(aggregator));
|
||||
queryStructReq.setDateInfo(dateConf);
|
||||
queryStructReq.setModelIds(modelIds);
|
||||
queryStructReq.setLimit(result_size);
|
||||
return queryStructReq;
|
||||
}
|
||||
|
||||
private String getTimeDimension(DateConf dateConf) {
|
||||
if (Constants.MONTH.equals(dateConf.getPeriod())) {
|
||||
return TimeDimensionEnum.MONTH.getName();
|
||||
} else if (Constants.WEEK.equals(dateConf.getPeriod())) {
|
||||
return TimeDimensionEnum.WEEK.getName();
|
||||
} else {
|
||||
return TimeDimensionEnum.DAY.getName();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.model.application;
|
||||
package com.tencent.supersonic.headless.api.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
@@ -10,20 +10,20 @@ import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException;
|
||||
import com.tencent.supersonic.common.pojo.exception.InvalidPermissionException;
|
||||
import com.tencent.supersonic.common.util.BeanMapper;
|
||||
import com.tencent.supersonic.common.util.PageUtils;
|
||||
import com.tencent.supersonic.headless.api.model.enums.AppStatusEnum;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.AppConfig;
|
||||
import com.tencent.supersonic.headless.api.model.request.AppQueryReq;
|
||||
import com.tencent.supersonic.headless.api.model.request.AppReq;
|
||||
import com.tencent.supersonic.headless.api.model.response.AppDetailResp;
|
||||
import com.tencent.supersonic.headless.api.model.response.AppResp;
|
||||
import com.tencent.supersonic.headless.api.model.response.DimensionResp;
|
||||
import com.tencent.supersonic.headless.api.model.response.MetricResp;
|
||||
import com.tencent.supersonic.headless.model.domain.AppService;
|
||||
import com.tencent.supersonic.headless.api.persistence.dataobject.AppDO;
|
||||
import com.tencent.supersonic.headless.api.persistence.mapper.AppMapper;
|
||||
import com.tencent.supersonic.headless.api.service.AppService;
|
||||
import com.tencent.supersonic.headless.common.model.enums.AppStatusEnum;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.AppConfig;
|
||||
import com.tencent.supersonic.headless.common.model.request.AppQueryReq;
|
||||
import com.tencent.supersonic.headless.common.model.request.AppReq;
|
||||
import com.tencent.supersonic.headless.common.model.response.AppDetailResp;
|
||||
import com.tencent.supersonic.headless.common.model.response.AppResp;
|
||||
import com.tencent.supersonic.headless.common.model.response.DimensionResp;
|
||||
import com.tencent.supersonic.headless.common.model.response.MetricResp;
|
||||
import com.tencent.supersonic.headless.model.domain.DimensionService;
|
||||
import com.tencent.supersonic.headless.model.domain.MetricService;
|
||||
import com.tencent.supersonic.headless.model.domain.dataobject.AppDO;
|
||||
import com.tencent.supersonic.headless.model.domain.pojo.MetaFilter;
|
||||
import com.tencent.supersonic.headless.model.infrastructure.mapper.AppMapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
69
headless/common/pom.xml
Normal file
69
headless/common/pom.xml
Normal file
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>headless</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>headless-common</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>ru.yandex.clickhouse</groupId>-->
|
||||
<!-- <artifactId>clickhouse-jdbc</artifactId>-->
|
||||
<!-- <version>${clickhouse.jdbc.version}</version>-->
|
||||
<!-- </dependency>-->
|
||||
<dependency>
|
||||
<groupId>com.clickhouse</groupId>
|
||||
<artifactId>clickhouse-jdbc</artifactId>
|
||||
<version>${clickhouse.jdbc.version}</version>
|
||||
<!-- use uber jar with all dependencies included, change classifier to http for smaller jar -->
|
||||
<classifier>all</classifier>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.validation</groupId>
|
||||
<artifactId>jakarta.validation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-core</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>${fastjson.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<version>${spring.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.tencent.supersonic</groupId>
|
||||
<artifactId>auth-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.enums;
|
||||
package com.tencent.supersonic.headless.common.materialization.enums;
|
||||
|
||||
public enum ElementFrequencyEnum {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.enums;
|
||||
package com.tencent.supersonic.headless.common.materialization.enums;
|
||||
|
||||
public enum ElementTypeEnum {
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.tencent.supersonic.headless.common.materialization.enums;
|
||||
|
||||
|
||||
public enum UpdateCycleEnum {
|
||||
DAY,
|
||||
WEEK,
|
||||
MONTH
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.pojo;
|
||||
package com.tencent.supersonic.headless.common.materialization.pojo;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.enums.TypeEnums;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.pojo;
|
||||
package com.tencent.supersonic.headless.common.materialization.pojo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.pojo;
|
||||
package com.tencent.supersonic.headless.common.materialization.pojo;
|
||||
|
||||
import com.tencent.supersonic.headless.api.model.enums.ModelSourceTypeEnum;
|
||||
import com.tencent.supersonic.headless.api.materialization.enums.UpdateCycleEnum;
|
||||
import com.tencent.supersonic.headless.common.model.enums.ModelSourceTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.materialization.enums.UpdateCycleEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.pojo;
|
||||
package com.tencent.supersonic.headless.common.materialization.pojo;
|
||||
|
||||
|
||||
import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum;
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.request;
|
||||
package com.tencent.supersonic.headless.common.materialization.request;
|
||||
|
||||
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
import com.tencent.supersonic.common.pojo.enums.StatusEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.TypeEnums;
|
||||
import com.tencent.supersonic.headless.api.materialization.enums.ElementFrequencyEnum;
|
||||
import com.tencent.supersonic.headless.api.materialization.enums.ElementTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.materialization.enums.ElementFrequencyEnum;
|
||||
import com.tencent.supersonic.headless.common.materialization.enums.ElementTypeEnum;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.request;
|
||||
package com.tencent.supersonic.headless.common.materialization.request;
|
||||
|
||||
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.request;
|
||||
package com.tencent.supersonic.headless.common.materialization.request;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
import com.tencent.supersonic.common.pojo.enums.StatusEnum;
|
||||
import com.tencent.supersonic.headless.api.materialization.enums.UpdateCycleEnum;
|
||||
import com.tencent.supersonic.headless.api.model.enums.ModelSourceTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.materialization.enums.UpdateCycleEnum;
|
||||
import com.tencent.supersonic.headless.common.model.enums.ModelSourceTypeEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.request;
|
||||
package com.tencent.supersonic.headless.common.materialization.request;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.response;
|
||||
package com.tencent.supersonic.headless.common.materialization.response;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.enums.TypeEnums;
|
||||
import lombok.Data;
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.response;
|
||||
package com.tencent.supersonic.headless.common.materialization.response;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.common.pojo.enums.TypeEnums;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.Measure;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.Measure;
|
||||
import java.util.List;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.response;
|
||||
package com.tencent.supersonic.headless.common.materialization.response;
|
||||
|
||||
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
import com.tencent.supersonic.common.pojo.enums.TypeEnums;
|
||||
import com.tencent.supersonic.headless.api.materialization.enums.ElementFrequencyEnum;
|
||||
import com.tencent.supersonic.headless.api.materialization.enums.ElementTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.materialization.enums.ElementFrequencyEnum;
|
||||
import com.tencent.supersonic.headless.common.materialization.enums.ElementTypeEnum;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.response;
|
||||
package com.tencent.supersonic.headless.common.materialization.response;
|
||||
|
||||
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.response;
|
||||
package com.tencent.supersonic.headless.common.materialization.response;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
import com.tencent.supersonic.headless.api.model.enums.ModelSourceTypeEnum;
|
||||
import com.tencent.supersonic.headless.api.materialization.enums.UpdateCycleEnum;
|
||||
import com.tencent.supersonic.headless.common.model.enums.ModelSourceTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.materialization.enums.UpdateCycleEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.tencent.supersonic.headless.api.materialization.response;
|
||||
package com.tencent.supersonic.headless.common.materialization.response;
|
||||
|
||||
import com.tencent.supersonic.headless.api.model.enums.ModelSourceTypeEnum;
|
||||
import com.tencent.supersonic.headless.api.model.response.DatabaseResp;
|
||||
import com.tencent.supersonic.headless.api.materialization.enums.UpdateCycleEnum;
|
||||
import com.tencent.supersonic.headless.common.model.enums.ModelSourceTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.model.response.DatabaseResp;
|
||||
import com.tencent.supersonic.headless.common.materialization.enums.UpdateCycleEnum;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
public enum AppStatusEnum {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
|
||||
import com.tencent.supersonic.common.pojo.Constants;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
|
||||
public enum DimensionTypeEnum {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
public enum IdentifyTypeEnum {
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
|
||||
public enum MetricTypeEnum {
|
||||
|
||||
ATOMIC,
|
||||
DERIVED
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
public enum OperatorEnum {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
public enum QueryOptMode {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
|
||||
public enum QueryTypeBackEnum {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
|
||||
public enum QueryTypeEnum {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.enums;
|
||||
package com.tencent.supersonic.headless.common.model.enums;
|
||||
|
||||
public enum SemanticTypeEnum {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Data
|
||||
public class AppConfig {
|
||||
|
||||
private List<Item> items = Lists.newArrayList();
|
||||
|
||||
public Set<Item> getAllItems() {
|
||||
Set<Item> itemSet = new HashSet<>();
|
||||
for (Item item : items) {
|
||||
itemSet.add(item);
|
||||
itemSet.addAll(item.getRelateItems());
|
||||
}
|
||||
return itemSet;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.Constants;
|
||||
import java.util.List;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.Constants;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -63,4 +63,8 @@ public class Dim {
|
||||
);
|
||||
}
|
||||
|
||||
public String getFieldName() {
|
||||
return bizName;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@@ -27,4 +27,9 @@ public class Identify {
|
||||
this.type = type;
|
||||
this.bizName = bizName;
|
||||
}
|
||||
|
||||
public String getFieldName() {
|
||||
return bizName;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.common.pojo.enums.ApiItemType;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@@ -9,17 +9,12 @@ import lombok.NoArgsConstructor;
|
||||
@NoArgsConstructor
|
||||
public class Measure {
|
||||
|
||||
|
||||
private String name;
|
||||
|
||||
private String agg;
|
||||
|
||||
private String expr;
|
||||
|
||||
private String constraint;
|
||||
|
||||
private String alias;
|
||||
|
||||
private String createMetric;
|
||||
|
||||
private String bizName;
|
||||
@@ -33,4 +28,8 @@ public class Measure {
|
||||
this.bizName = bizName;
|
||||
}
|
||||
|
||||
public String getFieldName() {
|
||||
return expr;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import java.util.List;
|
||||
import com.google.common.collect.Lists;
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.headless.api.model.enums.DimensionTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.model.enums.DimensionTypeEnum;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.pojo;
|
||||
package com.tencent.supersonic.headless.common.model.pojo;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.common.pojo.PageBaseReq;
|
||||
import com.tencent.supersonic.headless.api.model.enums.AppStatusEnum;
|
||||
import com.tencent.supersonic.headless.common.model.enums.AppStatusEnum;
|
||||
import lombok.Data;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.AppConfig;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.AppConfig;
|
||||
import lombok.Data;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.headless.api.model.enums.DataTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.model.enums.DataTypeEnum;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import java.util.List;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.enums.DataTypeEnums;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.DimValueMap;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.DimValueMap;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.SchemaItem;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
|
||||
import com.tencent.supersonic.headless.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.SchemaItem;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
import lombok.Data;
|
||||
import java.util.List;
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.DataFormat;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.RelateDimension;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.RelateDimension;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.SchemaItem;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
|
||||
import com.tencent.supersonic.headless.api.model.enums.MetricTypeEnum;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.Measure;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.MetricTypeParams;
|
||||
import com.tencent.supersonic.headless.common.model.enums.MetricTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.Measure;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.MetricTypeParams;
|
||||
import lombok.Data;
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.Dim;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.DrillDownDimension;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.ModelDetail;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.Dim;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.DrillDownDimension;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.ModelDetail;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.SchemaItem;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.common.pojo.PageBaseReq;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.request;
|
||||
package com.tencent.supersonic.headless.common.model.request;
|
||||
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.common.pojo.RecordInfo;
|
||||
import com.tencent.supersonic.headless.api.model.enums.AppStatusEnum;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.AppConfig;
|
||||
import com.tencent.supersonic.headless.common.model.enums.AppStatusEnum;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.AppConfig;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@@ -15,7 +15,7 @@ import java.util.List;
|
||||
@Data
|
||||
public class AppResp extends RecordInfo {
|
||||
|
||||
private Long id;
|
||||
private Integer id;
|
||||
|
||||
private String name;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
|
||||
import com.tencent.supersonic.common.pojo.enums.DataTypeEnums;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.DimValueMap;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.DimValueMap;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.SchemaItem;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import com.tencent.supersonic.headless.api.model.pojo.Entity;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.Entity;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.SchemaItem;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import java.io.Serializable;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.tencent.supersonic.common.pojo.DataFormat;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.DrillDownDimension;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.Measure;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.MetricTypeParams;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.RelateDimension;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.DrillDownDimension;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.Measure;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.MetricTypeParams;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.RelateDimension;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.SchemaItem;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.Dim;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.DrillDownDimension;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.Identify;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.ModelDetail;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.Dim;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.DrillDownDimension;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.Identify;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.ModelDetail;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.SchemaItem;
|
||||
import lombok.Data;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.ModelRela;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.Identify;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.Identify;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.common.pojo.QueryAuthorization;
|
||||
import com.tencent.supersonic.common.pojo.QueryColumn;
|
||||
import com.tencent.supersonic.headless.api.model.enums.SemanticTypeEnum;
|
||||
import com.tencent.supersonic.headless.api.model.pojo.QueryResult;
|
||||
import com.tencent.supersonic.headless.common.model.enums.SemanticTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.model.pojo.QueryResult;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
import java.util.List;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.response;
|
||||
package com.tencent.supersonic.headless.common.model.response;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.tencent.supersonic.headless.api.model.yaml;
|
||||
package com.tencent.supersonic.headless.common.model.yaml;
|
||||
|
||||
import com.tencent.supersonic.headless.api.model.enums.ModelSourceTypeEnum;
|
||||
import com.tencent.supersonic.headless.common.model.enums.ModelSourceTypeEnum;
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.yaml;
|
||||
package com.tencent.supersonic.headless.common.model.yaml;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.yaml;
|
||||
package com.tencent.supersonic.headless.common.model.yaml;
|
||||
|
||||
|
||||
import com.tencent.supersonic.common.pojo.enums.DataTypeEnums;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.yaml;
|
||||
package com.tencent.supersonic.headless.common.model.yaml;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.yaml;
|
||||
package com.tencent.supersonic.headless.common.model.yaml;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.api.model.yaml;
|
||||
package com.tencent.supersonic.headless.common.model.yaml;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user