(feature)support adding tag for metric and support super admin configuration (#108)

This commit is contained in:
LXW
2023-09-20 17:00:38 +08:00
committed by GitHub
parent 5a42ff4b78
commit 49ba0e3f41
44 changed files with 693 additions and 256 deletions

View File

@@ -72,7 +72,8 @@ public class DatabaseServiceImpl implements DatabaseService {
private void fillPermission(List<DatabaseResp> databaseResps, User user) {
databaseResps.forEach(databaseResp -> {
if (databaseResp.getAdmins().contains(user.getName())
|| user.getName().equalsIgnoreCase(databaseResp.getCreatedBy())) {
|| user.getName().equalsIgnoreCase(databaseResp.getCreatedBy())
|| user.isSuperAdmin()) {
databaseResp.setHasPermission(true);
databaseResp.setHasEditPermission(true);
databaseResp.setHasUsePermission(true);
@@ -111,7 +112,8 @@ public class DatabaseServiceImpl implements DatabaseService {
List<String> viewers = databaseResp.getViewers();
if (!admins.contains(user.getName())
&& !viewers.contains(user.getName())
&& !databaseResp.getCreatedBy().equalsIgnoreCase(user.getName())) {
&& !databaseResp.getCreatedBy().equalsIgnoreCase(user.getName())
&& !user.isSuperAdmin()) {
String message = String.format("您暂无当前数据库%s权限, 请联系数据库管理员%s开通",
databaseResp.getName(),
String.join(",", admins));

View File

@@ -96,12 +96,12 @@ public class DomainServiceImpl implements DomainService {
@Override
public List<DomainResp> getDomainListWithAdminAuth(User user) {
Set<DomainResp> domainWithAuthAll = getDomainAuthSet(user.getName(), AuthType.ADMIN);
Set<DomainResp> domainWithAuthAll = getDomainAuthSet(user, AuthType.ADMIN);
if (!CollectionUtils.isEmpty(domainWithAuthAll)) {
List<Long> domainIds = domainWithAuthAll.stream().map(DomainResp::getId).collect(Collectors.toList());
domainWithAuthAll.addAll(getParentDomain(domainIds));
}
List<ModelResp> modelResps = modelService.getModelAuthList(user.getName(), AuthType.ADMIN);
List<ModelResp> modelResps = modelService.getModelAuthList(user, AuthType.ADMIN);
if (!CollectionUtils.isEmpty(modelResps)) {
List<Long> domainIds = modelResps.stream().map(ModelResp::getDomainId).collect(Collectors.toList());
domainWithAuthAll.addAll(getParentDomain(domainIds));
@@ -111,18 +111,18 @@ public class DomainServiceImpl implements DomainService {
}
@Override
public Set<DomainResp> getDomainAuthSet(String userName, AuthType authTypeEnum) {
public Set<DomainResp> getDomainAuthSet(User user, AuthType authTypeEnum) {
List<DomainResp> domainResps = getDomainList();
Set<String> orgIds = userService.getUserAllOrgId(userName);
Set<String> orgIds = userService.getUserAllOrgId(user.getName());
List<DomainResp> domainWithAuth = Lists.newArrayList();
if (authTypeEnum.equals(AuthType.ADMIN)) {
domainWithAuth = domainResps.stream()
.filter(domainResp -> checkAdminPermission(orgIds, userName, domainResp))
.filter(domainResp -> checkAdminPermission(orgIds, user, domainResp))
.collect(Collectors.toList());
}
if (authTypeEnum.equals(AuthType.VISIBLE)) {
domainWithAuth = domainResps.stream()
.filter(domainResp -> checkViewerPermission(orgIds, userName, domainResp))
.filter(domainResp -> checkViewerPermission(orgIds, user, domainResp))
.collect(Collectors.toList());
}
List<Long> domainIds = domainWithAuth.stream().map(DomainResp::getId)
@@ -240,11 +240,13 @@ public class DomainServiceImpl implements DomainService {
}
private boolean checkAdminPermission(Set<String> orgIds, String userName, DomainResp domainResp) {
private boolean checkAdminPermission(Set<String> orgIds, User user, DomainResp domainResp) {
List<String> admins = domainResp.getAdmins();
List<String> adminOrgs = domainResp.getAdminOrgs();
if (admins.contains(userName) || domainResp.getCreatedBy().equals(userName)) {
if (user.isSuperAdmin()) {
return true;
}
if (admins.contains(user.getName()) || domainResp.getCreatedBy().equals(user.getName())) {
return true;
}
if (CollectionUtils.isEmpty(adminOrgs)) {
@@ -258,12 +260,17 @@ public class DomainServiceImpl implements DomainService {
return false;
}
private boolean checkViewerPermission(Set<String> orgIds, String userName, DomainResp domainDesc) {
private boolean checkViewerPermission(Set<String> orgIds, User user, DomainResp domainDesc) {
List<String> admins = domainDesc.getAdmins();
List<String> viewers = domainDesc.getViewers();
List<String> adminOrgs = domainDesc.getAdminOrgs();
List<String> viewOrgs = domainDesc.getViewOrgs();
if (admins.contains(userName) || viewers.contains(userName) || domainDesc.getCreatedBy().equals(userName)) {
if (user.isSuperAdmin()) {
return true;
}
if (admins.contains(user.getName())
|| viewers.contains(user.getName())
|| domainDesc.getCreatedBy().equals(user.getName())) {
return true;
}
if (CollectionUtils.isEmpty(adminOrgs) && CollectionUtils.isEmpty(viewOrgs)) {

View File

@@ -9,6 +9,7 @@ import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.DataAddEvent;
import com.tencent.supersonic.common.pojo.DataDeleteEvent;
import com.tencent.supersonic.common.pojo.DataUpdateEvent;
import com.tencent.supersonic.common.pojo.enums.AuthType;
import com.tencent.supersonic.common.pojo.enums.DictWordType;
import com.tencent.supersonic.common.util.ChatGptHelper;
import com.tencent.supersonic.semantic.api.model.pojo.Measure;
@@ -28,6 +29,7 @@ import com.tencent.supersonic.semantic.model.domain.utils.MetricConverter;
import com.tencent.supersonic.semantic.model.domain.MetricService;
import com.tencent.supersonic.semantic.model.domain.pojo.Metric;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -123,7 +125,7 @@ public class MetricServiceImpl implements MetricService {
}
@Override
public PageInfo<MetricResp> queryMetric(PageMetricReq pageMetricReq) {
public PageInfo<MetricResp> queryMetric(PageMetricReq pageMetricReq, User user) {
MetricFilter metricFilter = new MetricFilter();
BeanUtils.copyProperties(pageMetricReq, metricFilter);
Set<DomainResp> domainResps = domainService.getDomainChildren(pageMetricReq.getDomainIds());
@@ -137,7 +139,9 @@ public class MetricServiceImpl implements MetricService {
.doSelectPageInfo(() -> queryMetric(metricFilter));
PageInfo<MetricResp> pageInfo = new PageInfo<>();
BeanUtils.copyProperties(metricDOPageInfo, pageInfo);
pageInfo.setList(convertList(metricDOPageInfo.getList()));
List<MetricResp> metricResps = convertList(metricDOPageInfo.getList());
fillAdminRes(metricResps, user);
pageInfo.setList(metricResps);
return pageInfo;
}
@@ -145,6 +149,21 @@ public class MetricServiceImpl implements MetricService {
return metricRepository.getMetric(metricFilter);
}
private void fillAdminRes(List<MetricResp> metricResps, User user) {
List<ModelResp> modelResps = modelService.getModelListWithAuth(user, null, AuthType.ADMIN);
if (CollectionUtils.isEmpty(modelResps)) {
return;
}
Set<Long> modelIdSet = modelResps.stream().map(ModelResp::getId).collect(Collectors.toSet());
for (MetricResp metricResp : metricResps) {
if (modelIdSet.contains(metricResp.getModelId())) {
metricResp.setHasAdminRes(true);
}
}
}
@Override
public MetricResp getMetric(Long modelId, String bizName) {
List<MetricResp> metricDescs = getMetricByModelId(modelId);
@@ -250,6 +269,16 @@ public class MetricServiceImpl implements MetricService {
});
}
@Override
public Set<String> getMetricTags() {
List<MetricResp> metricResps = getMetrics();
if (CollectionUtils.isEmpty(metricResps)) {
return new HashSet<>();
}
return metricResps.stream().flatMap(metricResp ->
metricResp.getTags().stream()).collect(Collectors.toSet());
}
private void saveMetricBatch(List<Metric> metrics, User user) {
if (CollectionUtils.isEmpty(metrics)) {
@@ -293,7 +322,7 @@ public class MetricServiceImpl implements MetricService {
Map<Long, ModelResp> modelMap = modelService.getModelMap();
if (!CollectionUtils.isEmpty(metricDOS)) {
metricDescs = metricDOS.stream()
.map(metricDO -> MetricConverter.convert2MetricDesc(metricDO, modelMap))
.map(metricDO -> MetricConverter.convert2MetricResp(metricDO, modelMap))
.collect(Collectors.toList());
}
return metricDescs;

View File

@@ -96,10 +96,10 @@ public class ModelServiceImpl implements ModelService {
}
@Override
public List<ModelResp> getModelListWithAuth(String userName, Long domainId, AuthType authType) {
List<ModelResp> modelResps = getModelAuthList(userName, authType);
public List<ModelResp> getModelListWithAuth(User user, Long domainId, AuthType authType) {
List<ModelResp> modelResps = getModelAuthList(user, authType);
Set<ModelResp> modelRespSet = new HashSet<>(modelResps);
List<ModelResp> modelRespsAuthInheritDomain = getModelRespAuthInheritDomain(userName, authType);
List<ModelResp> modelRespsAuthInheritDomain = getModelRespAuthInheritDomain(user, authType);
modelRespSet.addAll(modelRespsAuthInheritDomain);
if (domainId != null && domainId > 0) {
modelRespSet = modelRespSet.stream().filter(modelResp ->
@@ -108,8 +108,8 @@ public class ModelServiceImpl implements ModelService {
return fillMetricInfo(new ArrayList<>(modelRespSet));
}
public List<ModelResp> getModelRespAuthInheritDomain(String userName, AuthType authType) {
Set<DomainResp> domainResps = domainService.getDomainAuthSet(userName, authType);
public List<ModelResp> getModelRespAuthInheritDomain(User user, AuthType authType) {
Set<DomainResp> domainResps = domainService.getDomainAuthSet(user, authType);
if (CollectionUtils.isEmpty(domainResps)) {
return Lists.newArrayList();
}
@@ -120,18 +120,18 @@ public class ModelServiceImpl implements ModelService {
}
@Override
public List<ModelResp> getModelAuthList(String userName, AuthType authTypeEnum) {
public List<ModelResp> getModelAuthList(User user, AuthType authTypeEnum) {
List<ModelResp> modelResps = getModelList();
Set<String> orgIds = userService.getUserAllOrgId(userName);
Set<String> orgIds = userService.getUserAllOrgId(user.getName());
List<ModelResp> modelWithAuth = Lists.newArrayList();
if (authTypeEnum.equals(AuthType.ADMIN)) {
modelWithAuth = modelResps.stream()
.filter(modelResp -> checkAdminPermission(orgIds, userName, modelResp))
.filter(modelResp -> checkAdminPermission(orgIds, user, modelResp))
.collect(Collectors.toList());
}
if (authTypeEnum.equals(AuthType.VISIBLE)) {
modelWithAuth = modelResps.stream()
.filter(domainResp -> checkViewerPermission(orgIds, userName, domainResp))
.filter(domainResp -> checkViewerPermission(orgIds, user, domainResp))
.collect(Collectors.toList());
}
return modelWithAuth;
@@ -324,9 +324,13 @@ public class ModelServiceImpl implements ModelService {
return new ArrayList<>(getModelMap().keySet());
}
public static boolean checkAdminPermission(Set<String> orgIds, String userName, ModelResp modelResp) {
public static boolean checkAdminPermission(Set<String> orgIds, User user, ModelResp modelResp) {
List<String> admins = modelResp.getAdmins();
List<String> adminOrgs = modelResp.getAdminOrgs();
if (user.isSuperAdmin()) {
return true;
}
String userName = user.getName();
if (admins.contains(userName) || modelResp.getCreatedBy().equals(userName)) {
return true;
}
@@ -341,14 +345,18 @@ public class ModelServiceImpl implements ModelService {
return false;
}
public static boolean checkViewerPermission(Set<String> orgIds, String userName, ModelResp modelResp) {
public static boolean checkViewerPermission(Set<String> orgIds, User user, ModelResp modelResp) {
List<String> admins = modelResp.getAdmins();
List<String> viewers = modelResp.getViewers();
List<String> adminOrgs = modelResp.getAdminOrgs();
List<String> viewOrgs = modelResp.getViewOrgs();
if (user.isSuperAdmin()) {
return true;
}
if (modelResp.openToAll()) {
return true;
}
String userName = user.getName();
if (admins.contains(userName) || viewers.contains(userName) || modelResp.getCreatedBy().equals(userName)) {
return true;
}

View File

@@ -30,7 +30,7 @@ public interface DomainService {
List<DomainResp> getDomainListWithAdminAuth(User user);
Set<DomainResp> getDomainAuthSet(String userName, AuthType authTypeEnum);
Set<DomainResp> getDomainAuthSet(User user, AuthType authTypeEnum);
Set<DomainResp> getDomainChildren(List<Long> domainId);

View File

@@ -7,6 +7,7 @@ import com.tencent.supersonic.semantic.api.model.request.PageMetricReq;
import com.tencent.supersonic.semantic.api.model.response.MetricResp;
import java.util.List;
import java.util.Set;
public interface MetricService {
@@ -22,7 +23,7 @@ public interface MetricService {
void createMetricBatch(List<MetricReq> metricReqs, User user) throws Exception;
PageInfo<MetricResp> queryMetric(PageMetricReq pageMetrricReq);
PageInfo<MetricResp> queryMetric(PageMetricReq pageMetricReq, User user);
MetricResp getMetric(Long modelId, String bizName);
@@ -35,4 +36,6 @@ public interface MetricService {
void deleteMetric(Long id) throws Exception;
List<String> mockAlias(MetricReq metricReq, String mockType, User user);
Set<String> getMetricTags();
}

View File

@@ -13,9 +13,9 @@ import java.util.Map;
public interface ModelService {
List<ModelResp> getModelListWithAuth(String userName, Long domainId, AuthType authType);
List<ModelResp> getModelListWithAuth(User user, Long domainId, AuthType authType);
List<ModelResp> getModelAuthList(String userName, AuthType authTypeEnum);
List<ModelResp> getModelAuthList(User user, AuthType authTypeEnum);
List<ModelResp> getModelByDomainIds(List<Long> domainIds);

View File

@@ -3,116 +3,247 @@ package com.tencent.supersonic.semantic.model.domain.dataobject;
import java.util.Date;
public class MetricDO {
/**
*
*/
private Long id;
/**
* 主体域ID
*/
private Long modelId;
/**
* 指标名称
*/
private String name;
/**
* 字段名称
*/
private String bizName;
/**
* 描述
*/
private String description;
/**
* 指标状态,0正常,1下架,2删除
*/
private Integer status;
/**
* 敏感级别
*/
private Integer sensitiveLevel;
/**
* 指标类型 proxy,expr
*/
private String type;
/**
* 创建时间
*/
private Date createdAt;
/**
* 创建人
*/
private String createdBy;
/**
* 更新时间
*/
private Date updatedAt;
/**
* 更新人
*/
private String updatedBy;
/**
* 数值类型
*/
private String dataFormatType;
/**
* 数值类型参数
*/
private String dataFormat;
/**
*
*/
private String alias;
/**
*
*/
private String tags;
/**
* 类型参数
*/
private String typeParams;
/**
*
* @return id
*/
public Long getId() {
return id;
}
/**
*
* @param id
*/
public void setId(Long id) {
this.id = id;
}
/**
* 主体域ID
* @return model_id 主体域ID
*/
public Long getModelId() {
return modelId;
}
/**
* 主体域ID
* @param modelId 主体域ID
*/
public void setModelId(Long modelId) {
this.modelId = modelId;
}
/**
* 指标名称
* @return name 指标名称
*/
public String getName() {
return name;
}
/**
* 指标名称
* @param name 指标名称
*/
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
/**
* 字段名称
* @return biz_name 字段名称
*/
public String getBizName() {
return bizName;
}
/**
* 字段名称
* @param bizName 字段名称
*/
public void setBizName(String bizName) {
this.bizName = bizName == null ? null : bizName.trim();
}
/**
* 描述
* @return description 描述
*/
public String getDescription() {
return description;
}
/**
* 描述
* @param description 描述
*/
public void setDescription(String description) {
this.description = description == null ? null : description.trim();
}
/**
* 指标状态,0正常,1下架,2删除
* @return status 指标状态,0正常,1下架,2删除
*/
public Integer getStatus() {
return status;
}
/**
* 指标状态,0正常,1下架,2删除
* @param status 指标状态,0正常,1下架,2删除
*/
public void setStatus(Integer status) {
this.status = status;
}
/**
* 敏感级别
* @return sensitive_level 敏感级别
*/
public Integer getSensitiveLevel() {
return sensitiveLevel;
}
/**
* 敏感级别
* @param sensitiveLevel 敏感级别
*/
public void setSensitiveLevel(Integer sensitiveLevel) {
this.sensitiveLevel = sensitiveLevel;
}
/**
* 指标类型 proxy,expr
* @return type 指标类型 proxy,expr
*/
public String getType() {
return type;
}
/**
* 指标类型 proxy,expr
* @param type 指标类型 proxy,expr
*/
public void setType(String type) {
this.type = type == null ? null : type.trim();
}
/**
* 创建时间
* @return created_at 创建时间
*/
public Date getCreatedAt() {
return createdAt;
}
/**
* 创建时间
* @param createdAt 创建时间
*/
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
/**
* 创建人
* @return created_by 创建人
*/
public String getCreatedBy() {
return createdBy;
}
/**
* 创建人
* @param createdBy 创建人
*/
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy == null ? null : createdBy.trim();
}
@@ -182,21 +313,37 @@ public class MetricDO {
}
/**
*
* @return alias
*
* @return alias
*/
public String getAlias() {
return alias;
}
/**
*
* @param alias
*
* @param alias
*/
public void setAlias(String alias) {
this.alias = alias == null ? null : alias.trim();
}
/**
*
* @return tags
*/
public String getTags() {
return tags;
}
/**
*
* @param tags
*/
public void setTags(String tags) {
this.tags = tags == null ? null : tags.trim();
}
/**
* 类型参数
* @return type_params 类型参数
@@ -212,4 +359,4 @@ public class MetricDO {
public void setTypeParams(String typeParams) {
this.typeParams = typeParams == null ? null : typeParams.trim();
}
}
}

View File

@@ -31,6 +31,7 @@ public class MetricDOExample {
protected Integer limitEnd;
/**
*
* @mbg.generated
*/
public MetricDOExample() {
@@ -38,6 +39,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public void setOrderByClause(String orderByClause) {
@@ -45,6 +47,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public String getOrderByClause() {
@@ -52,6 +55,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public void setDistinct(boolean distinct) {
@@ -59,6 +63,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public boolean isDistinct() {
@@ -66,6 +71,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public List<Criteria> getOredCriteria() {
@@ -73,6 +79,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public void or(Criteria criteria) {
@@ -80,6 +87,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public Criteria or() {
@@ -89,6 +97,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public Criteria createCriteria() {
@@ -100,6 +109,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
protected Criteria createCriteriaInternal() {
@@ -108,6 +118,7 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public void clear() {
@@ -117,13 +128,15 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public void setLimitStart(Integer limitStart) {
this.limitStart = limitStart;
this.limitStart=limitStart;
}
/**
*
* @mbg.generated
*/
public Integer getLimitStart() {
@@ -131,13 +144,15 @@ public class MetricDOExample {
}
/**
*
* @mbg.generated
*/
public void setLimitEnd(Integer limitEnd) {
this.limitEnd = limitEnd;
this.limitEnd=limitEnd;
}
/**
*
* @mbg.generated
*/
public Integer getLimitEnd() {
@@ -1177,6 +1192,76 @@ public class MetricDOExample {
addCriterion("alias not between", value1, value2, "alias");
return (Criteria) this;
}
public Criteria andTagsIsNull() {
addCriterion("tags is null");
return (Criteria) this;
}
public Criteria andTagsIsNotNull() {
addCriterion("tags is not null");
return (Criteria) this;
}
public Criteria andTagsEqualTo(String value) {
addCriterion("tags =", value, "tags");
return (Criteria) this;
}
public Criteria andTagsNotEqualTo(String value) {
addCriterion("tags <>", value, "tags");
return (Criteria) this;
}
public Criteria andTagsGreaterThan(String value) {
addCriterion("tags >", value, "tags");
return (Criteria) this;
}
public Criteria andTagsGreaterThanOrEqualTo(String value) {
addCriterion("tags >=", value, "tags");
return (Criteria) this;
}
public Criteria andTagsLessThan(String value) {
addCriterion("tags <", value, "tags");
return (Criteria) this;
}
public Criteria andTagsLessThanOrEqualTo(String value) {
addCriterion("tags <=", value, "tags");
return (Criteria) this;
}
public Criteria andTagsLike(String value) {
addCriterion("tags like", value, "tags");
return (Criteria) this;
}
public Criteria andTagsNotLike(String value) {
addCriterion("tags not like", value, "tags");
return (Criteria) this;
}
public Criteria andTagsIn(List<String> values) {
addCriterion("tags in", values, "tags");
return (Criteria) this;
}
public Criteria andTagsNotIn(List<String> values) {
addCriterion("tags not in", values, "tags");
return (Criteria) this;
}
public Criteria andTagsBetween(String value1, String value2) {
addCriterion("tags between", value1, value2, "tags");
return (Criteria) this;
}
public Criteria andTagsNotBetween(String value1, String value2) {
addCriterion("tags not between", value1, value2, "tags");
return (Criteria) this;
}
}
/**
@@ -1209,6 +1294,38 @@ public class MetricDOExample {
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
@@ -1244,37 +1361,5 @@ public class MetricDOExample {
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
}
}
}

View File

@@ -1,10 +1,12 @@
package com.tencent.supersonic.semantic.model.domain.pojo;
import com.tencent.supersonic.common.pojo.DataFormat;
import com.tencent.supersonic.semantic.api.model.pojo.MetricTypeParams;
import com.tencent.supersonic.semantic.api.model.pojo.SchemaItem;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import java.util.List;
@Data
public class Metric extends SchemaItem {
@@ -23,4 +25,13 @@ public class Metric extends SchemaItem {
private String alias;
private List<String> tags;
public String getTag() {
if (CollectionUtils.isEmpty(tags)) {
return "";
}
return StringUtils.join(tags, ",");
}
}

View File

@@ -37,6 +37,7 @@ public class MetricConverter {
if (metric.getDataFormat() != null) {
metricDO.setDataFormat(JSONObject.toJSONString(metric.getDataFormat()));
}
metricDO.setTags(metric.getTag());
return metricDO;
}
@@ -51,27 +52,23 @@ public class MetricConverter {
BeanUtils.copyProperties(metric, metricDO);
metricDO.setTypeParams(JSONObject.toJSONString(metric.getTypeParams()));
metricDO.setDataFormat(JSONObject.toJSONString(metric.getDataFormat()));
metricDO.setTags(metric.getTag());
return metricDO;
}
public static MetricResp convert2MetricDesc(MetricDO metricDO, Map<Long, ModelResp> modelMap) {
MetricResp metricDesc = new MetricResp();
BeanUtils.copyProperties(metricDO, metricDesc);
metricDesc.setTypeParams(JSONObject.parseObject(metricDO.getTypeParams(), MetricTypeParams.class));
metricDesc.setDataFormat(JSONObject.parseObject(metricDO.getDataFormat(), DataFormat.class));
public static MetricResp convert2MetricResp(MetricDO metricDO, Map<Long, ModelResp> modelMap) {
MetricResp metricResp = new MetricResp();
BeanUtils.copyProperties(metricDO, metricResp);
metricResp.setTypeParams(JSONObject.parseObject(metricDO.getTypeParams(), MetricTypeParams.class));
metricResp.setDataFormat(JSONObject.parseObject(metricDO.getDataFormat(), DataFormat.class));
ModelResp modelResp = modelMap.get(metricDO.getModelId());
if (modelResp != null) {
metricDesc.setModelName(modelResp.getName());
metricResp.setModelName(modelResp.getName());
metricResp.setDomainId(modelResp.getDomainId());
}
return metricDesc;
}
public static Metric convert2Metric(MetricDO metricDO) {
Metric metric = new Metric();
BeanUtils.copyProperties(metricDO, metric);
metric.setTypeParams(JSONObject.parseObject(metricDO.getTypeParams(), MetricTypeParams.class));
return metric;
metricResp.setTag(metricDO.getTags());
return metricResp;
}

View File

@@ -9,6 +9,7 @@ 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;
@@ -68,8 +69,11 @@ public class MetricController {
@PostMapping("/queryMetric")
public PageInfo<MetricResp> queryMetric(@RequestBody PageMetricReq pageMetrricReq) {
return metricService.queryMetric(pageMetrricReq);
public PageInfo<MetricResp> queryMetric(@RequestBody PageMetricReq pageMetricReq,
HttpServletRequest request,
HttpServletResponse response) {
User user = UserHolder.findUser(request, response);
return metricService.queryMetric(pageMetricReq, user);
}
@GetMapping("getMetric/{modelId}/{bizName}")
@@ -90,4 +94,9 @@ public class MetricController {
}
@GetMapping("/getMetricTags")
public Set<String> getMetricTags() {
return metricService.getMetricTags();
}
}

View File

@@ -60,7 +60,7 @@ public class ModelController {
HttpServletRequest request,
HttpServletResponse response) {
User user = UserHolder.findUser(request, response);
return modelService.getModelListWithAuth(user.getName(), domainId, AuthType.ADMIN);
return modelService.getModelListWithAuth(user, domainId, AuthType.ADMIN);
}

View File

@@ -17,6 +17,7 @@
<result column="data_format_type" jdbcType="VARCHAR" property="dataFormatType" />
<result column="data_format" jdbcType="VARCHAR" property="dataFormat" />
<result column="alias" jdbcType="VARCHAR" property="alias" />
<result column="tags" jdbcType="VARCHAR" property="tags" />
</resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.tencent.supersonic.semantic.model.domain.dataobject.MetricDO">
<result column="type_params" jdbcType="LONGVARCHAR" property="typeParams" />
@@ -52,7 +53,7 @@
</sql>
<sql id="Base_Column_List">
id, model_id, name, biz_name, description, status, sensitive_level, type, created_at,
created_by, updated_at, updated_by, data_format_type, data_format, alias
created_by, updated_at, updated_by, data_format_type, data_format, alias, tags
</sql>
<sql id="Blob_Column_List">
type_params
@@ -108,13 +109,13 @@
sensitive_level, type, created_at,
created_by, updated_at, updated_by,
data_format_type, data_format, alias,
type_params)
tags, type_params)
values (#{id,jdbcType=BIGINT}, #{modelId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR},
#{bizName,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER},
#{sensitiveLevel,jdbcType=INTEGER}, #{type,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP},
#{createdBy,jdbcType=VARCHAR}, #{updatedAt,jdbcType=TIMESTAMP}, #{updatedBy,jdbcType=VARCHAR},
#{dataFormatType,jdbcType=VARCHAR}, #{dataFormat,jdbcType=VARCHAR}, #{alias,jdbcType=VARCHAR},
#{typeParams,jdbcType=LONGVARCHAR})
#{tags,jdbcType=VARCHAR}, #{typeParams,jdbcType=LONGVARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.tencent.supersonic.semantic.model.domain.dataobject.MetricDO">
insert into s2_metric
@@ -164,6 +165,9 @@
<if test="alias != null">
alias,
</if>
<if test="tags != null">
tags,
</if>
<if test="typeParams != null">
type_params,
</if>
@@ -214,6 +218,9 @@
<if test="alias != null">
#{alias,jdbcType=VARCHAR},
</if>
<if test="tags != null">
#{tags,jdbcType=VARCHAR},
</if>
<if test="typeParams != null">
#{typeParams,jdbcType=LONGVARCHAR},
</if>
@@ -270,6 +277,9 @@
<if test="alias != null">
alias = #{alias,jdbcType=VARCHAR},
</if>
<if test="tags != null">
tags = #{tags,jdbcType=VARCHAR},
</if>
<if test="typeParams != null">
type_params = #{typeParams,jdbcType=LONGVARCHAR},
</if>
@@ -292,6 +302,7 @@
data_format_type = #{dataFormatType,jdbcType=VARCHAR},
data_format = #{dataFormat,jdbcType=VARCHAR},
alias = #{alias,jdbcType=VARCHAR},
tags = #{tags,jdbcType=VARCHAR},
type_params = #{typeParams,jdbcType=LONGVARCHAR}
where id = #{id,jdbcType=BIGINT}
</update>
@@ -310,7 +321,8 @@
updated_by = #{updatedBy,jdbcType=VARCHAR},
data_format_type = #{dataFormatType,jdbcType=VARCHAR},
data_format = #{dataFormat,jdbcType=VARCHAR},
alias = #{alias,jdbcType=VARCHAR}
alias = #{alias,jdbcType=VARCHAR},
tags = #{tags,jdbcType=VARCHAR}
where id = #{id,jdbcType=BIGINT}
</update>
</mapper>

View File

@@ -2,22 +2,26 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tencent.supersonic.semantic.model.infrastructure.mapper.MetricDOCustomMapper">
<resultMap id="BaseResultMap"
type="com.tencent.supersonic.semantic.model.domain.dataobject.MetricDO">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="model_id" jdbcType="BIGINT" property="modelId"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<result column="biz_name" jdbcType="VARCHAR" property="bizName"/>
<result column="description" jdbcType="VARCHAR" property="description"/>
<result column="type" jdbcType="VARCHAR" property="type"/>
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt"/>
<result column="created_by" jdbcType="VARCHAR" property="createdBy"/>
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt"/>
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy"/>
<resultMap id="BaseResultMap" type="com.tencent.supersonic.semantic.model.domain.dataobject.MetricDO">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="model_id" jdbcType="BIGINT" property="modelId" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="biz_name" jdbcType="VARCHAR" property="bizName" />
<result column="description" jdbcType="VARCHAR" property="description" />
<result column="status" jdbcType="INTEGER" property="status" />
<result column="sensitive_level" jdbcType="INTEGER" property="sensitiveLevel" />
<result column="type" jdbcType="VARCHAR" property="type" />
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="created_by" jdbcType="VARCHAR" property="createdBy" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy" />
<result column="data_format_type" jdbcType="VARCHAR" property="dataFormatType" />
<result column="data_format" jdbcType="VARCHAR" property="dataFormat" />
<result column="alias" jdbcType="VARCHAR" property="alias" />
<result column="tags" jdbcType="VARCHAR" property="tags" />
</resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs"
type="com.tencent.supersonic.semantic.model.domain.dataobject.MetricDO">
<result column="type_params" jdbcType="LONGVARCHAR" property="typeParams"/>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.tencent.supersonic.semantic.model.domain.dataobject.MetricDO">
<result column="type_params" jdbcType="LONGVARCHAR" property="typeParams" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
@@ -51,12 +55,11 @@
</where>
</sql>
<sql id="Base_Column_List">
id
, model_id, name, biz_name, description, type, created_at, created_by, updated_at,
updated_by
id, model_id, name, biz_name, description, status, sensitive_level, type, created_at,
created_by, updated_at, updated_by, data_format_type, data_format, alias, tags
</sql>
<sql id="Blob_Column_List">
typeParams
type_params
</sql>
<insert id="batchInsert" parameterType="java.util.List">
@@ -108,7 +111,8 @@
and ( id like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
biz_name like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
description like CONCAT('%',#{key , jdbcType=VARCHAR},'%') )
description like CONCAT('%',#{key , jdbcType=VARCHAR},'%') or
tags like CONCAT('%',#{key , jdbcType=VARCHAR},'%') )
</if>
<if test="id != null">
and id like CONCAT('%',#{id , jdbcType=VARCHAR},'%')