This is an automated email from the ASF dual-hosted git repository.

wangyang pushed a commit to branch augit-log
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git

commit 771e9342c01e520f5efa7bbfcfaab7c2d627a153
Author: Draven <qing...@cisco.com>
AuthorDate: Mon Jan 15 15:34:31 2024 +0800

    init
---
 .../dolphinscheduler/api/audit/AuditMessage.java   |  60 +++---------
 .../api/audit/AuditPublishService.java             |  92 ------------------
 .../api/audit/AuditSubscriber.java                 |  28 ------
 .../api/audit/AuditSubscriberImpl.java             |  42 --------
 .../dolphinscheduler/api/audit/OperatorLog.java    |  21 ++++
 .../api/audit/OperatorLogAspect.java               | 108 +++++++++++++++++++++
 .../api/controller/AuditLogController.java         |   8 +-
 .../controller/ProcessDefinitionController.java    |   4 +
 .../api/controller/ProjectController.java          |  10 ++
 .../dolphinscheduler/api/service/AuditService.java |  20 ++--
 .../api/service/impl/AuditServiceImpl.java         |  38 ++++----
 .../dolphinscheduler/api/utils/AuditLogUtils.java  |  80 +++++++++++++++
 .../src/main/resources/application.yaml            |  23 ++---
 .../src/main/resources/logback-spring.xml          |   7 +-
 .../api/audit/AuditSubscriberTest.java             |   9 +-
 .../api/service/AuditServiceTest.java              |   4 +-
 dolphinscheduler-bom/pom.xml                       |   1 -
 .../common/enums/Audit/AuditObjectType.java        | 102 +++++++++++++++++++
 .../enums/{ => Audit}/AuditOperationType.java      |  34 ++++---
 .../common/enums/AuditResourceType.java            |  61 ------------
 .../dolphinscheduler/dao/entity/AuditLog.java      |  62 ++----------
 .../dao/mapper/AuditLogMapper.java                 |   6 +-
 .../dolphinscheduler/dao/mapper/AuditLogMapper.xml |  22 ++---
 .../dao/mapper/AuditLogMapperTest.java             |   1 -
 .../service/process/ProcessServiceImpl.java        |   1 +
 25 files changed, 419 insertions(+), 425 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditMessage.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditMessage.java
index 0d936f0ad5..893460590d 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditMessage.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditMessage.java
@@ -17,70 +17,32 @@
 
 package org.apache.dolphinscheduler.api.audit;
 
-import org.apache.dolphinscheduler.common.enums.AuditOperationType;
-import org.apache.dolphinscheduler.common.enums.AuditResourceType;
+import lombok.Data;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditObjectType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditOperationType;
 import org.apache.dolphinscheduler.dao.entity.User;
 
 import java.util.Date;
 
+@Data
 public class AuditMessage {
 
     private User user;
 
     private Date auditDate;
 
-    private AuditResourceType resourceType;
+    private AuditObjectType objectType;
 
-    private AuditOperationType operation;
+    private AuditOperationType operationType;
 
     private Integer resourceId;
 
-    public AuditMessage(User user, Date auditDate, AuditResourceType 
resourceType, AuditOperationType operation,
+    public AuditMessage(User user, Date auditDate, AuditObjectType objectType, 
AuditOperationType operationType,
                         Integer resourceId) {
         this.user = user;
         this.auditDate = auditDate;
-        this.resourceType = resourceType;
-        this.operation = operation;
-        this.resourceId = resourceId;
-    }
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    public Date getAuditDate() {
-        return auditDate;
-    }
-
-    public void setAuditDate(Date auditDate) {
-        this.auditDate = auditDate;
-    }
-
-    public AuditResourceType getResourceType() {
-        return resourceType;
-    }
-
-    public void setResourceType(AuditResourceType resourceType) {
-        this.resourceType = resourceType;
-    }
-
-    public AuditOperationType getOperation() {
-        return operation;
-    }
-
-    public void setOperation(AuditOperationType operation) {
-        this.operation = operation;
-    }
-
-    public Integer getResourceId() {
-        return resourceId;
-    }
-
-    public void setResourceId(Integer resourceId) {
+        this.objectType = objectType;
+        this.operationType = operationType;
         this.resourceId = resourceId;
     }
 
@@ -89,8 +51,8 @@ public class AuditMessage {
         return "AuditMessage{"
                 + "user=" + user
                 + ", Date=" + auditDate
-                + ", resourceType" + resourceType
-                + ", operation=" + operation
+                + ", objectType" + objectType
+                + ", operationType=" + operationType
                 + ", resourceId='" + resourceId + '\'';
     }
 }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditPublishService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditPublishService.java
deleted file mode 100644
index 34a5cd8ac0..0000000000
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditPublishService.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.dolphinscheduler.api.audit;
-
-import org.apache.dolphinscheduler.api.configuration.ApiConfig;
-
-import java.util.List;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import javax.annotation.PostConstruct;
-
-import lombok.extern.slf4j.Slf4j;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-@Slf4j
-public class AuditPublishService {
-
-    private final BlockingQueue<AuditMessage> auditMessageQueue = new 
LinkedBlockingQueue<>();
-
-    @Autowired
-    private List<AuditSubscriber> subscribers;
-
-    @Autowired
-    private ApiConfig apiConfig;
-
-    /**
-     * create a daemon thread to process the message queue
-     */
-    @PostConstruct
-    private void init() {
-        if (apiConfig.isAuditEnable()) {
-            Thread thread = new Thread(this::doPublish);
-            thread.setDaemon(true);
-            thread.setName("Audit-Log-Consume-Thread");
-            thread.start();
-        }
-    }
-
-    /**
-     * publish a new audit message
-     *
-     * @param message audit message
-     */
-    public void publish(AuditMessage message) {
-        if (apiConfig.isAuditEnable() && !auditMessageQueue.offer(message)) {
-            log.error("Publish audit message failed, message:{}", message);
-        }
-    }
-
-    /**
-     *  subscribers execute the message processor method
-     */
-    private void doPublish() {
-        AuditMessage message = null;
-        while (true) {
-            try {
-                message = auditMessageQueue.take();
-                for (AuditSubscriber subscriber : subscribers) {
-                    try {
-                        subscriber.execute(message);
-                    } catch (Exception e) {
-                        log.error("Consume audit message failed, message:{}", 
message, e);
-                    }
-                }
-            } catch (InterruptedException e) {
-                log.error("Consume audit message failed, message:{}", message, 
e);
-                Thread.currentThread().interrupt();
-                break;
-            }
-        }
-    }
-
-}
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditSubscriber.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditSubscriber.java
deleted file mode 100644
index 07202237b2..0000000000
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditSubscriber.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.dolphinscheduler.api.audit;
-
-public interface AuditSubscriber {
-
-    /**
-     * process the audit message
-     *
-     * @param message
-     */
-    void execute(AuditMessage message);
-}
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditSubscriberImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditSubscriberImpl.java
deleted file mode 100644
index b5ed361c24..0000000000
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/AuditSubscriberImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.dolphinscheduler.api.audit;
-
-import org.apache.dolphinscheduler.dao.entity.AuditLog;
-import org.apache.dolphinscheduler.dao.mapper.AuditLogMapper;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class AuditSubscriberImpl implements AuditSubscriber {
-
-    @Autowired
-    private AuditLogMapper logMapper;
-
-    @Override
-    public void execute(AuditMessage message) {
-        AuditLog auditLog = new AuditLog();
-        auditLog.setUserId(message.getUser().getId());
-        auditLog.setResourceType(message.getResourceType().getCode());
-        auditLog.setOperation(message.getOperation().getCode());
-        auditLog.setTime(message.getAuditDate());
-        auditLog.setResourceId(message.getResourceId());
-        logMapper.insert(auditLog);
-    }
-}
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/OperatorLog.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/OperatorLog.java
new file mode 100644
index 0000000000..71f6a7c972
--- /dev/null
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/OperatorLog.java
@@ -0,0 +1,21 @@
+package org.apache.dolphinscheduler.api.audit;
+
+import org.apache.dolphinscheduler.common.enums.Audit.AuditObjectType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditOperationType;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface OperatorLog {
+
+    String describe() default "";
+    AuditObjectType objectType() default AuditObjectType.PROJECT;
+    AuditOperationType operationType() default AuditOperationType.CREATE;
+
+}
\ No newline at end of file
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/OperatorLogAspect.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/OperatorLogAspect.java
new file mode 100644
index 0000000000..a59f4b10a2
--- /dev/null
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/audit/OperatorLogAspect.java
@@ -0,0 +1,108 @@
+package org.apache.dolphinscheduler.api.audit;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.*;
+
+import org.apache.dolphinscheduler.api.service.AuditService;
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditOperationType;
+import org.apache.dolphinscheduler.dao.entity.AuditLog;
+import org.apache.dolphinscheduler.dao.entity.Project;
+import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class OperatorLogAspect {
+
+    @Autowired
+    private AuditService auditService;
+
+    @Autowired
+    private ProjectMapper projectMapper;
+
+    @Pointcut("@annotation(OperatorLog)")
+    public void logPointCut() {
+
+    }
+
+    @Around("logPointCut()")
+    public Object around(ProceedingJoinPoint point) throws Throwable {
+
+        MethodSignature signature = (MethodSignature) point.getSignature();
+        Method method = signature.getMethod();
+
+        OperatorLog sysLog = method.getAnnotation(OperatorLog.class);
+        if (sysLog == null) {
+            return null;
+        }
+
+        Object[] args = point.getArgs();
+        String[] strings = signature.getParameterNames();
+
+        User user = null;
+
+        Map<String, Object> map = new HashMap<>();
+        for (int i = 0; i < strings.length; i++) {
+            map.put(strings[i], args[i]);
+
+            if (args[i] instanceof User) {
+                user = (User)args[i];
+            }
+        }
+
+        AuditLog auditLog = new AuditLog();
+        auditLog.setUserId(user.getId());
+        auditLog.setObjectType(sysLog.objectType().getCode());
+        auditLog.setOperationType(sysLog.operationType().getCode());
+        auditLog.setTime(new Date());
+
+        if(sysLog.operationType().equals(AuditOperationType.DELETE)){
+            // need to get the name before real deleted
+            switch (sysLog.objectType()){
+                case PROJECT:
+                    Project project = 
projectMapper.queryByCode((long)map.get("code"));
+                    auditLog.setDetail(project.getName());
+                    auditLog.setObjectId(project.getId());
+                default:
+                    break;
+            }
+        }
+
+        long beginTime = System.currentTimeMillis();
+        Object result = point.proceed();
+        long time = System.currentTimeMillis() - beginTime;
+
+        saveLog(result, sysLog, auditLog);
+
+        return result;
+    }
+
+    private void saveLog(Object object, OperatorLog sysLog, AuditLog auditLog) 
{
+        Result result = (Result)object;
+        if(result.isFailed()) {
+            return;
+        }
+
+        auditService.addAudit(auditLog);
+    }
+
+    public static int getId(Object obj) {
+        try {
+            Field idField = obj.getClass().getDeclaredField("id");
+            idField.setAccessible(true);
+            return (int) idField.get(obj);
+        } catch (NoSuchFieldException | IllegalAccessException | 
ClassCastException e) {
+            e.printStackTrace();
+        }
+        return -1;
+    }
+}
\ No newline at end of file
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AuditLogController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AuditLogController.java
index 6d334951e8..783a7d2c19 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AuditLogController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/AuditLogController.java
@@ -25,8 +25,8 @@ import org.apache.dolphinscheduler.api.service.AuditService;
 import org.apache.dolphinscheduler.api.utils.PageInfo;
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.constants.Constants;
-import org.apache.dolphinscheduler.common.enums.AuditOperationType;
-import org.apache.dolphinscheduler.common.enums.AuditResourceType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditObjectType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditOperationType;
 import org.apache.dolphinscheduler.dao.entity.User;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -69,7 +69,7 @@ public class AuditLogController extends BaseController {
     @Parameters({
             @Parameter(name = "startDate", description = "START_DATE", schema 
= @Schema(implementation = String.class)),
             @Parameter(name = "endDate", description = "END_DATE", schema = 
@Schema(implementation = String.class)),
-            @Parameter(name = "resourceType", description = "RESOURCE_TYPE", 
schema = @Schema(implementation = AuditResourceType.class)),
+            @Parameter(name = "resourceType", description = "RESOURCE_TYPE", 
schema = @Schema(implementation = AuditObjectType.class)),
             @Parameter(name = "operationType", description = "OPERATION_TYPE", 
schema = @Schema(implementation = AuditOperationType.class)),
             @Parameter(name = "userName", description = "USER_NAME", schema = 
@Schema(implementation = String.class)),
             @Parameter(name = "pageNo", description = "PAGE_NO", required = 
true, schema = @Schema(implementation = int.class, example = "1")),
@@ -81,7 +81,7 @@ public class AuditLogController extends BaseController {
     public Result<PageInfo<AuditDto>> 
queryAuditLogListPaging(@Parameter(hidden = true) @RequestAttribute(value = 
Constants.SESSION_USER) User loginUser,
                                                               
@RequestParam("pageNo") Integer pageNo,
                                                               
@RequestParam("pageSize") Integer pageSize,
-                                                              
@RequestParam(value = "resourceType", required = false) AuditResourceType 
resourceType,
+                                                              
@RequestParam(value = "resourceType", required = false) AuditObjectType 
resourceType,
                                                               
@RequestParam(value = "operationType", required = false) AuditOperationType 
operationType,
                                                               
@RequestParam(value = "startDate", required = false) String startDate,
                                                               
@RequestParam(value = "endDate", required = false) String endDate,
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
index a7701d25b3..1c4f3e89fa 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
@@ -36,12 +36,15 @@ import static 
org.apache.dolphinscheduler.api.enums.Status.SWITCH_PROCESS_DEFINI
 import static 
org.apache.dolphinscheduler.api.enums.Status.UPDATE_PROCESS_DEFINITION_ERROR;
 import static 
org.apache.dolphinscheduler.api.enums.Status.VERIFY_PROCESS_DEFINITION_NAME_UNIQUE_ERROR;
 
+import org.apache.dolphinscheduler.api.audit.OperatorLog;
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.exceptions.ApiException;
 import org.apache.dolphinscheduler.api.service.ProcessDefinitionService;
 import org.apache.dolphinscheduler.api.utils.PageInfo;
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.constants.Constants;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditObjectType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditOperationType;
 import org.apache.dolphinscheduler.common.enums.ProcessExecutionTypeEnum;
 import org.apache.dolphinscheduler.common.enums.ReleaseState;
 import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
@@ -112,6 +115,7 @@ public class ProcessDefinitionController extends 
BaseController {
     @PostMapping()
     @ResponseStatus(HttpStatus.CREATED)
     @ApiException(CREATE_PROCESS_DEFINITION_ERROR)
+    @OperatorLog(describe = "createWorkFlow", objectType = 
AuditObjectType.WORKFLOW, operationType = AuditOperationType.CREATE)
     public Result createProcessDefinition(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
                                           @Parameter(name = "projectCode", 
description = "PROJECT_CODE", required = true) @PathVariable long projectCode,
                                           @RequestParam(value = "name", 
required = true) String name,
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
index 7618126f91..f84caf1e00 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
@@ -27,10 +27,14 @@ import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROJECT_DETAILS
 import static 
org.apache.dolphinscheduler.api.enums.Status.QUERY_UNAUTHORIZED_PROJECT_ERROR;
 import static 
org.apache.dolphinscheduler.api.enums.Status.UPDATE_PROJECT_ERROR;
 
+import org.apache.dolphinscheduler.api.audit.OperatorLog;
 import org.apache.dolphinscheduler.api.exceptions.ApiException;
+import org.apache.dolphinscheduler.api.service.AuditService;
 import org.apache.dolphinscheduler.api.service.ProjectService;
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.constants.Constants;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditObjectType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditOperationType;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.plugin.task.api.utils.ParameterUtils;
 
@@ -67,6 +71,9 @@ public class ProjectController extends BaseController {
     @Autowired
     private ProjectService projectService;
 
+    @Autowired
+    private AuditService auditService;
+
     /**
      * create project
      *
@@ -83,6 +90,7 @@ public class ProjectController extends BaseController {
     @PostMapping()
     @ResponseStatus(HttpStatus.CREATED)
     @ApiException(CREATE_PROJECT_ERROR)
+    @OperatorLog(describe = "createProject", objectType = 
AuditObjectType.PROJECT, operationType = AuditOperationType.CREATE)
     public Result createProject(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
                                 @RequestParam("projectName") String 
projectName,
                                 @RequestParam(value = "description", required 
= false) String description) {
@@ -107,6 +115,7 @@ public class ProjectController extends BaseController {
     @PutMapping(value = "/{code}")
     @ResponseStatus(HttpStatus.OK)
     @ApiException(UPDATE_PROJECT_ERROR)
+    @OperatorLog(describe = "updateProject", objectType = 
AuditObjectType.PROJECT, operationType = AuditOperationType.UPDATE)
     public Result updateProject(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
                                 @PathVariable("code") Long code,
                                 @RequestParam("projectName") String 
projectName,
@@ -207,6 +216,7 @@ public class ProjectController extends BaseController {
     @DeleteMapping(value = "/{code}")
     @ResponseStatus(HttpStatus.OK)
     @ApiException(DELETE_PROJECT_ERROR)
+    @OperatorLog(describe = "deleteProject", objectType = 
AuditObjectType.PROJECT, operationType = AuditOperationType.DELETE)
     public Result deleteProject(@Parameter(hidden = true) 
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
                                 @PathVariable("code") Long code) {
         return projectService.deleteProject(loginUser, code);
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AuditService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AuditService.java
index 7b998dccce..58ae236e5d 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AuditService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/AuditService.java
@@ -19,8 +19,9 @@ package org.apache.dolphinscheduler.api.service;
 
 import org.apache.dolphinscheduler.api.dto.AuditDto;
 import org.apache.dolphinscheduler.api.utils.PageInfo;
-import org.apache.dolphinscheduler.common.enums.AuditOperationType;
-import org.apache.dolphinscheduler.common.enums.AuditResourceType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditObjectType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditOperationType;
+import org.apache.dolphinscheduler.dao.entity.AuditLog;
 import org.apache.dolphinscheduler.dao.entity.User;
 
 /**
@@ -28,15 +29,10 @@ import org.apache.dolphinscheduler.dao.entity.User;
  */
 public interface AuditService {
 
-    /**
-     * add new audit record
-     *
-     * @param user                  login user
-     * @param resourceType          resource type
-     * @param resourceId            resource id
-     * @param operation             operation type
-     */
-    void addAudit(User user, AuditResourceType resourceType, Integer 
resourceId, AuditOperationType operation);
+
+    void addAudit(AuditLog auditLog);
+
+    void addQuartzLog(int processId);
 
     /**
      * query audit log list
@@ -51,7 +47,7 @@ public interface AuditService {
      * @param pageSize          page size
      * @return                  audit log string
      */
-    PageInfo<AuditDto> queryLogListPaging(User loginUser, AuditResourceType 
resourceType,
+    PageInfo<AuditDto> queryLogListPaging(User loginUser, AuditObjectType 
resourceType,
                                           AuditOperationType operationType, 
String startTime,
                                           String endTime, String userName,
                                           Integer pageNo, Integer pageSize);
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AuditServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AuditServiceImpl.java
index 759e30b036..979657a95c 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AuditServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AuditServiceImpl.java
@@ -17,13 +17,11 @@
 
 package org.apache.dolphinscheduler.api.service.impl;
 
-import org.apache.dolphinscheduler.api.audit.AuditMessage;
-import org.apache.dolphinscheduler.api.audit.AuditPublishService;
 import org.apache.dolphinscheduler.api.dto.AuditDto;
 import org.apache.dolphinscheduler.api.service.AuditService;
 import org.apache.dolphinscheduler.api.utils.PageInfo;
-import org.apache.dolphinscheduler.common.enums.AuditOperationType;
-import org.apache.dolphinscheduler.common.enums.AuditResourceType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditObjectType;
+import org.apache.dolphinscheduler.common.enums.Audit.AuditOperationType;
 import org.apache.dolphinscheduler.dao.entity.AuditLog;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.mapper.AuditLogMapper;
@@ -44,20 +42,20 @@ public class AuditServiceImpl extends BaseServiceImpl 
implements AuditService {
     @Autowired
     private AuditLogMapper auditLogMapper;
 
-    @Autowired
-    private AuditPublishService publishService;
+    @Override
+    public void addAudit(AuditLog auditLog) {
+        auditLogMapper.insert(auditLog);
+    }
 
-    /**
-     * add new audit log
-     *
-     * @param user                  login user
-     * @param resourceType          resource type
-     * @param resourceId            resource id
-     * @param operation             operation type
-     */
     @Override
-    public void addAudit(User user, AuditResourceType resourceType, Integer 
resourceId, AuditOperationType operation) {
-        publishService.publish(new AuditMessage(user, new Date(), 
resourceType, operation, resourceId));
+    public void addQuartzLog(int processId) {
+        AuditLog auditLog = new AuditLog();
+        auditLog.setObjectId(processId);
+        auditLog.setObjectType(AuditObjectType.WORKFLOW.getCode());
+        auditLog.setOperationType(AuditOperationType.SCHEDULE_RUN.getCode());
+        auditLog.setTime(new Date());
+        auditLog.setUserId(-1);
+        auditLogMapper.insert(auditLog);
     }
 
     /**
@@ -75,7 +73,7 @@ public class AuditServiceImpl extends BaseServiceImpl 
implements AuditService {
      */
     @Override
     public PageInfo<AuditDto> queryLogListPaging(User loginUser,
-                                                 AuditResourceType 
resourceType,
+                                                 AuditObjectType resourceType,
                                                  AuditOperationType 
operationType,
                                                  String startDate,
                                                  String endDate,
@@ -115,11 +113,11 @@ public class AuditServiceImpl extends BaseServiceImpl 
implements AuditService {
      */
     private AuditDto transformAuditLog(AuditLog auditLog) {
         AuditDto auditDto = new AuditDto();
-        String resourceType = 
AuditResourceType.of(auditLog.getResourceType()).getMsg();
+        String resourceType = 
AuditObjectType.of(auditLog.getObjectType()).getName();
         auditDto.setResource(resourceType);
-        
auditDto.setOperation(AuditOperationType.of(auditLog.getOperation()).getMsg());
+        
auditDto.setOperation(AuditOperationType.of(auditLog.getOperationType()).getName());
         auditDto.setUserName(auditLog.getUserName());
-        
auditDto.setResourceName(auditLogMapper.queryResourceNameByType(resourceType, 
auditLog.getResourceId()));
+        
auditDto.setResourceName(auditLogMapper.queryResourceNameByType(resourceType, 
auditLog.getObjectId()));
         auditDto.setTime(auditLog.getTime());
         return auditDto;
     }
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/AuditLogUtils.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/AuditLogUtils.java
new file mode 100644
index 0000000000..7e84d56feb
--- /dev/null
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/utils/AuditLogUtils.java
@@ -0,0 +1,80 @@
+package org.apache.dolphinscheduler.api.utils;
+
+import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.dao.entity.User;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+public class AuditLogUtils {
+
+    public static void main(String[] args) {
+        User user1 = new User();
+        user1.setId(1);
+        user1.setUserType(UserType.ADMIN_USER);
+        user1.setEmail("ddd");
+
+        User user2 = new User();
+        user2.setId(3);
+        user2.setUserType(UserType.ADMIN_USER);
+        user2.setPhone("1234");
+        AuditLogUtils.getDiff(user1, user2);
+    }
+
+    public static String getDiff(Object pre, Object now) {
+        Map<String, Object> map1 = getAllFieldValues(pre);
+        Map<String, Object> map2 = getAllFieldValues(now);
+
+        for (String key1 : map1.keySet()) {
+            Object valueOld = map1.get(key1);
+            if(map2.containsKey(key1)) {
+                Object valueNew = map2.get(key1);
+                if (!valueOld.equals(valueNew)) {
+                    System.out.println(key1 + " from " + valueOld + " to " + 
valueNew);
+                }
+            } else {
+                System.out.println(key1 + " value " + valueOld + " deleted");
+            }
+        }
+
+        for (String key2 : map2.keySet()) {
+
+            if(!map1.containsKey(key2)) {
+                Object valueNew = map2.get(key2);
+                System.out.println(key2 + " value " + valueNew + " added");
+            }
+        }
+        return "!";
+    }
+
+    public static Map<String, Object> getAllFieldValues(Object obj) {
+        Class<?> clazz = obj.getClass();
+
+        Map<String, Object> map = new HashMap<>();
+
+        while (clazz != null) {
+            Field[] fields = clazz.getDeclaredFields();
+
+            for (Field field : fields) {
+                field.setAccessible(true);
+
+                try {
+                    Object value = field.get(obj);
+
+                    if(!Objects.isNull(value)) {
+                        map.put(field.getName(), value);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+
+            // 获取父类,直到父类为null
+            clazz = clazz.getSuperclass();
+        }
+
+        return map;
+    }
+}
\ No newline at end of file
diff --git a/dolphinscheduler-api/src/main/resources/application.yaml 
b/dolphinscheduler-api/src/main/resources/application.yaml
index c93fd99a59..879f8396d4 100644
--- a/dolphinscheduler-api/src/main/resources/application.yaml
+++ b/dolphinscheduler-api/src/main/resources/application.yaml
@@ -32,7 +32,7 @@ server:
 
 spring:
   profiles:
-    active: postgresql
+    active: mysql
   banner:
     charset: UTF-8
   jackson:
@@ -121,21 +121,10 @@ management:
       application: ${spring.application.name}
 
 registry:
-  type: zookeeper
-  zookeeper:
-    namespace: dolphinscheduler
-    connect-string: localhost:2181
-    retry-policy:
-      base-sleep-time: 60ms
-      max-sleep: 300ms
-      max-retries: 5
-    session-timeout: 60s
-    connection-timeout: 15s
-    block-until-connected: 15s
-    digest: ~
+  type: jdbc
 
 api:
-  audit-enable: false
+  audit-enable: true
   # Traffic control, if you turn on this config, the maximum number of 
request/s will be limited.
   # global max request number per second
   # default tenant-level max request number
@@ -247,9 +236,9 @@ spring:
       on-profile: mysql
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler
-    username: root
-    password: root
+    url: 
jdbc:mysql://tidb.intm.aiadgen-int-1.int.infra.webex.com:4000/ds3?useUnicode=true&characterEncoding=UTF-8&enabledTLSProtocols=TLSv1.2
+    username: udp
+    password: K$6Uu8U$JlcJWXeT
   quartz:
     properties:
       org.quartz.jobStore.driverDelegateClass: 
org.quartz.impl.jdbcjobstore.StdJDBCDelegate
diff --git a/dolphinscheduler-api/src/main/resources/logback-spring.xml 
b/dolphinscheduler-api/src/main/resources/logback-spring.xml
index 1982d6de5b..11d1069a59 100644
--- a/dolphinscheduler-api/src/main/resources/logback-spring.xml
+++ b/dolphinscheduler-api/src/main/resources/logback-spring.xml
@@ -51,11 +51,6 @@
     <logger name="org.apache.hadoop" level="WARN"/>
 
     <root level="INFO">
-        <if condition="${DOCKER:-false}">
-            <then>
-                <appender-ref ref="STDOUT"/>
-            </then>
-        </if>
-        <appender-ref ref="APILOGFILE"/>
+        <appender-ref ref="STDOUT"/>
     </root>
 </configuration>
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/audit/AuditSubscriberTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/audit/AuditSubscriberTest.java
index fe8e5303f5..835421c29d 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/audit/AuditSubscriberTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/audit/AuditSubscriberTest.java
@@ -17,14 +17,9 @@
 
 package org.apache.dolphinscheduler.api.audit;
 
-import org.apache.dolphinscheduler.common.enums.AuditOperationType;
-import org.apache.dolphinscheduler.common.enums.AuditResourceType;
 import org.apache.dolphinscheduler.dao.entity.AuditLog;
-import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.mapper.AuditLogMapper;
 
-import java.util.Date;
-
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
@@ -44,7 +39,7 @@ public class AuditSubscriberTest {
     @Test
     public void testExecute() {
         
Mockito.when(logMapper.insert(Mockito.any(AuditLog.class))).thenReturn(1);
-        auditSubscriber.execute(
-                new AuditMessage(new User(), new Date(), 
AuditResourceType.USER_MODULE, AuditOperationType.CREATE, 1));
+//        auditSubscriber.execute(
+//                new AuditMessage(new User(), new Date(), 
AuditResourceType.USER_MODULE, AuditOperationType.CREATE, 1));
     }
 }
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AuditServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AuditServiceTest.java
index 3bde4a1b8d..d36abdf033 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AuditServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/AuditServiceTest.java
@@ -89,8 +89,8 @@ public class AuditServiceTest {
     private AuditLog getAuditLog() {
         AuditLog auditLog = new AuditLog();
         auditLog.setUserName("testName");
-        auditLog.setOperation(0);
-        auditLog.setResourceType(0);
+        auditLog.setOperationType(0);
+        auditLog.setObjectType(0);
         return auditLog;
     }
 }
diff --git a/dolphinscheduler-bom/pom.xml b/dolphinscheduler-bom/pom.xml
index c4bf89e5ed..4cd8e26c6e 100644
--- a/dolphinscheduler-bom/pom.xml
+++ b/dolphinscheduler-bom/pom.xml
@@ -393,7 +393,6 @@
                 <groupId>mysql</groupId>
                 <artifactId>mysql-connector-java</artifactId>
                 <version>${mysql-connector.version}</version>
-                <scope>test</scope>
             </dependency>
 
             <dependency>
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/Audit/AuditObjectType.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/Audit/AuditObjectType.java
new file mode 100644
index 0000000000..3f478e2066
--- /dev/null
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/Audit/AuditObjectType.java
@@ -0,0 +1,102 @@
+/*
+ * 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.dolphinscheduler.common.enums.Audit;
+
+import lombok.Getter;
+
+import java.util.*;
+
+/**
+ * Audit Operation type
+ */
+
+public enum AuditObjectType {
+
+    PROJECT(0, -1, "Project", true),
+    RESOURCE(1,-1, "Resource", false),
+    DATASOURCE(2,-1, "Datasource", true),
+    SECURITY(3,-1, "Security", false),
+    WORKFLOW(4,0, "Workflow", true),
+    WORKFLOW_INSTANCE(5,4, "Workflow instance", true),
+    TASK(6,5, "Workflow instance", true),
+    FLINK(7,0, "Flink", true),
+    ETL(8,0, "Etl", true);
+    @Getter
+    private final int code;
+    @Getter
+    private final int parentCode;
+    @Getter
+    private final String name;
+    @Getter
+    private final boolean hasLogs;
+    @Getter
+    private int level;
+
+    private static final Map<Integer, List<AuditObjectType>> 
AUDIT_OBJECT_LEVEL_MAP = new HashMap<>();
+
+    private static HashMap<Integer, AuditObjectType> AUDIT_OBJECT_MAP = new 
HashMap<>();
+
+
+    static {
+        for (AuditObjectType auditObjectType : values()) {
+            int level = calculateLevel(auditObjectType);
+            AUDIT_OBJECT_LEVEL_MAP.computeIfAbsent(level, k -> new 
ArrayList<>()).add(auditObjectType);
+            auditObjectType.level = level;
+            AUDIT_OBJECT_MAP.put(auditObjectType.code, auditObjectType);
+        }
+    }
+
+    public static AuditObjectType of(int status) {
+        if (AUDIT_OBJECT_MAP.containsKey(status)) {
+            return AUDIT_OBJECT_MAP.get(status);
+        }
+        throw new IllegalArgumentException("invalid audit operation type code 
" + status);
+    }
+
+    AuditObjectType(int code, int parentCode, String name, boolean hasLogs) {
+        this.code = code;
+        this.parentCode = parentCode;
+        this.name = name;
+        this.hasLogs = hasLogs;
+    }
+
+    private static int calculateLevel(AuditObjectType auditObjectType) {
+        int level = 0;
+        int parentCode = auditObjectType.parentCode;
+
+        while (parentCode != -1) {
+            level++;
+            parentCode = getParentCode(parentCode);
+        }
+
+        return level;
+    }
+
+    private static int getParentCode(int code) {
+        for (AuditObjectType objectType : values()) {
+            if (objectType.code == code) {
+                return objectType.parentCode;
+            }
+        }
+        return -1;
+    }
+
+    public static void main(String[] args) {
+        System.out.println(1);
+    }
+}
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/AuditOperationType.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/Audit/AuditOperationType.java
similarity index 81%
rename from 
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/AuditOperationType.java
rename to 
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/Audit/AuditOperationType.java
index bcd78dff56..03b73d79e3 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/AuditOperationType.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/Audit/AuditOperationType.java
@@ -15,22 +15,37 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.common.enums;
+package org.apache.dolphinscheduler.common.enums.Audit;
+
+import lombok.Getter;
 
 import java.util.HashMap;
 
 /**
  * Audit Operation type
  */
+
 public enum AuditOperationType {
 
     CREATE(0, "CREATE"),
     READ(1, "READ"),
     UPDATE(2, "UPDATE"),
-    DELETE(3, "DELETE");
+    ONLINE(3, "ONLINE"),
+    START(4, "ONLINE"),
+    SCHEDULE_RUN(6, "SCHEDULE_RUN"),
+    RUN(6, "RUN"),
+    STOP(7, "STOP"),
+    DELETE(8, "DELETE");
 
+    @Getter
     private final int code;
-    private final String enMsg;
+    @Getter
+    private final String name;
+
+    AuditOperationType(int code, String name) {
+        this.code = code;
+        this.name = name;
+    }
 
     private static HashMap<Integer, AuditOperationType> AUDIT_OPERATION_MAP = 
new HashMap<>();
 
@@ -40,23 +55,10 @@ public enum AuditOperationType {
         }
     }
 
-    AuditOperationType(int code, String enMsg) {
-        this.code = code;
-        this.enMsg = enMsg;
-    }
-
     public static AuditOperationType of(int status) {
         if (AUDIT_OPERATION_MAP.containsKey(status)) {
             return AUDIT_OPERATION_MAP.get(status);
         }
         throw new IllegalArgumentException("invalid audit operation type code 
" + status);
     }
-
-    public int getCode() {
-        return code;
-    }
-
-    public String getMsg() {
-        return enMsg;
-    }
 }
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/AuditResourceType.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/AuditResourceType.java
deleted file mode 100644
index d422cd7de3..0000000000
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/AuditResourceType.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.dolphinscheduler.common.enums;
-
-import java.util.HashMap;
-
-/**
- * Audit Module type
- */
-public enum AuditResourceType {
-
-    // TODO: add other audit resource enums
-    USER_MODULE(0, "USER"),
-    PROJECT_MODULE(1, "PROJECT");
-
-    private final int code;
-    private final String enMsg;
-
-    private static HashMap<Integer, AuditResourceType> AUDIT_RESOURCE_MAP = 
new HashMap<>();
-
-    static {
-        for (AuditResourceType auditResourceType : AuditResourceType.values()) 
{
-            AUDIT_RESOURCE_MAP.put(auditResourceType.code, auditResourceType);
-        }
-    }
-
-    AuditResourceType(int code, String enMsg) {
-        this.code = code;
-        this.enMsg = enMsg;
-    }
-
-    public int getCode() {
-        return this.code;
-    }
-
-    public String getMsg() {
-        return this.enMsg;
-    }
-
-    public static AuditResourceType of(int status) {
-        if (AUDIT_RESOURCE_MAP.containsKey(status)) {
-            return AUDIT_RESOURCE_MAP.get(status);
-        }
-        throw new IllegalArgumentException("invalid audit resource type code " 
+ status);
-    }
-}
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java
index 10023d1547..7fa94f0cdb 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AuditLog.java
@@ -23,8 +23,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
 
-@TableName("t_ds_audit_log")
+@Data
+@TableName("t_ds_audit_log_1")
 public class AuditLog {
 
     /**
@@ -39,19 +41,19 @@ public class AuditLog {
     private Integer userId;
 
     /**
-     * resource type
+     * object type
      */
-    private Integer resourceType;
+    private Integer objectType;
 
     /**
      * operation type
      */
-    private Integer operation;
+    private Integer operationType;
 
     /**
-     * resource id
+     * object id
      */
-    private Integer resourceId;
+    private Integer objectId;
 
     /**
      * user name
@@ -64,51 +66,5 @@ public class AuditLog {
      */
     private Date time;
 
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public Integer getResourceType() {
-        return resourceType;
-    }
-
-    public void setResourceType(Integer resourceType) {
-        this.resourceType = resourceType;
-    }
-
-    public Integer getOperation() {
-        return operation;
-    }
-
-    public void setOperation(Integer operation) {
-        this.operation = operation;
-    }
-
-    public Integer getResourceId() {
-        return resourceId;
-    }
-
-    public void setResourceId(Integer resourceId) {
-        this.resourceId = resourceId;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public Date getTime() {
-        return time;
-    }
-
-    public void setTime(Date time) {
-        this.time = time;
-    }
+    private String detail;
 }
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.java
index 7d77b3e429..be5aaaa8d9 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.java
@@ -32,12 +32,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 public interface AuditLogMapper extends BaseMapper<AuditLog> {
 
     IPage<AuditLog> queryAuditLog(IPage<AuditLog> page,
-                                  @Param("resourceType") int[] resourceArray,
+                                  @Param("objectType") int[] objectType,
                                   @Param("operationType") int[] operationType,
                                   @Param("userName") String userName,
                                   @Param("startDate") Date startDate,
                                   @Param("endDate") Date endDate);
 
-    String queryResourceNameByType(@Param("resourceType") String resourceType,
-                                   @Param("resourceId") Integer resourceId);
+    String queryResourceNameByType(@Param("objectType") String objectType,
+                                   @Param("objectId") Integer objectId);
 }
diff --git 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.xml
 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.xml
index 09ba57075f..c0eb3ddb6d 100644
--- 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.xml
+++ 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AuditLogMapper.xml
@@ -19,10 +19,10 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"; >
 <mapper namespace="org.apache.dolphinscheduler.dao.mapper.AuditLogMapper">
     <sql id="baseSql">
-        id, user_id, resource_type, operation, resource_id, time
+        id, user_id, object_type, operation_type, object_id, time, detail
     </sql>
     <sql id="baseSqlV2">
-        ${alias}.id, ${alias}.user_id, ${alias}.resource_type, 
${alias}.operation, ${alias}.resource_id, ${alias}.time
+        ${alias}.id, ${alias}.user_id, ${alias}.object_type, 
${alias}.operation_type, ${alias}.object_id, ${alias}.time, ${alias}.detail
     </sql>
 
     <select id="queryAuditLog" 
resultType="org.apache.dolphinscheduler.dao.entity.AuditLog">
@@ -32,20 +32,20 @@
         </include>
         ,
         u.user_name as user_name
-        from t_ds_audit_log log
+        from t_ds_audit_log_1 log
         join t_ds_user u on log.user_id = u.id
         where 1 = 1
         <if test="startDate != null">
             and log.time > #{startDate} and log.time <![CDATA[ <=]]> #{endDate}
         </if>
-        <if test="resourceType != null and resourceType.length > 0">
-            and log.resource_type in
-            <foreach collection="resourceType" index="index" item="i" open="(" 
separator="," close=")">
+        <if test="objectType != null and objectType.length > 0">
+            and log.object_type in
+            <foreach collection="objectType" index="index" item="i" open="(" 
separator="," close=")">
                 #{i}
             </foreach>
         </if>
         <if test="operationType != null and operationType.length > 0">
-            and log.operation in
+            and log.operation_type in
             <foreach collection="operationType" index="index" item="j" 
open="(" separator="," close=")">
                 #{j}
             </foreach>
@@ -57,11 +57,11 @@
     </select>
 
     <select id="queryResourceNameByType" resultType="String">
-        <if test="resourceType != null and resourceType == 'USER'">
-            select user_name from t_ds_user where id = #{resourceId}
+        <if test="objectType != null and objectType == 'USER'">
+            select user_name from t_ds_user where id = #{objectId}
         </if>
-        <if test="resourceType != null and resourceType == 'PROJECT'">
-            select name from t_ds_project where id = #{resourceId}
+        <if test="objectType != null and objectType == 'Project'">
+            select name from t_ds_project where id = #{objectId}
         </if>
     </select>
 </mapper>
diff --git 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapperTest.java
 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapperTest.java
index 36b4c39a7c..8f2664b752 100644
--- 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapperTest.java
+++ 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/AuditLogMapperTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.dolphinscheduler.dao.mapper;
 
-import org.apache.dolphinscheduler.common.enums.AuditResourceType;
 import org.apache.dolphinscheduler.dao.BaseDaoTest;
 import org.apache.dolphinscheduler.dao.entity.AuditLog;
 import org.apache.dolphinscheduler.dao.entity.Project;
diff --git 
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessServiceImpl.java
 
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessServiceImpl.java
index 44945d03fb..7adb77657f 100644
--- 
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessServiceImpl.java
+++ 
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessServiceImpl.java
@@ -1911,6 +1911,7 @@ public class ProcessServiceImpl implements ProcessService 
{
         if (Boolean.TRUE.equals(syncDefine)) {
             if (processDefinition.getId() == null) {
                 result = processDefineMapper.insert(processDefinitionLog);
+                processDefinition.setId(processDefinitionLog.getId());
             } else {
                 processDefinitionLog.setId(processDefinition.getId());
                 result = processDefineMapper.updateById(processDefinitionLog);

Reply via email to