1. 修改setDataMap函数为addDataMap以防止swagger将DataMap视为一种属性
2. 当任务未通过审核时,现在会立刻报错而不是返回false
This commit is contained in:
@@ -5,7 +5,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = 'com.realtime'
|
group = 'com.realtime'
|
||||||
version = '0.0.1-SNAPSHOT'
|
version = '0.0.2-SNAPSHOT'
|
||||||
|
|
||||||
java {
|
java {
|
||||||
sourceCompatibility = '17'
|
sourceCompatibility = '17'
|
||||||
@@ -43,6 +43,7 @@ dependencies {
|
|||||||
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
|
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
|
||||||
implementation 'com.alibaba:easyexcel:3.3.3'
|
implementation 'com.alibaba:easyexcel:3.3.3'
|
||||||
implementation 'com.baomidou:dynamic-datasource-spring-boot3-starter:4.3.0'
|
implementation 'com.baomidou:dynamic-datasource-spring-boot3-starter:4.3.0'
|
||||||
|
implementation 'com.github.xiaoymin:knife4j-openapi3-jakarta-spring-boot-starter:4.4.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.named('test') {
|
tasks.named('test') {
|
||||||
|
|||||||
31
qodana.yaml
Normal file
31
qodana.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#-------------------------------------------------------------------------------#
|
||||||
|
# Qodana analysis is configured by qodana.yaml file #
|
||||||
|
# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
|
||||||
|
#-------------------------------------------------------------------------------#
|
||||||
|
version: "1.0"
|
||||||
|
|
||||||
|
#Specify inspection profile for code analysis
|
||||||
|
profile:
|
||||||
|
name: qodana.starter
|
||||||
|
|
||||||
|
#Enable inspections
|
||||||
|
#include:
|
||||||
|
# - name: <SomeEnabledInspectionId>
|
||||||
|
|
||||||
|
#Disable inspections
|
||||||
|
#exclude:
|
||||||
|
# - name: <SomeDisabledInspectionId>
|
||||||
|
# paths:
|
||||||
|
# - <path/where/not/run/inspection>
|
||||||
|
|
||||||
|
projectJDK: 17 #(Applied in CI/CD pipeline)
|
||||||
|
|
||||||
|
#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
|
||||||
|
#bootstrap: sh ./prepare-qodana.sh
|
||||||
|
|
||||||
|
#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
|
||||||
|
#plugins:
|
||||||
|
# - id: <plugin.id> #(plugin id can be found at https://plugins.jetbrains.com)
|
||||||
|
|
||||||
|
#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
|
||||||
|
linter: jetbrains/qodana-jvm:latest
|
||||||
@@ -2,7 +2,6 @@ package com.realtime.protection;
|
|||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class ProtectionApplication {
|
public class ProtectionApplication {
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
package com.realtime.protection.configuration.cors;
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
public class CorsFilter implements WebMvcConfigurer {
|
|
||||||
@Override
|
|
||||||
public void addCorsMappings(CorsRegistry corsRegistry) {
|
|
||||||
corsRegistry.addMapping("/**")
|
|
||||||
.allowedOrigins("http://localhost:8000")
|
|
||||||
.allowCredentials(true)
|
|
||||||
.allowedMethods("GET", "POST", "DELETE", "PUT")
|
|
||||||
.allowedHeaders("*")
|
|
||||||
.exposedHeaders("*");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.realtime.protection.configuration.response;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
@Schema(description = "xxx")
|
||||||
|
public class ResponseData extends HashMap<String, Object> {
|
||||||
|
|
||||||
|
public Object put(String key, Object value, String description) {
|
||||||
|
return super.put(key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,12 +18,12 @@ public class ResponseResult implements Serializable {
|
|||||||
private String message;
|
private String message;
|
||||||
|
|
||||||
@Schema(description = "封装数据")
|
@Schema(description = "封装数据")
|
||||||
private Map<String, Object> data;
|
private ResponseData data;
|
||||||
|
|
||||||
@Schema(description = "返回对象链接的另外一个返回对象")
|
@Schema(description = "返回对象链接的另外一个返回对象")
|
||||||
private ResponseResult another;
|
private ResponseResult another;
|
||||||
|
|
||||||
public ResponseResult(int code, String message, LinkedHashMap<String, Object> data) {
|
public ResponseResult(int code, String message, ResponseData data) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.data = data;
|
this.data = data;
|
||||||
@@ -31,13 +31,13 @@ public class ResponseResult implements Serializable {
|
|||||||
|
|
||||||
public ResponseResult(int code) {
|
public ResponseResult(int code) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.data = new LinkedHashMap<>();
|
this.data = new ResponseData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResponseResult(int code, String message) {
|
public ResponseResult(int code, String message) {
|
||||||
this.code = code;
|
this.code = code;
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.data = new LinkedHashMap<>();
|
this.data = new ResponseData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ResponseResult ok() {
|
public static ResponseResult ok() {
|
||||||
@@ -83,8 +83,8 @@ public class ResponseResult implements Serializable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResponseResult setDataMap(Map<String, Object> data) {
|
public ResponseResult addDataMap(Map<String, Object> data) {
|
||||||
this.data = data;
|
this.data = (ResponseData) data;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,4 +23,6 @@ public interface CommandMapper {
|
|||||||
Boolean setCommandInvalid(@Param("command_id") String commandId);
|
Boolean setCommandInvalid(@Param("command_id") String commandId);
|
||||||
|
|
||||||
List<TaskCommandInfo> queryCommandInfoByTaskId(@Param("task_id") Long taskId);
|
List<TaskCommandInfo> queryCommandInfoByTaskId(@Param("task_id") Long taskId);
|
||||||
|
|
||||||
|
TaskCommandInfo queryCommandInfoByUUID(@Param("uuid") String uuid);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,10 @@ import com.realtime.protection.configuration.entity.task.TaskCommandInfo;
|
|||||||
import com.realtime.protection.configuration.utils.SqlSessionWrapper;
|
import com.realtime.protection.configuration.utils.SqlSessionWrapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@@ -24,14 +26,19 @@ public class CommandService {
|
|||||||
this.sqlSessionWrapper = sqlSessionWrapper;
|
this.sqlSessionWrapper = sqlSessionWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean createCommand(TaskCommandInfo commandInfo) {
|
@Transactional
|
||||||
return commandMapper.createCommand(commandInfo);
|
public String createCommand(TaskCommandInfo commandInfo) {
|
||||||
|
commandInfo.setUUID(UUID.randomUUID().toString());
|
||||||
|
commandMapper.createCommand(commandInfo);
|
||||||
|
return commandInfo.getUUID();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createCommands(List<TaskCommandInfo> taskCommandInfos) {
|
public void createCommands(List<TaskCommandInfo> taskCommandInfos) {
|
||||||
Function<CommandMapper, Function<List<TaskCommandInfo>, Boolean>> function = mapper -> list -> {
|
Function<CommandMapper, Function<List<TaskCommandInfo>, Boolean>> function = mapper -> list -> {
|
||||||
List<TaskCommandInfo> taskCommandInfoBatch = ListUtils.newArrayListWithExpectedSize(BatchSize);
|
List<TaskCommandInfo> taskCommandInfoBatch = ListUtils.newArrayListWithExpectedSize(BatchSize);
|
||||||
for (TaskCommandInfo info : list) {
|
for (TaskCommandInfo info : list) {
|
||||||
|
info.setUUID(UUID.randomUUID().toString());
|
||||||
taskCommandInfoBatch.add(info);
|
taskCommandInfoBatch.add(info);
|
||||||
if (taskCommandInfoBatch.size() < BatchSize) {
|
if (taskCommandInfoBatch.size() < BatchSize) {
|
||||||
continue;
|
continue;
|
||||||
@@ -56,6 +63,10 @@ public class CommandService {
|
|||||||
return commandMapper.queryCommandInfoByTaskId(taskId);
|
return commandMapper.queryCommandInfoByTaskId(taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TaskCommandInfo queryCommandInfoByUUID(String uuid) {
|
||||||
|
return commandMapper.queryCommandInfoByUUID(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
public Boolean startCommandsByTaskId(Long taskId) {
|
public Boolean startCommandsByTaskId(Long taskId) {
|
||||||
return commandMapper.startCommandsByTaskId(taskId);
|
return commandMapper.startCommandsByTaskId(taskId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,14 +83,13 @@ public class ProtectObjectController implements ProtectObjectControllerApi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@GetMapping("/{protectObjectId}/query")
|
@GetMapping("/{protectObjectId}/query")
|
||||||
public ResponseResult queryProtectObject(@PathVariable Integer protectObjectId) throws IllegalAccessException {
|
public ResponseResult queryProtectObject(@PathVariable Integer protectObjectId) {
|
||||||
ProtectObject protectObject = protectObjectService.queryProtectObject(protectObjectId);
|
ProtectObject protectObject = protectObjectService.queryProtectObject(protectObjectId);
|
||||||
if (protectObject == null) {
|
if (protectObject == null) {
|
||||||
return ResponseResult.invalid()
|
return ResponseResult.invalid()
|
||||||
.setMessage("无效的防护对象ID,也许该ID指定的防护对象不存在?");
|
.setMessage("无效的防护对象ID,也许该ID指定的防护对象不存在?");
|
||||||
}
|
}
|
||||||
return ResponseResult.ok()
|
return ResponseResult.ok().setData("protect_object", protectObject);
|
||||||
.setDataMap(EntityUtils.entityToMap(protectObject));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -124,7 +123,7 @@ public class ProtectObjectController implements ProtectObjectControllerApi {
|
|||||||
public ResponseResult changeProtectObjectAuditStatus(@PathVariable Integer protectObjectId,
|
public ResponseResult changeProtectObjectAuditStatus(@PathVariable Integer protectObjectId,
|
||||||
@PathVariable Integer auditStatus) {
|
@PathVariable Integer auditStatus) {
|
||||||
return ResponseResult.ok()
|
return ResponseResult.ok()
|
||||||
.setDataMap(protectObjectService.changeProtectObjectAuditStatus(protectObjectId, auditStatus))
|
.addDataMap(protectObjectService.changeProtectObjectAuditStatus(protectObjectId, auditStatus))
|
||||||
.setData("proobj_id", protectObjectId);
|
.setData("proobj_id", protectObjectId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,8 +55,7 @@ public class TemplateController implements TemplateControllerApi {
|
|||||||
return ResponseResult.invalid()
|
return ResponseResult.invalid()
|
||||||
.setMessage("无效的策略模板ID,也许该模板不存在?");
|
.setMessage("无效的策略模板ID,也许该模板不存在?");
|
||||||
}
|
}
|
||||||
return ResponseResult.ok()
|
return ResponseResult.ok().setData("template", template);
|
||||||
.setDataMap(EntityUtils.entityToMap(template));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ public class StaticRuleController implements StaticRuleControllerApi {
|
|||||||
.setData("success", false);
|
.setData("success", false);
|
||||||
}
|
}
|
||||||
return ResponseResult.ok()
|
return ResponseResult.ok()
|
||||||
.setDataMap(staticRuleService.updateAuditStatus(id, auditStatus))
|
.addDataMap(staticRuleService.updateAuditStatus(id, auditStatus))
|
||||||
.setData("staticRule_id", id);
|
.setData("staticRule_id", id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,8 +87,7 @@ public class TaskController implements TaskControllerApi {
|
|||||||
return ResponseResult.invalid().setMessage("无效Task ID,也许该ID对应的任务不存在?");
|
return ResponseResult.invalid().setMessage("无效Task ID,也许该ID对应的任务不存在?");
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseResult.ok()
|
return ResponseResult.ok().setData("task", task);
|
||||||
.setDataMap(EntityUtils.entityToMap(task));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.realtime.protection.configuration.entity.task.Task;
|
|||||||
import com.realtime.protection.configuration.entity.task.TaskCommandInfo;
|
import com.realtime.protection.configuration.entity.task.TaskCommandInfo;
|
||||||
import com.realtime.protection.configuration.exception.DorisStartException;
|
import com.realtime.protection.configuration.exception.DorisStartException;
|
||||||
import com.realtime.protection.configuration.response.ResponseResult;
|
import com.realtime.protection.configuration.response.ResponseResult;
|
||||||
|
import io.netty.channel.ChannelHandler;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.media.Content;
|
import io.swagger.v3.oas.annotations.media.Content;
|
||||||
@@ -16,6 +17,10 @@ import jakarta.validation.constraints.Min;
|
|||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static com.fasterxml.jackson.databind.type.LogicalType.Map;
|
||||||
|
|
||||||
@Tag(name = "任务控制器API", description = "任务管理模块相关的所有接口")
|
@Tag(name = "任务控制器API", description = "任务管理模块相关的所有接口")
|
||||||
public interface TaskControllerApi {
|
public interface TaskControllerApi {
|
||||||
@PostMapping("/new")
|
@PostMapping("/new")
|
||||||
@@ -28,7 +33,8 @@ public interface TaskControllerApi {
|
|||||||
content = @Content(
|
content = @Content(
|
||||||
mediaType = "application/json",
|
mediaType = "application/json",
|
||||||
schema = @Schema(implementation = ResponseResult.class)
|
schema = @Schema(implementation = ResponseResult.class)
|
||||||
)
|
),
|
||||||
|
responseCode = "200"
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(description = "任务信息")
|
requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(description = "任务信息")
|
||||||
|
|||||||
@@ -35,9 +35,9 @@ public class StateHandler {
|
|||||||
throw new IllegalArgumentException("无效的task_id,因为task_audit_status为空");
|
throw new IllegalArgumentException("无效的task_id,因为task_audit_status为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果审核状态不为已通过审核,则无效
|
// 如果审核状态不为已通过审核,则报错
|
||||||
if (taskAuditStatus != AuditStatus.AUDITED.getAuditStatus()) {
|
if (taskAuditStatus != AuditStatus.AUDITED.getAuditStatus()) {
|
||||||
return false;
|
throw new IllegalArgumentException("无效的task_id,因为未通过审核");
|
||||||
}
|
}
|
||||||
|
|
||||||
return switch (TaskTypeEnum.getTaskTypeByNum(task.getTaskType())) {
|
return switch (TaskTypeEnum.getTaskTypeByNum(task.getTaskType())) {
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ public class PendingState extends StateHandler implements State {
|
|||||||
case FAILED -> handleFailed(commandService, taskId);
|
case FAILED -> handleFailed(commandService, taskId);
|
||||||
case RUNNING -> handleStart(taskService, commandService, taskId);
|
case RUNNING -> handleStart(taskService, commandService, taskId);
|
||||||
case FINISHED -> handleFinish(commandService, taskId);
|
case FINISHED -> handleFinish(commandService, taskId);
|
||||||
default -> throw new IllegalStateException("Unexpected value: " + StateEnum.getStateEnumByState(newState));
|
default -> throw new IllegalStateException(taskId + " meets unexpected value: "
|
||||||
|
+ StateEnum.getStateEnumByState(newState));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ public class WhiteListController implements WhiteListControllerApi {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
return ResponseResult.ok()
|
return ResponseResult.ok()
|
||||||
.setDataMap(whiteListService.updateWhiteListObjectAuditStatus(id, auditStatus))
|
.addDataMap(whiteListService.updateWhiteListObjectAuditStatus(id, auditStatus))
|
||||||
.setData("whiteobj_id", id);
|
.setData("whiteobj_id", id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
server:
|
server:
|
||||||
port: 8080
|
port: 8081
|
||||||
|
servlet:
|
||||||
|
context-path: /api/v1
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
@@ -29,9 +31,6 @@ spring:
|
|||||||
primary: mysql
|
primary: mysql
|
||||||
strict: true
|
strict: true
|
||||||
grace-destroy: true
|
grace-destroy: true
|
||||||
mvc:
|
|
||||||
servlet:
|
|
||||||
path: /api/v1
|
|
||||||
jackson:
|
jackson:
|
||||||
default-property-inclusion: non_null
|
default-property-inclusion: non_null
|
||||||
|
|
||||||
@@ -49,7 +48,12 @@ task:
|
|||||||
springdoc:
|
springdoc:
|
||||||
api-docs:
|
api-docs:
|
||||||
enabled: true
|
enabled: true
|
||||||
path: /api-docs
|
path: /v3/api-docs
|
||||||
swagger-ui:
|
swagger-ui:
|
||||||
path: /swagger
|
path: /swagger-ui.html
|
||||||
packages-to-scan: com.realtime.protection.server
|
packages-to-scan: com.realtime.protection.server
|
||||||
|
|
||||||
|
knife4j:
|
||||||
|
enable: true
|
||||||
|
setting:
|
||||||
|
language: zh_cn
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
server:
|
server:
|
||||||
port: 80
|
port: 8081
|
||||||
|
servlet:
|
||||||
|
context-path: /api/v1
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
@@ -29,9 +31,6 @@ spring:
|
|||||||
primary: mysql
|
primary: mysql
|
||||||
strict: true
|
strict: true
|
||||||
grace-destroy: true
|
grace-destroy: true
|
||||||
mvc:
|
|
||||||
servlet:
|
|
||||||
path: /api/v1
|
|
||||||
jackson:
|
jackson:
|
||||||
default-property-inclusion: non_null
|
default-property-inclusion: non_null
|
||||||
|
|
||||||
@@ -41,8 +40,8 @@ mybatis:
|
|||||||
task:
|
task:
|
||||||
pool:
|
pool:
|
||||||
core-pool-size: 20
|
core-pool-size: 20
|
||||||
max-pool-size: 100
|
max-pool-size: 400
|
||||||
queue-capacity: 100
|
queue-capacity: 400
|
||||||
keep-alive-seconds: 120
|
keep-alive-seconds: 120
|
||||||
|
|
||||||
springdoc:
|
springdoc:
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
server:
|
server:
|
||||||
port: 8081
|
port: 8081
|
||||||
|
servlet:
|
||||||
|
context-path: /api/v1
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
@@ -29,9 +31,6 @@ spring:
|
|||||||
primary: mysql
|
primary: mysql
|
||||||
strict: false
|
strict: false
|
||||||
grace-destroy: true
|
grace-destroy: true
|
||||||
mvc:
|
|
||||||
servlet:
|
|
||||||
path: /api/v1
|
|
||||||
jackson:
|
jackson:
|
||||||
default-property-inclusion: non_null
|
default-property-inclusion: non_null
|
||||||
|
|
||||||
@@ -40,9 +39,9 @@ mybatis:
|
|||||||
|
|
||||||
task:
|
task:
|
||||||
pool:
|
pool:
|
||||||
core-pool-size: 20
|
core-pool-size: 50
|
||||||
max-pool-size: 100
|
max-pool-size: 100
|
||||||
queue-capacity: 100
|
queue-capacity: 50
|
||||||
keep-alive-seconds: 120
|
keep-alive-seconds: 120
|
||||||
|
|
||||||
springdoc:
|
springdoc:
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
MASK_SRC_IP, MASK_SRC_PORT, MASK_DST_IP, MASK_DST_PORT, MASK_PROTOCOL, VALID_TIME,
|
MASK_SRC_IP, MASK_SRC_PORT, MASK_DST_IP, MASK_DST_PORT, MASK_PROTOCOL, VALID_TIME,
|
||||||
INVALID_TIME, IS_VALID,
|
INVALID_TIME, IS_VALID,
|
||||||
SEND_TIMES, SUCCESS_TIMES, CREATE_TIME, LAST_UPDATE, IS_DELETED)
|
SEND_TIMES, SUCCESS_TIMES, CREATE_TIME, LAST_UPDATE, IS_DELETED)
|
||||||
values (UUID(), #{info.taskId}, #{info.taskAct}, #{info.frequency},
|
values (#{info.UUID}, #{info.taskId}, #{info.taskAct}, #{info.frequency},
|
||||||
#{info.fiveTupleWithMask.addrType},
|
DEFAULT,
|
||||||
#{info.fiveTupleWithMask.sourceIP}, #{info.fiveTupleWithMask.sourcePort},
|
#{info.fiveTupleWithMask.sourceIP}, #{info.fiveTupleWithMask.sourcePort},
|
||||||
#{info.fiveTupleWithMask.destinationIP}, #{info.fiveTupleWithMask.destinationPort},
|
#{info.fiveTupleWithMask.destinationIP}, #{info.fiveTupleWithMask.destinationPort},
|
||||||
#{info.fiveTupleWithMask.protocolNum},
|
#{info.fiveTupleWithMask.protocolNum},
|
||||||
@@ -28,8 +28,8 @@
|
|||||||
SEND_TIMES, SUCCESS_TIMES, CREATE_TIME, LAST_UPDATE, IS_DELETED)
|
SEND_TIMES, SUCCESS_TIMES, CREATE_TIME, LAST_UPDATE, IS_DELETED)
|
||||||
values
|
values
|
||||||
<foreach collection="command_infos" item="info" separator=",">
|
<foreach collection="command_infos" item="info" separator=",">
|
||||||
(UUID(), #{info.taskId}, #{info.taskAct}, #{info.frequency},
|
(#{info.UUID}, #{info.taskId}, #{info.taskAct}, #{info.frequency},
|
||||||
#{info.fiveTupleWithMask.addrType},
|
DEFAULT,
|
||||||
#{info.fiveTupleWithMask.sourceIP}, #{info.fiveTupleWithMask.sourcePort},
|
#{info.fiveTupleWithMask.sourceIP}, #{info.fiveTupleWithMask.sourcePort},
|
||||||
#{info.fiveTupleWithMask.destinationIP}, #{info.fiveTupleWithMask.destinationPort},
|
#{info.fiveTupleWithMask.destinationIP}, #{info.fiveTupleWithMask.destinationPort},
|
||||||
#{info.fiveTupleWithMask.protocolNum},
|
#{info.fiveTupleWithMask.protocolNum},
|
||||||
@@ -59,6 +59,23 @@
|
|||||||
</association>
|
</association>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="queryCommandInfoByUUID" resultMap="commandStatMap">
|
||||||
|
SELECT COMMAND_ID,
|
||||||
|
TASK_ACT,
|
||||||
|
SEND_TIMES,
|
||||||
|
SUCCESS_TIMES,
|
||||||
|
FIRST_SEND_TIME,
|
||||||
|
LASt_SEND_TIME,
|
||||||
|
SRC_IP,
|
||||||
|
SRC_PORT,
|
||||||
|
DST_IP,
|
||||||
|
DST_PORT,
|
||||||
|
PROTOCOL
|
||||||
|
FROM t_command
|
||||||
|
WHERE COMMAND_ID = #{uuid}
|
||||||
|
AND IS_DELETED = FALSE
|
||||||
|
</select>
|
||||||
|
|
||||||
<select id="queryCommandInfoByTaskId" resultMap="commandStatMap">
|
<select id="queryCommandInfoByTaskId" resultMap="commandStatMap">
|
||||||
SELECT COMMAND_ID,
|
SELECT COMMAND_ID,
|
||||||
TASK_ACT,
|
TASK_ACT,
|
||||||
|
|||||||
@@ -1,8 +1,15 @@
|
|||||||
package com.realtime.protection.server.task;
|
package com.realtime.protection.server.task;
|
||||||
|
|
||||||
import com.realtime.protection.ProtectionApplicationTests;
|
import com.realtime.protection.ProtectionApplicationTests;
|
||||||
|
import com.realtime.protection.configuration.entity.rule.dynamicrule.DynamicRuleObject;
|
||||||
|
import com.realtime.protection.configuration.entity.rule.staticrule.StaticRuleObject;
|
||||||
import com.realtime.protection.configuration.entity.task.Task;
|
import com.realtime.protection.configuration.entity.task.Task;
|
||||||
import com.realtime.protection.configuration.entity.task.TaskCommandInfo;
|
import com.realtime.protection.configuration.entity.task.TaskCommandInfo;
|
||||||
|
import com.realtime.protection.configuration.exception.DorisStartException;
|
||||||
|
import com.realtime.protection.configuration.utils.enums.StateEnum;
|
||||||
|
import com.realtime.protection.server.rule.dynamicrule.DynamicRuleService;
|
||||||
|
import com.realtime.protection.server.rule.staticrule.StaticRuleService;
|
||||||
|
import com.realtime.protection.server.task.status.StateChangeService;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -10,6 +17,7 @@ import org.springframework.boot.test.context.SpringBootTest;
|
|||||||
import org.springframework.dao.DataIntegrityViolationException;
|
import org.springframework.dao.DataIntegrityViolationException;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
@@ -17,11 +25,17 @@ import static org.junit.jupiter.api.Assertions.*;
|
|||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
class TaskServiceTest extends ProtectionApplicationTests {
|
class TaskServiceTest extends ProtectionApplicationTests {
|
||||||
private final TaskService taskService;
|
private final TaskService taskService;
|
||||||
|
private final StaticRuleService staticRuleService;
|
||||||
|
private final DynamicRuleService dynamicRuleService;
|
||||||
|
private final StateChangeService stateChangeService;
|
||||||
private Task task;
|
private Task task;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
TaskServiceTest(TaskService taskService) {
|
TaskServiceTest(TaskService taskService, StaticRuleService staticRuleService, DynamicRuleService dynamicRuleService, StateChangeService stateChangeService) {
|
||||||
this.taskService = taskService;
|
this.taskService = taskService;
|
||||||
|
this.staticRuleService = staticRuleService;
|
||||||
|
this.dynamicRuleService = dynamicRuleService;
|
||||||
|
this.stateChangeService = stateChangeService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
@@ -29,15 +43,14 @@ class TaskServiceTest extends ProtectionApplicationTests {
|
|||||||
this.task = new Task();
|
this.task = new Task();
|
||||||
task.setTaskName("静态测试");
|
task.setTaskName("静态测试");
|
||||||
|
|
||||||
LocalDateTime taskStartTime = LocalDateTime.now().plusDays(1);
|
LocalDateTime taskStartTime = LocalDateTime.now().plusMinutes(1);
|
||||||
LocalDateTime taskEndTime = LocalDateTime.now().plusDays(5);
|
LocalDateTime taskEndTime = LocalDateTime.now().plusYears(5);
|
||||||
|
|
||||||
task.setTaskStartTime(taskStartTime);
|
task.setTaskStartTime(taskStartTime);
|
||||||
task.setTaskEndTime(taskEndTime);
|
task.setTaskEndTime(taskEndTime);
|
||||||
task.setTaskAct("阻断");
|
task.setTaskAct("阻断");
|
||||||
task.setTaskType(1);
|
task.setTaskType(1);
|
||||||
task.setStaticRuleIds(List.of(1, 2));
|
|
||||||
task.setDynamicRuleIds(List.of());
|
|
||||||
task.setTaskCreateUserId(1);
|
task.setTaskCreateUserId(1);
|
||||||
task.setTaskCreateUsername("xxx");
|
task.setTaskCreateUsername("xxx");
|
||||||
task.setTaskCreateDepart("xxx");
|
task.setTaskCreateDepart("xxx");
|
||||||
@@ -45,11 +58,22 @@ class TaskServiceTest extends ProtectionApplicationTests {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testNewTaskSuccess() {
|
void testNewTaskSuccess() {
|
||||||
for (int i = 0; i < 100; i++) {
|
for (int i = 1; i < 1000; i++) {
|
||||||
LocalDateTime taskStartTime = LocalDateTime.now().plusDays(i);
|
List<StaticRuleObject> staticRuleObjects = staticRuleService.queryStaticRule(
|
||||||
LocalDateTime taskEndTime = LocalDateTime.now().plusDays(i + 10);
|
null, null, null, null, i, 2);
|
||||||
task.setTaskStartTime(taskStartTime);
|
List<Integer> staticRuleIds = new ArrayList<>();
|
||||||
task.setTaskEndTime(taskEndTime);
|
staticRuleObjects.forEach(staticRuleObject ->
|
||||||
|
staticRuleIds.add(staticRuleObject.getStaticRuleId()));
|
||||||
|
task.setStaticRuleIds(staticRuleIds);
|
||||||
|
|
||||||
|
List<DynamicRuleObject> dynamicRuleObjects = dynamicRuleService.queryDynamicRuleObject(
|
||||||
|
null, null, null, null, i, 2
|
||||||
|
);
|
||||||
|
List<Integer> dynamicRuleIds = new ArrayList<>();
|
||||||
|
dynamicRuleObjects.forEach(dynamicRuleObject ->
|
||||||
|
dynamicRuleIds.add(dynamicRuleObject.getDynamicRuleId()));
|
||||||
|
task.setDynamicRuleIds(dynamicRuleIds);
|
||||||
|
|
||||||
assertDoesNotThrow(() -> {
|
assertDoesNotThrow(() -> {
|
||||||
Long taskId = taskService.newTask(task);
|
Long taskId = taskService.newTask(task);
|
||||||
assertTrue(taskId > 0);
|
assertTrue(taskId > 0);
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ import org.springframework.boot.test.context.SpringBootTest;
|
|||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
class CommandServiceTest extends ProtectionApplicationTests {
|
class CommandServiceTest extends ProtectionApplicationTests {
|
||||||
@@ -55,6 +56,7 @@ class CommandServiceTest extends ProtectionApplicationTests {
|
|||||||
@Test
|
@Test
|
||||||
void createCommand() {
|
void createCommand() {
|
||||||
assertDoesNotThrow(() -> commandService.createCommand(taskCommandInfo));
|
assertDoesNotThrow(() -> commandService.createCommand(taskCommandInfo));
|
||||||
|
assertNotNull(taskCommandInfo.getUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -81,6 +83,15 @@ class CommandServiceTest extends ProtectionApplicationTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
assertDoesNotThrow(() -> commandService.createCommands(taskCommandInfos));
|
assertDoesNotThrow(() -> commandService.createCommands(taskCommandInfos));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void queryCommandByUUID() {
|
||||||
|
List<TaskCommandInfo> taskCommandInfos = commandService.queryCommandInfoByTaskId(30L);
|
||||||
|
assertTrue(taskCommandInfos != null && !taskCommandInfos.isEmpty());
|
||||||
|
|
||||||
|
for (TaskCommandInfo taskCommandInfo : taskCommandInfos) {
|
||||||
|
assertNotNull(commandService.queryCommandInfoByUUID(taskCommandInfo.getUUID()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user