REM:
1. 备份代码
This commit is contained in:
HuangXin 2020-08-07 17:59:47 +08:00
parent b9bfbfd468
commit 3648437328
10 changed files with 270 additions and 27 deletions

View File

@ -21,9 +21,8 @@ public interface DisposeAbility {
* @param urlPath the url path * @param urlPath the url path
* @param username the username * @param username the username
* @param password the password * @param password the password
* @return the error code
*/ */
ErrorCode initDeviceEnv(String urlPath, String username, String password); void initDeviceEnv(String urlPath, String username, String password);
/** /**
* Run dispose mul return type. * Run dispose mul return type.
@ -43,11 +42,21 @@ public interface DisposeAbility {
/** /**
* Stop dispose mul return type. * Stop dispose mul return type.
* *
* @param ip the ip * @param ip the ip
* @param capType the cap type * @param capType the cap type
* @param nfDirection the nf direction
* @param attackType the attack type
* @return the mul return type * @return the mul return type
*/ */
MulReturnType<ErrorCode, Long> stopDispose(String ip, DisposeCapacityType capType); MulReturnType<ErrorCode, Long> stopDispose(String ip, DisposeCapacityType capType,
@Nullable NetflowDirection[] nfDirection,
@Nullable DDoSAttackType[] attackType);
/**
* Gets device link status.
*
* @return the device link status
*/
boolean getDeviceLinkStatus();
} }

View File

@ -39,16 +39,26 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
public class DpTechAbilityImpl implements DisposeAbility { public class DpTechAbilityImpl implements DisposeAbility {
/**
* The Clean type port.
*/
private AbnormalFlowCleaningServicePortType cleanTypePort; private AbnormalFlowCleaningServicePortType cleanTypePort;
/**
* Init device env error code.
*
* @param urlPath the url path
* @param username the username
* @param password the password
*/
@Override @Override
public ErrorCode initDeviceEnv(String urlPath, String username, String password) { public void initDeviceEnv(String urlPath, String username, String password) {
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
jaxWsProxyFactoryBean.setServiceClass(AbnormalFlowCleaningServicePortType.class); jaxWsProxyFactoryBean.setServiceClass(AbnormalFlowCleaningServicePortType.class);
jaxWsProxyFactoryBean.setAddress(urlPath); jaxWsProxyFactoryBean.setAddress(urlPath);
//WS-Security Head //WS-Security Head
Map<String, Object> outProps = new HashMap<>(); Map<String, Object> outProps = new HashMap<>(16);
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN); outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
// 配置用户名密码类型 // 配置用户名密码类型
@ -61,8 +71,8 @@ public class DpTechAbilityImpl implements DisposeAbility {
this.cleanTypePort = (AbnormalFlowCleaningServicePortType) jaxWsProxyFactoryBean.create(); this.cleanTypePort = (AbnormalFlowCleaningServicePortType) jaxWsProxyFactoryBean.create();
Map<String, Object> ctx = ((BindingProvider) this.cleanTypePort).getRequestContext(); Map<String, Object> ctx = ((BindingProvider) this.cleanTypePort).getRequestContext();
ctx.put("password", username); ctx.put("password", password);
ctx.put("username", password); ctx.put("username", username);
// 配置连接访问超时时间 // 配置连接访问超时时间
Client proxy = ClientProxy.getClient(this.cleanTypePort); Client proxy = ClientProxy.getClient(this.cleanTypePort);
@ -73,15 +83,16 @@ public class DpTechAbilityImpl implements DisposeAbility {
//读取超时 //读取超时
policy.setReceiveTimeout(DpTechConfigValue.SOAP_RECEIVE_TIMEOUT_SECOND); policy.setReceiveTimeout(DpTechConfigValue.SOAP_RECEIVE_TIMEOUT_SECOND);
conduit.setClient(policy); conduit.setClient(policy);
return ErrorCode.ERR_OK;
} }
/** /**
* Run dispose mul return type. * Run dispose mul return type.
* *
* @param ip the ip * @param ip the ip
* @param capType the cap type * @param capType the cap type
* @param nfDirection the nf direction
* @param attackType the attack type
* @param duration the duration
* @return the mul return type * @return the mul return type
*/ */
@Override @Override
@ -119,7 +130,6 @@ public class DpTechAbilityImpl implements DisposeAbility {
} }
} }
}))); })));
log.info("----Finish DPTech Start Cleanup Task: {}", ip); log.info("----Finish DPTech Start Cleanup Task: {}", ip);
} catch (Exception ex) { } catch (Exception ex) {
log.error(ex.getMessage()); log.error(ex.getMessage());
@ -133,12 +143,65 @@ public class DpTechAbilityImpl implements DisposeAbility {
/** /**
* Stop dispose mul return type. * Stop dispose mul return type.
* *
* @param ip the ip * @param ipAddr the ip addr
* @param capType the cap type * @param capType the cap type
* @param nfDirection the nf direction
* @param attackType the attack type
* @return the mul return type * @return the mul return type
*/ */
@Override @Override
public MulReturnType<ErrorCode, Long> stopDispose(String ip, DisposeCapacityType capType) { public MulReturnType<ErrorCode, Long> stopDispose(String ipAddr, DisposeCapacityType capType,
return null; @Nullable NetflowDirection[] nfDirection,
@Nullable DDoSAttackType[] attackType) {
ErrorCode err = ErrorCode.ERR_OK;
try {
log.info("++++Begging DPTech Stop Cleanup Task: {}", ipAddr);
// 查找需要处置的流量方向集合
List<NetflowDirection> dirList = Arrays.stream(NetflowDirection.values())
.filter(d -> nfDirection == null || nfDirection.length == 0 || Arrays.asList(nfDirection).contains(d))
.collect(Collectors.toList());
// 查找需要处理的攻击类型集合
List<DpTechAttackType> typeList = Arrays.stream(DDoSAttackType.values())
.filter(t -> attackType == null || attackType.length == 0 || Arrays.asList(attackType).contains(t))
.map(t -> CommonEnumHandler.codeOf(DpTechAttackType.class,
DpTechAttackType.fromDdosAttackTypeValue(t)))
.collect(Collectors.toList());
dirList.forEach(d -> typeList.forEach(t -> CompletableFuture.supplyAsync(() ->
cleanTypePort.stopAbnormalTaskForUMC(ipAddr, t.getValue(), d.getCode()))
.whenComplete((v, ex) -> {
if (ex != null) {
log.error("DPTech stop dispose: {}, {}, error:{}", ipAddr, t.getValue(), ex.getMessage());
} else {
log.debug("Stop Cleanup: {} --> {}:{}", d, t.getDescription(), t.getValue());
if(v.getResultRetVal() != ErrorCode.ERR_OK.getCode()) {
log.error("DPTech stop dispose {} error: {}", ipAddr, v.getResultInfo());
}
}
})));
log.info("----Finish DPTech Stop Cleanup Task: {}", ipAddr);
} catch (Exception ex) {
log.error(ex.getMessage());
log.error("----Error DPTech Stop Cleanup Task: {}", ipAddr);
err = ErrorCode.ERR_SYSTEMEXCEPTION;
}
return new MulReturnType<>(err, null);
}
@Override
public boolean getDeviceLinkStatus() {
try {
// 获取防护对象接口调用成功认为设备心跳正常
cleanTypePort.getAllProtectionObjectFromUMC().getProtectionObjectDataForService();
return true;
} catch (Exception ex) {
log.error(ex.getMessage());
}
return false;
} }
} }

View File

@ -55,6 +55,8 @@ public enum DDoSAttackType implements BaseEnum {
*/ */
HOST_TOTAL_TRAFFIC(11, "Host Total Traffic"); HOST_TOTAL_TRAFFIC(11, "Host Total Traffic");
/** /**
* The Code. * The Code.
*/ */

View File

@ -40,12 +40,19 @@ public interface DisposeDeviceManager {
MulReturnType<ErrorCode, ObjectStatus> changeDisposeDeviceStatus(Long id, ObjectStatus status); MulReturnType<ErrorCode, ObjectStatus> changeDisposeDeviceStatus(Long id, ObjectStatus status);
/** /**
* Gets all devices. * Gets pages of devices.
* *
* @param startPage the start page * @param startPage the start page
* @param pageSize the page size * @param pageSize the page size
* @return the all devices * @return the pages of devices
*/ */
MulReturnType<PageInfo<DisposeDevice>, List<DisposeDevice>> getAllDevices(Integer startPage, MulReturnType<PageInfo<DisposeDevice>, List<DisposeDevice>> getPagesOfDevices(Integer startPage,
Integer pageSize); Integer pageSize);
/**
* Gets all dispose devices.
*
* @return the all dispose devices
*/
List<DisposeDevice> getAllDisposeDevices();
} }

View File

@ -205,15 +205,15 @@ public class DisposeDeviceManagerImpl implements DisposeDeviceManager {
} }
/** /**
* Gets all devices. * Gets pages of devices.
* *
* @param startPage the start page * @param startPage the start page
* @param pageSize the page size * @param pageSize the page size
* @return the all devices * @return the pages of devices
*/ */
@Override @Override
public MulReturnType<PageInfo<DisposeDevice>, List<DisposeDevice>> getAllDevices(Integer startPage, public MulReturnType<PageInfo<DisposeDevice>, List<DisposeDevice>> getPagesOfDevices(Integer startPage,
Integer pageSize) { Integer pageSize) {
// 设置分页信息 // 设置分页信息
PageHelper.startPage(startPage, pageSize); PageHelper.startPage(startPage, pageSize);
@ -229,4 +229,20 @@ public class DisposeDeviceManagerImpl implements DisposeDeviceManager {
return new MulReturnType<>(pageInfo, devList); return new MulReturnType<>(pageInfo, devList);
} }
/**
* Gets all dispose devices.
*
* @return the all dispose devices
*/
@Override
public List<DisposeDevice> getAllDisposeDevices() {
List<DisposeDevice> devList = disposeDeviceMapper.selectAll();
if(devList == null) {
devList = new ArrayList<>();
}
return devList;
}
} }

View File

@ -0,0 +1,9 @@
package com.dispose.service;
/**
* The interface Dispose ability router service.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
public interface DisposeAbilityRouterService {
}

View File

@ -0,0 +1,67 @@
package com.dispose.service.impl;
import com.dispose.ability.DisposeAbility;
import com.dispose.ability.impl.DpTechAbilityImpl;
import com.dispose.common.HttpType;
import com.dispose.manager.DisposeDeviceManager;
import com.dispose.pojo.entity.DisposeDevice;
import com.dispose.service.DisposeAbilityRouterService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
* The type Dispose ability router service.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@Service
@Slf4j
public class DisposeAbilityRouterServiceImpl implements DisposeAbilityRouterService {
/**
* The Dispose ability map.
*/
private ConcurrentHashMap<String, DisposeAbility> disposeAbilityMap = new ConcurrentHashMap<>();
/**
* The Dispose device manager.
*/
@Resource
private DisposeDeviceManager disposeDeviceManager;
/**
* Init dispose ability.
*/
@PostConstruct
public void initDisposeAbility() {
List<DisposeDevice> devList = disposeDeviceManager.getAllDisposeDevices();
devList.forEach(v -> {
DisposeAbility db;
String httpType = v.getUrlType() == HttpType.HTTP ? "http://" : "https://";
String addr = v.getIpPort() == null || v.getIpPort().length() == 0 ? v.getIpAddr() :
v.getIpAddr() + ":" + v.getIpPort();
String url = httpType + addr + "/" + v.getUrlPath();
switch (v.getDeviceType()) {
case DPTECH_UMC:
db = new DpTechAbilityImpl();
db.initDeviceEnv(url, v.getUserName(), v.getPassword());
disposeAbilityMap.put(addr, db);
break;
case HAOHAN_PLATFORM:
break;
case VIRTUAL_DISPOSE:
break;
default:
break;
}
});
}
}

View File

@ -110,6 +110,6 @@ public class DisposeDeviceManagerServiceImpl implements DisposeDeviceManagerServ
@Override @Override
public MulReturnType<PageInfo<DisposeDevice>, List<DisposeDevice>> getAllDisposeDevice(Integer startPage, public MulReturnType<PageInfo<DisposeDevice>, List<DisposeDevice>> getAllDisposeDevice(Integer startPage,
Integer pageSize) { Integer pageSize) {
return disposeDeviceManager.getAllDevices(startPage, pageSize); return disposeDeviceManager.getPagesOfDevices(startPage, pageSize);
} }
} }

View File

@ -0,0 +1,41 @@
package com.dispose.task;
import com.dispose.ability.DisposeAbility;
import com.dispose.manager.DisposeDeviceManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
/**
* The type Device manager task.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@Component
@Slf4j
public class DeviceManagerTask {
@Resource
private DisposeDeviceManager disposeDeviceManager;
@Resource
private DisposeAbility disposeAbility;
/**
* Thread pool task.
*/
@Async("bizExecutor")
@Scheduled(cron = "0/5 * * * * ?")
public void threadPoolTask() {
log.info("task run......... {}", disposeAbility.getDeviceLinkStatus());
}
@PostConstruct
public void init() {
disposeAbility.initDeviceEnv("http://10.88.77.15/UMC/service/AbnormalFlowCleaningService",
"admin", "UMCAdministrator");
}
}

View File

@ -0,0 +1,29 @@
package com.dispose.thread;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
/**
* The type Thread pool config.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@Configuration
public class ThreadPoolConfig {
/**
* Biz executor executor.
*
* @return the executor
*/
@Bean
public Executor bizExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setThreadNamePrefix("myBiz-");
executor.setMaxPoolSize(Runtime.getRuntime().availableProcessors() << 1 + 1);
executor.setCorePoolSize(Runtime.getRuntime().availableProcessors());
return executor;
}
}