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

Reply via email to