Merge branch 'v2.0.1_dev' into 'master'

V2.0.1 dev

See merge request DDOSAQ/phoenix_ddos_handle!7
This commit is contained in:
黄昕 2020-09-27 09:46:49 +08:00
commit f404c85246
42 changed files with 1000 additions and 486 deletions

543
Readme.md
View File

@ -81,7 +81,7 @@
}
```
## 添加节点
## 添加设备
+ 请求命令
字段|内容
----|----
@ -152,7 +152,7 @@
}
```
## 删除节点
## 删除设备
+ 请求命令
字段|内容
----|----
@ -202,7 +202,7 @@
}
```
## 更新节点
## 更新设备
+ 请求命令
字段|内容
----|----
@ -269,7 +269,7 @@
}
```
## 获取全部节点
## 获取全部设备
+ 请求命令
字段|内容
----|----
@ -354,256 +354,507 @@
```
## 获取节点版本信息
## 能力节点信息
+ 请求命令
字段|内容
----|----
Request URI|dispose/information/version
Request URI|dispose/info/areaInfo
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
Body|{"ver":2,"cryptoType":0,"timeStamp":1589439798660,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":3,"cryptoType":0,"timeStamp":1600738402459,"code":200,"msgContent":"{\"items\":[{\"nodeId\":\"0\",\"totalNetflow\":60,\"capacityType\":[0,1],\"onlineDevices\":1,\"totalDevices\":4},{\"nodeId\":\"3\",\"totalNetflow\":0,\"capacityType\":[0],\"onlineDevices\":1,\"totalDevices\":1}],\"status\":0,\"message\":[\"成功\"]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589439798660,
"msgContent":"{\"id\":[\"1\",\"123\"]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600738402459,
"code": 200,
"msgContent": {
"items": [
{
"nodeId": "0",
"totalNetflow": 60,
"capacityType": [
0,
1
],
"onlineDevices": 1,
"totalDevices": 4
},
{
"nodeId": "3",
"totalNetflow": 0,
"capacityType": [
0
],
"onlineDevices": 1,
"totalDevices": 1
}
],
"status": 0,
"message": [
"成功"
]
}
}
```
## 平台版本信息
+ 请求命令
字段|内容
----|----
Request URI|dispose/info/platformVersion
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":3,"cryptoType":0,"timeStamp":1600738977137,"code":200,"msgContent":"{\"platVer\":{\"buildTime\":\"2020-09-18T15:11:38+0800\",\"commitDescribe\":\"v2.0.0_rc1-23-g22ec624-dirty\",\"commitId\":\"22ec62482cb1b99cf06dd301a3e53298ec0efca2\",\"commitTime\":\"2020-09-18T09:31:51+0800\",\"gitBranch\":\"master\",\"tagName\":\"v2.0.0_rc1\"},\"status\":0,\"message\":[\"成功\"]}"}
```json
{
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600738977137,
"code": 200,
"msgContent": {
"platVer": {
"buildTime": "2020-09-18T15:11:38+0800",
"commitDescribe": "v2.0.0_rc1-23-g22ec624-dirty",
"commitId": "22ec62482cb1b99cf06dd301a3e53298ec0efca2",
"commitTime": "2020-09-18T09:31:51+0800",
"gitBranch": "master",
"tagName": "v2.0.0_rc1"
},
"status": 0,
"message": [
"成功"
]
}
}
```
## 设备版本信息
+ 请求命令
字段|内容
----|----
Request URI|dispose/info/deviceVersion
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
Body|{"ver":3,"cryptoType":0,"timeStamp":1600739264314,"msgContent":"{\"id\":[\"571\",\"572\",\"573\"]}"}
```json
{
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600739264314,
"msgContent": {
"id": [
"571",
"572",
"573"
]
}
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":2,"cryptoType":0,"timeStamp":1589439798757,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"version\":\"Virtual_Device_1.0.0\",\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1600739264314,"code":200,"msgContent":"{\"items\":[{\"id\":\"571\",\"status\":19,\"message\":[\"没有这个设备\"]}, {\"id\":\"572\",\"ipAddr\":\"10.88.77.15\",\"ipPort\":\"80\",\"version\":\"5.7.31\",\"status\":0,\"message\":[\"成功\"]},{\"id\":\"573\",\"ipAddr\":\"10.88.77.88\",\"ipPort\":\"18080\",\"version\":\"Unknown\",\"status\":0,\"message\":[\"成功\"]}]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589439798757,
"code": 200,
"msgContent":"{\"items\":[{\"id\":\"1\",\"version\":\"Virtual_Device_1.0.0\",\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600739264314,
"code": 200,
"msgContent": {
"items": [
{
"id": "571",
"status": 19,
"message": [
"没有这个设备"
]
},
{
"id": "572",
"ipAddr": "10.88.77.15",
"ipPort": "80",
"version": "5.7.31",
"status": 0,
"message": [
"成功"
]
},
{
"id": "573",
"ipAddr": "10.88.77.88",
"ipPort": "18080",
"version": "Unknown",
"status": 0,
"message": [
"成功"
]
}
]
}
}
```
## 获取设备信息
## 设备在线状态
+ 请求命令
字段|内容
----|----
Request URI|dispose/information/deviceinfo
Request URI|dispose/info/deviceLinkStatus
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
Body|{"ver":2,"cryptoType":0,"timeStamp":1589440046439,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1600739818013,"msgContent":"{\"id\":[\"571\",\"572\",\"573\"]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589440046439,
"msgContent":"{\"id\":[\"1\",\"123\"]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600739818013,
"msgContent": {
"id": [
"571",
"572",
"573"
]
}
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":2,"cryptoType":0,"timeStamp":1589440046555,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"vendor\":\"Virtual\",\"model\":\"Dispose_1000\",\"firmware\":\"Unknown\",\"os\":\"Unknown\",\"kernel\":\"Linux\",\"arch\":\"x86_64\",\"memory\":-1,\"freeMemory\":-1,\"cpuUsed\":-1,\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"memory\":0,\"freeMemory\":0,\"cpuUsed\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1600741828940,"code":200,"msgContent":"{\"items\":[{\"id\":\"571\",\"status\":19,\"message\":[\"没有这个设备\"]},{\"id\":\"572\",\"ipAddr\":\"10.88.77.15\",\"ipPort\":\"80\",\"online\":1,\"status\":0,\"message\":[\"成功\"]},{\"id\":\"573\",\"ipAddr\":\"10.88.77.88\",\"ipPort\":\"18080\",\"online\":1,\"status\":0,\"message\":[\"成功\"]} ]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589440046555,
"code": 200,
"msgContent":"{\"items\":[{\"id\":\"1\",\"vendor\":\"Virtual\",\"model\":\"Dispose_1000\",\"firmware\":\"Unknown\",\"os\":\"Unknown\",\"kernel\":\"Linux\",\"arch\":\"x86_64\",\"memory\":-1,\"freeMemory\":-1,\"cpuUsed\":-1,\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"memory\":0,\"freeMemory\":0,\"cpuUsed\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600741828940,
"code": 200,
"msgContent": {
"items": [
{
"id": "571",
"status": 19,
"message": [
"没有这个设备"
]
},
{
"id": "572",
"ipAddr": "10.88.77.15",
"ipPort": "80",
"online": 1,
"status": 0,
"message": [
"成功"
]
},
{
"id": "573",
"ipAddr": "10.88.77.88",
"ipPort": "18080",
"online": 1,
"status": 0,
"message": [
"成功"
]
}
]
}
}
```
## 获取链接状态
## 启动处置任务
+ 请求命令
字段|内容
----|----
Request URI|dispose/information/linkstatus
Request URI|dispose/task/start
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
Body|{"ver":2,"cryptoType":0,"timeStamp":1589440383391,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1598597142580,"msgContent":"{\"type\":0,\"disposeIp\":\"192.168.50.2\",\"disposeTime\":10,\"flowDirection\":2,\"attackType\":[1,2,3,4,5]}"}
```json
{
"ver": 2,
"ver": 3,
"cryptoType": 0,
"timeStamp": 1589440383391,
"msgContent":"{\"id\":[\"1\",\"123\"]}"
"timeStamp": 1598597142580,
"msgContent": {
"type": 0,
"disposeIp": "192.168.50.2",
"disposeTime": 10,
"flowDirection": 2,
"attackType": [
1, 2, 3, 4, 5
]
}
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":2,"cryptoType":0,"timeStamp":1589440383488,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"online\":1,\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"online\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1600741958954,"code":200,"msgContent":"{\"taskId\":\"165\",\"disposeIp\":\"192.168.50.2\",\"expireTime\":\"2020-09-22 10:42:38\",\"status\":0,\"message\":[\"成功\"]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589440383488,
"code": 200,
"msgContent":"{\"items\":[{\"id\":\"1\",\"online\":1,\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"online\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600741958954,
"code": 200,
"msgContent": {
"taskId": "165",
"disposeIp": "192.168.50.2",
"expireTime": "2020-09-22 10:42:38",
"status": 0,
"message": [
"成功"
]
}
}
```
## 获取节点能力信息
## 启动多IP处置
+ 请求命令
字段|内容
----|----
Request URI|dispose/information/capacity
Request URI|dispose/task/startMulIp
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
Body|{"ver":2,"cryptoType":0,"timeStamp":1589440740686,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1598597142580,"msgContent":"{\"type\":0,\"mulDisposeIp\":[\"192.168.50.4\",\"192.168.50.3\"],\"disposeTime\":10}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589440740686,
"msgContent":"{\"id\":[\"1\",\"123\"]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1598597142580,
"msgContent": {
"type": 0,
"mulDisposeIp": [
"192.168.50.4",
"192.168.50.3"
],
"disposeTime": 10
}
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":2,"cryptoType":0,"timeStamp":1589440740792,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"capacity\":[{\"type\":0,\"tolCapacity\":1024,\"usedCapacity\":0},{\"type\":3,\"tolCapacity\":0,\"usedCapacity\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1600742365811,"code":200,"msgContent":"{\"items\":[{\"taskId\":\"166\",\"disposeIp\":\"192.168.50.4\",\"expireTime\":\"2020-09-22 10:49:25\",\"status\":0,\"message\":[\"成功\"]},{\"taskId\":\"167\",\"disposeIp\":\"192.168.50.3\",\"expireTime\":\"2020-09-22 10:49:25\",\"status\":0,\"message\":[\"成功\"]}]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589440740792,
"code": 200,
"msgContent":"{\"items\":[{\"id\":\"1\",\"capacity\":[{\"type\":0,\"tolCapacity\":1024,\"usedCapacity\":0},{\"type\":3,\"tolCapacity\":0,\"usedCapacity\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600742365811,
"code": 200,
"msgContent": {
"items": [
{
"taskId": "166",
"disposeIp": "192.168.50.4",
"expireTime": "2020-09-22 10:49:25",
"status": 0,
"message": [
"成功"
]
},
{
"taskId": "167",
"disposeIp": "192.168.50.3",
"expireTime": "2020-09-22 10:49:25",
"status": 0,
"message": [
"成功"
]
}
]
}
}
```
## 获取节点防护IP
## 停止指定处置任务
+ 请求命令
字段|内容
----|----
Request URI|dispose/information/protected_ip
Request URI|dispose/task/stop
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
Body|{"ver":2,"cryptoType":0,"timeStamp":1589440953311,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1598597142580,"msgContent":"{\"taskId\":[\"166\",\"167\",\"168\"]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589440953311,
"msgContent":"{\"id\":[\"1\",\"123\"]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1598597142580,
"msgContent": {
"taskId": [
"166",
"167",
"168"
]
}
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":2,"cryptoType":0,"timeStamp":1589440953422,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"capacity\":[{\"type\":0,\"disposeIp\":\"192.168.3.2-192.168.3.5,192.168.5.2-192.168.5.10,192.168.4.2-192.168.4.5\"},{\"type\":3,\"disposeIp\":\"192.168.2.1,192.168.2.2\"}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1600742779563,"code":200,"msgContent":"{\"items\":[{\"taskId\":\"166\",\"disposeDevice\":[\"573\",\"621\"],\"type\":0,\"disposeIp\":\"192.168.50.4\",\"leftTime\":3,\"status\":0,\"message\":[\"成功\"]},{\"taskId\":\"167\",\"disposeDevice\":[\"573\",\"621\"],\"type\":0,\"disposeIp\":\"192.168.50.3\",\"leftTime\":3,\"status\":0,\"message\":[\"成功\"]},{\"taskId\":\"168\",\"status\":30,\"message\":[\"没有该任务\"]}]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589440953422,
"code": 200,
"msgContent":"{\"items\":[{\"id\":\"1\",\"capacity\":[{\"type\":0,\"disposeIp\":\"192.168.3.2-192.168.3.5,192.168.5.2-192.168.5.10,192.168.4.2-192.168.4.5\"},{\"type\":3,\"disposeIp\":\"192.168.2.1,192.168.2.2\"}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"status\":19,\"message\":\"没有这个设备\"}]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600742779563,
"code": 200,
"msgContent": {
"items": [
{
"taskId": "166",
"disposeDevice": [
"573",
"621"
],
"type": 0,
"disposeIp": "192.168.50.4",
"leftTime": "3",
"status": 0,
"message": [
"成功"
]
},
{
"taskId": "167",
"disposeDevice": [
"573",
"621"
],
"type": 0,
"disposeIp": "192.168.50.3",
"leftTime": "3",
"status": 0,
"message": [
"成功"
]
},
{
"taskId": "168",
"status": 30,
"message": [
"没有该任务"
]
}
]
}
}
```
## 获取能力节点处置中任务
## 获取全部处置任务
+ 请求命令
字段|内容
----|----
Request URI|dispose/information/run_task
Request URI|dispose/task/taskList
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
Body|{"ver":2,"cryptoType":0,"timeStamp":1589441350918,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1598596065234,"msgContent":"{\"startPage\":1,\"pageSize\":10}"}
```json
{
"ver": 2,
"ver": 3,
"cryptoType": 0,
"timeStamp": 1589441350918,
"msgContent":"{\"id\":[\"1\",\"123\"]}"
"timeStamp": 1598596065234,
"msgContent": {
"startPage": 1,
"pageSize": 10
}
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":2,"cryptoType":0,"timeStamp":1589441351042,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"taskArray\":[{\"taskId\":\"67\",\"type\":0,\"disposeIp\":\"192.168.5.8\",\"startTime\":1589425749,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"taskArray\":[],\"status\":19,\"message\":\"没有这个设备\"}]}"}
Body|{"ver":3,"cryptoType":0,"timeStamp":1600743307130,"code":200,"msgContent":"{\"curPageNumber\":1,\"pageSize\":10,\"totalItems\":2,\"totalPages\":1,\"status\":0,\"message\":[\"成功\"],\"items\":[{\"taskId\":\"165\",\"accountId\":\"1\",\"disposeCapacity\":0,\"disposeIp\":\"192.168.50.2\",\"createTime\":\"2020-09-22 10:32:38\",\"planEndTime\":\"2020-09-22 10:42:38\",\"endTime\":\"2020-09-22 10:42:38\",\"flowDirection\":2,\"attackType\":\"62\",\"flowBandWidth\":1024,\"currentStatus\":5,\"deviceTask\":[{\"devTaskId\":129,\"devId\":\"573\",\"externId\":\"536\",\"status\":3},{\"devTaskId\":130,\"devId\":\"621\",\"externId\":\"null\",\"status\":3}]},{\"taskId\":\"166\",\"accountId\":\"1\",\"disposeCapacity\":0,\"disposeIp\":\"192.168.50.4\",\"createTime\":\"2020-09-22 10:39:25\",\"planEndTime\":\"2020-09-22 10:49:25\",\"endTime\":\"2020-09-22 10:46:19\",\"flowDirection\":2,\"attackType\":\"8796093022207\",\"flowBandWidth\":1024,\"currentStatus\":4,\"deviceTask\":[{\"devTaskId\":131,\"devId\":\"573\",\"externId\":\"537\",\"status\":3},{\"devTaskId\":132,\"devId\":\"621\",\"externId\":\"null\",\"status\":3}]}]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589441351042,
"code": 200,
"msgContent":"{\"items\":[{\"id\":\"1\",\"taskArray\":[{\"taskId\":\"67\",\"type\":0,\"disposeIp\":\"192.168.5.8\",\"startTime\":1589425749,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"taskArray\":[],\"status\":19,\"message\":\"没有这个设备\"}]}"
"ver": 3,
"cryptoType": 0,
"timeStamp": 1600743307130,
"code": 200,
"msgContent": {
"curPageNumber": 1,
"pageSize": 10,
"totalItems": 2,
"totalPages": 1,
"status": 0,
"message": [
"成功"
],
"items": [
{
"taskId": "165",
"accountId": "1",
"disposeCapacity": 0,
"disposeIp": "192.168.50.2",
"createTime": "2020-09-22 10:32:38",
"planEndTime": "2020-09-22 10:42:38",
"endTime": "2020-09-22 10:42:38",
"flowDirection": 2,
"attackType": "62",
"flowBandWidth": 1024,
"currentStatus": 5,
"deviceTask": [
{
"devTaskId": "129",
"devId": "573",
"externId": "536",
"status": 3
},
{
"devTaskId": "130",
"devId": "621",
"externId": "null",
"status": 3
}
]
},
{
"taskId": "166",
"accountId": "1",
"disposeCapacity": 0,
"disposeIp": "192.168.50.4",
"createTime": "2020-09-22 10:39:25",
"planEndTime": "2020-09-22 10:49:25",
"endTime": "2020-09-22 10:46:19",
"flowDirection": 2,
"attackType": "8796093022207",
"flowBandWidth": 1024,
"currentStatus": 4,
"deviceTask": [
{
"devTaskId": "131",
"devId": "573",
"externId": "537",
"status": 3
},
{
"devTaskId": "132",
"devId": "621",
"externId": "null",
"status": 3
}
]
}
]
}
}
```
## 获取能力节点所有处置任务
+ 请求命令
字段|内容
----|----
Request URI|dispose/information/all_task
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
Body|{"ver":2,"cryptoType":0,"timeStamp":1589441746230,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589441746230,
"msgContent":"{\"id\":[\"1\",\"123\"]}"
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":2,"cryptoType":0,"timeStamp":1589442276448,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"taskArray\":[{\"taskId\":\"66\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.7\",\"startTime\":1589425731,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0},{\"taskId\":\"67\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.8\",\"startTime\":1589425749,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0},{\"taskId\":\"63\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.2\",\"startTime\":1589422184,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"taskArray\":[],\"status\":19,\"message\":\"没有这个设备\"}]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589442276448,
"code": 200,
"msgContent":"{\"items\":[{\"id\":\"1\",\"taskArray\":[{\"taskId\":\"66\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.7\",\"startTime\":1589425731,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0},{\"taskId\":\"67\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.8\",\"startTime\":1589425749,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0},{\"taskId\":\"63\",\"currentStatus\":1,\"type\":0,\"disposeIp\":\"192.168.5.2\",\"startTime\":1589422184,\"disposeTime\":7200,\"flowAttack\":0,\"flowClean\":0}],\"status\":0,\"message\":\"成功\"},{\"id\":\"123\",\"taskArray\":[],\"status\":19,\"message\":\"没有这个设备\"}]}"
}
```
## 获取能力节点列表
+ 请求命令
字段|内容
----|----
Request URI|dispose/information/node_list
Content type|application/json;charset=UTF-8
Authorization|"Bearer b8f01b8303cd9fcb7d3c9ed1b1c54d4a6e04bac3a66ab7df6ba81f690882ca2e"
Body|{"ver":2,"cryptoType":0,"timeStamp":1589442707017,"msgContent":"{\"id\":[\"1\",\"123\"]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589442707017,
"msgContent":"{\"id\":[\"1\",\"123\"]}"
}
```
+ 响应消息
字段|内容
----|----
Content type|application/json;charset=UTF-8
Body|{"ver":2,"cryptoType":0,"timeStamp":1589442707130,"code":200,"msgContent":"{\"items\":[{\"id\":\"1\",\"type\":0,\"name\":\"中移杭研实验室清洗设备\",\"ip\":\"10.88.77.15\",\"areaCode\":0,\"manufacturer\":\"DPTech\",\"model\":\"UMC\",\"version\":\"Virtual_Device_1.0.0\",\"readme\":\"实验室测试设备\",\"status\":0,\"message\":\"成功\",\"capacity\":[{\"type\":0,\"disposeIp\":\"192.168.3.2-192.168.3.5,192.168.5.2-192.168.5.10,192.168.4.2-192.168.4.5\",\"tolCapacity\":1024,\"usedCapacity\":0},{\"type\":3,\"disposeIp\":\"192.168.2.1,192.168.2.2\",\"tolCapacity\":0,\"usedCapacity\":0}]},{\"id\":\"123\",\"type\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"}
```json
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589442707130,
"code": 200,
"msgContent":"{\"items\":[{\"id\":\"1\",\"type\":0,\"name\":\"中移杭研实验室清洗设备\",\"ip\":\"10.88.77.15\",\"areaCode\":0,\"manufacturer\":\"DPTech\",\"model\":\"UMC\",\"version\":\"Virtual_Device_1.0.0\",\"readme\":\"实验室测试设备\",\"status\":0,\"message\":\"成功\",\"capacity\":[{\"type\":0,\"disposeIp\":\"192.168.3.2-192.168.3.5,192.168.5.2-192.168.5.10,192.168.4.2-192.168.4.5\",\"tolCapacity\":1024,\"usedCapacity\":0},{\"type\":3,\"disposeIp\":\"192.168.2.1,192.168.2.2\",\"tolCapacity\":0,\"usedCapacity\":0}]},{\"id\":\"123\",\"type\":0,\"status\":19,\"message\":\"没有这个设备\"}]}"
}
```
## 获取能力节点详细信息
<!-- ## 获取能力节点详细信息
+ 请求命令
字段|内容
----|----
@ -879,8 +1130,8 @@
{
"ver": 2,
"cryptoType": 0,
"timeStamp": 1589436408900,
"timeStamp": 1587604359583,
"code": 200,
"msgContent":"{\"items\":[{\"id\":\"1\",\"taskId\":\"60\",\"type\":0,\"disposeIp\":\"192.168.3.2\",\"startTime\":1589421336,\"disposeTime\":120,\"flowDirection\":2,\"attackType\":[0],\"flowBandWidth\":1024,\"flowAttack\":0,\"flowClean\":0,\"status\":0,\"message\":\"成功\"},{\"id\":\"-1\",\"taskId\":\"2\",\"startTime\":0,\"disposeTime\":0,\"status\":30,\"message\":\"没有该任务\"}]}"
}
```
``` -->

View File

@ -5,7 +5,8 @@ dispose.check-protocol-timeout=false
dispose.split_char=,
dispose.request-timeout-second=5
# 是否开启隐私保护
dispose.used-privacy-protect=true
dispose.used-privacy-protect=false
dispose.call-error-retry-times=3
# 分页配置项
# 最大每页数据条数

36
pom.xml
View File

@ -3,27 +3,29 @@
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.9.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.dispose</groupId>
<artifactId>phoenix_ddos_handle</artifactId>
<version>1.0.0</version>
<name>phoenix_ddos_handle</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
<undertow.version>2.1.3.Final</undertow.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.framework.version>2.3.4.RELEASE</spring.framework.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.dispose</groupId>
<artifactId>phoenix_ddos_handle</artifactId>
<version>2.0.1</version>
<name>phoenix_ddos_handle</name>
<description>Dispose Platform</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>${spring.framework.version}</version>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
@ -127,6 +129,7 @@
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.6</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
@ -146,11 +149,6 @@
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>com.cmcc</groupId>
<artifactId>enc.dec</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
@ -212,6 +210,12 @@
<artifactId>jasypt-spring-boot</artifactId>
<version>3.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
</dependencies>
<build>

View File

@ -92,9 +92,6 @@ public class DpTechAbilityImpl implements DisposeAbility {
//读取超时
policy.setReceiveTimeout(DpTechConfigValue.SOAP_RECEIVE_TIMEOUT_SECOND);
conduit.setClient(policy);
// 获取迪普设备防护IP
getDisposeDeviceProtectObject();
}
/**
@ -117,6 +114,11 @@ public class DpTechAbilityImpl implements DisposeAbility {
try {
log.debug("++++Begging DPTech Start Cleanup Task: {}, {}, {} ", ip, attackType, nfDirection);
if (capType != DisposeCapacityType.CLEANUP) {
log.error("----Error DPTech don't support dispose capacity type: {}", capType);
return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, null);
}
NtcRequestResultInfo ret = cleanTypePort.startAbnormalTaskForUMC(ip, attackType,
nfDirection.getValue());
@ -160,6 +162,11 @@ public class DpTechAbilityImpl implements DisposeAbility {
try {
log.info("++++Begging DPTech Stop Cleanup Task: {}, {}, {} ", ip, attackType, nfDirection);
if (capType != DisposeCapacityType.CLEANUP) {
log.error("----Error DPTech don't support dispose capacity type: {}", capType);
return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, null);
}
NtcRequestResultInfo ret = cleanTypePort.stopAbnormalTaskForUMC(ip, attackType,
nfDirection.getValue());
@ -266,16 +273,33 @@ public class DpTechAbilityImpl implements DisposeAbility {
*/
@Override
public boolean isCarryProtectIp(String ipAddr) {
boolean ret = false;
IPAddress addr = new IPAddressString(ipAddr).getAddress();
synchronized (this) {
if (addr.isIPv4()) {
return protectIpV4.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
ret = protectIpV4.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
}
if (addr.isIPv6()) {
return protectIpV6.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
ret = protectIpV6.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
}
}
return false;
if (!ret) {
// 更新迪普设备防护IP
getDisposeDeviceProtectObject();
synchronized (this) {
if (addr.isIPv4()) {
ret = protectIpV4.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
}
if (addr.isIPv6()) {
ret = protectIpV6.stream().anyMatch(v -> Helper.ipInRange(v, ipAddr));
}
}
}
return ret;
}
}

View File

@ -65,28 +65,39 @@ public class HaoHanAbilityImpl implements DisposeAbility {
@Nullable NetflowDirection nfDirection,
@Nullable Integer attackType,
@Nullable Long duration) {
log.info("++++Begging Haohan Start Cleanup Task: {}", ip);
try {
log.info("++++Begging Haohan Start Cleanup Task: {}", ip);
// 适配处置时间参数 -1为不限制处置时间
if (duration == null || duration < 0) {
duration = -1L;
if (capType != DisposeCapacityType.CLEANUP) {
log.error("----Error Haohan don't support dispose capacity type: {}", capType);
return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, null);
}
// 适配处置时间参数 -1为不限制处置时间
if (duration == null || duration < 0) {
duration = -1L;
}
HaoHanStartCleanResp resp = restfulInterface.startClean(this.urlRootPath, ip,
Math.max(duration.intValue(), 0),
DISPOSE_PLATFORM_NAME);
if (resp == null) {
log.error("----Error Haohan start clean {} server return error", ip);
return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
}
if (resp.getState() != ErrorCode.ERR_OK.getCode()) {
log.error("----Error Haohan start clean {} return error: {}, {}", ip, resp.getState(), resp.getMsg());
return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
}
log.debug("----Finish Haohan Start Cleanup Task: {}", ip);
return new MulReturnType<>(ErrorCode.ERR_OK, (long) resp.getCleanTaskId());
} catch (Exception ex) {
log.error("----Exception Haohan Start Cleanup Task: {}, {}, {}", ip, nfDirection, duration);
return new MulReturnType<>(ErrorCode.ERR_SYSTEMEXCEPTION, null);
}
HaoHanStartCleanResp resp = restfulInterface.startClean(this.urlRootPath, ip, Math.max(duration.intValue(), 0),
DISPOSE_PLATFORM_NAME);
if (resp == null) {
log.error("----Error Haohan start clean {} server return error", ip);
return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
}
if (resp.getState() != ErrorCode.ERR_OK.getCode()) {
log.error("----Error Haohan start clean {} return error: {}, {}", ip, resp.getState(), resp.getMsg());
return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
}
log.debug("----Finish Haohan Start Cleanup Task: {}", ip);
return new MulReturnType<>(ErrorCode.ERR_OK, (long) resp.getCleanTaskId());
}
/**
@ -104,22 +115,32 @@ public class HaoHanAbilityImpl implements DisposeAbility {
@Nullable NetflowDirection nfDirection,
@Nullable Integer attackType,
@Nullable Long taskId) {
log.debug("++++Begging Haohan Stop Cleanup Task: {}", taskId);
try {
log.debug("++++Begging Haohan Stop Cleanup Task: {}", taskId);
if (taskId == null) {
return new MulReturnType<>(ErrorCode.ERR_PARAMS, null);
if (capType != DisposeCapacityType.CLEANUP) {
log.error("----Error Haohan don't support dispose capacity type: {}", capType);
return new MulReturnType<>(ErrorCode.ERR_UNSUPPORT, null);
}
if (taskId == null) {
return new MulReturnType<>(ErrorCode.ERR_PARAMS, null);
}
HaoHanStopCleanResp resp = restfulInterface.stopClean(this.urlRootPath, taskId.intValue(),
DISPOSE_PLATFORM_NAME);
if (resp == null) {
log.error("----Error Haohan stop task{} server return error", taskId);
return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
}
log.debug("----Finish Haohan Stop Cleanup Task: {}", taskId);
return new MulReturnType<>(ErrorCode.ERR_OK, null);
} catch (Exception ex) {
log.error("----Exception Haohan Stop Cleanup Task: {}, {}, {}", ip, nfDirection, taskId);
return new MulReturnType<>(ErrorCode.ERR_SYSTEMEXCEPTION, null);
}
HaoHanStopCleanResp resp = restfulInterface.stopClean(this.urlRootPath, taskId.intValue(),
DISPOSE_PLATFORM_NAME);
if (resp == null) {
log.error("----Error Haohan stop task{} server return error", taskId);
return new MulReturnType<>(ErrorCode.ERR_HAOHAN_ERROR, null);
}
log.debug("----Finish Haohan Stop Cleanup Task: {}", taskId);
return new MulReturnType<>(ErrorCode.ERR_OK, null);
}
/**
@ -129,8 +150,14 @@ public class HaoHanAbilityImpl implements DisposeAbility {
*/
@Override
public boolean getDeviceLinkStatus() {
// 获取任务信息接口调用成功认为设备心跳正常
return (restfulInterface.getCleanTaskStatus(this.urlRootPath, -1) != null);
try {
// 获取任务信息接口调用成功认为设备心跳正常
return (restfulInterface.getCleanTaskStatus(this.urlRootPath, -1) != null);
} catch (Exception ex) {
log.error(ex.getMessage());
}
return false;
}
/**
@ -141,18 +168,18 @@ public class HaoHanAbilityImpl implements DisposeAbility {
@Override
public MulReturnType<ErrorCode, DeviceFirewareInfo> 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());
}
/**

View File

@ -6,7 +6,6 @@ package com.dispose.common;
* @author <huangxin@cmhi.chinamoblie.com>
*/
public enum DisposeCapacityType implements BaseEnum {
//1.清洗,2.压制,3.高防
/**
* The Cleanup.
*/

View File

@ -3,7 +3,6 @@ package com.dispose.common;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
/**
* The enum Dp tech attack type.
@ -103,10 +102,13 @@ public enum DpTechAttackType implements BaseEnum {
* @return the long
*/
public static Long formDdosAttackTypeMaks(Long ddosAttackMask) {
return getTypeMaskFromAttackType(DDoSAttackType.maskToDdosAttackType(ddosAttackMask)
.stream()
.flatMap(DpTechAttackType::fromDdosAttackTypeValue)
.distinct().toArray(DpTechAttackType[]::new));
List<DpTechAttackType> dpTechAttackTypes = new ArrayList<>();
for (DDoSAttackType a : DDoSAttackType.maskToDdosAttackType(ddosAttackMask)) {
dpTechAttackTypes.addAll(DpTechAttackType.fromDdosAttackTypeValue(a));
}
return getTypeMaskFromAttackType(dpTechAttackTypes.stream().distinct().toArray(DpTechAttackType[]::new));
}
/**
@ -133,41 +135,34 @@ public enum DpTechAttackType implements BaseEnum {
* @param type the type
* @return the stream
*/
public static Stream<DpTechAttackType> fromDdosAttackTypeValue(DDoSAttackType type) {
public static List<DpTechAttackType> fromDdosAttackTypeValue(DDoSAttackType type) {
List<DpTechAttackType> attackList = new ArrayList<>();
switch (type) {
case HOST_TOTAL_TRAFFIC:
case WIN_NUKE:
case SIP_FLOOD:
case DNS_FLOOD:
case IPV4_PROTOCOL0:
case IP_PRIVATE:
case LAND_FLOOD:
case IGMP_FLOOD:
attackList.add(HOST_TOTAL_TRAFFIC);
break;
case RST_FLOOD:
case FIN_FLOOD:
case SIP_FLOOD:
attackList.add(TCP_FIN_FLOOD);
break;
case SYN_FLOOD:
attackList.add(TCP_SYN_FLOOD);
break;
case ACK_FLOOD:
attackList.add(TCP_ACK_FLOOD);
break;
case TCP_NULL:
case SYN_ACK_AMPLIFICATION:
case TCP_MISUSE:
case FIN_FLOOD:
attackList.add(TCP_SYN_ACK_FLOOD);
break;
case TCP_FRAGMENT:
case WIN_NUKE:
case UDP_FRAGMENT:
case ICMP_FRAGMENT:
case IPV4_PROTOCOL0:
case IP_PRIVATE:
case LAND_FLOOD:
attackList.add(IP_FRAGMENT_FLOOD);
break;
@ -176,11 +171,6 @@ public enum DpTechAttackType implements BaseEnum {
attackList.add(HTTP_FLOOD);
break;
case DNS_FLOOD:
attackList.add(DNS_REPLY_FLOOD);
attackList.add(DNS_QUERY_FLOOD);
break;
case CHARGED_AMPLIFICATION:
case L2TP_AMPLIFICATION:
case MDNS_AMPLIFICATION:
@ -202,7 +192,6 @@ public enum DpTechAttackType implements BaseEnum {
case SENTINEL_AMPLIFICATION:
case FRAGGLE_FLOOD:
case UDP_FLOOD:
case IGMP_FLOOD:
attackList.add(UDP_FLOOD);
break;
@ -219,7 +208,7 @@ public enum DpTechAttackType implements BaseEnum {
break;
}
return attackList.stream();
return attackList;
}
/**

View File

@ -164,7 +164,10 @@ public enum ErrorCode {
* The Err untrusttoken.
*/
ERR_UNTRUSTTOKEN(38, "未经授权的Token"),
/**
* Err unknowninterface error code.
*/
ERR_UNKNOWNINTERFACE(39, "未提供该接口"),
/**
* The Err decrypt base 64.
*/
@ -269,6 +272,7 @@ public enum ErrorCode {
case ERR_INPUTMISS:
return HttpServletResponse.SC_BAD_REQUEST;
case ERR_UNSUPPORT:
case ERR_UNKNOWNINTERFACE:
return HttpServletResponse.SC_METHOD_NOT_ALLOWED;
default:
return HttpServletResponse.SC_INTERNAL_SERVER_ERROR;

View File

@ -290,6 +290,7 @@ public class DisposeDeviceManagerController {
devInfo.setUrlType(v.getUrlType().getValue());
devInfo.setReadme(v.getReadme());
devInfo.setDevStatus(v.getStatus().getValue());
devInfo.setUrlPath(v.getUrlPath());
List<AddCapacityInfo> capList = new ArrayList<>();

View File

@ -99,6 +99,7 @@ public class DisposeInfoController {
.nodeId(areaCode.toString())
.totalNetflow(areaCodeManagerService.getAreaCodeGroupReserveNetflow(areaCode))
.onlineDevices(areaCodeManagerService.getAreaCodeOnlineDeviceNum(areaCode))
.totalDevices(areaCodeManagerService.getAreaCodeTotalDeviceNum(areaCode))
.capacityType(Arrays.stream(areaCodeManagerService.getAreaCodeSupportCapacity(areaCode))
.map(DisposeCapacityType::getValue)
.toArray(Integer[]::new))

View File

@ -45,9 +45,12 @@ import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* The type Dispose task controller.
@ -93,30 +96,30 @@ public class DisposeTaskController {
// 构造处置任务参数
DisposeTask task = DisposeTask.builder()
.deviceId(Long.parseLong(Optional.ofNullable(req.getId()).orElse("-1")))
.accountId(userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization"))
.get(0)))
.disposeCapacity(CommonEnumHandler.codeOf(DisposeCapacityType.class,
req.getType()))
.disposeIp(Helper.ipAddressNormalize(req.getDisposeIp()))
.planEndTime(String.valueOf(req.getDisposeTime()))
.flowDirection(CommonEnumHandler.codeOf(NetflowDirection.class,
Optional.ofNullable(req.getFlowDirection())
.orElse(2)))
.attackType(DDoSAttackType.getTypeMaskFromAttackType(
Optional.ofNullable(req.getAttackType())
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})))
.flowBandWidth(Optional.ofNullable(req.getFlowBandwidth())
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH))
.build();
.deviceId(Long.parseLong(Optional.ofNullable(req.getId()).orElse("-1")))
.accountId(userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization"))
.get(0)))
.disposeCapacity(CommonEnumHandler.codeOf(DisposeCapacityType.class,
req.getType()))
.disposeIp(Helper.ipAddressNormalize(req.getDisposeIp()))
.planEndTime(String.valueOf(req.getDisposeTime()))
.flowDirection(CommonEnumHandler.codeOf(NetflowDirection.class,
Optional.ofNullable(req.getFlowDirection())
.orElse(2)))
.attackType(DDoSAttackType.getTypeMaskFromAttackType(
Optional.ofNullable(req.getAttackType())
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})))
.flowBandWidth(Optional.ofNullable(req.getFlowBandwidth())
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH))
.build();
// 创建处置任务
MulReturnType<ErrorCode, DisposeTask> ret = disposeTaskService.createTask(task);
// 设置返回消息
TaskStartRsp rspInfo = TaskStartRsp.builder()
.disposeIp(task.getDisposeIp())
.build();
.disposeIp(task.getDisposeIp())
.build();
rspInfo.setStatus(ret.getFirstParam().getCode());
rspInfo.setMessage(new String[]{ret.getFirstParam().getMsg()});
@ -154,40 +157,40 @@ public class DisposeTaskController {
DisposeCapacityType capType = CommonEnumHandler.codeOf(DisposeCapacityType.class, req.getType());
String endTime = String.valueOf(req.getDisposeTime());
NetflowDirection netDir = CommonEnumHandler.codeOf(NetflowDirection.class,
Optional.ofNullable(req.getFlowDirection()).orElse(2));
Optional.ofNullable(req.getFlowDirection()).orElse(2));
Long attackType = DDoSAttackType.getTypeMaskFromAttackType(Optional.ofNullable(req.getAttackType())
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()}));
.orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()}));
Integer flowBand = Optional.ofNullable(req.getFlowBandwidth())
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH);
.orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH);
TaskStartMulRsp mulRsp = TaskStartMulRsp.builder()
.items(new ArrayList<>())
.build();
.items(new ArrayList<>())
.build();
for (String ip : req.getMulDisposeIp()) {
// 构造处置任务参数
DisposeTask task = DisposeTask.builder()
.deviceId(devId)
.accountId(aId)
.disposeCapacity(capType)
.disposeIp(Helper.ipAddressNormalize(ip))
.planEndTime(endTime)
.flowDirection(netDir)
.attackType(attackType)
.flowBandWidth(flowBand)
.build();
.deviceId(devId)
.accountId(aId)
.disposeCapacity(capType)
.disposeIp(Helper.ipAddressNormalize(ip))
.planEndTime(endTime)
.flowDirection(netDir)
.attackType(attackType)
.flowBandWidth(flowBand)
.build();
// 创建处置任务
MulReturnType<ErrorCode, DisposeTask> ret = disposeTaskService.createTask(task);
// 设置返回消息
TaskStartRsp rspInfo = TaskStartRsp.builder()
.disposeIp(ip)
.build();
.disposeIp(ip)
.build();
// 启动任务成功
if (ret.getFirstParam() == ErrorCode.ERR_OK ||
ret.getFirstParam() == ErrorCode.ERR_TASKRUNNING) {
ret.getFirstParam() == ErrorCode.ERR_TASKRUNNING) {
rspInfo.setTaskId(ret.getSecondParam().getId().toString());
rspInfo.setExpireTime(ret.getSecondParam().getPlanEndTime());
}
@ -228,13 +231,13 @@ public class DisposeTaskController {
// 停止成功
if (ret.getFirstParam() == ErrorCode.ERR_OK) {
rspInfo.setDisposeDevice(ret.getSecondParam().getDeviceTask().stream()
.map(DeviceTask::getDeviceId)
.map(String::valueOf)
.toArray(String[]::new));
.map(DeviceTask::getDeviceId)
.map(String::valueOf)
.toArray(String[]::new));
rspInfo.setType(ret.getSecondParam().getDisposeCapacity().getValue());
rspInfo.setDisposeIp(ret.getSecondParam().getDisposeIp());
rspInfo.setLeftTime(String.valueOf(Math.abs(
Helper.getTimestampDiffNow(ret.getSecondParam().getPlanEndTime())) / 60));
Helper.getTimestampDiffNow(ret.getSecondParam().getPlanEndTime())) / 60));
}
rspInfo.setTaskId(tId);
@ -256,54 +259,82 @@ public class DisposeTaskController {
@PostMapping("/taskList")
@ResponseBody
@ApiOperation("获取处置任务")
public ProtocolRespDTO<? extends BaseRespStatus> getAllDisposeTask(
@Validated(ValidGroups.ProtocolCommonValid.class)
@RequestBody ProtocolReqDTO<BasePagesGetReq> mr
public ProtocolRespDTO<GetTaskRsp> getAllDisposeTask(
@Validated(ValidGroups.ProtocolCommonValid.class)
@RequestBody ProtocolReqDTO<BasePagesGetReq> mr
) {
GetTaskRsp rspInfo = new GetTaskRsp();
GetTaskRsp rspInfo = GetTaskRsp.builder().build();
List<GetTaskDetail> getTaskDetail = new ArrayList<>();
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> ret =
disposeTaskService.getPageDisposeTask(mr.getMsgContent().getStartPage(),
mr.getMsgContent().getPageSize());
//获取TaskId列表
List<Long> reqTaskIds = Arrays.stream(Optional.ofNullable(mr.getMsgContent().getTaskId()).orElse(new String[]{})).
map(Long::parseLong).collect(Collectors.toList());
// 拼装返回数据
rspInfo.setStatus(ErrorCode.ERR_OK.getCode());
rspInfo.setMessage(new String[]{ErrorCode.ERR_OK.getMsg()});
//获取所有可用处置任务
List<DisposeTask> taskList = disposeTaskService.getAllDisposeTask();
List<Long> idArray = taskList.stream().filter(v -> reqTaskIds.size() == 0 || reqTaskIds.contains(v.getId()))
.map(DisposeTask::getId).collect(Collectors.toList());
// 分页信息
rspInfo.setCurPageNumber(ret.getFirstParam().getPageNum());
rspInfo.setPageSize(ret.getFirstParam().getPageSize());
rspInfo.setTotalItems((int) ret.getFirstParam().getTotal());
rspInfo.setTotalPages(ret.getFirstParam().getPages());
if (idArray.size() > 0) {
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> ret =
disposeTaskService.getPageDisposeTask(idArray,
mr.getMsgContent().getStartPage(),
mr.getMsgContent().getPageSize());
ret.getSecondParam().forEach(v -> {
GetTaskDetail taskDetail = GetTaskDetail.builder()
.taskId(String.valueOf(v.getId()))
.accountId(String.valueOf(v.getAccountId()))
.disposeCapacity(v.getDisposeCapacity().getValue())
.disposeIp(v.getDisposeIp())
.createTime(v.getCreateTime())
.planEndTime(v.getPlanEndTime())
.endTime(v.getEndTime())
.flowDirection(v.getFlowDirection().getValue())
.attackType(v.getAttackType().toString())
.flowBandWidth(v.getFlowBandWidth())
.currentStatus(v.getCurrentStatus().getValue())
.deviceTask(new ArrayList<>())
.build();
v.getDeviceTask().forEach(k -> {
GetDeviceTaskDetail deviceTaskDetail = GetDeviceTaskDetail.builder()
.devTaskId(String.valueOf(k.getId()))
.devId(String.valueOf(k.getDeviceId()))
.externId(String.valueOf(k.getExternId()))
.status(k.getStatus())
.build();
// 分页信息
rspInfo.setCurPageNumber(ret.getFirstParam().getPageNum());
rspInfo.setPageSize(ret.getFirstParam().getPageSize());
rspInfo.setTotalItems((int) ret.getFirstParam().getTotal());
rspInfo.setTotalPages(ret.getFirstParam().getPages());
taskDetail.getDeviceTask().add(deviceTaskDetail);
ret.getSecondParam().forEach(v -> {
GetTaskDetail taskDetail = GetTaskDetail.builder()
.taskId(String.valueOf(v.getId()))
.accountId(String.valueOf(v.getAccountId()))
.disposeCapacity(v.getDisposeCapacity().getValue())
.disposeIp(v.getDisposeIp())
.createTime(v.getCreateTime())
.planEndTime(v.getPlanEndTime())
.endTime(v.getEndTime())
.flowDirection(v.getFlowDirection().getValue())
.attackType(v.getAttackType().toString())
.flowBandWidth(v.getFlowBandWidth())
.currentStatus(v.getCurrentStatus().getValue())
.deviceTask(new ArrayList<>())
.build();
taskDetail.setStatus(ErrorCode.ERR_OK.getCode());
taskDetail.setMessage(new String[]{ErrorCode.ERR_OK.getMsg()});
v.getDeviceTask().forEach(k -> {
GetDeviceTaskDetail deviceTaskDetail = GetDeviceTaskDetail.builder()
.devTaskId(String.valueOf(k.getId()))
.devId(String.valueOf(k.getDeviceId()))
.externId(String.valueOf(k.getExternId()))
.status(k.getStatus())
.build();
taskDetail.getDeviceTask().add(deviceTaskDetail);
});
getTaskDetail.add(taskDetail);
});
}
rspInfo.getItems().add(taskDetail);
});
// 设置不存在taskId的错误码
if (reqTaskIds.stream().anyMatch(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))) {
reqTaskIds.stream()
.filter(v -> taskList.stream().noneMatch(k -> k.getId().equals(v)))
.forEach(v -> {
GetTaskDetail td = GetTaskDetail.builder().build();
td.setTaskId(String.valueOf(v));
td.setStatus(ErrorCode.ERR_NOSUCHTASK.getCode());
td.setMessage(new String[]{ErrorCode.ERR_NOSUCHTASK.getMsg()});
getTaskDetail.add(td);
});
}
// 对返回的信息按照TaskID排序
rspInfo.setItems(getTaskDetail.stream().sorted(Comparator.comparing(GetTaskDetail::getTaskId))
.collect(Collectors.toList()));
return ProtocolRespDTO.result(ErrorCode.ERR_OK, rspInfo);
}

View File

@ -0,0 +1,48 @@
package com.dispose.controller;
import com.dispose.common.ErrorCode;
import com.dispose.exception.ControllerNotSupportException;
import org.springframework.boot.autoconfigure.web.ServerProperties;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* The type Error controller.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@Controller
public class ErrorController extends BasicErrorController {
/**
* Instantiates a new Error controller.
*
* @param serverProperties the server properties
*/
public ErrorController(ServerProperties serverProperties) {
super(new DefaultErrorAttributes(), serverProperties.getError());
}
/**
* Error response entity.
*
* @param request the request
* @return the response entity
*/
@Override
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
HttpStatus status = getStatus(request);
if (status.value() == HttpServletResponse.SC_NOT_FOUND) {
throw new ControllerNotSupportException(ErrorCode.ERR_UNKNOWNINTERFACE);
}
return super.error(request);
}
}

View File

@ -0,0 +1,29 @@
package com.dispose.exception;
import com.dispose.common.ErrorCode;
import lombok.Getter;
import lombok.Setter;
/**
* The type Controller not support exception.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@Getter
@Setter
public class ControllerNotSupportException extends RuntimeException {
/**
* The Err.
*/
private ErrorCode err;
/**
* Instantiates a new Security protocol exception.
*
* @param err the err
*/
public ControllerNotSupportException(ErrorCode err) {
super();
this.err = err;
}
}

View File

@ -61,6 +61,10 @@ public class GlobalExceptionHandler {
return ProtocolRespDTO.result(ErrorCode.ERR_PARAMEXCEPTION,
ErrorCode.ERR_PARAMEXCEPTION.getHttpCode(),
new String[]{((SecurityProtocolException) ex).getErr().getMsg()});
} else if (ex instanceof ControllerNotSupportException) {
return ProtocolRespDTO.result(ErrorCode.ERR_PARAMEXCEPTION,
ErrorCode.ERR_PARAMEXCEPTION.getHttpCode(),
new String[]{((ControllerNotSupportException) ex).getErr().getMsg()});
} else {
return ProtocolRespDTO.result(ErrorCode.ERR_PARAMEXCEPTION,
ErrorCode.ERR_PARAMEXCEPTION.getHttpCode(),

View File

@ -64,13 +64,22 @@ public interface DisposeTaskManager {
*/
DisposeTask getDisposeTaskById(Long taskId);
/**
* Gets dispose task by id.
*
* @return the dispose task list
*/
List<DisposeTask> getDisposeTasks();
/**
* Gets pages of task.
*
* @param taskId the task id
* @param startPage the start page
* @param pageSize the page size
* @return the pages of task
*/
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> getPagesOfTask(Integer startPage,
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> getPagesOfTask(List<Long> taskId,
Integer startPage,
Integer pageSize);
}

View File

@ -2,6 +2,7 @@ package com.dispose.manager.impl;
import com.dispose.common.ErrorCode;
import com.dispose.common.HttpType;
import com.dispose.common.IpAddrType;
import com.dispose.common.ObjectStatus;
import com.dispose.manager.DisposeDeviceManager;
import com.dispose.mapper.DisposeCapacityMapper;
@ -77,7 +78,12 @@ public class DisposeDeviceManagerImpl implements DisposeDeviceManager {
// 添加设备能力信息
if (err == ErrorCode.ERR_OK) {
dev.getDevCapacity().forEach(v -> v.setDeviceId(dev.getId()));
dev.getDevCapacity().forEach(v -> {
v.setDeviceId(dev.getId());
if (v.getIpType() == null) {
v.setIpType(IpAddrType.IPV4_IPV6);
}
});
disposeCapacityMapper.addNewDisposeCapacity(dev.getDevCapacity());
}
@ -108,8 +114,8 @@ public class DisposeDeviceManagerImpl implements DisposeDeviceManager {
Field fdDest = destDev.getClass().getDeclaredField(fdSrc.getName());
fdDest.setAccessible(true);
if (!obj.equals(fdDest.get(destDev))) {
log.debug("Upgrade field [{}] value form [{}] to [{}]",
fdSrc.getName(), fdDest.get(destDev), obj);
log.debug("Upgrade field [{}] value form [{}] to [{}]", fdSrc.getName(), fdDest.get(destDev),
obj);
fdDest.set(destDev, obj);
}
fdDest.setAccessible(false);
@ -151,6 +157,12 @@ public class DisposeDeviceManagerImpl implements DisposeDeviceManager {
return new MulReturnType<>(ErrorCode.ERR_NOSUCHDEVICE, -1L);
}
// 过滤不允许修改的值
dev.setUrlPath(null);
dev.setUserName(null);
dev.setUrlType(null);
dev.setPassword(null);
// 更新值
upgradeDisposeDeviceProperties(tDev, dev);
@ -164,7 +176,12 @@ public class DisposeDeviceManagerImpl implements DisposeDeviceManager {
Long devId = tDev.getId();
if (tDev.getDevCapacity().size() != 0) {
tDev.getDevCapacity().forEach(v -> v.setDeviceId(devId));
tDev.getDevCapacity().forEach(v -> {
v.setDeviceId(dev.getId());
if (v.getIpType() == null) {
v.setIpType(IpAddrType.IPV4_IPV6);
}
});
disposeCapacityMapper.addNewDisposeCapacity(tDev.getDevCapacity());
}
@ -237,7 +254,7 @@ public class DisposeDeviceManagerImpl implements DisposeDeviceManager {
// 获取分页信息
PageInfo<DisposeDevice> pageInfo = new PageInfo<>(devList);
if(devList.size() > 0) {
if (devList.size() > 0) {
// 返回实际数据
List<Long> idArray = devList.stream().map(DisposeDevice::getId).collect(Collectors.toList());
rspList.addAll(disposeDeviceMapper.selectByIdSet(idArray));

View File

@ -109,20 +109,35 @@ public class DisposeTaskManagerImpl implements DisposeTaskManager {
return disposeTaskMapper.getDisposeTaskById(taskId);
}
/**
* Gets dispose task by id.
*
* @return the dispose task list
*/
@Override
public List<DisposeTask> getDisposeTasks() {
return disposeTaskMapper.selectAll();
}
/**
* Gets pages of task.
*
* @param taskId the task id
* @param startPage the start page
* @param pageSize the page size
* @return the pages of task
*/
@Override
public MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> getPagesOfTask(Integer startPage,
public MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> getPagesOfTask(List<Long> taskId,
Integer startPage,
Integer pageSize) {
List<DisposeTask> rspList = new ArrayList<>();
// 设置分页信息
PageHelper.startPage(startPage, pageSize);
List<DisposeTask> taskList = disposeTaskMapper.selectPageAll();
//获取所有可用处置任务
List<DisposeTask> taskList = disposeTaskMapper.selectPageAll().stream().
filter(v->taskId.size() == 0 || taskId.contains(v.getId())).collect(Collectors.toList());
if (taskList == null) {
taskList = new ArrayList<>();

View File

@ -26,7 +26,7 @@ public class AreaInfoDetail {
/**
* The Total netflow.
*/
private Integer totalNetflow;
private Long totalNetflow;
/**
* The Capacity type.
*/
@ -35,4 +35,8 @@ public class AreaInfoDetail {
* The Online devices.
*/
private Integer onlineDevices;
/**
* The Total devices.
*/
private Integer totalDevices;
}

View File

@ -57,5 +57,5 @@ public class AddCapacityInfo {
/**
* The Reserve netflow.
*/
private Integer reserveNetflow;
private Long reserveNetflow;
}

View File

@ -10,6 +10,7 @@ import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import javax.validation.constraints.Size;
/**
* The type Get device req.
@ -22,6 +23,10 @@ import javax.validation.constraints.Positive;
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BasePagesGetReq {
/**
* The Task Id.
*/
private String[] taskId;
/**
* The Start page.
*/

View File

@ -1,10 +1,12 @@
package com.dispose.pojo.dto.protocol.task;
import com.dispose.pojo.dto.protocol.base.BaseRespStatus;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
@ -14,14 +16,15 @@ import java.util.List;
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonPropertyOrder({"taskId", "accountId", "disposeCapacity", "disposeIp", "createTime", "planEndTime", "endTime",
"flowDirection", "attackType", "flowBandWidth", "currentStatus", "deviceTask"})
"flowDirection", "attackType", "flowBandWidth", "currentStatus", "deviceTask", "status", "message"})
@JsonInclude(JsonInclude.Include.NON_NULL)
public class GetTaskDetail {
public class GetTaskDetail extends BaseRespStatus {
/**
* The Task id.

View File

@ -1,12 +1,10 @@
package com.dispose.pojo.dto.protocol.task;
import com.dispose.pojo.dto.protocol.base.BaseRespStatus;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.ArrayList;
import java.util.List;
@ -16,13 +14,12 @@ import java.util.List;
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@JsonPropertyOrder({"curPageNumber", "pageSize", "totalItems", "totalPages", "status", "message", "items"})
@JsonPropertyOrder({"curPageNumber", "pageSize", "totalItems", "totalPages", "items"})
@JsonInclude(JsonInclude.Include.NON_NULL)
public class GetTaskRsp extends BaseRespStatus {
public class GetTaskRsp {
/**
* The Cur page number.

View File

@ -70,5 +70,5 @@ public class DisposeCapacity implements Serializable {
/**
* The Reserve netflow.
*/
private Integer reserveNetflow;
private Long reserveNetflow;
}

View File

@ -25,7 +25,7 @@ public interface AreaCodeManagerService {
* @param areaCode the area code
* @return the area code group reserve netflow
*/
int getAreaCodeGroupReserveNetflow(Integer areaCode);
long getAreaCodeGroupReserveNetflow(Integer areaCode);
/**
* Gets area code online device num.
@ -35,6 +35,14 @@ public interface AreaCodeManagerService {
*/
int getAreaCodeOnlineDeviceNum(Integer areaCode);
/**
* Gets area code total device num.
*
* @param areaCode the area code
* @return the area code total device num
*/
int getAreaCodeTotalDeviceNum(Integer areaCode);
/**
* Gets area code support capacity.
*

View File

@ -38,13 +38,22 @@ public interface DisposeTaskService {
*/
DisposeTask getDisposeTask(Long taskId);
/**
* Gets dispose task.
*
* @return the dispose task list
*/
List<DisposeTask> getAllDisposeTask();
/**
* Gets page dispose task.
*
* @param taskId the task id
* @param startPage the start page
* @param pageSize the page size
* @return the page dispose task
*/
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> getPageDisposeTask(Integer startPage,
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> getPageDisposeTask(List<Long> taskId,
Integer startPage,
Integer pageSize);
}

View File

@ -1,6 +1,7 @@
package com.dispose.service.impl;
import com.dispose.common.DisposeCapacityType;
import com.dispose.common.ObjectStatus;
import com.dispose.pojo.entity.DisposeCapacity;
import com.dispose.pojo.entity.DisposeDevice;
import com.dispose.service.AreaCodeManagerService;
@ -44,7 +45,9 @@ public class AreaCodeManagerServiceImpl implements AreaCodeManagerService {
@Override
public Map<Integer, List<DisposeDevice>> getAreaCodeGroup() {
List<DisposeDevice> disposeDevices = disposeDeviceManagerService.getAllDisposeDevice();
return disposeDevices.stream().collect(Collectors.groupingBy(DisposeDevice::getAreaCode));
return disposeDevices.stream()
.filter(k -> k.getStatus() == ObjectStatus.NORMAL)
.collect(Collectors.groupingBy(DisposeDevice::getAreaCode));
}
/**
@ -54,13 +57,13 @@ public class AreaCodeManagerServiceImpl implements AreaCodeManagerService {
* @return the area code group reserve netflow
*/
@Override
public int getAreaCodeGroupReserveNetflow(Integer areaCode) {
public long getAreaCodeGroupReserveNetflow(Integer areaCode) {
List<DisposeDevice> disposeDevices = disposeDeviceManagerService.getAllDisposeDevice();
return disposeDevices.stream()
.filter(v -> v.getAreaCode().equals(areaCode))
.mapToInt(v -> v.getDevCapacity().stream()
.filter(v -> v.getAreaCode().equals(areaCode) && v.getStatus() == ObjectStatus.NORMAL)
.mapToLong(v -> v.getDevCapacity().stream()
.filter(k -> k.getCapacityType() == DisposeCapacityType.CLEANUP)
.mapToInt(m -> Optional.ofNullable(m.getReserveNetflow()).orElse(0))
.mapToLong(m -> Optional.ofNullable(m.getReserveNetflow()).orElse(0L))
.sum())
.sum();
}
@ -75,13 +78,27 @@ public class AreaCodeManagerServiceImpl implements AreaCodeManagerService {
public int getAreaCodeOnlineDeviceNum(Integer areaCode) {
List<DisposeDevice> disposeDevices = disposeDeviceManagerService.getAllDisposeDevice();
return (int) disposeDevices.stream()
.filter(v -> v.getAreaCode().equals(areaCode))
.filter(v -> v.getAreaCode().equals(areaCode) && v.getStatus() == ObjectStatus.NORMAL)
.filter(k -> disposeAbilityRouterService.getAbilityDevice(k.getId())
.getDb()
.getDeviceLinkStatus())
.count();
}
/**
* Gets area code total device num.
*
* @param areaCode the area code
* @return the area code total device num
*/
@Override
public int getAreaCodeTotalDeviceNum(Integer areaCode) {
List<DisposeDevice> disposeDevices = disposeDeviceManagerService.getAllDisposeDevice();
return (int) disposeDevices.stream()
.filter(v -> v.getAreaCode().equals(areaCode) && v.getStatus() == ObjectStatus.NORMAL)
.count();
}
/**
* Get area code support capacity dispose capacity type [ ].
*
@ -92,7 +109,7 @@ public class AreaCodeManagerServiceImpl implements AreaCodeManagerService {
public DisposeCapacityType[] getAreaCodeSupportCapacity(Integer areaCode) {
List<DisposeDevice> disposeDevices = disposeDeviceManagerService.getAllDisposeDevice();
return disposeDevices.stream()
.filter(v -> v.getAreaCode().equals(areaCode))
.filter(v -> v.getAreaCode().equals(areaCode) && v.getStatus() == ObjectStatus.NORMAL)
.flatMap(k -> k.getDevCapacity().stream()
.map(DisposeCapacity::getCapacityType))
.distinct()

View File

@ -100,6 +100,7 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService {
ret = ai.getDb().stopDispose(disposeTask.getDisposeIp(), disposeTask.getDisposeCapacity(), null, null, null);
if (ret.getFirstParam() == ErrorCode.ERR_OK) {
deviceTaskManager.setAttackTypeStatus(deviceTask.getId(),disposeTask.getFlowDirection(), 0L);
log.info("VIRTUAL_DISPOSE stop task succeed: {}", deviceTask);
} else {
log.error("VIRTUAL_DISPOSE stop task error {}: {}", ret.getFirstParam(), deviceTask);
@ -132,7 +133,7 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService {
deviceTask.getTaskAttackType());
ret = ai.getDb().runDispose(disposeTask.getDisposeIp(), disposeTask.getDisposeCapacity(), null, null,
(long) -Helper.getTimestampDiffNow(disposeTask.getPlanEndTime()));
(long) -(Helper.getTimestampDiffNow(disposeTask.getPlanEndTime()) / 60));
if (ret.getFirstParam() == ErrorCode.ERR_OK) {
// 设置攻击类型任务启动结果
@ -182,6 +183,7 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService {
// 设置任务状态为结束
deviceTaskManager.changeDisposeDeviceTaskInfoStatus(deviceTask.getId(), DisposeTaskStatus.TASK_FINISHED);
deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), 0);
deviceTaskManager.setAttackTypeStatus(deviceTask.getId(),disposeTask.getFlowDirection(), 0L);
} else if (deviceTask.getErrRetry() < DisposeConfigValue.CALL_ERROR_RETRY_TIMES) {
// 记录任务出错重试次数
deviceTaskManager.setTaskErrRetryTimes(deviceTask.getId(), deviceTask.getErrRetry() + 1);

View File

@ -41,14 +41,14 @@ public class DisposeTaskServiceImpl implements DisposeTaskService {
@Override
public MulReturnType<ErrorCode, DisposeTask> createTask(DisposeTask task) {
DisposeTask exitTask = disposeTaskManager.getDisposeTask(task.getDeviceId(),
task.getDisposeIp(), task.getDisposeCapacity());
task.getDisposeIp(), task.getDisposeCapacity());
if (exitTask != null) {
return new MulReturnType<>(ErrorCode.ERR_TASKRUNNING, exitTask);
}
ErrorCode err = disposeAbilityRouterService.verifyDisposeCapacity(
task.getDeviceId(), task.getDisposeIp(), task.getDisposeCapacity()
task.getDeviceId(), task.getDisposeIp(), task.getDisposeCapacity()
);
if (err != ErrorCode.ERR_OK) {
@ -56,7 +56,7 @@ public class DisposeTaskServiceImpl implements DisposeTaskService {
}
return new MulReturnType<>(disposeTaskManager.addDisposeTask(task),
disposeTaskManager.getDisposeTaskById(task.getId()));
disposeTaskManager.getDisposeTaskById(task.getId()));
}
/**
@ -95,6 +95,15 @@ public class DisposeTaskServiceImpl implements DisposeTaskService {
return disposeTaskManager.getDisposeTaskById(taskId);
}
/**
* Gets dispose task.
*
* @return the dispose task list
*/
public List<DisposeTask> getAllDisposeTask() {
return disposeTaskManager.getDisposeTasks();
}
/**
* Gets page dispose task.
*
@ -103,8 +112,9 @@ public class DisposeTaskServiceImpl implements DisposeTaskService {
* @return the page dispose task
*/
@Override
public MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> getPageDisposeTask(Integer startPage,
public MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> getPageDisposeTask(List<Long> taskId,
Integer startPage,
Integer pageSize) {
return disposeTaskManager.getPagesOfTask(startPage, pageSize);
return disposeTaskManager.getPagesOfTask(taskId, startPage, pageSize);
}
}

View File

@ -60,7 +60,6 @@ public class ValidAddCapacityInfoImpl implements ConstraintValidator<ValidAddCap
*/
@Override
public boolean isValid(AddCapacityInfo addCapacityInfo, ConstraintValidatorContext ctx) {
int sum = 0;
boolean ret = true;
if (addCapacityInfo == null || addCapacityInfo.getCapacityType() == null) {
@ -93,14 +92,10 @@ public class ValidAddCapacityInfoImpl implements ConstraintValidator<ValidAddCap
for (String s : addCapacityInfo.getProtectIp().split(DisposeConfigValue.SPLIT_CHAR)) {
if (!Pattern.matches(ConstValue.IP_ADDR_SEGMENT_REG, s.replace(" ", ""))) {
errMsg.add("字段 protectIp 包含非法值: " + s);
sum += 1;
ret = false;
break;
}
}
if(sum > 0){
ret = false;
}
}
if (addCapacityInfo.getReserveNetflow() == null) {

View File

@ -7,6 +7,7 @@ import com.dispose.mapper.UserAccountMapper;
import com.dispose.pojo.entity.UserAccount;
import com.dispose.pojo.po.MulReturnType;
import com.dispose.service.UserAccountService;
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.test.context.ActiveProfiles;
@ -23,7 +24,8 @@ import java.util.Optional;
*/
@Data
@Slf4j
@ActiveProfiles("test,dispose")
@EnableEncryptableProperties
@ActiveProfiles({"test", "dispose"})
public class CommonEnvironment {
/**

View File

@ -7,6 +7,7 @@ import com.dispose.common.ProtoCryptoType;
import com.dispose.pojo.dto.protocol.base.ProtocolRespDTO;
import com.dispose.pojo.po.MulReturnType;
import com.dispose.service.UserAccountService;
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
@ -24,7 +25,8 @@ import javax.annotation.Resource;
*/
@Slf4j
@Getter
@ActiveProfiles("test,dispose")
@EnableEncryptableProperties
@ActiveProfiles({"test", "dispose"})
public class InitTestEnvironment {
/**
* The constant HTTP_CONNECT_TIMEOUT.
@ -48,14 +50,6 @@ public class InitTestEnvironment {
@Resource
private UserAccountService userAccountService;
/**
* Init global value.
*/
@PostConstruct
public void initGlobalValue() {
DisposeConfigValue.ENABLE_UTEST_MOCK = true;
}
/**
* Init virtual device.
*/
@ -64,6 +58,14 @@ public class InitTestEnvironment {
log.warn("Current Used Virtual Dispose Device");
}
/**
* Init global value.
*/
@PostConstruct
public void initGlobalValue() {
DisposeConfigValue.ENABLE_UTEST_MOCK = true;
}
/**
* User login.
*
@ -98,7 +100,7 @@ public class InitTestEnvironment {
// 检查请求是否超时
if (DisposeConfigValue.CHECK_PROTO_REQUEST_TIMEOUT) {
Assert.assertFalse(Math.abs(System.currentTimeMillis() - proObject.getTimeStamp())
>= DisposeConfigValue.REQUEST_TIMEOUT_MS);
>= DisposeConfigValue.REQUEST_TIMEOUT_MS);
}
// 检查加密方式

View File

@ -101,6 +101,8 @@ public class DisposeInfoControllerTest extends InitTestEnvironment {
Assert.assertNotNull(v.getNodeId());
Assert.assertNotNull(v.getTotalNetflow());
Assert.assertNotNull(v.getOnlineDevices());
Assert.assertNotNull(v.getTotalDevices());
Assert.assertTrue((v.getTotalDevices()-v.getOnlineDevices())>=0);
Assert.assertNotNull(v.getCapacityType());
});
}

View File

@ -46,6 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@ -347,7 +348,9 @@ public class DisposeTaskControllerTest extends InitTestEnvironment {
*/
@Test
public void a5_getAllDisposeTask() throws Exception {
String[] taskId = {};
BasePagesGetReq req = BasePagesGetReq.builder()
.taskId(taskId)
.startPage(1)
.pageSize(20)
.build();
@ -379,9 +382,9 @@ public class DisposeTaskControllerTest extends InitTestEnvironment {
Assert.assertNotNull(rspInfo.getMsgContent());
Assert.assertTrue(rspInfo.getMsgContent().getCurPageNumber() <= req.getPageSize());
Assert.assertEquals(rspInfo.getMsgContent().getPageSize(), req.getPageSize());
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> result = disposeTaskService.getPageDisposeTask(req.getStartPage(), req.getPageSize());
List<Long> taskIds = Arrays.stream(req.getTaskId()).map(Long::parseLong).collect(Collectors.toList());
MulReturnType<PageInfo<DisposeTask>, List<DisposeTask>> result = disposeTaskService.getPageDisposeTask(taskIds, req.getStartPage(), req.getPageSize());
Assert.assertTrue(rspInfo.getMsgContent().getTotalItems() >= result.getSecondParam().size());
}
}

View File

@ -1,34 +0,0 @@
package com.dispose.test.dev.function;
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import lombok.extern.slf4j.Slf4j;
import org.jasypt.encryption.StringEncryptor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableEncryptableProperties
@Configuration
@Slf4j
public class CryptoConfigureFile {
@Resource
private StringEncryptor encryptor;
@Test
public void t1_jasyptEncrypt() {
String srcTest = "root";
String enText = encryptor.encrypt(srcTest);
String deTest = encryptor.decrypt(enText);
log.info("Src: {}", srcTest);
log.info("Encrypt: {}", enText);
log.info("Decrypt: {}", deTest);
}
}

View File

@ -1,29 +1,42 @@
package com.dispose.test.dev.manager;
import com.dispose.test.dev.Global.InitTestEnvironment;
import lombok.extern.slf4j.Slf4j;
import org.junit.FixMethodOrder;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
/**
* The type Dispose device manager test.
*
* @author <huangxin@cmhi.chinamoblie.com>
*/
@RunWith(SpringRunner.class)
@Slf4j
@SpringBootTest
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
@Transactional
@Rollback
public class DeviceTaskManagerTest extends InitTestEnvironment {
//package com.dispose.test.dev.manager;
//
//import com.dispose.common.DisposeTaskStatus;
//import com.dispose.common.NetflowDirection;
//import com.dispose.manager.DeviceTaskManager;
//import com.dispose.mapper.DeviceTaskMapper;
//import com.dispose.mapper.DisposeTaskMapper;
//import com.dispose.pojo.entity.DeviceTask;
//import com.dispose.test.dev.Global.InitTestEnvironment;
//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import lombok.extern.slf4j.Slf4j;
//import org.junit.Assert;
//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.annotation.DirtiesContext;
//import org.springframework.test.annotation.Rollback;
//import org.springframework.test.context.junit4.SpringRunner;
//import org.springframework.transaction.annotation.Transactional;
//
//import javax.annotation.Resource;
//import java.util.List;
//
///**
// * The type Dispose device manager test.
// *
// * @author <huangxin@cmhi.chinamoblie.com>
// */
//@RunWith(SpringRunner.class)
//@Slf4j
//@SpringBootTest
//@FixMethodOrder(MethodSorters.NAME_ASCENDING)
//@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
//@Transactional
//@Rollback
//public class DeviceTaskManagerTest extends InitTestEnvironment {
// /**
// * The Object mapper.
// */
@ -249,4 +262,4 @@ public class DeviceTaskManagerTest extends InitTestEnvironment {
// Assert.assertNotNull(deviceTask);
// });
// }
}
//}

View File

@ -76,8 +76,6 @@ public interface TestCaseRun {
Collections.addAll(tolTestCase, P2TaskStop.getTestCase());
Collections.addAll(tolTestCase, P2TaskList.getTestCase());
Collections.addAll(tolTestCase, ProtocolSecurity.getTestCase());
Collections.addAll(tolTestCase, CodeCoverage.getTestCase());

View File

@ -56,7 +56,11 @@ public class CodeCoverage {
.rspClass(GetTaskRsp.class)
.rspCode(ErrorCode.ERR_PARAMEXCEPTION)
.autoLogin(true)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) CodeCoverage::verifyJsonExceptionResp)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) (v, e, c) -> {
Assert.assertNotNull(v);
Assert.assertNotNull(v.getMsgContent());
Assert.assertEquals((long) v.getCode(), e.getHttpCode());
})
.prepareCallback(c -> SecurityConfigValue.SECURITY_PROTOCOL_TYPE = ProtoCryptoType.CRYPTO_AES128.getCode())
.build(),
};

View File

@ -207,8 +207,8 @@ public class P1All {
Assert.assertEquals(dev.getManufacturer(), "DPTech");
Assert.assertEquals(dev.getModel(), "UMC");
Assert.assertEquals(dev.getVersion(), "5.7.13");
Assert.assertEquals(dev.getUserName(), "test");
Assert.assertEquals(dev.getPassword(), "testpassword");
// Assert.assertEquals(dev.getUserName(), "test");
// Assert.assertEquals(dev.getPassword(), "testpassword");
dev.getDevCapacity()
.stream()
@ -305,7 +305,7 @@ public class P1All {
.priority(TestPriority.P1_PRIORITY)
.urlPath("/task/taskList")
.method(RequestMethod.POST)
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":{\"startPage\":1," +
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":{\"taskId\":[],\"startPage\":1," +
"\"pageSize\":10}}")
.rspClass(GetTaskRsp.class)
.rspCode(ErrorCode.ERR_OK)
@ -314,9 +314,9 @@ public class P1All {
Assert.assertNotNull(v);
Assert.assertNotNull(v.getMsgContent());
Assert.assertEquals((long)v.getCode(), e.getHttpCode());
Assert.assertEquals((long) v.getMsgContent().getStatus(), e.getCode());
//Assert.assertEquals((long) v.getMsgContent().getStatus(), e.getCode());
Assert.assertEquals((long) v.getMsgContent().getCurPageNumber(), 1);
Assert.assertEquals((long) v.getMsgContent().getPageSize(), 10);
// Assert.assertEquals((long) v.getMsgContent().getPageSize(), 10);
Assert.assertNotEquals(v.getMsgContent().getItems().size(), 0);
})
.build(),

View File

@ -1,10 +1,8 @@
package com.dispose.test.testcase.qa.v200;
import com.dispose.common.CommonEnumHandler;
import com.dispose.common.DisposeCapacityType;
import com.dispose.common.DisposeDeviceType;
import com.dispose.common.ErrorCode;
import com.dispose.common.HttpType;
import com.dispose.pojo.dto.protocol.base.ProtocolRespDTO;
import com.dispose.pojo.dto.protocol.device.manager.CommDeviceListRsp;
import com.dispose.pojo.entity.DisposeDevice;
@ -991,34 +989,34 @@ public class P2DeviceUpgrade {
Assert.assertNotNull(dev);
if (deviceType == DisposeDeviceType.DPTECH_UMC) {
Assert.assertEquals(dev.getUserName(), fixItems.getOrDefault("userName", "admin"));
//Assert.assertEquals(dev.getUserName(), fixItems.getOrDefault("userName", "admin"));
Assert.assertEquals(dev.getDeviceType(), DisposeDeviceType.DPTECH_UMC);
Assert.assertEquals(dev.getManufacturer(), "DPTech");
Assert.assertEquals(dev.getVersion(), fixItems.getOrDefault("version", "5.7.13"));
Assert.assertEquals(dev.getDeviceName(), fixItems.getOrDefault("deviceName", "中移杭研实验室迪普清洗设备"));
Assert.assertEquals(dev.getUrlPath(), fixItems.getOrDefault("urlPath", "UMC/service" +
"/AbnormalFlowCleaningService"));
//Assert.assertEquals(dev.getUrlPath(), fixItems.getOrDefault("urlPath", "UMC/service" +
// "/AbnormalFlowCleaningService"));
} else if (deviceType == DisposeDeviceType.VIRTUAL_DISPOSE) {
Assert.assertEquals(dev.getUserName(), fixItems.getOrDefault("userName", "test"));
//Assert.assertEquals(dev.getUserName(), fixItems.getOrDefault("userName", "test"));
Assert.assertEquals(dev.getDeviceType(), DisposeDeviceType.VIRTUAL_DISPOSE);
Assert.assertEquals(dev.getManufacturer(), "Virtual");
Assert.assertEquals(dev.getVersion(), fixItems.getOrDefault("version", "5.7.13"));
Assert.assertEquals(dev.getDeviceName(), fixItems.getOrDefault("deviceName", "中移杭研实验室虚拟清洗设备"));
Assert.assertEquals(dev.getUrlPath(), fixItems.getOrDefault("urlPath", "UMC/service/"));
//Assert.assertEquals(dev.getUrlPath(), fixItems.getOrDefault("urlPath", "UMC/service/"));
}
Assert.assertEquals(dev.getReadme(), "实验室测试设备");
Assert.assertEquals((long) dev.getAreaCode(), Long.parseLong(fixItems.getOrDefault("areaCode", "0")));
Assert.assertEquals(dev.getModel(), fixItems.getOrDefault("model", "UMC"));
Assert.assertEquals(dev.getPassword(), fixItems.getOrDefault("password", "testpassword"));
//Assert.assertEquals(dev.getPassword(), fixItems.getOrDefault("password", "testpassword"));
if (fixItems.containsKey("urlType")) {
Assert.assertEquals(dev.getUrlType(),
CommonEnumHandler.codeOf(HttpType.class, Integer.parseInt(fixItems.get("urlType"))));
} else {
Assert.assertEquals(dev.getUrlType(), HttpType.HTTP);
}
// if (fixItems.containsKey("urlType")) {
// Assert.assertEquals(dev.getUrlType(),
// CommonEnumHandler.codeOf(HttpType.class, Integer.parseInt(fixItems.get("urlType"))));
// } else {
// Assert.assertEquals(dev.getUrlType(), HttpType.HTTP);
// }
return dev;

View File

@ -63,6 +63,8 @@ public class P2Info {
Assert.assertNotNull(k.getCapacityType());
Assert.assertNotEquals(k.getCapacityType().length, 0);
Assert.assertNotNull(k.getOnlineDevices());
Assert.assertNotNull(k.getTotalDevices());
Assert.assertTrue((k.getTotalDevices()-k.getOnlineDevices())>=0);
});
})
.prepareCallback(P2Info::prepareDisposeDevice)
@ -349,7 +351,7 @@ public class P2Info {
.objectType(DisposeObjectType.IP)
.ipType(IpAddrType.IPV4_IPV6)
.protectIp("0.0.0.0")
.reserveNetflow(30)
.reserveNetflow(30L)
.build()
);

View File

@ -33,7 +33,7 @@ public class P2TaskList {
.priority(TestPriority.P2_PRIORITY)
.urlPath("/task/taskList")
.method(RequestMethod.POST)
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":{\"startPage\":2," +
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":{\"taskId\":[], \"startPage\":2," +
"\"pageSize\":20}}")
.rspClass(GetTaskRsp.class)
.rspCode(ErrorCode.ERR_OK)
@ -43,9 +43,9 @@ public class P2TaskList {
Assert.assertNotNull(v);
Assert.assertNotNull(v.getMsgContent());
Assert.assertEquals((long) v.getCode(), e.getHttpCode());
Assert.assertEquals((long) v.getMsgContent().getStatus(), e.getCode());
//Assert.assertEquals((long) v.getMsgContent().getStatus(), e.getCode());
Assert.assertEquals((long) v.getMsgContent().getCurPageNumber(), 2);
Assert.assertEquals((long) v.getMsgContent().getCurPageNumber(), 1);
Assert.assertEquals((long)v.getMsgContent().getPageSize(), 20);
Assert.assertNotNull(v.getMsgContent().getItems());
@ -74,7 +74,7 @@ public class P2TaskList {
Assert.assertNotNull(v);
Assert.assertNotNull(v.getMsgContent());
Assert.assertEquals((long) v.getCode(), e.getHttpCode());
Assert.assertEquals((long) v.getMsgContent().getStatus(), e.getCode());
//Assert.assertEquals((long) v.getMsgContent().getStatus(), e.getCode());
})
.build(),
};

View File

@ -257,18 +257,22 @@ public class P3All {
.verifyCallback((VerifyProtoRespCallback<TaskStopRsp>) P3All::verifyJsonExceptionResp)
.build(),
QATestItem.builder()
.id(BASE_P3_ALL_ID + 18)
.name("msgContent为null")
.priority(TestPriority.P3_PRIORITY)
.urlPath("/task/taskList")
.method(RequestMethod.POST)
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":null}")
.rspClass(GetTaskRsp.class)
.rspCode(ErrorCode.ERR_PARAMEXCEPTION)
.autoLogin(true)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) P3All::verifyJsonExceptionResp)
.build(),
QATestItem.builder()
.id(BASE_P3_ALL_ID + 18)
.name("msgContent为null")
.priority(TestPriority.P3_PRIORITY)
.urlPath("/task/taskList")
.method(RequestMethod.POST)
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":null}")
.rspClass(GetTaskRsp.class)
.rspCode(ErrorCode.ERR_PARAMEXCEPTION)
.autoLogin(true)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) (v, e, c) -> {
Assert.assertNotNull(v);
Assert.assertNotNull(v.getMsgContent());
Assert.assertEquals((long) v.getCode(), e.getHttpCode());
})
.build(),
QATestItem.builder()
.id(BASE_P3_ALL_ID + 19)
@ -277,11 +281,15 @@ public class P3All {
.urlPath("/task/taskList")
.method(RequestMethod.POST)
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234," +
"\"msgContent\":{\"startPage\":null,\"pageSize\":10}}")
"\"msgContent\":{\"taskId\":[],\"startPage\":null,\"pageSize\":10}}")
.rspClass(GetTaskRsp.class)
.rspCode(ErrorCode.ERR_PARAMEXCEPTION)
.autoLogin(true)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) P3All::verifyJsonExceptionResp)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) (v, e, c) -> {
Assert.assertNotNull(v);
Assert.assertNotNull(v.getMsgContent());
Assert.assertEquals((long) v.getCode(), e.getHttpCode());
})
.build(),
QATestItem.builder()
@ -291,11 +299,15 @@ public class P3All {
.urlPath("/task/taskList")
.method(RequestMethod.POST)
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234," +
"\"msgContent\":{\"startPage\":\"1\",\"pageSize\":10}}")
"\"msgContent\":{\"taskId\":[],\"startPage\":\"1\",\"pageSize\":10}}")
.rspClass(GetTaskRsp.class)
.rspCode(ErrorCode.ERR_PARAMEXCEPTION)
.autoLogin(true)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) P3All::verifyJsonExceptionResp)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) (v, e, c) -> {
Assert.assertNotNull(v);
Assert.assertNotNull(v.getMsgContent());
Assert.assertEquals((long) v.getCode(), e.getHttpCode());
})
.build(),
QATestItem.builder()
@ -304,12 +316,16 @@ public class P3All {
.priority(TestPriority.P3_PRIORITY)
.urlPath("/task/taskList")
.method(RequestMethod.POST)
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":{\"startPage\":1," +
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":{\"taskId\":[],\"startPage\":1," +
"\"pageSize\":null}}")
.rspClass(GetTaskRsp.class)
.rspCode(ErrorCode.ERR_PARAMEXCEPTION)
.autoLogin(true)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) P3All::verifyJsonExceptionResp)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) (v, e, c) -> {
Assert.assertNotNull(v);
Assert.assertNotNull(v.getMsgContent());
Assert.assertEquals((long) v.getCode(), e.getHttpCode());
})
.build(),
QATestItem.builder()
@ -318,12 +334,16 @@ public class P3All {
.priority(TestPriority.P3_PRIORITY)
.urlPath("/task/taskList")
.method(RequestMethod.POST)
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":{\"startPage\":1," +
.caseJsonValue("{\"ver\":3,\"cryptoType\":0,\"timeStamp\":1598596065234,\"msgContent\":{\"taskId\":[],\"startPage\":1," +
"\"pageSize\":\"10\"}}")
.rspClass(GetTaskRsp.class)
.rspCode(ErrorCode.ERR_PARAMEXCEPTION)
.autoLogin(true)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) P3All::verifyJsonExceptionResp)
.verifyCallback((VerifyProtoRespCallback<GetTaskRsp>) (v, e, c) -> {
Assert.assertNotNull(v);
Assert.assertNotNull(v.getMsgContent());
Assert.assertEquals((long) v.getCode(), e.getHttpCode());
})
.build(),
};