This is an automated email from the ASF dual-hosted git repository.
dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/master by this push:
new 1ba62ecc0b [INLONG-10363][Manager] Support template multi tenant
management (#10372)
1ba62ecc0b is described below
commit 1ba62ecc0ba1fb5b6ccc188c3ca88cbec34dbf51
Author: fuweng11 <[email protected]>
AuthorDate: Tue Jun 11 20:51:32 2024 +0800
[INLONG-10363][Manager] Support template multi tenant management (#10372)
---
.../manager/common/enums/OperationTarget.java | 4 +-
.../manager/dao/entity/TenantTemplateEntity.java} | 44 ++++----
.../dao/mapper/TenantTemplateEntityMapper.java} | 35 +++----
.../resources/mappers/TemplateEntityMapper.xml | 1 +
.../mappers/TenantTemplateEntityMapper.xml | 112 +++++++++++++++++++++
.../inlong/manager/pojo/stream/TemplateField.java | 2 +-
.../manager/pojo/stream/TenantTemplateInfo.java | 63 ++++++++++++
.../pojo/stream/TenantTemplatePageRequest.java | 48 +++++++++
.../manager/pojo/stream/TenantTemplateRequest.java | 53 ++++++++++
.../service/stream/TemplateServiceImpl.java | 47 +++++++++
.../main/resources/h2/apache_inlong_manager.sql | 18 ++++
.../manager-web/sql/apache_inlong_manager.sql | 21 +++-
inlong-manager/manager-web/sql/changes-1.13.0.sql | 19 ++++
.../manager/web/controller/TemplateController.java | 106 +++++++++++++++++++
14 files changed, 522 insertions(+), 51 deletions(-)
diff --git
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
index e6c866a0e1..d92fb31b33 100644
---
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
+++
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
@@ -44,6 +44,8 @@ public enum OperationTarget {
INLONG_ROLE,
- TENANT_ROLE
+ TENANT_ROLE,
+
+ TEMPLATE
}
diff --git
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/TenantTemplateEntity.java
similarity index 61%
copy from
inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
copy to
inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/TenantTemplateEntity.java
index e6c866a0e1..e1ceb81143 100644
---
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
+++
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/TenantTemplateEntity.java
@@ -15,35 +15,25 @@
* limitations under the License.
*/
-package org.apache.inlong.manager.common.enums;
+package org.apache.inlong.manager.dao.entity;
-/**
- * Operation target
- */
-public enum OperationTarget {
-
- TENANT,
-
- GROUP,
-
- STREAM,
-
- SOURCE,
-
- SINK,
-
- CONSUME,
-
- WORKFLOW,
-
- NODE,
-
- CLUSTER,
+import lombok.Data;
- TRANSFORM,
+import java.io.Serializable;
+import java.util.Date;
- INLONG_ROLE,
+@Data
+public class TenantTemplateEntity implements Serializable {
- TENANT_ROLE
+ private static final long serialVersionUID = 1L;
-}
+ private Integer id;
+ private String tenant;
+ private String templateName;
+ private Integer isDeleted;
+ private String creator;
+ private String modifier;
+ private Date createTime;
+ private Date modifyTime;
+ private Integer version;
+}
\ No newline at end of file
diff --git
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/TenantTemplateEntityMapper.java
similarity index 52%
copy from
inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
copy to
inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/TenantTemplateEntityMapper.java
index e6c866a0e1..22c037a278 100644
---
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java
+++
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/TenantTemplateEntityMapper.java
@@ -15,35 +15,28 @@
* limitations under the License.
*/
-package org.apache.inlong.manager.common.enums;
+package org.apache.inlong.manager.dao.mapper;
-/**
- * Operation target
- */
-public enum OperationTarget {
-
- TENANT,
-
- GROUP,
-
- STREAM,
+import org.apache.inlong.manager.dao.entity.TenantTemplateEntity;
+import org.apache.inlong.manager.pojo.cluster.TenantClusterTagPageRequest;
- SOURCE,
+import org.springframework.stereotype.Repository;
- SINK,
+import java.util.List;
- CONSUME,
+@Repository
+public interface TenantTemplateEntityMapper {
- WORKFLOW,
+ int updateByIdSelective(TenantTemplateEntity record);
- NODE,
+ int insert(TenantTemplateEntity record);
- CLUSTER,
+ TenantTemplateEntity selectByPrimaryKey(Integer id);
- TRANSFORM,
+ TenantTemplateEntity selectByUniqueKey(String templateName, String tenant);
- INLONG_ROLE,
+ List<TenantTemplateEntity> selectByTemplateName(String templateName);
- TENANT_ROLE
+ List<TenantTemplateEntity> selectByCondition(TenantClusterTagPageRequest
request);
-}
+}
\ No newline at end of file
diff --git
a/inlong-manager/manager-dao/src/main/resources/mappers/TemplateEntityMapper.xml
b/inlong-manager/manager-dao/src/main/resources/mappers/TemplateEntityMapper.xml
index 9766c9c9d8..93e020cf64 100644
---
a/inlong-manager/manager-dao/src/main/resources/mappers/TemplateEntityMapper.xml
+++
b/inlong-manager/manager-dao/src/main/resources/mappers/TemplateEntityMapper.xml
@@ -75,6 +75,7 @@
and (t.visible_range = "ALL" or
(t.visible_range = "IN_CHARGE"
and find_in_set(#{currentUser, jdbcType=VARCHAR}, t.in_charges))
+ or (t.visible_range = "TENANT" and #{tenant, jdbcType=VARCHAR} in
(select tet.tenant from tenant_template tet where tet.template_name = t.name
and tet.is_deleted=0 ))
)
<if test="visibleRange != null">
and t.visible_range = #{visibleRange,jdbcType=VARCHAR}
diff --git
a/inlong-manager/manager-dao/src/main/resources/mappers/TenantTemplateEntityMapper.xml
b/inlong-manager/manager-dao/src/main/resources/mappers/TenantTemplateEntityMapper.xml
new file mode 100644
index 0000000000..025bc963a1
--- /dev/null
+++
b/inlong-manager/manager-dao/src/main/resources/mappers/TenantTemplateEntityMapper.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper
namespace="org.apache.inlong.manager.dao.mapper.TenantTemplateEntityMapper">
+ <resultMap id="BaseResultMap"
type="org.apache.inlong.manager.dao.entity.TenantTemplateEntity">
+ <id column="id" jdbcType="INTEGER" property="id" />
+ <result column="tenant" jdbcType="VARCHAR" property="tenant" />
+ <result column="template_name" jdbcType="VARCHAR"
property="templateName" />
+ <result column="is_deleted" jdbcType="INTEGER" property="isDeleted" />
+ <result column="creator" jdbcType="VARCHAR" property="creator" />
+ <result column="modifier" jdbcType="VARCHAR" property="modifier" />
+ <result column="create_time" jdbcType="TIMESTAMP"
property="createTime" />
+ <result column="modify_time" jdbcType="TIMESTAMP"
property="modifyTime" />
+ <result column="version" jdbcType="INTEGER" property="version" />
+ </resultMap>
+ <sql id="Base_Column_List">
+ id, tenant, template_name, is_deleted, creator, modifier, create_time,
modify_time,
+ version
+ </sql>
+ <select id="selectByPrimaryKey" parameterType="java.lang.Integer"
resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List" />
+ from tenant_template
+ where id = #{id,jdbcType=INTEGER}
+ </select>
+ <select id="selectByUniqueKey" resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List" />
+ from tenant_template
+ where tenant = #{tenant,jdbcType=VARCHAR}
+ and template_name = #{templateName,jdbcType=VARCHAR}
+ and is_deleted = 0
+ </select>
+ <select id="selectByTemplateName" parameterType="java.lang.String"
resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List" />
+ from tenant_template
+ where is_deleted = 0
+ and template_name = #{templateName,jdbcType=VARCHAR}
+ </select>
+ <select id="selectByCondition"
parameterType="org.apache.inlong.manager.pojo.stream.TenantTemplatePageRequest"
+ resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List" />
+ from tenant_template
+ <where>
+ is_deleted = 0
+ <if test="tenant != null and tenant != ''">
+ and tenant = #{tenant,jdbcType=VARCHAR}
+ </if>
+ <if test="keyword != null and keyword != ''">
+ and template_name like CONCAT('%', #{keyword}, '%')
+ </if>
+ <if test="tenantList != null and tenantList.size() > 0">
+ and tenant in
+ <foreach item="item" index="index" collection="tenantList"
open="(" close=")" separator=",">
+ #{item}
+ </foreach>
+ </if>
+ </where>
+ group by template_name, tenant
+ order by modify_time desc
+ </select>
+ <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+ delete from tenant_template
+ where id = #{id,jdbcType=INTEGER}
+ </delete>
+ <insert id="insert"
parameterType="org.apache.inlong.manager.dao.entity.TenantTemplateEntity">
+ insert into tenant_template (id, tenant, template_name,
+ creator, modifier)
+ values (#{id,jdbcType=INTEGER}, #{tenant,jdbcType=VARCHAR},
#{templateName,jdbcType=VARCHAR},
+ #{creator,jdbcType=VARCHAR}, #{modifier,jdbcType=VARCHAR})
+ </insert>
+ <update id="updateByIdSelective"
parameterType="org.apache.inlong.manager.dao.entity.TenantTemplateEntity">
+ update tenant_template
+ <set>
+ <if test="tenant != null">
+ tenant = #{tenant,jdbcType=VARCHAR},
+ </if>
+ <if test="templateName != null">
+ template_name = #{templateName,jdbcType=VARCHAR},
+ </if>
+ <if test="isDeleted != null">
+ is_deleted = #{isDeleted,jdbcType=INTEGER},
+ </if>
+ <if test="modifier != null">
+ modifier = #{modifier,jdbcType=VARCHAR},
+ </if>
+ version = #{version,jdbcType=INTEGER} + 1
+ </set>
+ where id = #{id,jdbcType=INTEGER}
+ and version = #{version,jdbcType=INTEGER}
+ </update>
+</mapper>
\ No newline at end of file
diff --git
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TemplateField.java
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TemplateField.java
index 1eef158969..19d7385739 100644
---
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TemplateField.java
+++
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TemplateField.java
@@ -69,7 +69,7 @@ public class TemplateField implements Serializable {
@ApiModelProperty(value = "Value expression of predefined field")
private String preExpression;
- @ApiModelProperty("Is this field a meta field, 0: no, 1: yes, default is
0")
+ @ApiModelProperty("Is this field a meta field, 0: no, 1: yes")
@Builder.Default
private Integer isMetaField = 0;
diff --git
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TenantTemplateInfo.java
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TenantTemplateInfo.java
new file mode 100644
index 0000000000..0710f14f46
--- /dev/null
+++
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TenantTemplateInfo.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.pojo.stream;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * Tenant template response
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("Tenant template tag response")
+public class TenantTemplateInfo {
+
+ @ApiModelProperty(value = "Primary key")
+ private Integer id;
+
+ @ApiModelProperty(value = "Template name")
+ private String templateName;
+
+ @ApiModelProperty(value = "Tenant")
+ private String tenant;
+
+ @ApiModelProperty(value = "Name of in creator")
+ private String creator;
+
+ @ApiModelProperty(value = "Name of in modifier")
+ private String modifier;
+
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "GMT+8")
+ private Date createTime;
+
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "GMT+8")
+ private Date modifyTime;
+
+ @ApiModelProperty(value = "Version number")
+ private Integer version;
+}
diff --git
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TenantTemplatePageRequest.java
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TenantTemplatePageRequest.java
new file mode 100644
index 0000000000..bf53f44dd2
--- /dev/null
+++
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TenantTemplatePageRequest.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.pojo.stream;
+
+import org.apache.inlong.manager.pojo.common.PageRequest;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("Template paging query request")
+public class TenantTemplatePageRequest extends PageRequest {
+
+ @ApiModelProperty(value = "Inlong tenant list")
+ private List<String> tenantList;
+
+ @ApiModelProperty(value = "Inlong tenant")
+ private String tenant;
+
+ @ApiModelProperty(value = "Keywords, used for fuzzy query")
+ private String keyword;
+}
diff --git
a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TenantTemplateRequest.java
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TenantTemplateRequest.java
new file mode 100644
index 0000000000..702f1c346e
--- /dev/null
+++
b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/stream/TenantTemplateRequest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.pojo.stream;
+
+import org.apache.inlong.manager.common.validation.SaveValidation;
+import org.apache.inlong.manager.common.validation.UpdateValidation;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Tenant template tag request
+ */
+@Data
+@ApiModel("Tenant template tag request")
+public class TenantTemplateRequest {
+
+ @ApiModelProperty(value = "Primary key")
+ @NotNull(groups = UpdateValidation.class, message = "id cannot be null")
+ private Integer id;
+
+ @ApiModelProperty(value = "Template name")
+ private String templateName;
+
+ @ApiModelProperty(value = "Inlong tenant which template")
+ @NotBlank(groups = SaveValidation.class, message = "tenant cannot be
blank")
+ @Length(min = 1, max = 256, message = "length must be between 1 and 256")
+ private String tenant;
+
+ @ApiModelProperty(value = "Version number")
+ @NotNull(groups = UpdateValidation.class, message = "version cannot be
null")
+ private Integer version;
+}
diff --git
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/stream/TemplateServiceImpl.java
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/stream/TemplateServiceImpl.java
index f394730f37..4e04ac0bdd 100644
---
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/stream/TemplateServiceImpl.java
+++
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/stream/TemplateServiceImpl.java
@@ -25,13 +25,16 @@ import
org.apache.inlong.manager.common.util.CommonBeanUtils;
import org.apache.inlong.manager.common.util.Preconditions;
import org.apache.inlong.manager.dao.entity.TemplateEntity;
import org.apache.inlong.manager.dao.entity.TemplateFieldEntity;
+import org.apache.inlong.manager.dao.entity.TenantTemplateEntity;
import org.apache.inlong.manager.dao.mapper.TemplateEntityMapper;
import org.apache.inlong.manager.dao.mapper.TemplateFieldEntityMapper;
+import org.apache.inlong.manager.dao.mapper.TenantTemplateEntityMapper;
import org.apache.inlong.manager.pojo.common.PageResult;
import org.apache.inlong.manager.pojo.stream.TemplateField;
import org.apache.inlong.manager.pojo.stream.TemplateInfo;
import org.apache.inlong.manager.pojo.stream.TemplatePageRequest;
import org.apache.inlong.manager.pojo.stream.TemplateRequest;
+import org.apache.inlong.manager.pojo.stream.TenantTemplateRequest;
import org.apache.inlong.manager.pojo.user.LoginUserUtils;
import com.github.pagehelper.Page;
@@ -48,6 +51,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
+import java.util.stream.Collectors;
/**
* Inlong template service layer implementation
@@ -61,6 +65,8 @@ public class TemplateServiceImpl implements TemplateService {
private TemplateEntityMapper templateEntityMapper;
@Autowired
private TemplateFieldEntityMapper templateFieldEntityMapper;
+ @Autowired
+ private TenantTemplateEntityMapper tenantTemplateEntityMapper;
@Transactional(rollbackFor = Throwable.class)
@Override
@@ -81,6 +87,14 @@ public class TemplateServiceImpl implements TemplateService {
request.setId(templateEntity.getId());
saveField(request);
+ if (CollectionUtils.isNotEmpty(request.getTenantList())) {
+ TenantTemplateRequest tagRequest = new TenantTemplateRequest();
+ tagRequest.setTemplateName(templateName);
+ request.getTenantList().forEach(tenant -> {
+ tagRequest.setTenant(tenant);
+ this.saveTenantTemplate(tagRequest, operator);
+ });
+ }
LOGGER.info("success to save inlong stream info for template name={}",
templateName);
return templateEntity.getId();
}
@@ -106,6 +120,16 @@ public class TemplateServiceImpl implements
TemplateService {
TemplateInfo templateInfo =
CommonBeanUtils.copyProperties(templateEntity, TemplateInfo::new);
List<TemplateField> templateFields =
getTemplateFields(templateEntity.getId());
templateInfo.setFieldList(templateFields);
+ List<TenantTemplateEntity> tenantTemplateEntities =
tenantTemplateEntityMapper.selectByTemplateName(
+ templateName);
+ if (Objects.equals(templateEntity.getVisibleRange(),
TemplateVisibleRange.TENANT.name())
+ && CollectionUtils.isNotEmpty(tenantTemplateEntities)) {
+ List<String> tenantList = tenantTemplateEntities.stream()
+ .map(TenantTemplateEntity::getTenant)
+ .collect(Collectors.toList());
+ checkVis(templateEntity, tenantList, operator);
+ templateInfo.setTenantList(tenantList);
+ }
return templateInfo;
}
@@ -127,6 +151,12 @@ public class TemplateServiceImpl implements
TemplateService {
PageResult<TemplateInfo> pageResult = PageResult.fromPage(entityPage)
.map(entity -> {
TemplateInfo response =
CommonBeanUtils.copyProperties(entity, TemplateInfo::new);
+
+ List<String> tenantList = tenantTemplateEntityMapper
+ .selectByTemplateName(entity.getName()).stream()
+ .map(TenantTemplateEntity::getTenant)
+ .collect(Collectors.toList());
+ response.setTenantList(tenantList);
return response;
});
LOGGER.debug("success to list template page, result size {}",
pageResult.getList().size());
@@ -284,4 +314,21 @@ public class TemplateServiceImpl implements
TemplateService {
LOGGER.info("success to update template field");
}
+ public Integer saveTenantTemplate(TenantTemplateRequest request, String
operator) {
+ LOGGER.debug("begin to save tenant template {}", request);
+ Preconditions.expectNotNull(request, "tenant cluster request cannot be
empty");
+ Preconditions.expectNotBlank(request.getTemplateName(),
ErrorCodeEnum.INVALID_PARAMETER,
+ "template name cannot be empty");
+ Preconditions.expectNotBlank(request.getTenant(),
ErrorCodeEnum.INVALID_PARAMETER,
+ "tenant cannot be empty");
+
+ TenantTemplateEntity entity = CommonBeanUtils.copyProperties(request,
TenantTemplateEntity::new);
+ entity.setCreator(operator);
+ entity.setModifier(operator);
+ tenantTemplateEntityMapper.insert(entity);
+ LOGGER.info("success to save tenant tag, tenant={}, template name={}",
request.getTenant(),
+ request.getTemplateName());
+ return entity.getId();
+ }
+
}
diff --git
a/inlong-manager/manager-test/src/main/resources/h2/apache_inlong_manager.sql
b/inlong-manager/manager-test/src/main/resources/h2/apache_inlong_manager.sql
index 9739482638..3864ffcbe3 100644
---
a/inlong-manager/manager-test/src/main/resources/h2/apache_inlong_manager.sql
+++
b/inlong-manager/manager-test/src/main/resources/h2/apache_inlong_manager.sql
@@ -942,6 +942,24 @@ CREATE TABLE IF NOT EXISTS `template_field`
INDEX `template_field_index` (`template_id`)
);
+-- ----------------------------
+-- Table structure for tenant_template
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `tenant_template`
+(
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Incremental
primary key',
+ `tenant` varchar(256) NOT NULL COMMENT 'Inlong tenant',
+ `template_name` varchar(128) NOT NULL COMMENT 'template name',
+ `is_deleted` int(11) DEFAULT '0' COMMENT 'Whether to
delete, 0: not deleted, > 0: deleted',
+ `creator` varchar(64) NOT NULL COMMENT 'Creator name',
+ `modifier` varchar(64) DEFAULT NULL COMMENT 'Modifier name',
+ `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT
'Create time',
+ `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT 'Modify time',
+ `version` int(11) NOT NULL DEFAULT '1' COMMENT 'Version number,
which will be incremented by 1 after modification',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_tenant_inlong_template` (`tenant`, `template_name`,
`is_deleted`)
+);
+
-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/inlong-manager/manager-web/sql/apache_inlong_manager.sql
b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
index 3184f880e8..cd31161b1c 100644
--- a/inlong-manager/manager-web/sql/apache_inlong_manager.sql
+++ b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
@@ -969,7 +969,7 @@ CREATE TABLE IF NOT EXISTS `template`
`version` int(11) NOT NULL DEFAULT '1' COMMENT 'Version
number, which will be incremented by 1 after modification',
PRIMARY KEY (`id`),
UNIQUE KEY `unique_template_name` (`name`, `is_deleted`)
- ) ENGINE = InnoDB
+) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT = 'template';
-- ----------------------------
@@ -995,6 +995,25 @@ CREATE TABLE IF NOT EXISTS `template_field`
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='Template field table';
+-- ----------------------------
+-- Table structure for tenant_template
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `tenant_template`
+(
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Incremental
primary key',
+ `tenant` varchar(256) NOT NULL COMMENT 'Inlong tenant',
+ `template_name` varchar(128) NOT NULL COMMENT 'template name',
+ `is_deleted` int(11) DEFAULT '0' COMMENT 'Whether to
delete, 0: not deleted, > 0: deleted',
+ `creator` varchar(64) NOT NULL COMMENT 'Creator name',
+ `modifier` varchar(64) DEFAULT NULL COMMENT 'Modifier name',
+ `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT
'Create time',
+ `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT 'Modify time',
+ `version` int(11) NOT NULL DEFAULT '1' COMMENT 'Version number,
which will be incremented by 1 after modification',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_tenant_inlong_template` (`tenant`, `template_name`,
`is_deleted`)
+ ) ENGINE = InnoDB
+DEFAULT CHARSET = utf8mb4 COMMENT ='Tenant template table';
+
-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;
diff --git a/inlong-manager/manager-web/sql/changes-1.13.0.sql
b/inlong-manager/manager-web/sql/changes-1.13.0.sql
index f671e57c86..ecb38b543d 100644
--- a/inlong-manager/manager-web/sql/changes-1.13.0.sql
+++ b/inlong-manager/manager-web/sql/changes-1.13.0.sql
@@ -69,3 +69,22 @@ CREATE TABLE IF NOT EXISTS `template_field`
INDEX `template_field_index` (`template_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='Template field table';
+
+-- ----------------------------
+-- Table structure for tenant_template
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `tenant_template`
+(
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Incremental
primary key',
+ `tenant` varchar(256) NOT NULL COMMENT 'Inlong tenant',
+ `template_name` varchar(128) NOT NULL COMMENT 'template name',
+ `is_deleted` int(11) DEFAULT '0' COMMENT 'Whether to
delete, 0: not deleted, > 0: deleted',
+ `creator` varchar(64) NOT NULL COMMENT 'Creator name',
+ `modifier` varchar(64) DEFAULT NULL COMMENT 'Modifier name',
+ `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT
'Create time',
+ `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP COMMENT 'Modify time',
+ `version` int(11) NOT NULL DEFAULT '1' COMMENT 'Version number,
which will be incremented by 1 after modification',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_tenant_inlong_template` (`tenant`, `template_name`,
`is_deleted`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8mb4 COMMENT ='Tenant template table';
diff --git
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/TemplateController.java
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/TemplateController.java
new file mode 100644
index 0000000000..3f3e2fd3c8
--- /dev/null
+++
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/TemplateController.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.manager.web.controller;
+
+import org.apache.inlong.manager.common.enums.OperationTarget;
+import org.apache.inlong.manager.common.enums.OperationType;
+import org.apache.inlong.manager.common.validation.UpdateValidation;
+import org.apache.inlong.manager.pojo.common.PageResult;
+import org.apache.inlong.manager.pojo.common.Response;
+import org.apache.inlong.manager.pojo.stream.TemplateInfo;
+import org.apache.inlong.manager.pojo.stream.TemplatePageRequest;
+import org.apache.inlong.manager.pojo.stream.TemplateRequest;
+import org.apache.inlong.manager.pojo.user.LoginUserUtils;
+import org.apache.inlong.manager.pojo.user.UserRoleCode;
+import org.apache.inlong.manager.service.operationlog.OperationLog;
+import org.apache.inlong.manager.service.stream.TemplateService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Inlong Template control layer
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api")
+@Api(tags = "Inlong-Template-API")
+public class TemplateController {
+
+ @Autowired
+ private TemplateService templateService;
+
+ @RequestMapping(value = "/template/save", method = RequestMethod.POST)
+ @OperationLog(operation = OperationType.CREATE, operationTarget =
OperationTarget.TEMPLATE)
+ @ApiOperation(value = "Save inlong template")
+ public Response<Integer> save(@RequestBody TemplateRequest request) {
+ int result = templateService.save(request,
LoginUserUtils.getLoginUser().getName());
+ return Response.success(result);
+ }
+
+ @RequestMapping(value = "/template/exist/{templateName}", method =
RequestMethod.GET)
+ @ApiOperation(value = "Is the inlong template exists")
+ @ApiImplicitParam(name = "templateName", dataTypeClass = String.class,
required = true)
+ public Response<Boolean> exist(@PathVariable String templateName) {
+ return Response.success(templateService.exist(templateName));
+ }
+
+ @RequestMapping(value = "/template/get", method = RequestMethod.GET)
+ @ApiOperation(value = "Get inlong template")
+ @ApiImplicitParam(name = "templateName", dataTypeClass = String.class,
required = true)
+ public Response<TemplateInfo> get(@RequestParam String templateName) {
+ return Response.success(templateService.get(templateName,
LoginUserUtils.getLoginUser().getName()));
+ }
+
+ @RequestMapping(value = "/template/list", method = RequestMethod.POST)
+ @ApiOperation(value = "List inlong template briefs by paginating")
+ public Response<PageResult<TemplateInfo>> listByCondition(@RequestBody
TemplatePageRequest request) {
+ request.setCurrentUser(LoginUserUtils.getLoginUser().getName());
+
request.setIsAdminRole(LoginUserUtils.getLoginUser().getRoles().contains(UserRoleCode.TENANT_ADMIN));
+ return Response.success(templateService.list(request));
+ }
+
+ @RequestMapping(value = "/template/update", method = RequestMethod.POST)
+ @OperationLog(operation = OperationType.UPDATE, operationTarget =
OperationTarget.TEMPLATE)
+ @ApiOperation(value = "Update inlong templater")
+ public Response<Boolean> update(@Validated(UpdateValidation.class)
@RequestBody TemplateRequest request) {
+ String username = LoginUserUtils.getLoginUser().getName();
+ return Response.success(templateService.update(request, username));
+ }
+
+ @Deprecated
+ @RequestMapping(value = "/template/delete", method = RequestMethod.DELETE)
+ @OperationLog(operation = OperationType.DELETE, operationTarget =
OperationTarget.TEMPLATE)
+ @ApiOperation(value = "Delete inlong template")
+ @ApiImplicitParam(name = "templateName", dataTypeClass = String.class,
required = true)
+ public Response<Boolean> delete(@RequestParam String templateName) {
+ String username = LoginUserUtils.getLoginUser().getName();
+ return Response.success(templateService.delete(templateName,
username));
+ }
+
+}