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 e79ff870e17099ef918e9481a372c5356dc29e45 Author: Draven <qing...@cisco.com> AuthorDate: Fri Feb 2 10:52:28 2024 +0800 update --- .../dolphinscheduler/api/audit/OperatorLog.java | 7 ---- .../api/audit/OperatorLogAspect.java | 46 ---------------------- .../api/controller/AuditLogController.java | 11 ++++-- .../api/dto/auditLog/AuditObjectTypeDto.java | 42 ++++++++++++++++++++ .../api/dto/auditLog/AuditOperationTypeDto.java | 27 +++++++++++++ .../dolphinscheduler/api/service/AuditService.java | 20 +++++++++- .../src/main/resources/sql/dolphinscheduler_h2.sql | 10 +++-- .../main/resources/sql/dolphinscheduler_mysql.sql | 12 ++++-- .../resources/sql/dolphinscheduler_postgresql.sql | 14 ++++--- .../3.3.0_schema/mysql/dolphinscheduler_ddl.sql | 29 +++++++++++++- .../postgresql/dolphinscheduler_ddl.sql | 28 ++++++++++++- .../dao/mapper/AuditLogMapperTest.java | 14 +++++-- 12 files changed, 183 insertions(+), 77 deletions(-) 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 index 440dd0f997..cd113a826b 100644 --- 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 @@ -54,13 +54,6 @@ public @interface OperatorLog { */ String[] requestParamName() default {}; - /** - * The name of the object to be returned after the operation. - * For operations like create and import, specify the object name to retrieve details from the response. - * For update and delete, the necessary information is usually provided in the request parameters. - */ - String returnObjectName() default ""; - /** * The names of the fields in the returned object to be recorded. * Represents an array of field names, e.g., ["id", "code"]. 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 index ec3211641d..141b979435 100644 --- 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 @@ -30,7 +30,6 @@ import org.apache.dolphinscheduler.common.enums.AuditObjectType; import org.apache.dolphinscheduler.common.enums.AuditOperationType; import org.apache.dolphinscheduler.common.enums.ReleaseState; import org.apache.dolphinscheduler.dao.entity.*; -import org.apache.dolphinscheduler.dao.entity.Queue; import org.apache.dolphinscheduler.dao.mapper.*; import org.apache.dolphinscheduler.spi.enums.ResourceType; import org.aspectj.lang.ProceedingJoinPoint; @@ -49,57 +48,12 @@ public class OperatorLogAspect { @Autowired private AuditService auditService; - @Autowired - private ProjectMapper projectMapper; - - @Autowired - private ProcessDefinitionMapper processDefinitionMapper; - - @Autowired - private ProcessInstanceMapper processInstanceMapper; - - @Autowired - private TaskDefinitionMapper taskDefinitionMapper; - @Autowired private ScheduleMapper scheduleMapper; - @Autowired - private UdfFuncMapper udfFuncMapper; - @Autowired private UserMapper userMapper; - @Autowired - private DataSourceMapper dataSourceMapper; - - @Autowired - private TenantMapper tenantMapper; - - @Autowired - private AlertGroupMapper alertGroupMapper; - - @Autowired - private AlertPluginInstanceMapper alertPluginInstanceMapper; - - @Autowired - private WorkerGroupMapper workerGroupMapper; - - @Autowired - private QueueMapper queueMapper; - - @Autowired - private EnvironmentMapper environmentMapper; - - @Autowired - private ClusterMapper clusterMapper; - - @Autowired - private K8sNamespaceMapper k8sNamespaceMapper; - - @Autowired - private AccessTokenMapper accessTokenMapper; - @Pointcut("@annotation(OperatorLog)") public void logPointCut() { 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 afae94cff1..b198669a82 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 @@ -20,6 +20,8 @@ package org.apache.dolphinscheduler.api.controller; import static org.apache.dolphinscheduler.api.enums.Status.QUERY_AUDIT_LOG_LIST_PAGING; import org.apache.dolphinscheduler.api.dto.AuditDto; +import org.apache.dolphinscheduler.api.dto.auditLog.AuditObjectTypeDto; +import org.apache.dolphinscheduler.api.dto.auditLog.AuditOperationTypeDto; import org.apache.dolphinscheduler.api.exceptions.ApiException; import org.apache.dolphinscheduler.api.service.AuditService; import org.apache.dolphinscheduler.api.utils.PageInfo; @@ -44,6 +46,7 @@ import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.ArrayList; import java.util.List; @Tag(name = "AUDIT_LOG_TAG") @@ -110,8 +113,8 @@ public class AuditLogController extends BaseController { @GetMapping(value = "/audit-log-operation-type") @ResponseStatus(HttpStatus.OK) @ApiException(QUERY_AUDIT_LOG_LIST_PAGING) - public Result<List<AuditOperationType>> queryAuditOperationTypeList() { - return Result.success(AuditOperationType.getOperationList()); + public Result<List<AuditOperationTypeDto>> queryAuditOperationTypeList() { + return Result.success(AuditOperationTypeDto.getlist()); } /** @@ -123,7 +126,7 @@ public class AuditLogController extends BaseController { @GetMapping(value = "/audit-log-object-type") @ResponseStatus(HttpStatus.OK) @ApiException(QUERY_AUDIT_LOG_LIST_PAGING) - public Result<List<AuditObjectType>> queryAuditObjectTypeList() { - return Result.success(AuditObjectType.getAuditObjectTreeList()); + public Result<List<AuditObjectTypeDto>> queryAuditObjectTypeList() { + return Result.success(AuditObjectTypeDto.getlist()); } } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/auditLog/AuditObjectTypeDto.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/auditLog/AuditObjectTypeDto.java new file mode 100644 index 0000000000..401fcf21b1 --- /dev/null +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/auditLog/AuditObjectTypeDto.java @@ -0,0 +1,42 @@ +package org.apache.dolphinscheduler.api.dto.auditLog; + +import lombok.Data; +import org.apache.dolphinscheduler.common.enums.AuditObjectType; +import org.apache.dolphinscheduler.common.enums.AuditOperationType; +import org.apache.dolphinscheduler.dao.model.WorkflowDefinitionCountDto; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class AuditObjectTypeDto { + private int code; + + private String name; + + private List<AuditObjectTypeDto> child = new ArrayList<>(); + + public static List<AuditObjectTypeDto> getlist() { + List<AuditObjectTypeDto> dtoList = new ArrayList<>(); + trans(dtoList, AuditObjectType.getAuditObjectTreeList()); + return dtoList; + } + + public static List<AuditObjectTypeDto> trans(List<AuditObjectTypeDto> dtoList, List<AuditObjectType> objectTypeList) { + for (AuditObjectType operationType: objectTypeList) { + dtoList.add(transToDto(operationType)); + } + + return dtoList; + } + + public static AuditObjectTypeDto transToDto(AuditObjectType operationType) { + AuditObjectTypeDto dto = new AuditObjectTypeDto(); + dto.setName(operationType.getName()); + dto.setCode(operationType.getCode()); + if(!operationType.getChild().isEmpty()) { + dto.setChild(trans(new ArrayList<>(), operationType.getChild())); + } + return dto; + } +} diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/auditLog/AuditOperationTypeDto.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/auditLog/AuditOperationTypeDto.java new file mode 100644 index 0000000000..a678868057 --- /dev/null +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/auditLog/AuditOperationTypeDto.java @@ -0,0 +1,27 @@ +package org.apache.dolphinscheduler.api.dto.auditLog; + +import lombok.Data; +import org.apache.dolphinscheduler.common.enums.AuditObjectType; +import org.apache.dolphinscheduler.common.enums.AuditOperationType; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class AuditOperationTypeDto { + private int code; + + private String name; + + public static List<AuditOperationTypeDto> getlist() { + List<AuditOperationTypeDto> dtoList = new ArrayList<>(); + for (AuditOperationType operationType: AuditOperationType.getOperationList()) { + AuditOperationTypeDto dto = new AuditOperationTypeDto(); + dto.setCode(operationType.getCode()); + dto.setName(operationType.getName()); + dtoList.add(dto); + } + + return dtoList; + } +} 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 dc1eba3190..c26a6d48c5 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 @@ -30,10 +30,19 @@ import java.util.List; * audit information service */ public interface AuditService { - - + /** + * add audit object + * + * @param auditLog auditLog + */ void addAudit(AuditLog auditLog); + /** + * add audit by list + * + * @param auditLogList auditLog list + * @param duration api cost seconds + */ void addAudit(List<AuditLog> auditLogList, long duration); void addQuartzLog(int processId); @@ -56,5 +65,12 @@ public interface AuditService { String endTime, String userName, Integer pageNo, Integer pageSize); + /** + * query real object name by object id or code + * + * @param objectId objectId + * @param objectType objectType + * @return object name + */ String getObjectNameByObjectId(Long objectId, AuditObjectType objectType); } diff --git a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql index c22f12c09a..f61d7a82de 100644 --- a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql +++ b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql @@ -2003,10 +2003,14 @@ CREATE TABLE t_ds_audit_log ( id int(11) NOT NULL AUTO_INCREMENT, user_id int(11) NOT NULL, - resource_type int(11) NOT NULL, - operation int(11) NOT NULL, + object_id bigint(20) NOT NULL, + object_name varchar(255) NOT NULL, + object_type int(11) NOT NULL, + operation_type int(11) NOT NULL, + description varchar(255) NOT NULL, + duration int(11) NOT NULL, + detail varchar(255) NOT NULL, time timestamp NULL DEFAULT CURRENT_TIMESTAMP, - resource_id int(11) NOT NULL, PRIMARY KEY (id) ); diff --git a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql index 347acb0a64..05ccc2533d 100644 --- a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql +++ b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql @@ -1992,10 +1992,14 @@ DROP TABLE IF EXISTS `t_ds_audit_log`; CREATE TABLE `t_ds_audit_log` ( `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT'key', `user_id` int(11) NOT NULL COMMENT 'user id', - `resource_type` int(11) NOT NULL COMMENT 'resource type', - `operation` int(11) NOT NULL COMMENT 'operation', - `time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'create time', - `resource_id` int(11) NULL DEFAULT NULL COMMENT 'resource id', + `object_id` bigint(20) DEFAULT NULL COMMENT 'object id', + `object_name` varchar(100) DEFAULT NULL COMMENT 'object id', + `object_type` int(11) NOT NULL COMMENT 'object type', + `operation_type` int(11) NOT NULL COMMENT 'operation type', + `description` varchar(100) DEFAULT NULL COMMENT 'api description', + `duration` int(11) DEFAULT NULL COMMENT 'api cost seconds', + `detail` varchar(100) DEFAULT NULL COMMENT 'object change detail', + `time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'operation time', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT= 1 DEFAULT CHARSET=utf8 COLLATE = utf8_bin; diff --git a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql index 66bcb17f38..f4dc6d976f 100644 --- a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql +++ b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql @@ -1971,11 +1971,15 @@ CREATE TABLE t_ds_task_group ( DROP TABLE IF EXISTS t_ds_audit_log; CREATE TABLE t_ds_audit_log ( id serial NOT NULL, - user_id int NOT NULL, - resource_type int NOT NULL, - operation int NOT NULL, - time timestamp DEFAULT NULL , - resource_id int NOT NULL, + user_id int NOT NULL, + object_id bigint NOT NULL, + object_name VARCHAR(255) NOT NULL, + object_type int NOT NULL, + operation_type int NOT NULL, + description VARCHAR(255) NOT NULL, + duration int NOT NULL, + detail VARCHAR(255) NOT NULL, + time timestamp DEFAULT NULL , PRIMARY KEY (id) ); diff --git a/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql b/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql index 6c73e112da..0270aa051d 100644 --- a/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql +++ b/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql @@ -80,4 +80,31 @@ ALTER TABLE `t_ds_process_definition_log` MODIFY COLUMN `version` int NOT NULL D ALTER TABLE `t_ds_process_instance` MODIFY COLUMN `process_definition_version` int NOT NULL DEFAULT 1 COMMENT "process definition version"; ALTER TABLE `t_ds_task_definition` MODIFY COLUMN `version` int NOT NULL DEFAULT 1 COMMENT "task definition version"; ALTER TABLE `t_ds_task_definition_log` MODIFY COLUMN `version` int NOT NULL DEFAULT 1 COMMENT "task definition version"; -ALTER TABLE `t_ds_task_instance` MODIFY COLUMN `task_definition_version` int NOT NULL DEFAULT 1 COMMENT "task definition version"; \ No newline at end of file +ALTER TABLE `t_ds_task_instance` MODIFY COLUMN `task_definition_version` int NOT NULL DEFAULT 1 COMMENT "task definition version"; + +-- modify_data_t_ds_audit_log_input_entry behavior change +--DROP PROCEDURE if EXISTS modify_data_t_ds_audit_log_input_entry; +DROP PROCEDURE if EXISTS modify_data_t_ds_audit_log_input_entry; +delimiter d// +CREATE PROCEDURE modify_data_t_ds_audit_log_input_entry() +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.COLUMNS + WHERE TABLE_NAME='t_ds_audit_log' + AND TABLE_SCHEMA=(SELECT DATABASE()) + AND COLUMN_NAME ='resource_type') + THEN + ALTER TABLE `t_ds_audit_log` + drop resource_type, drop operation, drop resource_id, + add `object_id` bigint(20) DEFAULT NULL COMMENT 'object id', + add `object_name` varchar(100) DEFAULT NULL COMMENT 'object id', + add `object_type` int(11) NOT NULL COMMENT 'object type', + add `operation_type` int(11) NOT NULL COMMENT 'operation type', + add `description` varchar(100) DEFAULT NULL COMMENT 'api description', + add `duration` int(11) DEFAULT NULL COMMENT 'api cost seconds', + add `detail` varchar(100) DEFAULT NULL COMMENT 'object change detail'; +END IF; +END; +d// +delimiter ; +CALL modify_data_t_ds_audit_log_input_entry; +DROP PROCEDURE modify_data_t_ds_audit_log_input_entry; \ No newline at end of file diff --git a/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql b/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql index fd13ed3594..7c86e315cf 100644 --- a/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql +++ b/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql @@ -68,4 +68,30 @@ ALTER TABLE "t_ds_process_definition_log" ALTER COLUMN "version" SET DEFAULT 1; ALTER TABLE "t_ds_task_definition" ALTER COLUMN "version" SET DEFAULT 1; ALTER TABLE "t_ds_task_definition_log" ALTER COLUMN "version" SET DEFAULT 1; ALTER TABLE "t_ds_process_instance" ALTER COLUMN "process_definition_version" SET NOT NULL, ALTER COLUMN "process_definition_version" SET DEFAULT 1; -ALTER TABLE "t_ds_task_instance" ALTER COLUMN "task_definition_version" SET NOT NULL, ALTER COLUMN "task_definition_version" SET DEFAULT 1; \ No newline at end of file +ALTER TABLE "t_ds_task_instance" ALTER COLUMN "task_definition_version" SET NOT NULL, ALTER COLUMN "task_definition_version" SET DEFAULT 1; + +-- modify_data_t_ds_audit_log_input_entry +delimiter d// +CREATE OR REPLACE FUNCTION modify_data_t_ds_audit_log_input_entry() RETURNS void AS $$ +BEGIN + IF EXISTS (SELECT 1 + FROM information_schema.columns + WHERE table_name = 't_ds_audit_log' + AND column_name = 'resource_type') + THEN +ALTER TABLE t_ds_audit_log + drop resource_type, drop operation, drop resource_id, + add object_id bigint NOT NULL, + add object_name VARCHAR(255) NOT NULL, + add object_type int NOT NULL, + add operation_type int NOT NULL, + add description VARCHAR(255) NOT NULL, + add duration int NOT NULL, + add detail VARCHAR(255) NOT NULL; +END IF; +END; +$$ LANGUAGE plpgsql; +d// + +select modify_data_t_ds_audit_log_input_entry(); +DROP FUNCTION IF EXISTS modify_data_t_ds_audit_log_input_entry(); \ No newline at end of file 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 dd12e2dd25..65c5a604e0 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,12 +17,15 @@ package org.apache.dolphinscheduler.dao.mapper; +import com.google.common.collect.Lists; import org.apache.dolphinscheduler.common.enums.AuditObjectType; import org.apache.dolphinscheduler.dao.BaseDaoTest; import org.apache.dolphinscheduler.dao.entity.AuditLog; import org.apache.dolphinscheduler.dao.entity.Project; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -42,6 +45,9 @@ public class AuditLogMapperTest extends BaseDaoTest { private void insertOne(AuditObjectType objectType) { AuditLog auditLog = new AuditLog(); auditLog.setUserId(1); + auditLog.setObjectName("name"); + auditLog.setDetail("detail"); + auditLog.setDuration(1L); auditLog.setTime(new Date()); auditLog.setObjectType(objectType.getCode()); auditLog.setOperationType(0); @@ -68,10 +74,10 @@ public class AuditLogMapperTest extends BaseDaoTest { insertOne(AuditObjectType.USER); insertOne(AuditObjectType.PROJECT); Page<AuditLog> page = new Page<>(1, 3); - int[] resourceType = new int[0]; - int[] operationType = new int[0]; + List<Integer> objectTypeCodeList = Lists.newArrayList(1); + List<Integer> operationTypeCodeList = Lists.newArrayList(1); -// IPage<AuditLog> logIPage = logMapper.queryAuditLog(page, resourceType, operationType, -1, null, null); -// Assertions.assertNotEquals(0, logIPage.getTotal()); + IPage<AuditLog> logIPage = logMapper.queryAuditLog(page, objectTypeCodeList, operationTypeCodeList, "", null, null); + Assertions.assertNotEquals(0, logIPage.getTotal()); } }