You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by wa...@apache.org on 2024/02/02 02:52:37 UTC
(dolphinscheduler) 01/05: init
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 <qi...@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);