REM:
1. 添加停止指定处置任务接口
2. 添加停止某处置IP的处置任务接口
3. 添加停止指定能力节点全部处置任务接口
4. 添加停止全部处置任务接口
This commit is contained in:
chenlinghy 2020-04-14 17:04:16 +08:00
parent a7cdb3b9dc
commit 383e093c82
12 changed files with 424 additions and 27 deletions

View File

@ -40,7 +40,7 @@ public class ConstValue {
public static final int START_DISPOSE_CMD = 400;
public static final int STOP_DISPOSE_CMD = 401;
public static final int STOP_DISPOSE_CMD_BY_TASKID = 401;
public static final int STOP_DISPOSE_CMD_BY_IP = 402;
public static final int STOP_DISPOSE_CMD_BY_POINT = 403;
public static final int STOP_DISPOSE_CMD_ALL = 404;

View File

@ -3,9 +3,12 @@ package com.cmcc.hy.phoenix.controller;
import com.cmcc.hy.phoenix.annotation.bodyencdec.ReqDec;
import com.cmcc.hy.phoenix.common.ConstValue;
import com.cmcc.hy.phoenix.common.ErrorCode;
import com.cmcc.hy.phoenix.dispose.DisposeProcess;
import com.cmcc.hy.phoenix.dispose.DptechUMC;
import com.cmcc.hy.phoenix.pojo.dto.ProtocolDTO;
import com.cmcc.hy.phoenix.pojo.vo.ProtocolResp;
import com.cmcc.hy.phoenix.pojo.vo.*;
import com.cmcc.hy.phoenix.service.LoginService;
import com.dptech.umc.NtcRequestResultInfo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
@ -19,11 +22,12 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Objects;
import static com.cmcc.hy.phoenix.common.ErrorCode.ERR_OK;
import static com.cmcc.hy.phoenix.common.ErrorCode.ERR_UNKNOWNCMD;
@Controller
@RequestMapping(value = "/handle")
@ -44,7 +48,7 @@ public class taskController {
@ReqDec
@Builder
public ProtocolResp disposeTaskCommand(@RequestBody(required = true) ProtocolDTO mr,
@RequestHeader HttpHeaders headers) {
@RequestHeader HttpHeaders headers) throws JsonProcessingException {
// 存放返回信息Json字符串
String msgCtx = "";
ErrorCode err = ERR_OK;
@ -59,7 +63,7 @@ public class taskController {
} else if (mr.IsRequestTimeout()) {
err = ErrorCode.ERR_REQTIMEOUT;
} else {
//try{
try {
// 获取 Token
String token = Objects.
requireNonNull(headers.get("Authorization"))
@ -73,19 +77,298 @@ public class taskController {
switch (mr.getCmdId()) {
case ConstValue.ProtocolCmdId.START_DISPOSE_CMD:
break;
case ConstValue.ProtocolCmdId.STOP_DISPOSE_CMD:
//停止清洗任务
case ConstValue.ProtocolCmdId.STOP_DISPOSE_CMD_BY_TASKID:
EnumMap<ErrorCode, String> stopMap = StopTaskByTaskId(mr);
err = stopMap.keySet().iterator().next();
msgCtx = stopMap.get(err);
break;
case ConstValue.ProtocolCmdId.STOP_DISPOSE_CMD_BY_IP:
EnumMap<ErrorCode, String> stopMapByIp = StopTaskByIp(mr);
err = stopMapByIp.keySet().iterator().next();
msgCtx = stopMapByIp.get(err);
break;
case ConstValue.ProtocolCmdId.STOP_DISPOSE_CMD_BY_POINT:
EnumMap<ErrorCode, String> stopMapByPoint = StopTaskByPoint(mr);
err = stopMapByPoint.keySet().iterator().next();
msgCtx = stopMapByPoint.get(err);
break;
case ConstValue.ProtocolCmdId.STOP_DISPOSE_CMD_ALL:
EnumMap<ErrorCode, String> stopMapByAll = StopTaskAll(mr);
err = stopMapByAll.keySet().iterator().next();
msgCtx = stopMapByAll.get(err);
break;
default:
err = ErrorCode.ERR_UNKNOWNCMD;
}
}
// } catch (JsonProcessingException | NoSuchAlgorithmException ex) {
// log.error(ex.getMessage());
// err = ErrorCode.ERR_EXCEPTION;
// }
} catch (JsonProcessingException ex) {
log.error(ex.getMessage());
err = ErrorCode.ERR_EXCEPTION;
}
}
return ProtocolResp.result(err, mr.getCmdId(), msgCtx);
}
private EnumMap<ErrorCode, String> StopTaskByTaskId(ProtocolDTO mr) throws JsonProcessingException {
String ipAddr = "10.88.77.15";
EnumMap<ErrorCode, String> retMap = new EnumMap<>(ErrorCode.class);
ErrorCode err = ErrorCode.ERR_OK;
List<StopTaskResult> results = new ArrayList<>();
StopTaskRsp repInfo = StopTaskRsp.builder().result(results).build();
StopTaskReq reqInfo = objectMapper.readValue(mr.getMsgContent(), StopTaskReq.class);
//遍历处置任务唯一编号taskId
if (reqInfo.getTaskId().size() == 0) {
System.out.println("无指定TaskId的清洗任务");
err = ErrorCode.ERR_INPUTMISS;
repInfo = null;
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
}
for (String v : reqInfo.getTaskId()) {
System.out.println(v);
//每个taskId对应保护IP disposeIp,通过taskId获取disposeIp
String disposeIp = "192.168.5.2";
int attackType = 1;
int direction = 0;
DisposeProcess dp = new DptechUMC(ipAddr);
NtcRequestResultInfo ntc_result = dp.stopAbnormalTask(disposeIp, attackType, direction);
StopTaskResult sig_results = new StopTaskResult();
sig_results.setTaskId(v);
sig_results.setType(0); //目前只有清洗设备
sig_results.setDisposeIp(disposeIp);
if (ntc_result.getResultRetVal().equals(0)) {
sig_results.setStatus(ntc_result.getResultRetVal());
}
//把每一次遍历的结果都存入results
results.add(sig_results);
repInfo.setResult(results);
}
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
}
private EnumMap<ErrorCode, String> StopTaskByIp(ProtocolDTO mr) throws JsonProcessingException {
String ipAddr = "10.88.77.15";
EnumMap<ErrorCode, String> retMap = new EnumMap<>(ErrorCode.class);
ErrorCode err = ErrorCode.ERR_OK;
List<StopTaskResult> results = new ArrayList<>();
StopTaskRsp repInfo = StopTaskRsp.builder().result(results).build();
StopTaskByIpReq reqInfo = objectMapper.readValue(mr.getMsgContent(), StopTaskByIpReq.class);
if (reqInfo.getItems().size() == 0) {
System.out.println("无该处置IP的清洗任务");
err = ErrorCode.ERR_INPUTMISS;
repInfo = null;
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
} else {
for (StopTaskByIpReqMsg v : reqInfo.getItems()
) {
if ((v.getType() < -1) || (v.getType() > 3)) {
System.out.println("任务类型输入错误");
err = ErrorCode.ERR_PARAMS;
repInfo = null;
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
} else if ((v.getId().length() == 0) || (String.valueOf(v.getType()).length() == 0) || (v.getDisposeIP().length() == 0)) {
System.out.println("缺少必要输入信息");
err = ErrorCode.ERR_INPUTMISS;
repInfo = null;
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
}
}
}
for (StopTaskByIpReqMsg v : reqInfo.getItems()
) {
//输出指定IP
System.out.println(v.getDisposeIP());
int attackType = 1;
int direction = 0;
DisposeProcess dp = new DptechUMC(ipAddr);
NtcRequestResultInfo ntc_result = dp.stopAbnormalTask(v.getDisposeIP(), attackType, direction);
StopTaskResult result = new StopTaskResult();
result.setId(v.getId());
result.setType(v.getType());
result.setDisposeIp(v.getDisposeIP());
if (ntc_result.getResultRetVal().equals(0)) {
result.setStatus(ntc_result.getResultRetVal());
}
//数据库中对应设备IddeviceId找到taskId,测试情况假设deviceId与找到taskId相同
String taskId = v.getId();
result.setTaskId(taskId);
//把每一次遍历的结果都存入results
results.add(result);
repInfo.setResult(results);
}
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
}
private EnumMap<ErrorCode, String> StopTaskByPoint(ProtocolDTO mr) throws JsonProcessingException {
String ipAddr = "10.88.77.15";
EnumMap<ErrorCode, String> retMap = new EnumMap<>(ErrorCode.class);
ErrorCode err = ErrorCode.ERR_OK;
List<StopTaskResult> results = new ArrayList<>();
StopTaskRsp repInfo = StopTaskRsp.builder().result(results).build();
StopTaskByPonitReq reqInfo = objectMapper.readValue(mr.getMsgContent(), StopTaskByPonitReq.class);
if (reqInfo.getItems().size() == 0) {
System.out.println("无该指定能力节点的清洗任务");
err = ErrorCode.ERR_INPUTMISS;
repInfo = null;
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
} else {
for (StopTaskByPonitReqMsg v : reqInfo.getItems()
) {
if ((v.getType() < -1) || (v.getType() > 3)) {
System.out.println("任务类型输入错误");
err = ErrorCode.ERR_PARAMS;
repInfo = null;
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
} else if ((v.getId().length() == 0) || (String.valueOf(v.getType()).length() == 0)) {
System.out.println("缺少必要输入信息");
err = ErrorCode.ERR_INPUTMISS;
repInfo = null;
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
}
}
}
for (StopTaskByPonitReqMsg v : reqInfo.getItems()
) {
//通过能力节点唯一标识符id找到对应的清洗IP清洗IP以列表形式保存一能力节点会对应多个IP
//foreach嵌套-List<String> getDisposeIP
List<String> getDisposeIps = new ArrayList<>();
getDisposeIps.add("192.168.1.1");
getDisposeIps.add("192.168.2.1");
int attackType = 1;
int direction = 0;
int taskid = 0;
DisposeProcess dp = new DptechUMC(ipAddr);
for (String getDisposeIp : getDisposeIps
) {
NtcRequestResultInfo ntc_result = dp.stopAbnormalTask(getDisposeIp, attackType, direction);
StopTaskResult result = new StopTaskResult();
result.setId(v.getId());
result.setType(v.getType());
result.setDisposeIp(getDisposeIp);
if (ntc_result.getResultRetVal().equals(0)) {
result.setStatus(ntc_result.getResultRetVal());
}
//数据库中对应设备IddeviceId找到taskId
//test taskId自增1
String taskId = String.valueOf(taskid);
result.setTaskId(taskId);
//把每一次遍历的结果都存入results
results.add(result);
repInfo.setResult(results);
taskid++;
}
}
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
}
private EnumMap<ErrorCode, String> StopTaskAll(ProtocolDTO mr) throws JsonProcessingException {
String ipAddr = "10.88.77.15";
EnumMap<ErrorCode, String> retMap = new EnumMap<>(ErrorCode.class);
ErrorCode err = ErrorCode.ERR_OK;
List<StopTaskResult> results = new ArrayList<>();
StopTaskRsp repInfo = StopTaskRsp.builder().result(results).build();
StopTaskAllReq reqInfo = objectMapper.readValue(mr.getMsgContent(), StopTaskAllReq.class);
if (String.valueOf(reqInfo.getType()).length() == 0) {
System.out.println("缺少必要输入参数");
err = ErrorCode.ERR_INPUTMISS;
repInfo = null;
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
} else if ((reqInfo.getType() < -1) || (reqInfo.getType() > 3)) {
System.out.println("任务类型输入错误");
err = ErrorCode.ERR_PARAMS;
repInfo = null;
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
}
int type = reqInfo.getType();
if (type == 0) {
//任务类型为清洗清洗所有清洗任务
//MySql获取所有taskId,遍历执行清洗任务,测试添加多个taskId
List<String> taskIds = new ArrayList<>();
taskIds.add("1");
taskIds.add("2");
taskIds.add("3");
taskIds.add("4");
String disposeIp = "";
for (String v : taskIds
) {
//每个taskId对应disposeIp,通过taskId获取disposeIp
//test 不同的taskId对应不同disposeIp
if (v.equals("1")) {
disposeIp = "192.168.10.1";
} else if (v.equals("2")) {
disposeIp = "192.168.10.2";
} else if (v.equals("3")) {
disposeIp = "192.168.10.3";
} else {
disposeIp = "192.168.10.4";
}
int attackType = 1;
int direction = 0;
DisposeProcess dp = new DptechUMC(ipAddr);
NtcRequestResultInfo ntc_result = dp.stopAbnormalTask(disposeIp, attackType, direction);
StopTaskResult result = new StopTaskResult();
result.setTaskId(v);
result.setType(0); //目前只有清洗设备
result.setDisposeIp(disposeIp);
if (ntc_result.getResultRetVal().equals(0)) {
result.setStatus(ntc_result.getResultRetVal());
}
//数据库中对应设备taskIddeviceId找到Id,测试情况假设deviceId与找到taskId相同
result.setId(v);
//把每一次遍历的结果都存入results
results.add(result);
repInfo.setResult(results);
}
}
retMap.put(err, objectMapper.writeValueAsString(repInfo));
return retMap;
}
}

View File

@ -1,5 +1,7 @@
package com.cmcc.hy.phoenix.dispose;
import com.dptech.umc.NtcRequestResultInfo;
public interface DisposeProcess {
public int runDispose(String ip);
@ -10,4 +12,7 @@ public interface DisposeProcess {
public String getDetectionDevices();
public String getProtectDevices();
public NtcRequestResultInfo stopAbnormalTask(String abnormalIp, int attackType, int direction);
}

View File

@ -4,6 +4,7 @@ import com.cmcc.hy.phoenix.Interceptor.SoapPasswordCallbackHandler;
import com.cmcc.hy.phoenix.common.ConstValue;
import com.dptech.umc.AbnormalFlowCleaningServicePortType;
import com.dptech.umc.ArrayOfDetectionObjectDataForService;
import com.dptech.umc.NtcRequestResultInfo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
@ -67,4 +68,9 @@ public class DptechUMC implements DisposeProcess {
this.cleanTypePort = (AbnormalFlowCleaningServicePortType)jaxWsProxyFactoryBean.create();
}
@Override
public NtcRequestResultInfo stopAbnormalTask(String abnormalIp, int attackType, int direction){
return cleanTypePort.stopAbnormalTaskForUMC(abnormalIp, attackType, direction);
}
}

View File

@ -0,0 +1,10 @@
package com.cmcc.hy.phoenix.pojo.vo;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class StopTaskAllReq {
int type;
}

View File

@ -0,0 +1,12 @@
package com.cmcc.hy.phoenix.pojo.vo;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class StopTaskByIpReq {
public List<StopTaskByIpReqMsg> items;
}

View File

@ -0,0 +1,15 @@
package com.cmcc.hy.phoenix.pojo.vo;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class StopTaskByIpReqMsg {
private String id;
//任务类型 0清洗 1高防 2黑洞 3检测 -1: 所有类型
private int type;
//处置IP
private String disposeIP;
}

View File

@ -0,0 +1,12 @@
package com.cmcc.hy.phoenix.pojo.vo;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class StopTaskByPonitReq {
public List<StopTaskByPonitReqMsg> items;
}

View File

@ -0,0 +1,12 @@
package com.cmcc.hy.phoenix.pojo.vo;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class StopTaskByPonitReqMsg {
private String id;
//任务类型 0清洗 1高防 2黑洞 3检测 -1: 所有类型
private int type;
}

View File

@ -0,0 +1,11 @@
package com.cmcc.hy.phoenix.pojo.vo;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class StopTaskReq {
public List<String> taskId;
}

View File

@ -0,0 +1,15 @@
package com.cmcc.hy.phoenix.pojo.vo;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class StopTaskResult {
private String id;
private String taskId;
private int type;
private String disposeIp;
private int leftTime;
private int status;
}

View File

@ -0,0 +1,16 @@
package com.cmcc.hy.phoenix.pojo.vo;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.List;
@Getter
@Setter
@ToString
@Builder
public class StopTaskRsp {
public List<StopTaskResult> result;
}