REM:
1. 拆分配置文件,将工程配置文件拆分到独立的配置文件中
2. 新增log4j日志等级不同配置文件
3. 增加处置任务数据库相关内容
4. 增加处置任务相关单元测试用例
This commit is contained in:
HuangXin 2020-08-13 09:18:38 +08:00
parent 1ccdc5e194
commit 12ba2b9be3
18 changed files with 592 additions and 117 deletions

View File

@ -0,0 +1,21 @@
#调试配置
dispose.debug-model=true
dispose.check-protocol-timeout=false
dispose.check-request-token=true
dispose.split_char=,
dispose.request-timeout-second=5
dispose.used-privacy-protect=true
# 迪普设备配置
# 发送超时时间(s)
dptech.soap-conn-timeout-second=60
# 接收超时时间(s)
dptech.soap-recv-timeout-second=60
# 用户权限配置
permission.admin-check=true
permission.admin-users=admin
# 认证配置
auth.token-timeout-minute=30

View File

@ -4,11 +4,11 @@ server.tomcat.basedir=./basedir
# 多个项目放在nginx下同个端口通过该配置区分
server.servlet.context-path=/dispose
# 配置数据源
spring.datasource.url=jdbc:mysql://172.28.72.118:33061/dispose_hx?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior\
spring.datasource.url=jdbc:mysql://10.88.77.65:33061/dispose_hx?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior\
=convertToNull&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=phoenix
spring.datasource.password=Hy@rfph32
spring.datasource.username=root
spring.datasource.password=h0K0_8u
# 配置连接池
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
spring.datasource.dbcp2.max-total=128
@ -26,7 +26,7 @@ mybatis.mapper-locations=classpath*:mappers/*.xml
mybatis.type-aliases-package=com.dispose.pojo.entity
mybatis.configuration.default-enum-type-handler=com.dispose.common.CommonEnumHandler
#config log
logging.config=file:config/logback.xml
logging.config=file:config/logback_debug.xml
#config tomcat
server.tomcat.max-threads=128
#Json sort
@ -52,26 +52,4 @@ phoenix.request-dec-switch=false
phoenix.response-enc-switch=false
#config aes 128 key,用于上述body的加解密
phoenix.aes-key=Wt4EJu6Rrq5udd/42bNpCQ==
#====custom config,begin with phoenix====
#调试配置
dispose.debug-model=true
dispose.check-protocol-timeout=false
dispose.check-request-token=true
dispose.split_char=,
dispose.request-timeout-second=5
dispose.used-privacy-protect=true
# 迪普设备配置
# 发送超时时间(ms)
dptech.soap-conn-timeout-second=60
# 接收超时时间(ms)
dptech.soap-recv-timeout-second=60
# 用户权限配置
permission.admin-check=true
permission.admin-users=admin
# 认证配置
auth.token-timeout-minute=30
#====custom config,begin with phoenix====

View File

@ -51,13 +51,3 @@ phoenix.response-enc-switch=false
#config aes 128 key,用于上述body的加解密
phoenix.aes-key=Wt4EJu6Rrq5udd/42bNpCQ==
#====custom config,begin with phoenix====
#调试配置
dispose.check-protocol-timeout=false
dispose.check-request-token=true
dispose.check-admin-permission=true
# 迪普设备配置
# 发送超时时间(ms)
#dptech.soap-conn-timeout=5000
# 接收超时时间(ms)
dptech.soap-recv-timeout=50000

View File

@ -1 +1 @@
spring.profiles.active=local
spring.profiles.active=local,dispose

View File

@ -2,7 +2,7 @@
<configuration scan="true">
<property name="LOG_PATH" value="./logs"/>
<property name="LOG_LEVEL" value="debug"/>
<property name="LOG_LEVEL" value="info"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">

101
config/logback_debug.xml Normal file
View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true">
<property name="LOG_PATH" value="./logs"/>
<property name="LOG_LEVEL" value="debug"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">
<pattern>[%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n</pattern>
</encoder>
</appender>
<appender name="BIZ"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/biz.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/biz.log.%d{yyyyMMdd}
</fileNamePattern>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>[%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n</pattern>
</encoder>
</appender>
<appender name="SYSTEM-LOG-FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/system.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/system.log.%d{yyyyMMdd}
</fileNamePattern>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>[%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n</pattern>
</encoder>
</appender>
<appender name="DATA"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/data.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/data.log.%d{yyyyMMdd}
</fileNamePattern>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>[%d{yy-MM-dd HH:mm:ss:SSS}][%-5p][%c{0}][%M\(%L\)][%t]: %m%n</pattern>
</encoder>
</appender>
<logger name="com.cmcc.hy.phoenix" level="${LOG_LEVEL}" additivity="false">
<appender-ref ref="BIZ"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="com.cmcc.hy.phoenix.mapper" level="${LOG_LEVEL}"
additivity="false">
<appender-ref ref="DATA"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="org.mybatis" level="${LOG_LEVEL}" additivity="false">
<appender-ref ref="DATA"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="org.apache.ibatis" level="${LOG_LEVEL}"
additivity="false">
<appender-ref ref="DATA"/>
</logger>
<logger name="org.mybatis.spring" level="${LOG_LEVEL}"
additivity="false">
<appender-ref ref="DATA"/>
</logger>
<logger name="org.springframework.jdbc" level="${LOG_LEVEL}"
additivity="false">
<appender-ref ref="DATA"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="org.springframework.orm" level="${LOG_LEVEL}"
additivity="false">
<appender-ref ref="DATA"/>
</logger>
<logger name="com.mysql" level="${LOG_LEVEL}" additivity="false">
<appender-ref ref="DATA"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="java.sql" level="${LOG_LEVEL}" additivity="false">
<appender-ref ref="DATA"/>
<appender-ref ref="CONSOLE"/>
</logger>
<logger name="javax.sql" level="${LOG_LEVEL}" additivity="false">
<appender-ref ref="DATA"/>
</logger>
<root level="${LOG_LEVEL}">
<appender-ref ref="SYSTEM-LOG-FILE"/>
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

View File

@ -118,7 +118,7 @@ public class DpTechAbilityImpl implements DisposeAbility {
.collect(Collectors.toList());
dirList.forEach(d -> typeList.forEach(t -> CompletableFuture.supplyAsync(() ->
cleanTypePort.startAbnormalTaskForUMC(ip, t.getValue(), d.getCode()))
cleanTypePort.startAbnormalTaskForUMC(ip, t.getValue(), d.getValue()))
.whenComplete((v, ex) -> {
if (ex != null) {
log.error("DPTech run dispose: {}, {}, error:{}", ip, t.getValue(),
@ -173,7 +173,7 @@ public class DpTechAbilityImpl implements DisposeAbility {
.collect(Collectors.toList());
dirList.forEach(d -> typeList.forEach(t -> CompletableFuture.supplyAsync(() ->
cleanTypePort.stopAbnormalTaskForUMC(ipAddr, t.getValue(), d.getCode()))
cleanTypePort.stopAbnormalTaskForUMC(ipAddr, t.getValue(), d.getValue()))
.whenComplete((v, ex) -> {
if (ex != null) {
log.error("DPTech stop dispose: {}, {}, error:{}", ipAddr, t.getValue(), ex.getMessage());

View File

@ -1,188 +1,194 @@
package com.dispose.common;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
import java.util.List;
/**
* The enum D do s attack type.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
public enum DDoSAttackType implements BaseEnum {
@Slf4j
public enum DDoSAttackType implements BaseEnum {
/**
* The Host total traffic.
*/
HOST_TOTAL_TRAFFIC ( 0, "HOST_TOTAL_TRAFFIC"),
HOST_TOTAL_TRAFFIC(0, "HOST_TOTAL_TRAFFIC"),
/**
* The Rst flood.
*/
RST_FLOOD ( 1, "RST_FLOOD"),
RST_FLOOD(1, "RST_FLOOD"),
/**
* The Syn flood.
*/
SYN_FLOOD ( 2, "SYN_FLOOD"),
SYN_FLOOD(2, "SYN_FLOOD"),
/**
* The Ack flood.
*/
ACK_FLOOD ( 3, "ACK_FLOOD"),
ACK_FLOOD(3, "ACK_FLOOD"),
/**
* The Tcp null.
*/
TCP_NULL ( 4, "TCP_NULL"),
TCP_NULL(4, "TCP_NULL"),
/**
* The Syn ack amplification.
*/
SYN_ACK_AMPLIFICATION ( 5, "SYN/ACK_AMPLIFICATION"),
SYN_ACK_AMPLIFICATION(5, "SYN/ACK_AMPLIFICATION"),
/**
* The Tcp misuse.
*/
TCP_MISUSE ( 6, "TCP_MISUSE"),
TCP_MISUSE(6, "TCP_MISUSE"),
/**
* The Fin flood.
*/
FIN_FLOOD ( 7, "FIN_FLOOD"),
FIN_FLOOD(7, "FIN_FLOOD"),
/**
* The Tcp fragment.
*/
TCP_FRAGMENT ( 8, "TCP_FRAGMENT"),
TCP_FRAGMENT(8, "TCP_FRAGMENT"),
/**
* The Http flood.
*/
HTTP_FLOOD ( 9, "HTTP_FLOOD"),
HTTP_FLOOD(9, "HTTP_FLOOD"),
/**
* The Https flood.
*/
HTTPS_FLOOD ( 10, "HTTPS_FLOOD"),
HTTPS_FLOOD(10, "HTTPS_FLOOD"),
/**
* The Win nuke.
*/
WIN_NUKE ( 11, "WIN_NUKE"),
WIN_NUKE(11, "WIN_NUKE"),
/**
* The Sip flood.
*/
SIP_FLOOD ( 12, "SIP_FLOOD"),
SIP_FLOOD(12, "SIP_FLOOD"),
/**
* The Dns flood.
*/
DNS_FLOOD ( 13, "DNS_FLOOD"),
DNS_FLOOD(13, "DNS_FLOOD"),
/**
* The Udp fragment.
*/
UDP_FRAGMENT ( 14, "UDP_FRAGMENT"),
UDP_FRAGMENT(14, "UDP_FRAGMENT"),
/**
* The Charged amplification.
*/
CHARGED_AMPLIFICATION ( 15, "CHARGED_AMPLIFICATION"),
CHARGED_AMPLIFICATION(15, "CHARGED_AMPLIFICATION"),
/**
* The L 2 tp amplification.
*/
L2TP_AMPLIFICATION ( 16, "L2TP_AMPLIFICATION"),
L2TP_AMPLIFICATION(16, "L2TP_AMPLIFICATION"),
/**
* The Mdns amplification.
*/
MDNS_AMPLIFICATION ( 17, "MDNS_AMPLIFICATION"),
MDNS_AMPLIFICATION(17, "MDNS_AMPLIFICATION"),
/**
* The Ms sql rs amplification.
*/
MS_SQL_RS_AMPLIFICATION ( 18, "MS_SQL_RS_AMPLIFICATION"),
MS_SQL_RS_AMPLIFICATION(18, "MS_SQL_RS_AMPLIFICATION"),
/**
* The Net bios amplification.
*/
NET_BIOS_AMPLIFICATION ( 19, "NET_BIOS_AMPLIFICATION"),
NET_BIOS_AMPLIFICATION(19, "NET_BIOS_AMPLIFICATION"),
/**
* The Ntp amplification.
*/
NTP_AMPLIFICATION ( 20, "NTP_AMPLIFICATION"),
NTP_AMPLIFICATION(20, "NTP_AMPLIFICATION"),
/**
* The Ripv 1 amplification.
*/
RIPV1_AMPLIFICATION ( 21, "RIPV1_AMPLIFICATION"),
RIPV1_AMPLIFICATION(21, "RIPV1_AMPLIFICATION"),
/**
* The Rpcbind amplification.
*/
RPCBIND_AMPLIFICATION ( 22, "RPCBIND_AMPLIFICATION"),
RPCBIND_AMPLIFICATION(22, "RPCBIND_AMPLIFICATION"),
/**
* The Snmp amplification.
*/
SNMP_AMPLIFICATION ( 23, "SNMP_AMPLIFICATION"),
SNMP_AMPLIFICATION(23, "SNMP_AMPLIFICATION"),
/**
* The Ssdp amplification.
*/
SSDP_AMPLIFICATION ( 24, "SSDP_AMPLIFICATION"),
SSDP_AMPLIFICATION(24, "SSDP_AMPLIFICATION"),
/**
* The Dns amplification.
*/
DNS_AMPLIFICATION ( 25, "DNS_AMPLIFICATION"),
DNS_AMPLIFICATION(25, "DNS_AMPLIFICATION"),
/**
* The Qotd amplification.
*/
QOTD_AMPLIFICATION ( 26, "QOTD_AMPLIFICATION"),
QOTD_AMPLIFICATION(26, "QOTD_AMPLIFICATION"),
/**
* The Quake 3 amplification.
*/
QUAKE3_AMPLIFICATION ( 27, "QUAKE3_AMPLIFICATION"),
QUAKE3_AMPLIFICATION(27, "QUAKE3_AMPLIFICATION"),
/**
* The Steam amplification.
*/
STEAM_AMPLIFICATION ( 28, "STEAM_AMPLIFICATION"),
STEAM_AMPLIFICATION(28, "STEAM_AMPLIFICATION"),
/**
* The Cldap amplification.
*/
CLDAP_AMPLIFICATION ( 29, "CLDAP_AMPLIFICATION"),
CLDAP_AMPLIFICATION(29, "CLDAP_AMPLIFICATION"),
/**
* The Memcache amplification.
*/
MEMCACHE_AMPLIFICATION ( 30, "MEMCACHE_AMPLIFICATION"),
MEMCACHE_AMPLIFICATION(30, "MEMCACHE_AMPLIFICATION"),
/**
* The Tftp amplification.
*/
TFTP_AMPLIFICATION ( 31, "TFTP_AMPLIFICATION"),
TFTP_AMPLIFICATION(31, "TFTP_AMPLIFICATION"),
/**
* The Portmapper amplification.
*/
PORTMAPPER_AMPLIFICATION ( 32, "PORTMAPPER_AMPLIFICATION"),
PORTMAPPER_AMPLIFICATION(32, "PORTMAPPER_AMPLIFICATION"),
/**
* The Sentinel amplification.
*/
SENTINEL_AMPLIFICATION ( 33, "SENTINEL_AMPLIFICATION"),
SENTINEL_AMPLIFICATION(33, "SENTINEL_AMPLIFICATION"),
/**
* The Fraggle flood.
*/
FRAGGLE_FLOOD ( 34, "FRAGGLE_FLOOD"),
FRAGGLE_FLOOD(34, "FRAGGLE_FLOOD"),
/**
* The Udp flood.
*/
UDP_FLOOD ( 35, "UDP_FLOOD"),
UDP_FLOOD(35, "UDP_FLOOD"),
/**
* The Smurf.
*/
SMURF ( 36, "SMURF"),
SMURF(36, "SMURF"),
/**
* The Icmp fragment.
*/
ICMP_FRAGMENT ( 37, "ICMP_FRAGMENT"),
ICMP_FRAGMENT(37, "ICMP_FRAGMENT"),
/**
* The Icmp flood.
*/
ICMP_FLOOD ( 38, "ICMP_FLOOD"),
ICMP_FLOOD(38, "ICMP_FLOOD"),
/**
* The Ipv 4 protocol 0.
*/
IPV4_PROTOCOL0 ( 39, "IPV4_PROTOCOL0"),
IPV4_PROTOCOL0(39, "IPV4_PROTOCOL0"),
/**
* The Ip private.
*/
IP_PRIVATE ( 40, "IP_PRIVATE"),
IP_PRIVATE(40, "IP_PRIVATE"),
/**
* The Land flood.
*/
LAND_FLOOD ( 41, "LAND_FLOOD"),
LAND_FLOOD(41, "LAND_FLOOD"),
/**
* The Igmp flood.
*/
IGMP_FLOOD ( 42, "IGMP_FLOOD"),
IGMP_FLOOD(42, "IGMP_FLOOD"),
/**
* All attacks d do s attack type.
* The All attacks.
*/
ALL_ATTACKS (-1, "ALL_ATTACKS"),
ALL_ATTACKS(-1, "ALL_ATTACKS"),
;
@ -206,6 +212,56 @@ public enum DDoSAttackType implements BaseEnum {
this.readme = readme;
}
/**
* Gets type mask from attack type.
*
* @param types the types
* @return the type mask from attack type
*/
public static Long getTypeMaskFromAttackType(List<DDoSAttackType> types) {
long mask = 0L;
if (types.contains(ALL_ATTACKS)) {
for (DDoSAttackType type : DDoSAttackType.values()) {
if (type.equals(ALL_ATTACKS)) {
continue;
}
mask |= type.getValue() << 1;
}
} else {
for (DDoSAttackType type : types) {
mask |= type.getValue() << 1;
}
}
return mask;
}
/**
* Gets type mask from attack type.
*
* @param types the types
* @return the type mask from attack type
*/
public static Long getTypeMaskFromAttackType(DDoSAttackType[] types) {
long mask = 0L;
if (Arrays.asList(types).contains(ALL_ATTACKS)) {
for (DDoSAttackType type : DDoSAttackType.values()) {
if (type.equals(ALL_ATTACKS)) {
continue;
}
mask |= (long)1 << type.getValue();
}
} else {
for (DDoSAttackType type : types) {
mask |= (long)1 << type.getValue();
}
}
return mask;
}
/**
* Gets value.
*

View File

@ -0,0 +1,71 @@
package com.dispose.common;
/**
* The enum Task status.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
public enum DisposeTaskStatus implements BaseEnum {
/**
* The Task new.
*/
TASK_NEW(0, "新建"),
/**
* The Task starting.
*/
TASK_STARTING(1, "启动中"),
/**
* The Task started.
*/
TASK_STARTED(2, "启动完成"),
/**
* The Task finished.
*/
TASK_FINISHED(3, "结束"),
/**
* Task canceled task status.
*/
TASK_CANCELED(4, "用户中止"),
;
/**
* The Code.
*/
private final Integer code;
/**
* The Readme.
*/
private final String readme;
/**
* Instantiates a new Task status.
*
* @param code the code
* @param readme the readme
*/
DisposeTaskStatus(int code, String readme) {
this.code = code;
this.readme = readme;
}
/**
* Gets value.
*
* @return the value
*/
@Override
public Integer getValue() {
return this.code;
}
/**
* Gets description.
*
* @return the description
*/
@Override
public String getDescription() {
return this.readme;
}
}

View File

@ -5,19 +5,24 @@ package com.dispose.common;
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
public enum NetflowDirection {
public enum NetflowDirection implements BaseEnum {
/**
* Direction in netflow direction.
* The Direction in.
*/
DIRECTION_IN(0, "入方向"),
/**
* Direction out netflow direction.
* The Direction out.
*/
DIRECTION_OUT(1, "出方向");
DIRECTION_OUT(1, "出方向"),
/**
* The Direction bi.
*/
DIRECTION_BI(2, "双向");
/**
* The Code.
*/
private final int code;
private final Integer code;
/**
* The Readme.
*/
@ -35,20 +40,22 @@ public enum NetflowDirection {
}
/**
* Gets code.
* Gets value.
*
* @return the code
* @return the value
*/
public int getCode() {
@Override
public Integer getValue() {
return this.code;
}
/**
* Gets readme.
* Gets description.
*
* @return the readme
* @return the description
*/
public String getReadme() {
@Override
public String getDescription() {
return this.readme;
}
}

View File

@ -0,0 +1,47 @@
package com.dispose.mapper;
import com.dispose.common.DisposeTaskStatus;
import com.dispose.pojo.entity.DisposeTask;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* The interface Dispose task mapper.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
public interface DisposeTaskMapper {
/**
* Select all list.
*
* @return the list
*/
List<DisposeTask> selectAll();
/**
* Add new task int.
*
* @param task the task
* @return the int
*/
int addNewTask(DisposeTask task);
/**
* Gets task status.
*
* @param taskId the task id
* @return the task status
*/
DisposeTaskStatus getTaskStatus(@Param("id") Long taskId);
/**
* Chang task status int.
*
* @param taskId the task id
* @param status the status
* @return the int
*/
int changTaskStatus(@Param("id") Long taskId,
@Param("status") DisposeTaskStatus status);
}

View File

@ -6,32 +6,29 @@ import com.dispose.common.IpAddrType;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import tk.mybatis.mapper.annotation.KeySql;
import tk.mybatis.mapper.annotation.NameStyle;
import tk.mybatis.mapper.code.Style;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/**
* The type Dispose capacity.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@Getter
@Setter
@ToString
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@Table(name = "dispose_capacity")
@NameStyle(Style.normal)
public class DisposeCapacity {
public class DisposeCapacity implements Serializable {
/**
* The constant serialVersionUID.

View File

@ -7,10 +7,8 @@ import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import tk.mybatis.mapper.annotation.KeySql;
import tk.mybatis.mapper.annotation.NameStyle;
import tk.mybatis.mapper.code.Style;
@ -26,9 +24,7 @@ import java.util.List;
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@Getter
@Setter
@ToString
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder

View File

@ -0,0 +1,90 @@
package com.dispose.pojo.entity;
import com.dispose.common.DisposeCapacityType;
import com.dispose.common.DisposeTaskStatus;
import com.dispose.common.NetflowDirection;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import tk.mybatis.mapper.annotation.KeySql;
import tk.mybatis.mapper.annotation.NameStyle;
import tk.mybatis.mapper.code.Style;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/**
* The type Dispose task.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder(alphabetic = true)
@Table(name = "dispose_task")
@NameStyle(Style.normal)
public class DisposeTask implements Serializable {
/**
* The constant serialVersionUID.
*/
private static final long serialVersionUID = 1L;
/**
* The Id.
*/
@Id
@KeySql(useGeneratedKeys = true)
private Long id;
/**
* The Device id.
*/
private Long deviceId;
/**
* The Account id.
*/
private Long accountId;
/**
* The Capacity type.
*/
private DisposeCapacityType capacityType;
/**
* The Dispose ip.
*/
private String disposeIp;
/**
* The Create time.
*/
private String createTime;
/**
* The Plan end time.
*/
private String planEndTime;
/**
* The End time.
*/
private String endTime;
/**
* The Flow direction.
*/
private NetflowDirection flowDirection;
/**
* The Attack type.
*/
private Long attackType;
/**
* The Flow band width.
*/
private Integer flowBandWidth;
/**
* The Current status.
*/
private DisposeTaskStatus currentStatus;
}

View File

@ -3,10 +3,8 @@ package com.dispose.pojo.entity;
import com.dispose.common.ObjectStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import tk.mybatis.mapper.annotation.KeySql;
import tk.mybatis.mapper.annotation.NameStyle;
import tk.mybatis.mapper.code.Style;
@ -20,9 +18,7 @@ import java.io.Serializable;
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@Getter
@Setter
@ToString
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dispose.mapper.DisposeTaskMapper">
<resultMap id="dispose_task" type="com.dispose.pojo.entity.DisposeTask">
<id column="id" property="id"/>
<id column = "deviceId" property="deviceId"/>
<id column = "accountId" property="accountId"/>
<result column="capacityType" property="capacityType" javaType="com.dispose.common.DisposeCapacityType"/>
<result column="disposeIp" property="disposeIp"/>
<result column="createTime" property="createTime"/>
<result column="planEndTime" property="planEndTime"/>
<result column="endTime" property="endTime"/>
<result column="flowDirection" property="flowDirection" javaType="com.dispose.common.NetflowDirection"/>
<result column="attackType" property="attackType"/>
<result column="flowBandWidth" property="flowBandWidth"/>
<result column="currentStatus" property="currentStatus" javaType="com.dispose.common.DisposeTaskStatus"/>
</resultMap>
<select id="selectAll" resultMap="dispose_task">
SELECT *
FROM dispose_task
</select>
<insert id="addNewTask" useGeneratedKeys="true" keyProperty="id"
parameterType="com.dispose.pojo.entity.DisposeTask">
INSERT IGNORE INTO dispose_task(deviceId, accountId, capacityType, disposeIp,
planEndTime, flowDirection, attackType, flowBandWidth,
currentStatus)
VALUES (#{deviceId}, #{accountId}, #{capacityType}, #{disposeIp},
date_add(now(), interval #{planEndTime} MINUTE), #{flowDirection}, #{attackType},
#{flowBandWidth}, ${@com.dispose.common.DisposeTaskStatus@TASK_FINISHED.getValue()})
</insert>
<update id="changTaskStatus">
UPDATE
dispose_task
SET
currentStatus = #{status, javaType="com.dispose.common.DisposeTaskStatus"}
<if test="status == @com.dispose.common.DisposeTaskStatus@TASK_FINISHED
and status == @com.dispose.common.DisposeTaskStatus@TASK_CANCELED">
, endTime = CURRENT_TIMESTAMP
</if>
WHERE
id = #{id, jdbcType=INTEGER}
</update>
<select id="getTaskStatus" resultType="com.dispose.common.DisposeTaskStatus">
SELECT currentStatus
FROM dispose_task
WHERE id = #{id, jdbcType=INTEGER}
</select>
</mapper>

View File

@ -1,5 +1,6 @@
package com.dispose.test.debug;
import com.dispose.common.DDoSAttackType;
import com.dispose.common.DisposeDeviceType;
import com.dispose.common.HttpType;
import com.dispose.common.ObjectStatus;
@ -137,4 +138,10 @@ public class demo {
log.info(PrivacyHelper.ipAddressPrivacy("2001:0000:4136:e378:8000:63bf:3fff:fdd2"));
log.info(PrivacyHelper.ipAddressPrivacy("3fde::fde2"));
}
@Test
public void getTypeMaskFromAttackType() {
Long ret = DDoSAttackType.getTypeMaskFromAttackType(new DDoSAttackType[] {DDoSAttackType.ALL_ATTACKS});
log.debug("Ret: 0x{}", Long.toHexString(ret).toUpperCase());
}
}

View File

@ -0,0 +1,65 @@
package com.dispose.test.mapper;
import com.dispose.common.DDoSAttackType;
import com.dispose.common.DisposeCapacityType;
import com.dispose.common.NetflowDirection;
import com.dispose.mapper.DisposeDeviceMapper;
import com.dispose.mapper.DisposeTaskMapper;
import com.dispose.mapper.UserAccountMapper;
import com.dispose.pojo.entity.DisposeTask;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class DisposeTaskMapperTest {
@Resource
private DisposeTaskMapper disposeTaskMapper;
@Resource
private UserAccountMapper userAccountMapper;
@Resource
private DisposeDeviceMapper disposeDeviceMapper;
@Resource
private ObjectMapper objectMapper;
@Test
public void a1_addNewDisposeTask() throws JsonProcessingException {
Long uId = userAccountMapper.selectAll().get(0).getId();
Long dId = disposeDeviceMapper.selectAll().get(0).getId();
DisposeTask task = DisposeTask.builder()
.deviceId(dId)
.accountId(uId)
.capacityType(DisposeCapacityType.CLEANUP)
.disposeIp("192.168.0.1")
.planEndTime("30")
.flowDirection(NetflowDirection.DIRECTION_BI)
.attackType(DDoSAttackType.getTypeMaskFromAttackType(new DDoSAttackType[] {DDoSAttackType.ALL_ATTACKS}))
.flowBandWidth(1024)
.build();
int ret = disposeTaskMapper.addNewTask(task);
log.info("add ret {}: {}", ret,
objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(task));
List<DisposeTask> taskList = disposeTaskMapper.selectAll();
log.info("Database: {}", objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(taskList));
}
}