From 4038c75cb5103eba2c80798509be0596d2145fb8 Mon Sep 17 00:00:00 2001 From: chenlinghy Date: Wed, 17 Mar 2021 17:36:29 +0800 Subject: [PATCH] =?UTF-8?q?OCT=20REM:=201.=20=E4=BF=AE=E6=94=B9=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A7=84=E8=8C=83=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DeviceTaskManagerServiceImpl.java | 177 ++++++++---------- 1 file changed, 79 insertions(+), 98 deletions(-) diff --git a/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java b/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java index cbbf9ec7..1ad74576 100644 --- a/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java +++ b/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java @@ -107,26 +107,26 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { deviceTaskManager.changeDisposeDeviceTaskInfoStatus(deviceTask.getId(), DisposeTaskStatus.TASK_STARTING); // 设置启动任务攻击类型状态 deviceTaskManager.setExecAttackType(deviceTask.getId(), NetflowDirection.DIRECTION_BI, - deviceTask.getTaskAttackType()); + deviceTask.getTaskAttackType()); // 调用设备执行处置任务 ret = ai.getDb() .runDispose(disposeTask.getDisposeObject(), disposeTask.getObjectType(), - disposeTask.getDisposeCapacity(), - null, null, null); + disposeTask.getDisposeCapacity(), + null, null, null); if (ret.getFirstParam() == ErrorCode.ERR_OK) { // 设置攻击类型任务启动结果 deviceTaskManager.setAttackTypeStatus(deviceTask.getId(), - disposeTask.getFlowDirection(), deviceTask.getTaskAttackType()); + disposeTask.getFlowDirection(), deviceTask.getTaskAttackType()); // 更改处置任务状态为处置中 deviceTaskManager.changeDisposeDeviceTaskInfoStatus(deviceTask.getId(), - DisposeTaskStatus.TASK_STARTED); + DisposeTaskStatus.TASK_STARTED); log.info("VIRTUAL_DISPOSE setup task succeed: {}", deviceTask); } else { // 任务出错,不在重试,当做失败任务处理 deviceTaskManager.setAttackTypeStatus(deviceTask.getId(), - disposeTask.getFlowDirection(), 0L); + disposeTask.getFlowDirection(), 0L); log.error("VIRTUAL_DISPOSE setup task error {}: {}", ret.getFirstParam(), deviceTask); } } @@ -157,6 +157,50 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { } + private void dpTechDeviceExe(AbilityInfo ai, + DeviceTask deviceTask, + DisposeTask disposeTask, NetflowDirection netflowDirection) { + + MulReturnType ret; + final int nTime = 10; + + // 启动迪普设备,采用一种攻击类型 + DpTechAttackType attackType = DpTechAttackType.maskToDdosAttackType(deviceTask.getTaskAttackType()).get(0); + + // 设置启动任务攻击类型状态 + deviceTaskManager.execAttackTypeSetBit(deviceTask.getId(), netflowDirection, + attackType.getValue()); + // 调用迪普设备启动处置任务 + ret = ai.getDb().runDispose(disposeTask.getDisposeObject(), disposeTask.getObjectType(), + disposeTask.getDisposeCapacity(), netflowDirection, + attackType.getValue(), null); + + if (ret.getFirstParam() == ErrorCode.ERR_OK) { + // 标志启动成功 + deviceTaskManager.attackTypeStatusSetBit(deviceTask.getId(), netflowDirection, + attackType.getValue()); + + log.info("DPTECH_UMC setup task {}, {} succeed: {}", attackType, netflowDirection, + deviceTask); + + deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), 0); + } else if (deviceTask.getErrRetry() < DisposeConfigValue.CALL_ERROR_RETRY_TIMES * nTime) { + // 设置该任务为新任务,待下次重试启动 + // 记录任务出错重试次数 + deviceTask.setErrRetry(deviceTask.getErrRetry() + 1); + deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), deviceTask.getErrRetry()); + //清除任务攻击类型启动标志 + deviceTaskManager.execAttackTypeCleanBit(deviceTask.getId(), netflowDirection, + attackType.getValue()); + log.error("DPTECH_UMC setup task {}, {} times {} error: {}", attackType, + netflowDirection, deviceTask.getErrRetry(), deviceTask); + } else { + log.error("DPTECH_UMC setup task {}, {} error {}: {}", attackType, + netflowDirection, ret.getFirstParam(), deviceTask); + } + } + + /** * Dp tech device task run. * @@ -164,86 +208,23 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { * @param deviceTask the device task * @param disposeTask the dispose task */ - private void dpTechDeviceTaskRun(AbilityInfo ai, DeviceTask deviceTask, DisposeTask disposeTask) { - MulReturnType ret; - final int nTime = 10; + private void dpTechDeviceTaskRun(AbilityInfo ai, + DeviceTask deviceTask, + DisposeTask disposeTask) { // 设置任务状态为启动中 deviceTaskManager.changeDisposeDeviceTaskInfoStatus(deviceTask.getId(), DisposeTaskStatus.TASK_STARTING); - // 启动迪普设备,采用一种攻击类型 - DpTechAttackType attackType = DpTechAttackType.maskToDdosAttackType(deviceTask.getTaskAttackType()).get(0); // 出方向 if (disposeTask.getFlowDirection() != NetflowDirection.DIRECTION_IN) { - // 设置启动任务攻击类型状态 - deviceTaskManager.execAttackTypeSetBit(deviceTask.getId(), NetflowDirection.DIRECTION_OUT, - attackType.getValue()); - // 调用迪普设备启动处置任务 - ret = ai.getDb().runDispose(disposeTask.getDisposeObject(), disposeTask.getObjectType(), - disposeTask.getDisposeCapacity(), NetflowDirection.DIRECTION_OUT, - attackType.getValue(), null); - - if (ret.getFirstParam() == ErrorCode.ERR_OK) { - // 标志启动成功 - deviceTaskManager.attackTypeStatusSetBit(deviceTask.getId(), NetflowDirection.DIRECTION_OUT, - attackType.getValue()); - - log.info("DPTECH_UMC setup task {}, {} succeed: {}", attackType, NetflowDirection.DIRECTION_OUT, - deviceTask); - - deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), 0); - } else if (deviceTask.getErrRetry() < DisposeConfigValue.CALL_ERROR_RETRY_TIMES * nTime) { - // 设置该任务为新任务,待下次重试启动 - // 记录任务出错重试次数 - deviceTask.setErrRetry(deviceTask.getErrRetry() + 1); - deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), deviceTask.getErrRetry()); - //清除任务攻击类型启动标志 - deviceTaskManager.execAttackTypeCleanBit(deviceTask.getId(), NetflowDirection.DIRECTION_OUT, - attackType.getValue()); - log.error("DPTECH_UMC setup task {}, {} times {} error: {}", attackType, - NetflowDirection.DIRECTION_OUT, deviceTask.getErrRetry(), deviceTask); - } else { - log.error("DPTECH_UMC setup task {}, {} error {}: {}", attackType, - NetflowDirection.DIRECTION_OUT, ret.getFirstParam(), deviceTask); - } + dpTechDeviceExe(ai, deviceTask, disposeTask, NetflowDirection.DIRECTION_OUT); } // 入方向 if (disposeTask.getFlowDirection() != NetflowDirection.DIRECTION_OUT) { - // 设置启动任务攻击类型状态 - deviceTaskManager.execAttackTypeSetBit(deviceTask.getId(), NetflowDirection.DIRECTION_IN, - attackType.getValue()); - // 调用迪普设备启动处置任务 - ret = ai.getDb().runDispose(disposeTask.getDisposeObject(), disposeTask.getObjectType(), - disposeTask.getDisposeCapacity(), NetflowDirection.DIRECTION_IN, - attackType.getValue(), null); - - if (ret.getFirstParam() == ErrorCode.ERR_OK) { - // 标志启动成功 - deviceTaskManager.attackTypeStatusSetBit(deviceTask.getId(), NetflowDirection.DIRECTION_IN, - attackType.getValue()); - - log.info("DPTECH_UMC setup task {}, {} succeed: {}", attackType, NetflowDirection.DIRECTION_IN, - deviceTask); - - deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), 0); - } else if (deviceTask.getErrRetry() < DisposeConfigValue.CALL_ERROR_RETRY_TIMES * nTime) { - // 设置该任务为新任务,待下次重试启动 - // 记录任务出错重试次数 - deviceTask.setErrRetry(deviceTask.getErrRetry() + 1); - deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), deviceTask.getErrRetry()); - //清除任务攻击类型启动标志 - deviceTaskManager.execAttackTypeCleanBit(deviceTask.getId(), NetflowDirection.DIRECTION_IN, - attackType.getValue()); - log.error("DPTECH_UMC setup task {}, {} times {} error: {}", attackType, - NetflowDirection.DIRECTION_IN, deviceTask.getErrRetry(), deviceTask); - } else { - log.error("DPTECH_UMC setup task {}, {} error {}: {}", attackType, - NetflowDirection.DIRECTION_IN, ret.getFirstParam(), deviceTask); - } + dpTechDeviceExe(ai, deviceTask, disposeTask, NetflowDirection.DIRECTION_IN); } - // 检查需要处置的各种攻击类型任务启动状态与处置任务执行状态,判断该处置任务是否调用成功 boolean taskSetupSucceed = true; @@ -292,12 +273,12 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { if (disposeTask.getFlowDirection() != NetflowDirection.DIRECTION_IN) { // 调用迪普设备停止处置任务 ret = ai.getDb().stopDispose(disposeTask.getDisposeObject(), disposeTask.getDisposeCapacity(), - NetflowDirection.DIRECTION_OUT, t.getValue(), null); + NetflowDirection.DIRECTION_OUT, t.getValue(), null); if (ret.getFirstParam() == ErrorCode.ERR_OK) { // 标志停止成功 deviceTaskManager.attackTypeStatusCleanBit(deviceTask.getId(), NetflowDirection.DIRECTION_OUT, - t.getValue()); + t.getValue()); log.info("DPTECH_UMC stop task {}, {} succeed: {}", t, NetflowDirection.DIRECTION_OUT, deviceTask); @@ -307,10 +288,10 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { deviceTask.setErrRetry(deviceTask.getErrRetry() + 1); deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), deviceTask.getErrRetry()); log.error("DPTECH_UMC stop task {}, {} times {} error: {}", t, - NetflowDirection.DIRECTION_OUT, deviceTask.getErrRetry(), deviceTask); + NetflowDirection.DIRECTION_OUT, deviceTask.getErrRetry(), deviceTask); } else { log.info("DPTECH_UMC stop task {}, {} error {}: {}", t, - NetflowDirection.DIRECTION_OUT, ret.getFirstParam(), deviceTask); + NetflowDirection.DIRECTION_OUT, ret.getFirstParam(), deviceTask); } } @@ -318,15 +299,15 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { if (disposeTask.getFlowDirection() != NetflowDirection.DIRECTION_OUT) { // 调用迪普设备启动处置任务 ret = ai.getDb().stopDispose(disposeTask.getDisposeObject(), disposeTask.getDisposeCapacity(), - NetflowDirection.DIRECTION_IN, t.getValue(), null); + NetflowDirection.DIRECTION_IN, t.getValue(), null); if (ret.getFirstParam() == ErrorCode.ERR_OK) { // 标志启动成功 deviceTaskManager.attackTypeStatusCleanBit(deviceTask.getId(), NetflowDirection.DIRECTION_IN, - t.getValue()); + t.getValue()); log.info("DPTECH_UMC setup task {}, {} succeed: {}", t, - NetflowDirection.DIRECTION_IN, deviceTask); + NetflowDirection.DIRECTION_IN, deviceTask); deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), 0); } else if (deviceTask.getErrRetry() < DisposeConfigValue.CALL_ERROR_RETRY_TIMES * 10) { @@ -334,10 +315,10 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { deviceTask.setErrRetry(deviceTask.getErrRetry() + 1); deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), deviceTask.getErrRetry()); log.error("DPTECH_UMC stop task {}, {} times {} error: {}", t, - NetflowDirection.DIRECTION_IN, deviceTask.getErrRetry(), deviceTask); + NetflowDirection.DIRECTION_IN, deviceTask.getErrRetry(), deviceTask); } else { log.info("DPTECH_UMC stop task {}, {} error {}: {}", t, - NetflowDirection.DIRECTION_IN, ret.getFirstParam(), deviceTask); + NetflowDirection.DIRECTION_IN, ret.getFirstParam(), deviceTask); } } } @@ -393,17 +374,17 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { deviceTaskManager.changeDisposeDeviceTaskInfoStatus(deviceTask.getId(), DisposeTaskStatus.TASK_STARTING); // 设置启动任务攻击类型状态 deviceTaskManager.setExecAttackType(deviceTask.getId(), NetflowDirection.DIRECTION_BI, - deviceTask.getTaskAttackType()); + deviceTask.getTaskAttackType()); ret = ai.getDb() .runDispose(disposeTask.getDisposeObject(), disposeTask.getObjectType(), - disposeTask.getDisposeCapacity(), null, - null, (long) -(Helper.getTimestampDiffNow(disposeTask.getPlanEndTime()) / 60)); + disposeTask.getDisposeCapacity(), null, + null, (long) -(Helper.getTimestampDiffNow(disposeTask.getPlanEndTime()) / 60)); if (ret.getFirstParam() == ErrorCode.ERR_OK) { // 设置攻击类型任务启动结果 deviceTaskManager.setAttackTypeStatus(deviceTask.getId(), - disposeTask.getFlowDirection(), deviceTask.getTaskAttackType()); + disposeTask.getFlowDirection(), deviceTask.getTaskAttackType()); // 更改处置任务状态为处置中 deviceTaskManager.changeDisposeDeviceTaskInfoStatus(deviceTask.getId(), DisposeTaskStatus.TASK_STARTED); @@ -424,18 +405,18 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { // 记录任务出错重试次数 deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), deviceTask.getErrRetry() + 1); log.error("{} setup task times {} error {}: {}", deviceType, deviceTask.getErrRetry(), - ret.getSecondParam(), deviceTask); + ret.getSecondParam(), deviceTask); } else { // 任务出错,不在重试,当做失败任务处理 deviceTaskManager.setAttackTypeStatus(deviceTask.getId(), disposeTask.getFlowDirection(), 0L); // 设置该任务为启动失败 deviceTaskManager.changeDisposeDeviceTaskInfoStatus(deviceTask.getId(), - DisposeTaskStatus.TASK_START_FAILED); + DisposeTaskStatus.TASK_START_FAILED); //任务出错,设备任务状态为启动处置任务失败 deviceTaskManager.changeDisposeDeviceTaskInfoDevStatus(deviceTask.getId(), - (long) PengXinTaskStatus.TASK_STARTED_FAILED.getValue()); + (long) PengXinTaskStatus.TASK_STARTED_FAILED.getValue()); // 记录任务出错重试次数 deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), 0); @@ -463,7 +444,7 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { // 停止处置任务 ret = ai.getDb().stopDispose(disposeTask.getDisposeObject(), disposeTask.getDisposeCapacity(), null, null, - deviceTask.getExternId()); + deviceTask.getExternId()); if (ret.getFirstParam() == ErrorCode.ERR_OK) { log.info("{} stop task succeed: {}, device taskId {}", deviceType, deviceTask, ret.getSecondParam()); @@ -475,7 +456,7 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { // 记录任务出错重试次数 deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), deviceTask.getErrRetry() + 1); log.error("{} stop task times {} error {}: {}", deviceType, deviceTask.getErrRetry(), - ret.getSecondParam(), deviceTask); + ret.getSecondParam(), deviceTask); } else { // 记录任务出错重试次数 deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), 0); @@ -494,7 +475,7 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { // 清理过期任务 for (DisposeTask v : disposeTaskManager.getExpiredTasks()) { log.info("Task {} {} {} is expired, expect finished at {}", - v.getId(), v.getDisposeCapacity(), v.getDisposeObject(), v.getPlanEndTime()); + v.getId(), v.getDisposeCapacity(), v.getDisposeObject(), v.getPlanEndTime()); // 设置任务状态,过期任务不再为设备创建处置任务 disposeTaskManager.changeDisposeTaskStatus(v.getId(), DisposeTaskStatus.TASK_EXPIRED); } @@ -529,15 +510,15 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { // 检查当前设备是否已经创建了该任务 if (deviceTaskManager.deviceTaskCreated(v.getId(), - d.getDev().getId())) { + d.getDev().getId())) { return; } log.info("Add dispose task for device: {}", d.getDev()); if (!deviceTaskManager .addDisposeDeviceTaskInfo(v.getId(), - d.getDev().getId(), - d.getDb().toDeviceAttackType(v.getAttackType()))) { + d.getDev().getId(), + d.getDb().toDeviceAttackType(v.getAttackType()))) { log.error("Add task {} to device {} error", v, d); } }); @@ -719,9 +700,9 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { if (ret.getFirstParam() == ErrorCode.ERR_OK) { log.debug("id:{}, before devStatus:{}, after devStatus:{}", v.getId(), - v.getDevStatus(), ret.getSecondParam()); + v.getDevStatus(), ret.getSecondParam()); deviceTaskManager.changeDisposeDeviceTaskInfoDevStatus(v.getId(), - ret.getSecondParam()); + ret.getSecondParam()); } }