blob: f8f763b4f4dd57e1243262d73c84e444e90fcfd3 [file] [log] [blame]
/*
* 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.service.impl;
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.AuditModelType;
import org.apache.dolphinscheduler.common.enums.AuditOperationType;
import org.apache.dolphinscheduler.dao.entity.AuditLog;
import org.apache.dolphinscheduler.dao.mapper.AuditLogMapper;
import org.apache.parquet.Strings;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@Service
@Slf4j
public class AuditServiceImpl extends BaseServiceImpl implements AuditService {
@Autowired
private AuditLogMapper auditLogMapper;
@Override
public void addAudit(AuditLog auditLog) {
if (auditLog.getModelId() == null || auditLog.getModelName() == null) {
return;
}
auditLogMapper.insert(auditLog);
}
/**
* query audit log paging
*
* @param modelTypes object types
* @param operationTypes operation types
* @param startDate start time
* @param endDate end time
* @param userName query user name
* @param modelName query object name
* @param pageNo page number
* @param pageSize page size
* @return audit log string data
*/
@Override
public PageInfo<AuditDto> queryLogListPaging(String modelTypes,
String operationTypes,
String startDate,
String endDate,
String userName,
String modelName,
Integer pageNo,
Integer pageSize) {
List<String> objectTypeCodeList = convertStringToList(modelTypes);
List<String> operationTypeCodeList = convertStringToList(operationTypes);
Date start = checkAndParseDateParameters(startDate);
Date end = checkAndParseDateParameters(endDate);
IPage<AuditLog> logIPage =
auditLogMapper.queryAuditLog(new Page<>(pageNo, pageSize), objectTypeCodeList, operationTypeCodeList,
userName, modelName, start, end);
List<AuditDto> auditDtos =
logIPage.getRecords().stream().map(this::transformAuditLog).collect(Collectors.toList());
PageInfo<AuditDto> pageInfo = new PageInfo<>(pageNo, pageSize);
pageInfo.setTotal((int) logIPage.getTotal());
pageInfo.setTotalList(auditDtos);
return pageInfo;
}
private List<String> convertStringToList(String string) {
if (Strings.isNullOrEmpty(string)) {
return new ArrayList<>();
}
return Arrays.stream(string.split(",")).collect(Collectors.toList());
}
/**
* transform AuditLog to AuditDto
*
* @param auditLog audit log
* @return audit dto
*/
private AuditDto transformAuditLog(AuditLog auditLog) {
AuditDto auditDto = new AuditDto();
AuditModelType objectType = AuditModelType.of(auditLog.getModelType());
auditDto.setModelType(objectType.getName());
auditDto.setModelName(auditLog.getModelName());
auditDto.setOperation(AuditOperationType.of(auditLog.getOperationType()).getName());
auditDto.setUserName(auditLog.getUserName());
auditDto.setLatency(String.valueOf(auditLog.getLatency()));
auditDto.setDetail(auditLog.getDetail());
auditDto.setDescription(auditLog.getDescription());
auditDto.setCreateTime(auditLog.getCreateTime());
return auditDto;
}
}