1、增加指令首次下发的时候,发送RCP查询请求到RCP查询程序。

2、动态规则update bugfix
3、静态规则协议为空,生成指令时候报错NULLPOINT fix
This commit is contained in:
PushM
2024-06-11 00:05:53 +08:00
parent e8d38b3c4b
commit b227536328
5 changed files with 97 additions and 20 deletions

View File

@@ -155,7 +155,16 @@ public class AlertMessageService {
dynamicTaskCommandInfoList.get(0).getTaskId(), dynamicTaskCommandInfoList.get(0).getTaskId(),
commandUUIDs)); commandUUIDs));
} }
//发送RCP查询信号
try {
if (isJudged){
stateHandler.sendCommandRcpQuerySignal(commandUUIDs);
}
}catch (Exception e) {
log.info(String.format("动态任务首次指令查询RCP出错任务id: %d,commandUUIDs: %s",
dynamicTaskCommandInfoList.get(0).getTaskId(),
commandUUIDs));
}
} }
private String insertAlertMessageOnly(AlertMessage alertMessage){ private String insertAlertMessageOnly(AlertMessage alertMessage){
//alertmessage入库 //alertmessage入库

View File

@@ -140,18 +140,30 @@ public class CommandService {
//设置指令是否已经研判 //设置指令是否已经研判
Boolean success = commandMapper.setCommandJudged(commandId, isJudged); Boolean success = commandMapper.setCommandJudged(commandId, isJudged);
//isJudged为true时发送指令首次 下发信号
try { try {
List<String> commandUUIDs = Collections.singletonList(commandId); List<String> commandUUIDs = Collections.singletonList(commandId);
if (isJudged){ if (!isJudged) {
stateHandler.sendCommandDistributeSignal(commandUUIDs); return success;
} }
}catch (Exception e) { //指令首次下发
try {
stateHandler.sendCommandDistributeSignal(commandUUIDs);
} catch (Exception e) {
log.info(String.format("动态任务研判后任务首次指令下发c3出错任务id: %d,commandUUIDs: %s", log.info(String.format("动态任务研判后任务首次指令下发c3出错任务id: %d,commandUUIDs: %s",
queryCommandInfoByUUID(commandId).getTaskId(), queryCommandInfoByUUID(commandId).getTaskId(),
commandId)); commandId));
} }
//指令首次查询RCP
try {
stateHandler.sendCommandRcpQuerySignal(commandUUIDs);
} catch (Exception e) {
log.info(String.format("动态任务研判后任务首次查询RCP出错任务id: %d,commandUUIDs: %s",
queryCommandInfoByUUID(commandId).getTaskId(),
commandId));
}
}catch (Exception e){
throw new IllegalArgumentException("指令研判状态修改失败,无效的指令");
}
return success; return success;
} }

View File

@@ -370,7 +370,9 @@ public class TaskService {
staticCommandInfos.forEach(taskCommandInfo -> { staticCommandInfos.forEach(taskCommandInfo -> {
// taskCommandInfo.setProtocolNum(); // taskCommandInfo.setProtocolNum();
if (taskCommandInfo.getFiveTupleWithMask().getProtocol() != null) {
taskCommandInfo.getFiveTupleWithMask().setProtocolNum(Integer.valueOf(taskCommandInfo.getFiveTupleWithMask().getProtocol())); taskCommandInfo.getFiveTupleWithMask().setProtocolNum(Integer.valueOf(taskCommandInfo.getFiveTupleWithMask().getProtocol()));
}
// taskCommandInfo.setMask(); // taskCommandInfo.setMask();
}); });

View File

@@ -30,14 +30,18 @@ public class StateHandler {
private final WebClient client = WebClient.builder() private final WebClient client = WebClient.builder()
.baseUrl("http://192.168.107.49:8088") // .baseUrl("http://192.168.107.49:8088")
// .baseUrl("http://10.58.72.151:8088") .baseUrl("http://10.58.72.146:8088")
.build(); .build();
//http://10.26.22.123:17011/rule //http://10.26.22.123:17011/rule
private final WebClient client_commandDistribute = WebClient.builder() private final WebClient client_commandDistribute = WebClient.builder()
.baseUrl("http://10.26.22.123:17011") // .baseUrl("http://10.26.22.123:17011")
// .baseUrl("http://10.58.72.151:8088") .baseUrl("http://10.58.72.151:17011")
.build();
private final WebClient client_RCPquery = WebClient.builder()
.baseUrl("http://10.58.72.140:8088")
.build(); .build();
protected Boolean handleStart(TaskService taskService, CommandService commandService, Long taskId) { protected Boolean handleStart(TaskService taskService, CommandService commandService, Long taskId) {
@@ -125,15 +129,16 @@ public class StateHandler {
// 如果是实时任务或者研判后处置任务,那么就需要在任务启动之后,立刻向动态规则中指定的系统发送日志筛选请求。 // 如果是实时任务或者研判后处置任务,那么就需要在任务启动之后,立刻向动态规则中指定的系统发送日志筛选请求。
// 筛选完成后,系统返回日志,需要由接收端点提取字段,并且合成一条静态规则,再按照任务开始时间、结束时间和任务类型进行指令创建 // 筛选完成后,系统返回日志,需要由接收端点提取字段,并且合成一条静态规则,再按照任务开始时间、结束时间和任务类型进行指令创建
private Boolean handleJudgedTaskStart(TaskService taskService, Task task) { private Boolean handleJudgedTaskStart(TaskService taskService, Task task) {
return sendFilters(taskService, task); // return sendFilters(taskService, task);
return true;
} }
private Boolean handleDynamicTaskStart(TaskService taskService, Task task) { private Boolean handleDynamicTaskStart(TaskService taskService, Task task) {
// 将所有关联的动态规则审批状态修改为“已使用” // 将所有关联的动态规则审批状态修改为“已使用”
taskService.updateDynamicRuleAuditStatusInTask(task.getTaskId(), AuditStatusEnum.USING); taskService.updateDynamicRuleAuditStatusInTask(task.getTaskId(), AuditStatusEnum.USING);
return sendFilters(taskService, task); // return sendFilters(taskService, task);
// return true; return true;
} }
private Boolean handleStaticTaskStart(CommandService commandService, TaskService taskService, Task task) { private Boolean handleStaticTaskStart(CommandService commandService, TaskService taskService, Task task) {
@@ -151,12 +156,18 @@ public class StateHandler {
// 将command新建信号发送到c3下发程序 // 将command新建信号发送到c3下发程序
try { try {
sendCommandDistributeSignal(commandUUIDs); sendCommandDistributeSignal(commandUUIDs);
return true;
} catch (Exception e) { } catch (Exception e) {
log.error(String.format("静态任务%d 首次指令下发c3出错",task.getTaskId())); log.error(String.format("静态任务%d 首次指令下发c3出错",task.getTaskId()));
return true; return true;
} }
// 将command查询RCP信号发送到RCP查询程序
try {
sendCommandRcpQuerySignal(commandUUIDs);
} catch (Exception e) {
log.error(String.format("静态任务%d 首次指令查询RCP出错",task.getTaskId()));
return true;
}
return true;
} }
public Boolean sendCommandDistributeSignal(List<String> commandUUIDs) { public Boolean sendCommandDistributeSignal(List<String> commandUUIDs) {
@@ -197,6 +208,49 @@ public class StateHandler {
return success.get(); return success.get();
} }
public Boolean sendCommandRcpQuerySignal(List<String> commandUUIDs) {
List<Map<String, String>> commandIDMaps = new ArrayList<>();
for (String commandUUID : commandUUIDs) {
commandIDMaps.add(Map.of("COMMAND_ID", commandUUID));
}
AtomicReference<Boolean> success = new AtomicReference<>(false);
Mono<Map> mono = client_RCPquery.post()
.uri("/command")
.bodyValue(commandIDMaps)
.accept(MediaType.APPLICATION_JSON)
.exchangeToMono(res -> {
if (res.statusCode().equals(HttpStatus.OK)) {
return res.bodyToMono(Map.class);
}
return res.createError();
})
.doOnError(WebClientResponseException.class, res -> success.set(false));
Map<String, Integer> response = mono.block(Duration.ofSeconds(5));
if (response == null) {
log.info("指令首次查询RCP返回为null");
return false;
}
response.forEach((commandUUID, responseCode) -> {
log.info("指令首次查询RCP成功, 指令uuid: " + commandUUID + ", responseCode: " + responseCode);
if (responseCode != 0) {
log.warn("指令首次查询RCP失败, 指令uuid: " + commandUUID + ", responseCode: " + responseCode);
}
});
success.set(true);
return success.get();
}
private Boolean sendFilters(TaskService taskService, Task task) { private Boolean sendFilters(TaskService taskService, Task task) {
List<DynamicTaskInfo> dynamicTaskInfos = taskService.getDynamicTaskInfos(task.getTaskId()); List<DynamicTaskInfo> dynamicTaskInfos = taskService.getDynamicTaskInfos(task.getTaskId());

View File

@@ -165,7 +165,7 @@
<if test="object.description != null">description = #{object.description},</if> <if test="object.description != null">description = #{object.description},</if>
<if test="object.dynamicRuleSourceSystem != null">source_system = #{object.dynamicRuleSourceSystem},</if> <if test="object.dynamicRuleSourceSystem != null">source_system = #{object.dynamicRuleSourceSystem},</if>
<if test="object.bwSql != null">bw_sql = #{object.bwSql},</if> <if test="object.bwSql != null">bw_sql = #{object.bwSql},</if>
modify_time = NOW() modify_time = NOW(),
audit_status = #{object.auditStatus} audit_status = #{object.auditStatus}
where where
dynamic_rule_id = #{dynamicRuleId} dynamic_rule_id = #{dynamicRuleId}