OCT
REM: 1. 更正部分协议字段名称 2. 增加停止处置任务接口 3. 增加根据处置IP停止处置任务接口 4. 修正部分协议缺少当前任务执行状态字段
This commit is contained in:
parent
d60bf3da8e
commit
87fbaa635d
|
@ -129,6 +129,8 @@ public enum ErrorCode {
|
|||
* Err nosuchtask error code.
|
||||
*/
|
||||
ERR_NOSUCHTASK(30, "没有该任务"),
|
||||
|
||||
ERR_TASKNOTRUNNING(31, "该任务没有运行"),
|
||||
;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.dispose.common;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -54,4 +55,22 @@ public class Helper {
|
|||
|
||||
return intArray.toArray(new Integer[0]);
|
||||
}
|
||||
|
||||
public static int getTimestampSecond(String dateTime) {
|
||||
return (int)(Timestamp.valueOf(dateTime).toInstant().toEpochMilli() / 1000);
|
||||
}
|
||||
|
||||
public static int getTimestampDiff(String begin, String end) {
|
||||
int starTime = getTimestampSecond(begin);
|
||||
int endTm = getTimestampSecond(end);
|
||||
|
||||
return endTm - starTime;
|
||||
}
|
||||
|
||||
public static int getTimestampDiffNow(String begin) {
|
||||
int starTime = getTimestampSecond(begin);
|
||||
int endTm = (int)(System.currentTimeMillis() / 1000);
|
||||
|
||||
return endTm - starTime;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -104,7 +104,7 @@ public class DisposeNodeManagerController {
|
|||
retStatus.setDevId(ret.getSecondParam());
|
||||
retStatus.setStatus(ret.getFirstParam().getCode());
|
||||
retStatus.setMessage(ret.getFirstParam().getMsg());
|
||||
rspInfo.getResult().add(retStatus);
|
||||
rspInfo.getItems().add(retStatus);
|
||||
});
|
||||
|
||||
return ProtocolRespDTO.result(ErrorCode.ERR_OK, rspInfo);
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package com.dispose.controller;
|
||||
|
||||
import com.dispose.common.ErrorCode;
|
||||
import com.dispose.common.FlowDirection;
|
||||
import com.dispose.common.Helper;
|
||||
import com.dispose.manager.TaskCacheManager;
|
||||
import com.dispose.pojo.dto.ProtocolReqDTO;
|
||||
import com.dispose.pojo.dto.ProtocolRespDTO;
|
||||
import com.dispose.pojo.entity.DisposeDevice;
|
||||
|
@ -48,12 +50,27 @@ import java.util.stream.Collectors;
|
|||
@Api(value = "抗DDoS处置平台处置任务接口", tags = "抗DDoS处置平台处置任务接口")
|
||||
@Component
|
||||
public class DisposeTaskController {
|
||||
/**
|
||||
* The Dispose node manager.
|
||||
*/
|
||||
@Resource
|
||||
private DisposeNodeManager disposeNodeManager;
|
||||
|
||||
/**
|
||||
* The Task service.
|
||||
*/
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
|
||||
/**
|
||||
* The Task cache manager.
|
||||
*/
|
||||
@Resource
|
||||
private TaskCacheManager taskCacheManager;
|
||||
|
||||
/**
|
||||
* The User account service.
|
||||
*/
|
||||
@Resource
|
||||
private UserAccountService userAccountService;
|
||||
|
||||
|
@ -86,8 +103,8 @@ public class DisposeTaskController {
|
|||
.type(reqInfo.getType())
|
||||
.disposeIp(reqInfo.getDisposeIp())
|
||||
.planEndTime(String.valueOf(reqInfo.getDisposeTime()))
|
||||
.flowDirection(reqInfo.getFlowDirection())
|
||||
.flowBandWidth(reqInfo.getFlowBandWidth())
|
||||
.flowDirection(reqInfo.getFlowDirection() != null ? reqInfo.getFlowDirection() : FlowDirection.DIRECTION_TWOWAY.getCode())
|
||||
.flowBandWidth(reqInfo.getFlowBandWidth() != null ? reqInfo.getFlowBandWidth() : 1024)
|
||||
.attackType(Helper.attackArrayToString(reqInfo.getAttackType()))
|
||||
.build();
|
||||
|
||||
|
@ -129,9 +146,22 @@ public class DisposeTaskController {
|
|||
}
|
||||
|
||||
for (String v : reqInfo.getTaskId()) {
|
||||
TaskInfoData taskData = TaskInfoData.builder()
|
||||
.taskId(v)
|
||||
.build();
|
||||
TaskInfoData taskData = TaskInfoData.builder().taskId(v).build();
|
||||
TaskInfoDetail task = taskCacheManager.getTaskById(Long.parseLong(v));
|
||||
|
||||
if (task == null) {
|
||||
err = ErrorCode.ERR_TASKNOTRUNNING;
|
||||
} else {
|
||||
err = taskService.stopTask(Long.parseLong(v));
|
||||
|
||||
if (err == ErrorCode.ERR_OK) {
|
||||
taskData.setTaskId(v);
|
||||
taskData.setDisposeIp(task.getDisposeIp());
|
||||
taskData.setType(task.getType());
|
||||
taskData.setLeftTime(Math.abs(Helper.getTimestampDiffNow(task.getBeginTime())
|
||||
- Helper.getTimestampDiffNow(task.getPlanEndTime())));
|
||||
}
|
||||
}
|
||||
|
||||
taskData.setStatus(err.getCode());
|
||||
taskData.setMessage(err.getMsg());
|
||||
|
@ -139,7 +169,7 @@ public class DisposeTaskController {
|
|||
rspInfo.getItems().add(taskData);
|
||||
}
|
||||
|
||||
return ProtocolRespDTO.result(err, rspInfo);
|
||||
return ProtocolRespDTO.result(ErrorCode.ERR_OK, rspInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -166,13 +196,27 @@ public class DisposeTaskController {
|
|||
TaskInfoRsp rspInfo = new TaskInfoRsp();
|
||||
|
||||
reqInfo.getItems().forEach(v -> {
|
||||
TaskInfoData taskData = TaskInfoData.builder()
|
||||
.type(v.getType())
|
||||
.build();
|
||||
ErrorCode retError;
|
||||
|
||||
TaskInfoData taskData = TaskInfoData.builder().type(v.getType()).build();
|
||||
|
||||
List<MReturnType<ErrorCode, TaskInfoDetail>> ret = taskService.stopTaskByDisposeIp(Long.parseLong(v.getId()), v.getType(), v.getDisposeIp());
|
||||
|
||||
if (ret.size() == 0) {
|
||||
retError = ErrorCode.ERR_NOSUCHTASK;
|
||||
} else {
|
||||
retError = ret.get(0).getFirstParam();
|
||||
TaskInfoDetail taskInfo = ret.get(0).getSecondParam();
|
||||
taskData.setTaskId(String.valueOf(taskInfo.getId()));
|
||||
taskData.setType(taskInfo.getType());
|
||||
taskData.setDisposeIp(v.getDisposeIp());
|
||||
taskData.setLeftTime(Math.abs(Helper.getTimestampDiffNow(taskInfo.getBeginTime())
|
||||
- Helper.getTimestampDiffNow(taskInfo.getPlanEndTime())));
|
||||
}
|
||||
|
||||
taskData.setId(v.getId());
|
||||
taskData.setStatus(err.getCode());
|
||||
taskData.setMessage(err.getMsg());
|
||||
taskData.setStatus(retError.getCode());
|
||||
taskData.setMessage(retError.getMsg());
|
||||
|
||||
rspInfo.getItems().add(taskData);
|
||||
});
|
||||
|
@ -207,7 +251,7 @@ public class DisposeTaskController {
|
|||
*/
|
||||
@PostMapping("/stop_all")
|
||||
@ResponseBody
|
||||
@ApiOperation("启动处置任务")
|
||||
@ApiOperation("停止所有处置任务")
|
||||
public ProtocolRespDTO taskStopAll(@RequestBody ProtocolReqDTO mr,
|
||||
@RequestHeader HttpHeaders headers)
|
||||
throws JsonProcessingException {
|
||||
|
|
|
@ -16,7 +16,7 @@ import lombok.NoArgsConstructor;
|
|||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonPropertyOrder({"id", "taskId", "type", "disposeIp", "startTime", "disposeTime",
|
||||
@JsonPropertyOrder({"id", "taskId", "currentStatus", "type", "disposeIp", "startTime", "disposeTime",
|
||||
"flowDirection", "attackType", "flowBandWidth", "flowAttack", "flowClean", "leftTime", "status", "message"})
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class TaskInfoData extends IDReturnStatus {
|
||||
|
|
|
@ -19,12 +19,12 @@ public class AddNodeRsp {
|
|||
/**
|
||||
* The Result.
|
||||
*/
|
||||
List<AddNodeRetData> result;
|
||||
List<AddNodeRetData> items;
|
||||
|
||||
/**
|
||||
* Instantiates a new Add node rsp.
|
||||
*/
|
||||
public AddNodeRsp() {
|
||||
this.result = new ArrayList<>();
|
||||
this.items = new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,6 +38,16 @@ public interface TaskService {
|
|||
*/
|
||||
ErrorCode stopTask(Long taskId);
|
||||
|
||||
/**
|
||||
* Stop task by dispose ip error code.
|
||||
*
|
||||
* @param devId the dev id
|
||||
* @param type the type
|
||||
* @param ipAddr the ip addr
|
||||
* @return the error code
|
||||
*/
|
||||
List<MReturnType<ErrorCode, TaskInfoDetail>> stopTaskByDisposeIp(Long devId, int type, String ipAddr);
|
||||
|
||||
/**
|
||||
* Finish task error code.
|
||||
*
|
||||
|
|
|
@ -73,7 +73,6 @@ public class DisposeNodeManagerImpl implements DisposeNodeManager {
|
|||
*/
|
||||
@Override
|
||||
public ErrorCode delDisposeDeviceById(Long id) {
|
||||
DisposeEntryManager dp;
|
||||
DisposeDevice dev = disposeDeviceMapper.getDeviceById(id);
|
||||
|
||||
if (dev == null) {
|
||||
|
@ -91,8 +90,6 @@ public class DisposeNodeManagerImpl implements DisposeNodeManager {
|
|||
*/
|
||||
@Override
|
||||
public ErrorCode delDisposeDeviceByIp(String ipAddr) {
|
||||
DisposeEntryManager dp;
|
||||
|
||||
if (disposeDeviceMapper.isDeviceExistsByIp(ipAddr) == 0
|
||||
|| !disposeDevMap.containsKey(ipAddr)) {
|
||||
return ErrorCode.ERR_NOSUCHDEVICE;
|
||||
|
|
|
@ -210,8 +210,7 @@ public class TaskServiceImpl implements TaskService {
|
|||
taskCacheManager.upgradeTaskStatus(taskId, DisposeTaskStatus.TASK_RUNNING.getCode());
|
||||
|
||||
// 异步启动处置任务
|
||||
CompletableFuture<ErrorCode> future = CompletableFuture
|
||||
.supplyAsync(() -> dp.runDispose(task.getDisposeIp(), DeviceCapacity.values()[task.getType()]))
|
||||
CompletableFuture.supplyAsync(() -> dp.runDispose(task.getDisposeIp(), DeviceCapacity.values()[task.getType()]))
|
||||
.whenComplete((v, ex) -> {
|
||||
if (ex != null) {
|
||||
log.error(ex.getMessage());
|
||||
|
@ -260,8 +259,7 @@ public class TaskServiceImpl implements TaskService {
|
|||
int prdStatus = task.getCurrentStatus();
|
||||
|
||||
// 异步启动处置任务
|
||||
CompletableFuture<ErrorCode> future = CompletableFuture
|
||||
.supplyAsync(() -> dp.stopDispose(task.getDisposeIp(), DeviceCapacity.values()[task.getType()]))
|
||||
CompletableFuture.supplyAsync(() -> dp.stopDispose(task.getDisposeIp(), DeviceCapacity.values()[task.getType()]))
|
||||
.whenComplete((v, ex) -> {
|
||||
if (ex != null) {
|
||||
// 恢复缓存中任务状态到先前状态
|
||||
|
@ -274,11 +272,10 @@ public class TaskServiceImpl implements TaskService {
|
|||
log.error("Start task {}:{} error {}", task.getId(), task.getDisposeIp(), err.getMsg());
|
||||
} else {
|
||||
// 任务执行完成后更新数据库处置任务状态
|
||||
disposeTaskMapper.changeTaskCurrentStatus(taskId, DisposeTaskStatus.TASK_STOP.getCode());
|
||||
finishTask(taskId);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
return ErrorCode.ERR_OK;
|
||||
|
@ -401,4 +398,25 @@ public class TaskServiceImpl implements TaskService {
|
|||
&& Objects.equals(v.getDisposeIp(), disposeIp)
|
||||
&& Objects.equals(v.getType(), disposeType));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MReturnType<ErrorCode, TaskInfoDetail>> stopTaskByDisposeIp(Long devId, int type, String ipAddr) {
|
||||
List<MReturnType<ErrorCode, TaskInfoDetail>> retList = new ArrayList<>();
|
||||
|
||||
// 根据处置IP,拿出所有正在处置的任务
|
||||
List<TaskInfoDetail> taskList = taskCacheManager.getAllTask().parallelStream()
|
||||
.filter(v -> ((devId == null || devId == -1L) || Objects.equals(v.getDeviceId(), devId)
|
||||
&& Objects.equals(v.getType(), type))
|
||||
&& Objects.equals(v.getDisposeIp(), ipAddr)
|
||||
&& taskIsRunning(v))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 对符合条件的任务调用停止命令
|
||||
taskList.parallelStream().forEach(v -> {
|
||||
ErrorCode err = stopTask(v.getId());
|
||||
retList.add(new MReturnType<>(err, v));
|
||||
});
|
||||
|
||||
return retList;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,6 @@ public class TaskManagerTask {
|
|||
log.info("Finish expired task {}:{} begin at {}",
|
||||
taskData.getId(), taskData.getDisposeIp(), taskData.getBeginTime());
|
||||
taskService.stopTask(taskData.getId());
|
||||
taskService.finishTask(taskData.getId());
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -142,7 +142,7 @@ public class DeviceNodeManagerControllerTest extends InitTestEnvironment {
|
|||
//将json字符串转为AddNodeRsp类
|
||||
AddNodeRsp addNodeRsp = objectMapper.readValue(msgContent, AddNodeRsp.class);
|
||||
|
||||
List<AddNodeRetData> addNodeList = addNodeRsp.getResult();
|
||||
List<AddNodeRetData> addNodeList = addNodeRsp.getItems();
|
||||
for (AddNodeRetData d : addNodeList
|
||||
) {
|
||||
//before: no device information after: device information exists
|
||||
|
|
|
@ -133,7 +133,7 @@ public class TaskControllerTest extends InitTestEnvironment {
|
|||
@Test
|
||||
public void t2_stopTask() throws Exception {
|
||||
IDArrayReq reqData = IDArrayReq.builder()
|
||||
.taskId(new String[]{"1", "2"})
|
||||
.taskId(new String[]{"40", "2"})
|
||||
.build();
|
||||
|
||||
ProtocolReqDTO reqInfo = new ProtocolReqDTO();
|
||||
|
@ -233,8 +233,10 @@ public class TaskControllerTest extends InitTestEnvironment {
|
|||
@Test
|
||||
public void t5_stopAllTask() throws Exception {
|
||||
StopTaskData itemData = StopTaskData.builder()
|
||||
.type(DeviceCapacity.CLEANUP.getCode())
|
||||
.build();
|
||||
.disposeIp("192.168.1.1")
|
||||
.type(DeviceCapacity.CLEANUP.getCode())
|
||||
.id("210")
|
||||
.build();
|
||||
|
||||
StopTaskReq reqData = new StopTaskReq();
|
||||
|
||||
|
|
Loading…
Reference in New Issue