From 9234d1a1c510a3ab922490d54621b2644ed54af3 Mon Sep 17 00:00:00 2001 From: HuangXin Date: Thu, 20 Aug 2020 15:25:38 +0800 Subject: [PATCH] =?UTF-8?q?OCT=20REM:=201.=20=E5=A4=87=E4=BB=BD=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/application-dispose.properties | 2 +- .../dispose/ability/DeviceDisposeAbility.java | 32 +++++++ .../dispose/ability/DisposeTaskCallback.java | 17 ++++ .../ability/impl/HaoHanAbilityImpl.java | 90 ++++++++++++++----- .../ability/impl/VirtualAbilityImpl.java | 70 ++++++++++++--- .../dispose/common/DisposeConfigValue.java | 5 ++ .../com/dispose/config/DisposeConfigure.java | 5 ++ .../dispose/manager/DeviceTaskManager.java | 32 ++++++- .../manager/impl/DeviceTaskManagerImpl.java | 56 +++++++++++- .../com/dispose/mapper/DeviceTaskMapper.java | 50 +++++++++++ .../com/dispose/pojo/entity/DeviceTask.java | 8 +- .../com/dispose/pojo/entity/DisposeTask.java | 1 - .../impl/DeviceTaskManagerServiceImpl.java | 80 +++++++++++++---- .../impl/DisposeAbilityRouterServiceImpl.java | 16 ++-- .../service/impl/DisposeTaskServiceImpl.java | 1 - .../java/com/dispose/setup/SystemInitial.java | 12 ++- src/main/resources/mappers/DeviceTask.xml | 31 +++++++ src/main/resources/mappers/DisposeTask.xml | 3 + 18 files changed, 444 insertions(+), 67 deletions(-) create mode 100644 src/main/java/com/dispose/ability/DeviceDisposeAbility.java create mode 100644 src/main/java/com/dispose/ability/DisposeTaskCallback.java diff --git a/config/application-dispose.properties b/config/application-dispose.properties index 17e4a274..631c4582 100644 --- a/config/application-dispose.properties +++ b/config/application-dispose.properties @@ -3,8 +3,8 @@ dispose.debug-model=true dispose.check-protocol-timeout=false dispose.split_char=, dispose.request-timeout-second=5 - dispose.used-privacy-protect=true +dispose.call-error-retry-times=3 # 迪普设备配置 # 发送超时时间(s) diff --git a/src/main/java/com/dispose/ability/DeviceDisposeAbility.java b/src/main/java/com/dispose/ability/DeviceDisposeAbility.java new file mode 100644 index 00000000..5b974530 --- /dev/null +++ b/src/main/java/com/dispose/ability/DeviceDisposeAbility.java @@ -0,0 +1,32 @@ +package com.dispose.ability; + +import com.dispose.common.DisposeCapacityType; + +/** + * The interface Device dispose ability. + * + * @param the type parameter + * @author + */ +public interface DeviceDisposeAbility { + /** + * Device dispose exec t. + * + * @param callback the callback + * @param capType the cap type + * @param ipAddr the ip addr + * @param args the args + * @return the t + */ + T deviceDisposeExec(DisposeTaskCallback callback, DisposeCapacityType capType, String ipAddr, Object... args); + + /** + * Device dispose stop t. + * + * @param callback the callback + * @param capType the cap type + * @param args the args + * @return the t + */ + T deviceDisposeStop(DisposeTaskCallback callback, DisposeCapacityType capType, Object... args); +} diff --git a/src/main/java/com/dispose/ability/DisposeTaskCallback.java b/src/main/java/com/dispose/ability/DisposeTaskCallback.java new file mode 100644 index 00000000..355a9407 --- /dev/null +++ b/src/main/java/com/dispose/ability/DisposeTaskCallback.java @@ -0,0 +1,17 @@ +package com.dispose.ability; + +import com.dispose.common.ErrorCode; + +/** + * The interface Dispose task callback. + * + * @author + */ +public interface DisposeTaskCallback { + /** + * Upgrade status callback. + * + * @param err the err + */ + void upgradeStatusCallback(ErrorCode err); +} diff --git a/src/main/java/com/dispose/ability/impl/HaoHanAbilityImpl.java b/src/main/java/com/dispose/ability/impl/HaoHanAbilityImpl.java index b4e04384..f7c99a8c 100644 --- a/src/main/java/com/dispose/ability/impl/HaoHanAbilityImpl.java +++ b/src/main/java/com/dispose/ability/impl/HaoHanAbilityImpl.java @@ -1,6 +1,8 @@ package com.dispose.ability.impl; +import com.dispose.ability.DeviceDisposeAbility; import com.dispose.ability.DisposeAbility; +import com.dispose.ability.DisposeTaskCallback; import com.dispose.common.DDoSAttackType; import com.dispose.common.DisposeCapacityType; import com.dispose.common.ErrorCode; @@ -22,7 +24,7 @@ import javax.annotation.Nullable; */ @Component @Slf4j -public class HaoHanAbilityImpl implements DisposeAbility { +public class HaoHanAbilityImpl implements DisposeAbility, DeviceDisposeAbility> { /** * The constant DISPOSE_PLATFORM_NAME. @@ -65,9 +67,9 @@ public class HaoHanAbilityImpl implements DisposeAbility { @Nullable DDoSAttackType[] attackType, @Nullable Long duration) { return runDispose(ip, capType, - NetflowDirection.DIRECTION_BI, - DDoSAttackType.ALL_ATTACKS, - duration); + NetflowDirection.DIRECTION_BI, + DDoSAttackType.ALL_ATTACKS, + duration); } /** @@ -93,7 +95,7 @@ public class HaoHanAbilityImpl implements DisposeAbility { } HaoHanStartCleanResp resp = restfulInterface.startClean(this.urlRootPath, ip, duration.intValue(), - DISPOSE_PLATFORM_NAME); + DISPOSE_PLATFORM_NAME); if (resp == null) { log.error("----Error Haohan start clean {} server return error", ip); @@ -125,9 +127,9 @@ public class HaoHanAbilityImpl implements DisposeAbility { @Nullable DDoSAttackType[] attackType, @Nullable Long taskId) { return stopDispose(ip, capType, - NetflowDirection.DIRECTION_BI, - DDoSAttackType.ALL_ATTACKS, - taskId); + NetflowDirection.DIRECTION_BI, + DDoSAttackType.ALL_ATTACKS, + taskId); } /** @@ -152,7 +154,7 @@ public class HaoHanAbilityImpl implements DisposeAbility { } HaoHanStopCleanResp resp = restfulInterface.stopClean(this.urlRootPath, taskId.intValue(), - DISPOSE_PLATFORM_NAME); + DISPOSE_PLATFORM_NAME); if (resp == null) { log.error("----Error Haohan stop task{} server return error", taskId); @@ -182,18 +184,18 @@ public class HaoHanAbilityImpl implements DisposeAbility { @Override public MulReturnType getAbilityDeviceFireware() { return new MulReturnType<>(ErrorCode.ERR_OK, - DeviceFirewareInfo.builder() - .vendor("HaoHan") - .model("Unknown") - .firmware("Unknown") - .os("Linux Server") - .kernel("Linux") - .arch("x86_64") - .version("Unknown") - .memory(-1) - .freeMemory(-1) - .cpuUsed(-1) - .build()); + DeviceFirewareInfo.builder() + .vendor("HaoHan") + .model("Unknown") + .firmware("Unknown") + .os("Linux Server") + .kernel("Linux") + .arch("x86_64") + .version("Unknown") + .memory(-1) + .freeMemory(-1) + .cpuUsed(-1) + .build()); } /** @@ -206,4 +208,50 @@ public class HaoHanAbilityImpl implements DisposeAbility { public Long toDeviceAttackType(Long ddosAttackTypeMask) { return ddosAttackTypeMask; } + + /** + * Device dispose exec mul return type. + * + * @param capType the cap type + * @param ipAddr the ip addr + * @param duration the duration + * @return the mul return type + */ + @Override + public MulReturnType deviceDisposeExec(DisposeTaskCallback callback, + DisposeCapacityType capType, + String ipAddr, + Object... duration) { + MulReturnType ret = runDispose(ipAddr, + capType, + null, + DDoSAttackType.ALL_ATTACKS, + (long) duration[0]); + + callback.upgradeStatusCallback(ret.getFirstParam()); + + return ret; + } + + /** + * Device dispose stop mul return type. + * + * @param capType the cap type + * @param taskId the task id + * @return the mul return type + */ + @Override + public MulReturnType deviceDisposeStop(DisposeTaskCallback callback, + DisposeCapacityType capType, + Object... taskId) { + MulReturnType ret = stopDispose(null, + null, + null, + DDoSAttackType.ALL_ATTACKS, + (long) taskId[0]); + + callback.upgradeStatusCallback(ret.getFirstParam()); + + return ret; + } } diff --git a/src/main/java/com/dispose/ability/impl/VirtualAbilityImpl.java b/src/main/java/com/dispose/ability/impl/VirtualAbilityImpl.java index 89612beb..ca095c41 100644 --- a/src/main/java/com/dispose/ability/impl/VirtualAbilityImpl.java +++ b/src/main/java/com/dispose/ability/impl/VirtualAbilityImpl.java @@ -1,6 +1,8 @@ package com.dispose.ability.impl; +import com.dispose.ability.DeviceDisposeAbility; import com.dispose.ability.DisposeAbility; +import com.dispose.ability.DisposeTaskCallback; import com.dispose.common.DDoSAttackType; import com.dispose.common.DisposeCapacityType; import com.dispose.common.ErrorCode; @@ -15,7 +17,7 @@ import javax.annotation.Nullable; * * @author */ -public class VirtualAbilityImpl implements DisposeAbility { +public class VirtualAbilityImpl implements DisposeAbility, DeviceDisposeAbility { /** * Init device env. * @@ -106,18 +108,18 @@ public class VirtualAbilityImpl implements DisposeAbility { @Override public MulReturnType getAbilityDeviceFireware() { return new MulReturnType<>(ErrorCode.ERR_OK, - DeviceFirewareInfo.builder() - .vendor("Virtual") - .model("Dispose_1000") - .firmware("Unknown") - .os("Unknown") - .kernel("Linux") - .arch("x86_64") - .version("Virtual_Device_2.0") - .memory(-1) - .freeMemory(-1) - .cpuUsed(-1) - .build()); + DeviceFirewareInfo.builder() + .vendor("Virtual") + .model("Dispose_1000") + .firmware("Unknown") + .os("Unknown") + .kernel("Linux") + .arch("x86_64") + .version("Virtual_Device_2.0") + .memory(-1) + .freeMemory(-1) + .cpuUsed(-1) + .build()); } /** @@ -140,4 +142,46 @@ public class VirtualAbilityImpl implements DisposeAbility { public Long toDeviceAttackType(Long ddosAttackTypeMask) { return ddosAttackTypeMask; } + + /** + * Device dispose exec error code. + * + * @param capType the cap type + * @param ipAddr the ip addr + * @param duration the duration + * @return the error code + */ + @Override + public ErrorCode deviceDisposeExec(DisposeTaskCallback callback, DisposeCapacityType capType, String ipAddr, + Object... duration) { + ErrorCode ret = runDispose(ipAddr, + capType, + null, + DDoSAttackType.ALL_ATTACKS, + null).getFirstParam(); + + callback.upgradeStatusCallback(ret); + + return ret; + } + + /** + * Device dispose stop error code. + * + * @param capType the cap type + * @param taskId the task id + * @return the error code + */ + @Override + public ErrorCode deviceDisposeStop(DisposeTaskCallback callback, DisposeCapacityType capType, Object... taskId) { + ErrorCode ret = stopDispose(null, + capType, + null, + DDoSAttackType.ALL_ATTACKS, + null).getFirstParam(); + + callback.upgradeStatusCallback(ret); + + return ret; + } } diff --git a/src/main/java/com/dispose/common/DisposeConfigValue.java b/src/main/java/com/dispose/common/DisposeConfigValue.java index 7bab54f7..b653006e 100644 --- a/src/main/java/com/dispose/common/DisposeConfigValue.java +++ b/src/main/java/com/dispose/common/DisposeConfigValue.java @@ -21,4 +21,9 @@ public class DisposeConfigValue { * The constant USED_PRIVACY_PROTECT. */ public static volatile boolean USED_PRIVACY_PROTECT = false; + + /** + * The constant CALL_ERROR_RETRY_TIMES. + */ + public static volatile int CALL_ERROR_RETRY_TIMES=5; } diff --git a/src/main/java/com/dispose/config/DisposeConfigure.java b/src/main/java/com/dispose/config/DisposeConfigure.java index 11f19f29..61d5ce4e 100644 --- a/src/main/java/com/dispose/config/DisposeConfigure.java +++ b/src/main/java/com/dispose/config/DisposeConfigure.java @@ -34,4 +34,9 @@ public class DisposeConfigure { * The Used privacy protect. */ private String usedPrivacyProtect; + + /** + * The Call error retry times. + */ + public String callErrorRetryTimes; } diff --git a/src/main/java/com/dispose/manager/DeviceTaskManager.java b/src/main/java/com/dispose/manager/DeviceTaskManager.java index 322e3723..0ecd7804 100644 --- a/src/main/java/com/dispose/manager/DeviceTaskManager.java +++ b/src/main/java/com/dispose/manager/DeviceTaskManager.java @@ -1,12 +1,13 @@ package com.dispose.manager; import com.dispose.common.DisposeTaskStatus; +import com.dispose.common.NetflowDirection; import com.dispose.pojo.entity.DeviceTask; import java.util.List; /** - * The interface Task info manager. + * The interface Device task manager. * * @author */ @@ -36,4 +37,33 @@ public interface DeviceTaskManager { * @return the boolean */ boolean changeDisposeDeviceTaskInfoStatus(Long id, DisposeTaskStatus status); + + /** + * Sets exec attack type. + * + * @param id the id + * @param nf the nf + * @param attackTypeMask the attack type mask + * @return the exec attack type + */ + boolean setExecAttackType(Long id, NetflowDirection nf, Long attackTypeMask); + + /** + * Sets attack type status. + * + * @param id the id + * @param nf the nf + * @param attackTypeMask the attack type mask + * @return the attack type status + */ + boolean setAttackTypeStatus(Long id, NetflowDirection nf, Long attackTypeMask); + + /** + * Sets task err retry times. + * + * @param id the id + * @param rTimes the r times + * @return the task err retry times + */ + boolean setTaskErrRetryTimes(Long id, Integer rTimes); } diff --git a/src/main/java/com/dispose/manager/impl/DeviceTaskManagerImpl.java b/src/main/java/com/dispose/manager/impl/DeviceTaskManagerImpl.java index f81f48c3..cb7bf402 100644 --- a/src/main/java/com/dispose/manager/impl/DeviceTaskManagerImpl.java +++ b/src/main/java/com/dispose/manager/impl/DeviceTaskManagerImpl.java @@ -1,6 +1,7 @@ package com.dispose.manager.impl; import com.dispose.common.DisposeTaskStatus; +import com.dispose.common.NetflowDirection; import com.dispose.manager.DeviceTaskManager; import com.dispose.mapper.DeviceTaskMapper; import com.dispose.pojo.entity.DeviceTask; @@ -11,7 +12,7 @@ import javax.annotation.Resource; import java.util.List; /** - * The type Task info manager. + * The type Device task manager. * * @author */ @@ -19,7 +20,7 @@ import java.util.List; @Slf4j public class DeviceTaskManagerImpl implements DeviceTaskManager { /** - * The Task info mapper. + * The Device task mapper. */ @Resource private DeviceTaskMapper deviceTaskMapper; @@ -67,4 +68,55 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager { public boolean changeDisposeDeviceTaskInfoStatus(Long id, DisposeTaskStatus status) { return deviceTaskMapper.changeTaskStatus(id, status) == 1; } + + /** + * Sets exec attack type. + * + * @param id the id + * @param nf the nf + * @param attackTypeMask the attack type mask + * @return the exec attack type + */ + @Override + public boolean setExecAttackType(Long id, NetflowDirection nf, Long attackTypeMask) { + int ret = 0; + + if(nf != NetflowDirection.DIRECTION_IN) { + ret = deviceTaskMapper.changeExecAttackTypeOutValue(id, attackTypeMask); + } + + if(nf != NetflowDirection.DIRECTION_OUT) { + ret = deviceTaskMapper.changeAttackTypeStatusInValue(id, attackTypeMask); + } + + return ret == 1; + } + + /** + * Sets attack type status. + * + * @param id the id + * @param nf the nf + * @param attackTypeMask the attack type mask + * @return the attack type status + */ + @Override + public boolean setAttackTypeStatus(Long id, NetflowDirection nf, Long attackTypeMask) { + int ret = 0; + + if(nf != NetflowDirection.DIRECTION_IN) { + ret = deviceTaskMapper.changeAttackTypeStatusOutValue(id, attackTypeMask); + } + + if(nf != NetflowDirection.DIRECTION_OUT) { + ret = deviceTaskMapper.changeAttackTypeStatusInValue(id, attackTypeMask); + } + + return ret == 1; + } + + @Override + public boolean setTaskErrRetryTimes(Long id, Integer rTimes) { + return deviceTaskMapper.changeErrRetry(id, rTimes) == 1; + } } diff --git a/src/main/java/com/dispose/mapper/DeviceTaskMapper.java b/src/main/java/com/dispose/mapper/DeviceTaskMapper.java index e469cb2c..8e7d5467 100644 --- a/src/main/java/com/dispose/mapper/DeviceTaskMapper.java +++ b/src/main/java/com/dispose/mapper/DeviceTaskMapper.java @@ -71,4 +71,54 @@ public interface DeviceTaskMapper { */ int changeTaskStatus(@Param("id") Long id, @Param("status") DisposeTaskStatus status); + + /** + * Change exec attack type in value int. + * + * @param id the id + * @param attackTypeValue the attack type value + * @return the int + */ + int changeExecAttackTypeInValue(@Param("id") Long id, + @Param("attackTypeValue") Long attackTypeValue); + + /** + * Change exec attack type out value int. + * + * @param id the id + * @param attackTypeValue the attack type value + * @return the int + */ + int changeExecAttackTypeOutValue(@Param("id") Long id, + @Param("attackTypeValue") Long attackTypeValue); + + /** + * Change attack type status in value int. + * + * @param id the id + * @param attackStatsValue the attack stats value + * @return the int + */ + int changeAttackTypeStatusInValue(@Param("id") Long id, + @Param("attackStatsValue") Long attackStatsValue); + + /** + * Change attack type status out value int. + * + * @param id the id + * @param attackStatsValue the attack stats value + * @return the int + */ + int changeAttackTypeStatusOutValue(@Param("id") Long id, + @Param("attackTypeValue") Long attackStatsValue); + + /** + * Change err retry int. + * + * @param id the id + * @param errRetry the err retry + * @return the int + */ + int changeErrRetry(@Param("id") Long id, + @Param("errRetry") Integer errRetry); } diff --git a/src/main/java/com/dispose/pojo/entity/DeviceTask.java b/src/main/java/com/dispose/pojo/entity/DeviceTask.java index 6510dbed..d01aaba2 100644 --- a/src/main/java/com/dispose/pojo/entity/DeviceTask.java +++ b/src/main/java/com/dispose/pojo/entity/DeviceTask.java @@ -15,7 +15,9 @@ import javax.persistence.Table; import java.io.Serializable; /** - * The type Task info. + * The type Device task. + * + * @author */ @Data @NoArgsConstructor @@ -77,6 +79,10 @@ public class DeviceTask implements Serializable { * The Extern id. */ private Long externId; + /** + * The Err retry. + */ + private Integer errRetry; /** * The Status. */ diff --git a/src/main/java/com/dispose/pojo/entity/DisposeTask.java b/src/main/java/com/dispose/pojo/entity/DisposeTask.java index 02cd81a1..2d17fdb1 100644 --- a/src/main/java/com/dispose/pojo/entity/DisposeTask.java +++ b/src/main/java/com/dispose/pojo/entity/DisposeTask.java @@ -88,7 +88,6 @@ public class DisposeTask implements Serializable { * The Current status. */ private DisposeTaskStatus currentStatus; - /** * The Task info. */ diff --git a/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java b/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java index e23fd753..3b498f14 100644 --- a/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java +++ b/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java @@ -1,6 +1,8 @@ package com.dispose.service.impl; -import com.dispose.common.DDoSAttackType; +import com.dispose.ability.impl.HaoHanAbilityImpl; +import com.dispose.ability.impl.VirtualAbilityImpl; +import com.dispose.common.DisposeConfigValue; import com.dispose.common.DisposeTaskStatus; import com.dispose.common.ErrorCode; import com.dispose.common.Helper; @@ -9,7 +11,6 @@ import com.dispose.manager.DeviceTaskManager; import com.dispose.manager.DisposeTaskManager; import com.dispose.pojo.entity.DisposeTask; import com.dispose.pojo.po.AbilityInfo; -import com.dispose.pojo.po.MulReturnType; import com.dispose.service.DeviceTaskManagerService; import com.dispose.service.DisposeAbilityRouterService; import lombok.extern.slf4j.Slf4j; @@ -34,7 +35,7 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { private DisposeTaskManager disposeTaskManager; /** - * The Task info manager. + * The Device task manager. */ @Resource private DeviceTaskManager deviceTaskManager; @@ -103,25 +104,74 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { break; case HAOHAN_PLATFORM: + // 设置任务状态为启动中 deviceTaskManager.changeDisposeDeviceTaskInfoStatus(v.getId(), DisposeTaskStatus.TASK_STARTING); - - MulReturnType ret = ai.getDb().runDispose(task.getDisposeIp(), + // 设置启动任务攻击类型状态 + deviceTaskManager.setExecAttackType(v.getId(), NetflowDirection.DIRECTION_BI, + v.getTaskAttackType()); + // 调用设备处置能力 + ((HaoHanAbilityImpl) ai.getDb()).deviceDisposeExec( + errorCode -> { + // 启动处置任务成功 + if (errorCode == ErrorCode.ERR_OK) { + // 设置攻击类型任务启动结果 + deviceTaskManager.setAttackTypeStatus(v.getId(), + task.getFlowDirection(), v.getTaskAttackType()); + // 更改处置任务状态为处置中 + deviceTaskManager.changeDisposeDeviceTaskInfoStatus(v.getId(), + DisposeTaskStatus.TASK_STARTED); + log.info("HAOHAN_PLATFORM setup task succeed: {}", v); + } else if (v.getErrRetry() < DisposeConfigValue.CALL_ERROR_RETRY_TIMES) { + // 设置该任务为新任务,待下次重试启动 + deviceTaskManager.changeDisposeDeviceTaskInfoStatus(v.getId(), + DisposeTaskStatus.TASK_NEW); + // 记录任务出错重试次数 + deviceTaskManager.setTaskErrRetryTimes(v.getId(), v.getErrRetry() + 1); + log.error("HAOHAN_PLATFORM setup task times {} error {}: {}", + v.getErrRetry(), errorCode, v); + } else { + // 任务出错,不在重试,当做失败任务处理 + deviceTaskManager.setAttackTypeStatus(v.getId(), + task.getFlowDirection(), ~v.getTaskAttackType()); + log.error("HAOHAN_PLATFORM setup task error {}: {}", errorCode, v); + } + }, task.getDisposeCapacity(), - NetflowDirection.DIRECTION_BI, - DDoSAttackType.ALL_ATTACKS, - (long)Helper.getTimestampDiffNow(task.getPlanEndTime())); + task.getDisposeIp(), + (long) Helper.getTimestampDiffNow(task.getPlanEndTime())); + break; - deviceTaskManager.changeDisposeDeviceTaskInfoStatus(v.getId(), DisposeTaskStatus.TASK_STARTED); + case VIRTUAL_DISPOSE: + // 设置任务状态为启动中 + deviceTaskManager.changeDisposeDeviceTaskInfoStatus(v.getId(), DisposeTaskStatus.TASK_STARTING); + // 设置启动任务攻击类型状态 + deviceTaskManager.setExecAttackType(v.getId(), NetflowDirection.DIRECTION_BI, + v.getTaskAttackType()); - if(ret.getFirstParam() != ErrorCode.ERR_OK) { - log.error("HAOHAN_PLATFORM setup task error {}: {}", ret.getFirstParam(), v); - } else { - - } + ((VirtualAbilityImpl) ai.getDb()).deviceDisposeExec( + errorCode -> { + // 启动处置任务成功 + if (errorCode == ErrorCode.ERR_OK) { + // 设置攻击类型任务启动结果 + deviceTaskManager.setAttackTypeStatus(v.getId(), + task.getFlowDirection(), v.getTaskAttackType()); + // 更改处置任务状态为处置中 + deviceTaskManager.changeDisposeDeviceTaskInfoStatus(v.getId(), + DisposeTaskStatus.TASK_STARTED); + log.info("VIRTUAL_DISPOSE setup task succeed: {}", v); + } else { + // 任务出错,不在重试,当做失败任务处理 + deviceTaskManager.setAttackTypeStatus(v.getId(), + task.getFlowDirection(), ~v.getTaskAttackType()); + log.error("VIRTUAL_DISPOSE setup task error {}: {}", errorCode, v); + } + }, + task.getDisposeCapacity(), + task.getDisposeIp()); break; default: - + log.error("Unknown dispose device type: {}", ai.getDev()); break; } diff --git a/src/main/java/com/dispose/service/impl/DisposeAbilityRouterServiceImpl.java b/src/main/java/com/dispose/service/impl/DisposeAbilityRouterServiceImpl.java index 92354ac5..8a678b9b 100644 --- a/src/main/java/com/dispose/service/impl/DisposeAbilityRouterServiceImpl.java +++ b/src/main/java/com/dispose/service/impl/DisposeAbilityRouterServiceImpl.java @@ -68,11 +68,11 @@ public class DisposeAbilityRouterServiceImpl implements DisposeAbilityRouterServ @Override public AbilityInfo getAbilityDevice(Long id) { DisposeDevice dev = disposeDeviceManager.getAllNormalDisposeDevices().parallelStream() - .filter(v -> v.getId().equals(id)) - .findAny() - .orElse(null); + .filter(v -> v.getId().equals(id)) + .findAny() + .orElse(null); - if(dev != null) { + if (dev != null) { return disposeAbilityMap.get(getAbilityDeviceHashKey(dev.getIpAddr(), dev.getIpPort())); } @@ -123,10 +123,10 @@ public class DisposeAbilityRouterServiceImpl implements DisposeAbilityRouterServ // 缓存处置设备到Hash表中 disposeAbilityMap.put(addr, AbilityInfo.builder() - .db(db) - .dev(dev) - .linkStatus(false) - .build()); + .db(db) + .dev(dev) + .linkStatus(false) + .build()); return ErrorCode.ERR_OK; } diff --git a/src/main/java/com/dispose/service/impl/DisposeTaskServiceImpl.java b/src/main/java/com/dispose/service/impl/DisposeTaskServiceImpl.java index 1e0daa9e..10fd26bb 100644 --- a/src/main/java/com/dispose/service/impl/DisposeTaskServiceImpl.java +++ b/src/main/java/com/dispose/service/impl/DisposeTaskServiceImpl.java @@ -26,7 +26,6 @@ public class DisposeTaskServiceImpl implements DisposeTaskService { @Override public MulReturnType createTask(DisposeTask task) { - if (disposeTaskManager.disposeIpRunning(task.getDeviceId(), task.getDisposeIp(), task.getDisposeCapacity())) { diff --git a/src/main/java/com/dispose/setup/SystemInitial.java b/src/main/java/com/dispose/setup/SystemInitial.java index fbf815a7..ba760659 100644 --- a/src/main/java/com/dispose/setup/SystemInitial.java +++ b/src/main/java/com/dispose/setup/SystemInitial.java @@ -68,14 +68,14 @@ public class SystemInitial implements CommandLineRunner { try { DpTechConfigValue.SOAP_CONNECT_TIMEOUT_SECOND = - Integer.parseInt(dpTechConfigure.getSoapConnTimeoutSecond()); + Integer.parseInt(dpTechConfigure.getSoapConnTimeoutSecond()); } catch (Exception ex) { log.error("load SOAP_CONNECT_TIMEOUT_SECOND configure error: {}", ex.getMessage()); } try { DpTechConfigValue.SOAP_RECEIVE_TIMEOUT_SECOND = - Integer.parseInt(dpTechConfigure.getSoapRecvTimeoutSecond()); + Integer.parseInt(dpTechConfigure.getSoapRecvTimeoutSecond()); } catch (Exception ex) { log.error("load SOAP_RECEIVE_TIMEOUT_SECOND configure error: {}", ex.getMessage()); } @@ -88,7 +88,7 @@ public class SystemInitial implements CommandLineRunner { try { DisposeConfigValue.CHECK_PROTO_REQUEST_TIMEOUT = - Boolean.parseBoolean(disposeConfigure.getCheckProtocolTimeout()); + Boolean.parseBoolean(disposeConfigure.getCheckProtocolTimeout()); } catch (Exception ex) { log.error("load CHECK_PROTO_REQUEST_TIMEOUT configure error: {}", ex.getMessage()); } @@ -98,6 +98,12 @@ public class SystemInitial implements CommandLineRunner { } catch (Exception ex) { log.error("load USED_PRIVACY_PROTECT configure error: {}", ex.getMessage()); } + + try { + DisposeConfigValue.CALL_ERROR_RETRY_TIMES = Integer.parseInt(disposeConfigure.getCallErrorRetryTimes()); + } catch (Exception ex) { + log.error("load CALL_ERROR_RETRY_TIMES configure error: {}", ex.getMessage()); + } } @Async("bizExecutor") diff --git a/src/main/resources/mappers/DeviceTask.xml b/src/main/resources/mappers/DeviceTask.xml index e53fc398..ff48610c 100644 --- a/src/main/resources/mappers/DeviceTask.xml +++ b/src/main/resources/mappers/DeviceTask.xml @@ -13,6 +13,7 @@ + @@ -75,4 +76,34 @@ WHERE id = #{id} + + UPDATE device_task + SET execAttackTypeIn = #{attackTypeValue} + WHERE id = #{id} + + + + UPDATE device_task + SET execAttackTypeOut = #{attackTypeValue} + WHERE id = #{id} + + + + UPDATE device_task + SET attackTypeStatusIn = #{attackStatsValue} + WHERE id = #{id} + + + + UPDATE device_task + SET execAttackTypeOut = #{attackStatsValue} + WHERE id = #{id} + + + + UPDATE device_task + SET errRetry = #{errRetry} + WHERE id = #{id} + + \ No newline at end of file diff --git a/src/main/resources/mappers/DisposeTask.xml b/src/main/resources/mappers/DisposeTask.xml index 6263cfd9..13f0d3b0 100644 --- a/src/main/resources/mappers/DisposeTask.xml +++ b/src/main/resources/mappers/DisposeTask.xml @@ -26,6 +26,7 @@ + @@ -43,6 +44,7 @@ ti.execAttackTypeOut execAttackTypeOut, ti.attackTypeStatusOut attackTypeStatusOut, ti.externId externId, + ti.errRetry errRetry, ti.status status FROM dispose_task dt LEFT JOIN device_task ti on dt.id = ti.taskId @@ -61,6 +63,7 @@ ti.execAttackTypeOut execAttackTypeOut, ti.attackTypeStatusOut attackTypeStatusOut, ti.externId externId, + ti.errRetry errRetry, ti.status status FROM dispose_task dt LEFT JOIN device_task ti on dt.id = ti.taskId