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 2e1b18605 [INLONG-7232][Manager] Supports automatic management of
audit ids (#7233)
2e1b18605 is described below
commit 2e1b18605de63f628907885b275dce80c2812a17
Author: fuweng11 <[email protected]>
AuthorDate: Mon Jan 16 15:34:42 2023 +0800
[INLONG-7232][Manager] Supports automatic management of audit ids (#7233)
Co-authored-by: healchow <[email protected]>
---
.../inlong/manager/common/enums/ErrorCodeEnum.java | 2 +
.../manager/dao/entity/AuditBaseEntity.java} | 23 +++--
.../manager/dao/mapper/AuditBaseEntityMapper.java} | 29 +++---
.../resources/mappers/AuditBaseEntityMapper.xml | 65 ++++++++++++
.../inlong/manager/service/core/AuditService.java | 16 +++
.../service/core/impl/AuditServiceImpl.java | 115 ++++++++++++++++-----
.../main/resources/h2/apache_inlong_manager.sql | 41 ++++++++
.../manager-web/sql/apache_inlong_manager.sql | 43 ++++++++
.../manager/web/controller/AuditController.java | 7 ++
.../src/main/resources/application.properties | 4 +-
10 files changed, 291 insertions(+), 54 deletions(-)
diff --git
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/ErrorCodeEnum.java
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/ErrorCodeEnum.java
index 325b63632..9c532dddc 100644
---
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/ErrorCodeEnum.java
+++
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/ErrorCodeEnum.java
@@ -142,6 +142,8 @@ public enum ErrorCodeEnum {
CONSUME_SAVE_FAILED(3004, "Failed to save/update inlong consume"),
CONSUME_PERMISSION_DENIED(3005, "No permission to access this inlong
consume"),
+ AUDIT_ID_TYPE_NOT_SUPPORTED(4001, "Audit id type '%s' not supported"),
+
;
private final int code;
diff --git
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/consts/AuditConstants.java
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/AuditBaseEntity.java
similarity index 57%
rename from
inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/consts/AuditConstants.java
rename to
inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/AuditBaseEntity.java
index a10a20844..5f77dd20d 100644
---
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/consts/AuditConstants.java
+++
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/AuditBaseEntity.java
@@ -15,20 +15,21 @@
* limitations under the License.
*/
-package org.apache.inlong.manager.common.consts;
+package org.apache.inlong.manager.dao.entity;
+
+import lombok.Data;
/**
- * Constant class for audit ids
+ * Audit base info
*/
-public class AuditConstants {
+@Data
+public class AuditBaseEntity {
- public static final String AUDIT_ID_SDK_COLLECT = "1";
- public static final String AUDIT_ID_SDK_SENT = "2";
- public static final String AUDIT_ID_AGENT_COLLECT = "3";
- public static final String AUDIT_ID_AGENT_SENT = "4";
- public static final String AUDIT_ID_DATAPROXY_RECEIVED = "5";
- public static final String AUDIT_ID_DATAPROXY_SENT = "6";
- public static final String AUDIT_ID_SORT_INPUT = "7";
- public static final String AUDIT_ID_SORT_OUTPUT = "8";
+ private static final long serialVersionUID = 1L;
+ private Integer id;
+ private String name;
+ private String type;
+ private Integer isSent;
+ private String auditId;
}
diff --git
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/AuditService.java
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/AuditBaseEntityMapper.java
similarity index 63%
copy from
inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/AuditService.java
copy to
inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/AuditBaseEntityMapper.java
index 663a3ba25..8ab30c2c1 100644
---
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/AuditService.java
+++
b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/AuditBaseEntityMapper.java
@@ -15,24 +15,23 @@
* limitations under the License.
*/
-package org.apache.inlong.manager.service.core;
+package org.apache.inlong.manager.dao.mapper;
-import org.apache.inlong.manager.pojo.audit.AuditRequest;
-import org.apache.inlong.manager.pojo.audit.AuditVO;
+import org.apache.ibatis.annotations.Param;
+import org.apache.inlong.manager.dao.entity.AuditBaseEntity;
+import org.springframework.stereotype.Repository;
import java.util.List;
-/**
- * The service interface for audit.
- */
-public interface AuditService {
-
- /**
- * Query audit data for list by condition
- *
- * @param request The audit request of query condition
- * @return The result of query
- */
- List<AuditVO> listByCondition(AuditRequest request) throws Exception;
+@Repository
+public interface AuditBaseEntityMapper {
+
+ int insert(AuditBaseEntity record);
+
+ List<AuditBaseEntity> selectAll();
+
+ AuditBaseEntity selectByPrimaryKey(Integer id);
+
+ AuditBaseEntity selectByType(@Param("type") String type);
}
diff --git
a/inlong-manager/manager-dao/src/main/resources/mappers/AuditBaseEntityMapper.xml
b/inlong-manager/manager-dao/src/main/resources/mappers/AuditBaseEntityMapper.xml
new file mode 100644
index 000000000..8586ab43a
--- /dev/null
+++
b/inlong-manager/manager-dao/src/main/resources/mappers/AuditBaseEntityMapper.xml
@@ -0,0 +1,65 @@
+<?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.AuditBaseEntityMapper">
+ <resultMap id="BaseResultMap"
type="org.apache.inlong.manager.dao.entity.AuditBaseEntity">
+ <id column="id" jdbcType="INTEGER" property="id"/>
+ <result column="name" jdbcType="VARCHAR" property="name"/>
+ <result column="type" jdbcType="VARCHAR" property="type"/>
+ <result column="is_sent" jdbcType="INTEGER" property="isSent"/>
+ <result column="audit_id" jdbcType="VARCHAR" property="auditId"/>
+ </resultMap>
+ <sql id="Base_Column_List">
+ id, name, type, is_sent, audit_id
+ </sql>
+ <insert id="insert" useGeneratedKeys="true" keyProperty="id"
+
parameterType="org.apache.inlong.manager.dao.entity.AuditBaseEntity">
+ insert into audit_base (id, name, type, is_sent, audit_id)
+ values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
+ #{type,jdbcType=VARCHAR}, #{isSent,jdbcType=INTEGER},
+ #{auditId,jdbcType=VARCHAR})
+ </insert>
+
+ <select id="selectAll"
resultType="org.apache.inlong.manager.dao.entity.AuditBaseEntity">
+ select
+ <include refid="Base_Column_List"/>
+ from audit_base
+ </select>
+
+ <select id="selectByPrimaryKey" parameterType="java.lang.Integer"
resultMap="BaseResultMap">
+ select
+ <include refid="Base_Column_List"/>
+ from audit_base
+ where id = #{id,jdbcType=INTEGER}
+ </select>
+
+ <select id="selectByType"
resultType="org.apache.inlong.manager.dao.entity.AuditBaseEntity">
+ select
+ <include refid="Base_Column_List"/>
+ from audit_base
+ <where>
+ <if test="type != null and type != ''">
+ and type = #{type, jdbcType=VARCHAR}
+ </if>
+ </where>
+ </select>
+
+</mapper>
diff --git
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/AuditService.java
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/AuditService.java
index 663a3ba25..1d2407a2c 100644
---
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/AuditService.java
+++
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/AuditService.java
@@ -35,4 +35,20 @@ public interface AuditService {
*/
List<AuditVO> listByCondition(AuditRequest request) throws Exception;
+ /**
+ * Get audit id by type and isSent.
+ *
+ * @param type audit type.
+ * @param isSent Whether to receive or send
+ * @return Audit id.
+ */
+ String getAuditId(String type, boolean isSent);
+
+ /**
+ * Refresh the base item of audit cache.
+ *
+ * @return true if not exception, or false if it has exception
+ */
+ Boolean refreshBaseItemCache();
+
}
diff --git
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/AuditServiceImpl.java
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/AuditServiceImpl.java
index 73f885e9d..5c1ebe64d 100644
---
a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/AuditServiceImpl.java
+++
b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/core/impl/AuditServiceImpl.java
@@ -18,14 +18,19 @@
package org.apache.inlong.manager.service.core.impl;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.jdbc.SQL;
-import org.apache.inlong.manager.common.consts.AuditConstants;
import org.apache.inlong.manager.common.consts.SourceType;
import org.apache.inlong.manager.common.enums.AuditQuerySource;
+import org.apache.inlong.manager.common.enums.ClusterType;
+import org.apache.inlong.manager.common.enums.ErrorCodeEnum;
import org.apache.inlong.manager.common.enums.TimeStaticsDim;
+import org.apache.inlong.manager.common.exceptions.BusinessException;
import org.apache.inlong.manager.common.util.Preconditions;
+import org.apache.inlong.manager.dao.entity.AuditBaseEntity;
import org.apache.inlong.manager.dao.entity.StreamSinkEntity;
import org.apache.inlong.manager.dao.entity.StreamSourceEntity;
+import org.apache.inlong.manager.dao.mapper.AuditBaseEntityMapper;
import org.apache.inlong.manager.dao.mapper.AuditEntityMapper;
import org.apache.inlong.manager.dao.mapper.StreamSinkEntityMapper;
import org.apache.inlong.manager.dao.mapper.StreamSourceEntityMapper;
@@ -55,6 +60,9 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.sql.Connection;
@@ -63,9 +71,11 @@ import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
@@ -83,15 +93,23 @@ public class AuditServiceImpl implements AuditService {
private static final String HOUR_FORMAT = "yyyy-MM-dd HH";
private static final String DAY_FORMAT = "yyyy-MM-dd";
+ // key: type of audit base item, value: entity of audit base item
+ private final Map<String, AuditBaseEntity> auditSentItemMap = new
ConcurrentHashMap<>();
+
+ private final Map<String, AuditBaseEntity> auditReceivedItemMap = new
ConcurrentHashMap<>();
+
// defaults to return all audit ids, can be overwritten in properties file
// see audit id definitions:
https://inlong.apache.org/docs/modules/audit/overview#audit-id
- @Value("#{'${audit.admin.ids:3,4,5,6,7,8}'.split(',')}")
+ @Value("#{'${audit.admin.ids:3,4,5,6}'.split(',')}")
private List<String> auditIdListForAdmin;
- @Value("#{'${audit.user.ids:3,4,5,6,7,8}'.split(',')}")
+ @Value("#{'${audit.user.ids:3,4,5,6}'.split(',')}")
private List<String> auditIdListForUser;
@Value("${audit.query.source}")
private String auditQuerySource = AuditQuerySource.MYSQL.name();
+
+ @Autowired
+ private AuditBaseEntityMapper auditBaseMapper;
@Autowired
private AuditEntityMapper auditEntityMapper;
@Autowired
@@ -101,6 +119,52 @@ public class AuditServiceImpl implements AuditService {
@Autowired
private StreamSourceEntityMapper sourceEntityMapper;
+ @PostConstruct
+ public void initialize() {
+ LOGGER.info("init audit base item cache map for {}",
AuditServiceImpl.class.getSimpleName());
+ try {
+ refreshBaseItemCache();
+ } catch (Throwable t) {
+ LOGGER.error("initialize audit base item cache error", t);
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean refreshBaseItemCache() {
+ LOGGER.debug("start to reload audit base item info");
+ try {
+ List<AuditBaseEntity> auditBaseEntities =
auditBaseMapper.selectAll();
+ for (AuditBaseEntity auditBaseEntity : auditBaseEntities) {
+ String type = auditBaseEntity.getType();
+ if (auditBaseEntity.getIsSent() == 1) {
+ auditSentItemMap.put(type, auditBaseEntity);
+ } else {
+ auditReceivedItemMap.put(type, auditBaseEntity);
+ }
+ }
+ } catch (Throwable t) {
+ LOGGER.error("failed to reload audit base item info", t);
+ return false;
+ }
+
+ LOGGER.debug("success to reload audit base item info");
+ return true;
+ }
+
+ @Override
+ public String getAuditId(String type, boolean isSent) {
+ if (StringUtils.isBlank(type)) {
+ return null;
+ }
+ AuditBaseEntity auditBaseEntity = isSent ? auditSentItemMap.get(type)
: auditReceivedItemMap.get(type);
+ if (auditBaseEntity == null) {
+ throw new
BusinessException(ErrorCodeEnum.AUDIT_ID_TYPE_NOT_SUPPORTED,
+
String.format(ErrorCodeEnum.AUDIT_ID_TYPE_NOT_SUPPORTED.getMessage(), type));
+ }
+ return auditBaseEntity.getAuditId();
+ }
+
@Override
public List<AuditVO> listByCondition(AuditRequest request) throws
Exception {
LOGGER.info("begin query audit list request={}", request);
@@ -109,9 +173,6 @@ public class AuditServiceImpl implements AuditService {
String groupId = request.getInlongGroupId();
String streamId = request.getInlongStreamId();
- // properly overwrite audit ids by role and stream config
- request.setAuditIds(getAuditIds(groupId, streamId));
-
// for now, we use the first sink type only.
// this is temporary behavior before multiple sinks in one stream is
fully supported.
List<StreamSinkEntity> sinkEntityList =
sinkEntityMapper.selectByRelatedId(groupId, streamId);
@@ -120,6 +181,9 @@ public class AuditServiceImpl implements AuditService {
sinkNodeType = sinkEntityList.get(0).getSinkType();
}
+ // properly overwrite audit ids by role and stream config
+ request.setAuditIds(getAuditIds(groupId, streamId, sinkNodeType));
+
List<AuditVO> result = new ArrayList<>();
AuditQuerySource querySource =
AuditQuerySource.valueOf(auditQuerySource);
for (String auditId : request.getAuditIds()) {
@@ -138,7 +202,7 @@ public class AuditServiceImpl implements AuditService {
return vo;
}).collect(Collectors.toList());
result.add(new AuditVO(auditId, auditSet,
- auditId.equals(AuditConstants.AUDIT_ID_SORT_OUTPUT) ?
sinkNodeType : null));
+ auditId.equals(getAuditId(sinkNodeType, true)) ?
sinkNodeType : null));
} else if (AuditQuerySource.ELASTICSEARCH == querySource) {
String index = String.format("%s_%s",
request.getDt().replaceAll("-", ""), auditId);
if (!elasticsearchApi.indexExists(index)) {
@@ -157,7 +221,7 @@ public class AuditServiceImpl implements AuditService {
return vo;
}).collect(Collectors.toList());
result.add(new AuditVO(auditId, auditSet,
-
auditId.equals(AuditConstants.AUDIT_ID_SORT_OUTPUT) ? sinkNodeType : null));
+ auditId.equals(getAuditId(sinkNodeType, true))
? sinkNodeType : null));
}
}
} else if (AuditQuerySource.CLICKHOUSE == querySource) {
@@ -173,7 +237,7 @@ public class AuditServiceImpl implements AuditService {
auditSet.add(vo);
}
result.add(new AuditVO(auditId, auditSet,
-
auditId.equals(AuditConstants.AUDIT_ID_SORT_OUTPUT) ? sinkNodeType : null));
+ auditId.equals(getAuditId(sinkNodeType, true)) ?
sinkNodeType : null));
}
}
}
@@ -181,32 +245,31 @@ public class AuditServiceImpl implements AuditService {
return aggregateByTimeDim(result, request.getTimeStaticsDim());
}
- private List<String> getAuditIds(String groupId, String streamId) {
- List<String> auditIds =
LoginUserUtils.getLoginUser().getRoles().contains(UserRoleCode.ADMIN)
- ? auditIdListForAdmin
- : auditIdListForUser;
+ private List<String> getAuditIds(String groupId, String streamId, String
sinkNodeType) {
+ Set<String> auditSet =
LoginUserUtils.getLoginUser().getRoles().contains(UserRoleCode.ADMIN)
+ ? new HashSet<>(auditIdListForAdmin)
+ : new HashSet<>(auditIdListForUser);
+
+ // if no sink is configured, return data-proxy output instead of sort
+ if (sinkNodeType == null) {
+ auditSet.add(getAuditId(ClusterType.DATAPROXY, true));
+ } else {
+ auditSet.add(getAuditId(sinkNodeType, true));
+ auditSet.add(getAuditId(sinkNodeType, false));
+ }
// auto push source has no agent, return data-proxy audit data instead
of agent
List<StreamSourceEntity> sourceList =
sourceEntityMapper.selectByRelatedId(groupId, streamId, null);
if (CollectionUtils.isEmpty(sourceList)
|| sourceList.stream().allMatch(s ->
SourceType.AUTO_PUSH.equals(s.getSourceType()))) {
- boolean dpReceivedNeeded =
(auditIds.contains(AuditConstants.AUDIT_ID_AGENT_COLLECT)
- &&
!auditIds.contains(AuditConstants.AUDIT_ID_DATAPROXY_RECEIVED));
+ // need data_proxy received type when agent has received type
+ boolean dpReceivedNeeded =
auditSet.contains(getAuditId(ClusterType.AGENT, false));
if (dpReceivedNeeded) {
- auditIds.add(AuditConstants.AUDIT_ID_DATAPROXY_RECEIVED);
- }
- }
-
- // if no sink is configured, return data-proxy output instead of sort
- if (sinkEntityMapper.selectCount(groupId, streamId) == 0) {
- boolean dpSentNeeded =
(auditIds.contains(AuditConstants.AUDIT_ID_SORT_OUTPUT)
- &&
!auditIds.contains(AuditConstants.AUDIT_ID_DATAPROXY_SENT));
- if (dpSentNeeded) {
- auditIds.add(AuditConstants.AUDIT_ID_DATAPROXY_SENT);
+ auditSet.add(getAuditId(ClusterType.DATAPROXY, false));
}
}
- return auditIds;
+ return new ArrayList<>(auditSet);
}
/**
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 fc4938469..230dde03b 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
@@ -745,6 +745,47 @@ CREATE TABLE IF NOT EXISTS `stream_heartbeat`
PRIMARY KEY (`id`),
UNIQUE KEY `unique_stream_heartbeat` (`component`, `instance`,
`inlong_group_id`, `inlong_stream_id`)
);
+-- ----------------------------
+-- Table structure for audit_base
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `audit_base`
+(
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT
'Incremental primary key',
+ `name` varchar(256) NOT NULL COMMENT 'Audit base name',
+ `type` varchar(20) NOT NULL COMMENT 'Audit base item type,
such as: AGENT, DATAPROXY, etc',
+ `is_sent` int(4) NOT NULL DEFAULT '0' COMMENT '0: received,
1: sent',
+ `audit_id` varchar(11) NOT NULL COMMENT 'Audit ID mapping of
audit name',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_audit_base_type` (`type`, `is_sent`),
+ UNIQUE KEY `unique_audit_base_name` (`name`)
+);
+
+-- ----------------------------
+-- Insert audit_base item
+-- ----------------------------
+INSERT INTO `audit_base`(`name`, `type`, `is_sent`, `audit_id`)
+VALUES ('audit_sdk_collect', 'SDK', 0, '1'),
+ ('audit_sdk_sent', 'SDK', 1, '2'),
+ ('audit_agent_collect', 'AGENT', 0, '3'),
+ ('audit_agent_sent', 'AGENT', 1, '4'),
+ ('audit_dataproxy_received', 'DATAPROXY', 0, '5'),
+ ('audit_dataproxy_sent', 'DATAPROXY', 1, '6'),
+ ('audit_sort_hive_input', 'HIVE', 0, '7'),
+ ('audit_sort_hive_output', 'HIVE', 1, '8'),
+ ('audit_sort_clickhouse_input', 'CLICKHOUSE', 0, '9'),
+ ('audit_sort_clickhouse_output', 'CLICKHOUSE', 1, '10'),
+ ('audit_sort_es_input', 'ELASTICSEARCH', 0, '11'),
+ ('audit_sort_es_output', 'ELASTICSEARCH', 1, '12'),
+ ('audit_sort_starrocks_input', 'STARROCKS', 0, '13'),
+ ('audit_sort_starrocks_output', 'STARROCKS', 1, '14'),
+ ('audit_sort_hudi_input', 'HUDI', 0, '15'),
+ ('audit_sort_hudi_output', 'HUDI', 1, '16'),
+ ('audit_sort_iceberg_input', 'ICEBERG', 0, '17'),
+ ('audit_sort_iceberg_output', 'ICEBERG', 1, '18'),
+ ('audit_sort_hbase_input', 'HBASE', 0, '19'),
+ ('audit_sort_hbase_output', 'HBASE', 1, '20'),
+ ('audit_sort_doris_input', 'DORIS', 0, '21'),
+ ('audit_sort_doris_output', 'DORIS', 1, '22');
-- ----------------------------
diff --git a/inlong-manager/manager-web/sql/apache_inlong_manager.sql
b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
index 3036a7525..b4b8f19a9 100644
--- a/inlong-manager/manager-web/sql/apache_inlong_manager.sql
+++ b/inlong-manager/manager-web/sql/apache_inlong_manager.sql
@@ -789,6 +789,49 @@ CREATE TABLE IF NOT EXISTS `stream_heartbeat`
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='Inlong stream heartbeat';
+-- ----------------------------
+-- Table structure for audit_base
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `audit_base`
+(
+ `id` int(11) NOT NULL AUTO_INCREMENT COMMENT
'Incremental primary key',
+ `name` varchar(256) NOT NULL COMMENT 'Audit base name',
+ `type` varchar(20) NOT NULL COMMENT 'Audit base item type,
such as: AGENT, DATAPROXY, etc',
+ `is_sent` int(4) NOT NULL DEFAULT '0' COMMENT '0: received,
1: sent',
+ `audit_id` varchar(11) NOT NULL COMMENT 'Audit ID mapping of
audit name',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_audit_base_type` (`type`, `is_sent`),
+ UNIQUE KEY `unique_audit_base_name` (`name`)
+) ENGINE = InnoDB
+ DEFAULT CHARSET = utf8 COMMENT ='Audit base item table';
+
+-- ----------------------------
+-- Insert audit_base item
+-- ----------------------------
+INSERT INTO `audit_base`(`name`, `type`, `is_sent`, `audit_id`)
+VALUES ('audit_sdk_collect', 'SDK', 0, '1'),
+ ('audit_sdk_sent', 'SDK', 1, '2'),
+ ('audit_agent_collect', 'AGENT', 0, '3'),
+ ('audit_agent_sent', 'AGENT', 1, '4'),
+ ('audit_dataproxy_received', 'DATAPROXY', 0, '5'),
+ ('audit_dataproxy_sent', 'DATAPROXY', 1, '6'),
+ ('audit_sort_hive_input', 'HIVE', 0, '7'),
+ ('audit_sort_hive_output', 'HIVE', 1, '8'),
+ ('audit_sort_clickhouse_input', 'CLICKHOUSE', 0, '9'),
+ ('audit_sort_clickhouse_output', 'CLICKHOUSE', 1, '10'),
+ ('audit_sort_es_input', 'ELASTICSEARCH', 0, '11'),
+ ('audit_sort_es_output', 'ELASTICSEARCH', 1, '12'),
+ ('audit_sort_starrocks_input', 'STARROCKS', 0, '13'),
+ ('audit_sort_starrocks_output', 'STARROCKS', 1, '14'),
+ ('audit_sort_hudi_input', 'HUDI', 0, '15'),
+ ('audit_sort_hudi_output', 'HUDI', 1, '16'),
+ ('audit_sort_iceberg_input', 'ICEBERG', 0, '17'),
+ ('audit_sort_iceberg_output', 'ICEBERG', 1, '18'),
+ ('audit_sort_hbase_input', 'HBASE', 0, '19'),
+ ('audit_sort_hbase_output', 'HBASE', 1, '20'),
+ ('audit_sort_doris_input', 'DORIS', 0, '21'),
+ ('audit_sort_doris_output', 'DORIS', 1, '22');
+
-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;
diff --git
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/AuditController.java
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/AuditController.java
index 7fb194f67..be56997e8 100644
---
a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/AuditController.java
+++
b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/AuditController.java
@@ -25,6 +25,7 @@ import org.apache.inlong.manager.pojo.common.Response;
import org.apache.inlong.manager.service.core.AuditService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -48,4 +49,10 @@ public class AuditController {
return Response.success(auditService.listByCondition(request));
}
+ @ApiOperation(value = "Refresh audit base item cache")
+ @PostMapping("/audit/refreshCache")
+ public Response<Boolean> refreshCache() {
+ return Response.success(auditService.refreshBaseItemCache());
+ }
+
}
diff --git
a/inlong-manager/manager-web/src/main/resources/application.properties
b/inlong-manager/manager-web/src/main/resources/application.properties
index 796896f23..c434645b2 100644
--- a/inlong-manager/manager-web/src/main/resources/application.properties
+++ b/inlong-manager/manager-web/src/main/resources/application.properties
@@ -61,5 +61,5 @@ inlong.encrypt.key.value1="I!N@L#O$N%G^"
openapi.auth.enabled=false
# Audit view by role, see audit id definitions:
https://inlong.apache.org/docs/modules/audit/overview#audit-id
-audit.admin.ids=3,4,5,6,7,8
-audit.user.ids=3,4,5,6,7,8
+audit.admin.ids=3,4,5,6
+audit.user.ids=3,4,5,6