2023-04-26 18:06:57 +08:00
|
|
|
|
import Mock from 'mockjs'
|
2023-06-02 14:26:22 +08:00
|
|
|
|
const urlAndVersion = BASE_CONFIG.baseUrl + BASE_CONFIG.apiVersion
|
2023-04-26 18:06:57 +08:00
|
|
|
|
const openMock = true
|
|
|
|
|
|
if (openMock) {
|
2023-06-02 14:26:22 +08:00
|
|
|
|
Mock.mock(new RegExp(urlAndVersion + '/entity/detail/traffic/throughput.*'), 'get', function (requestObj) {
|
2023-04-26 18:06:57 +08:00
|
|
|
|
const titleList = ['totalBitsRate', 'inboundBitsRate', 'outboundBitsRate', 'internalBitsRate', 'throughBitsRate', 'other']
|
|
|
|
|
|
const arr = [{ type: 'Bits/s' }, { type: 'Packets/s' }, { type: 'Sessions/s' }]
|
|
|
|
|
|
|
2023-04-27 15:30:49 +08:00
|
|
|
|
const endTime = JSON.parse(getQuery(requestObj.url).endTime)
|
|
|
|
|
|
let step = 0
|
2023-04-26 18:06:57 +08:00
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
|
|
|
|
for (const j in titleList) {
|
|
|
|
|
|
let startTime = JSON.parse(getQuery(requestObj.url).startTime)
|
2023-04-27 15:30:49 +08:00
|
|
|
|
step = (endTime - startTime) / 100 // 每条数据的时间间隔
|
|
|
|
|
|
|
2023-04-26 18:06:57 +08:00
|
|
|
|
const values = []
|
|
|
|
|
|
let max = 2975
|
|
|
|
|
|
let min = 0
|
|
|
|
|
|
if (titleList[j] === 'totalBitsRate') {
|
|
|
|
|
|
max = 4462975
|
|
|
|
|
|
min = 1162975
|
|
|
|
|
|
}
|
|
|
|
|
|
for (let i = 0; i < 101; i++) {
|
|
|
|
|
|
const random = Math.floor(Math.random() * (max - min) + min)
|
|
|
|
|
|
values.push([startTime, random])
|
2023-04-27 15:30:49 +08:00
|
|
|
|
startTime += step
|
2023-04-26 18:06:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const newValues = JSON.parse(JSON.stringify(values))
|
|
|
|
|
|
const sortArr = newValues.sort((a, b) => a[1] - b[1])
|
|
|
|
|
|
const maxAnalysis = Math.floor(sortArr[sortArr.length - 1][1])
|
|
|
|
|
|
let avg = 0
|
|
|
|
|
|
let sum = 0
|
|
|
|
|
|
newValues.forEach((item) => {
|
|
|
|
|
|
sum += item[1]
|
|
|
|
|
|
})
|
|
|
|
|
|
avg = JSON.parse(sum / newValues.length)
|
|
|
|
|
|
|
|
|
|
|
|
const analysis = {
|
|
|
|
|
|
avg: avg,
|
|
|
|
|
|
max: maxAnalysis,
|
|
|
|
|
|
min: Math.floor(sortArr[0][1]),
|
|
|
|
|
|
p95: maxAnalysis * 0.95 // 模拟值,p95并未最大值的95%
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Metric为Packets/s时,没有other的tab选项
|
|
|
|
|
|
if (arr[i].type === 'Packets/s' && titleList[j] === 'other') {
|
|
|
|
|
|
analysis.avg = 0
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (arr[i].type === 'Sessions/s') {
|
|
|
|
|
|
// Metric为Sessions/s时,只有total选项,故total填充数据完毕终止循环,节省性能
|
|
|
|
|
|
arr[i].totalBitsRate = { values: values, analysis: analysis }
|
|
|
|
|
|
break
|
|
|
|
|
|
} else {
|
|
|
|
|
|
arr[i][titleList[j]] = { values: values, analysis: analysis }
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
msg: 'success',
|
|
|
|
|
|
code: 200,
|
|
|
|
|
|
data: {
|
|
|
|
|
|
result: arr
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
2023-06-02 14:26:22 +08:00
|
|
|
|
Mock.mock(new RegExp(urlAndVersion + '/entity/detail/event/security.*'), 'get', function (requestObj) {
|
2023-05-05 14:49:59 +08:00
|
|
|
|
const result = [
|
|
|
|
|
|
{
|
|
|
|
|
|
eventId: '1298414830886991872',
|
|
|
|
|
|
securityType: 'command and control',
|
|
|
|
|
|
domain: null,
|
|
|
|
|
|
offenderIp: '213.186.33.5',
|
|
|
|
|
|
victimIp: '116.178.217.92',
|
|
|
|
|
|
offenderDomain: 'baidu.com',
|
|
|
|
|
|
victimDomain: 'mi.com',
|
2023-06-06 10:39:42 +08:00
|
|
|
|
eventSeverity: 'critical',
|
2023-05-05 14:49:59 +08:00
|
|
|
|
malwareName: 'NetWire RC',
|
2023-05-05 15:23:17 +08:00
|
|
|
|
cryptominingPool: null,
|
|
|
|
|
|
startTime: 1683186600,
|
|
|
|
|
|
durationMs: 300000,
|
|
|
|
|
|
endTime: 1683186900
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
eventId: '1298414830886991873',
|
|
|
|
|
|
securityType: 'command and control',
|
|
|
|
|
|
domain: null,
|
|
|
|
|
|
offenderIp: '213.186.33.5',
|
|
|
|
|
|
victimIp: '116.178.217.93',
|
|
|
|
|
|
offenderDomain: 'baidu.com',
|
|
|
|
|
|
victimDomain: 'mi.com',
|
2023-06-06 10:39:42 +08:00
|
|
|
|
eventSeverity: 'low',
|
2023-05-05 15:23:17 +08:00
|
|
|
|
malwareName: 'NetWire RC',
|
|
|
|
|
|
cryptominingPool: null,
|
|
|
|
|
|
startTime: 1683186600,
|
|
|
|
|
|
durationMs: 300000,
|
|
|
|
|
|
endTime: 1683186900
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
eventId: '1298414830886991873',
|
|
|
|
|
|
securityType: 'command and control',
|
|
|
|
|
|
domain: null,
|
|
|
|
|
|
offenderIp: '213.186.33.5',
|
|
|
|
|
|
victimIp: '116.178.217.93',
|
|
|
|
|
|
offenderDomain: 'baidu.com',
|
|
|
|
|
|
victimDomain: 'mi.com',
|
2023-06-06 10:39:42 +08:00
|
|
|
|
eventSeverity: 'low',
|
2023-05-05 15:23:17 +08:00
|
|
|
|
malwareName: 'NetWire RC',
|
|
|
|
|
|
cryptominingPool: null,
|
|
|
|
|
|
startTime: 1683186600,
|
|
|
|
|
|
durationMs: 300000,
|
|
|
|
|
|
endTime: 1683186900
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
eventId: '1298414830886991873',
|
|
|
|
|
|
securityType: 'command and control',
|
|
|
|
|
|
domain: null,
|
|
|
|
|
|
offenderIp: '213.186.33.5',
|
|
|
|
|
|
victimIp: '116.178.217.93',
|
|
|
|
|
|
offenderDomain: 'baidu.com',
|
|
|
|
|
|
victimDomain: 'mi.com',
|
2023-06-06 10:39:42 +08:00
|
|
|
|
eventSeverity: 'low',
|
2023-05-05 15:23:17 +08:00
|
|
|
|
malwareName: 'NetWire RC',
|
|
|
|
|
|
cryptominingPool: null,
|
|
|
|
|
|
startTime: 1683186600,
|
|
|
|
|
|
durationMs: 300000,
|
|
|
|
|
|
endTime: 1683186900
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
eventId: '1298414830886991873',
|
|
|
|
|
|
securityType: 'command and control',
|
|
|
|
|
|
domain: null,
|
|
|
|
|
|
offenderIp: '213.186.33.5',
|
|
|
|
|
|
victimIp: '116.178.217.93',
|
|
|
|
|
|
offenderDomain: 'baidu.com',
|
|
|
|
|
|
victimDomain: 'mi.com',
|
2023-06-06 10:39:42 +08:00
|
|
|
|
eventSeverity: 'low',
|
2023-05-05 15:23:17 +08:00
|
|
|
|
malwareName: 'NetWire RC',
|
|
|
|
|
|
cryptominingPool: null,
|
|
|
|
|
|
startTime: 1683186600,
|
|
|
|
|
|
durationMs: 300000,
|
|
|
|
|
|
endTime: 1683186900
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
eventId: '1298414830886991873',
|
|
|
|
|
|
securityType: 'command and control',
|
|
|
|
|
|
domain: null,
|
|
|
|
|
|
offenderIp: '213.186.33.5',
|
|
|
|
|
|
victimIp: '116.178.217.93',
|
|
|
|
|
|
offenderDomain: 'baidu.com',
|
|
|
|
|
|
victimDomain: 'mi.com',
|
2023-06-06 10:39:42 +08:00
|
|
|
|
eventSeverity: 'low',
|
2023-05-05 15:23:17 +08:00
|
|
|
|
malwareName: 'NetWire RC',
|
2023-05-05 14:49:59 +08:00
|
|
|
|
cryptominingPool: null,
|
|
|
|
|
|
startTime: 1683186600,
|
|
|
|
|
|
durationMs: 300000,
|
|
|
|
|
|
endTime: 1683186900
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
eventId: '1298414830886991873',
|
|
|
|
|
|
securityType: 'command and control',
|
|
|
|
|
|
domain: null,
|
|
|
|
|
|
offenderIp: '213.186.33.5',
|
|
|
|
|
|
victimIp: '116.178.217.93',
|
|
|
|
|
|
offenderDomain: 'baidu.com',
|
|
|
|
|
|
victimDomain: 'mi.com',
|
2023-06-06 10:39:42 +08:00
|
|
|
|
eventSeverity: 'low',
|
2023-05-05 14:49:59 +08:00
|
|
|
|
malwareName: 'NetWire RC',
|
|
|
|
|
|
cryptominingPool: null,
|
|
|
|
|
|
startTime: 1683186600,
|
|
|
|
|
|
durationMs: 300000,
|
|
|
|
|
|
endTime: 1683186900
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
msg: 'success',
|
|
|
|
|
|
code: 200,
|
|
|
|
|
|
data: {
|
|
|
|
|
|
result: result
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
2023-06-02 14:26:22 +08:00
|
|
|
|
Mock.mock(new RegExp(urlAndVersion + '/entity/detail/event/performance.*'), 'get', function (requestObj) {
|
2023-05-05 14:49:59 +08:00
|
|
|
|
const result = [
|
|
|
|
|
|
{
|
|
|
|
|
|
eventId: '1308078720390412288',
|
|
|
|
|
|
entityType: 'ip',
|
|
|
|
|
|
serverIp: '116.178.78.180',
|
|
|
|
|
|
domain: null,
|
|
|
|
|
|
appName: null,
|
2023-06-06 10:39:42 +08:00
|
|
|
|
eventSeverity: 'critical',
|
2023-05-05 14:49:59 +08:00
|
|
|
|
eventType: 'Http error',
|
|
|
|
|
|
startTime: 1683250500,
|
|
|
|
|
|
durationMs: 900000,
|
|
|
|
|
|
endTime: 1683251400
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
eventId: '1308078720390412289',
|
|
|
|
|
|
entityType: 'ip',
|
|
|
|
|
|
serverIp: '116.178.78.180',
|
|
|
|
|
|
domain: null,
|
|
|
|
|
|
appName: null,
|
2023-06-06 10:39:42 +08:00
|
|
|
|
eventSeverity: 'info',
|
2023-05-05 14:49:59 +08:00
|
|
|
|
eventType: 'Http error',
|
|
|
|
|
|
startTime: 1683250500,
|
|
|
|
|
|
durationMs: 900000,
|
|
|
|
|
|
endTime: 1683251400
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
msg: 'success',
|
|
|
|
|
|
code: 200,
|
|
|
|
|
|
data: {
|
|
|
|
|
|
result: result
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
2023-06-02 14:30:57 +08:00
|
|
|
|
Mock.mock(new RegExp(`${BASE_CONFIG.baseUrl}${BASE_CONFIG.apiVersion}/entity/detail/basic.*`), 'get', function (requestObj) {
|
|
|
|
|
|
const result = {
|
|
|
|
|
|
asn: {
|
|
|
|
|
|
asn: 'ASN',
|
|
|
|
|
|
organization: 'AS org'
|
|
|
|
|
|
},
|
|
|
|
|
|
location: {
|
|
|
|
|
|
country: 'China',
|
|
|
|
|
|
province: 'Hebei',
|
|
|
|
|
|
city: 'Langfang',
|
|
|
|
|
|
isp: 'an ISP'
|
|
|
|
|
|
},
|
|
|
|
|
|
categories: {
|
|
|
|
|
|
categoryName: '类别1',
|
|
|
|
|
|
categoryGroup: '类别组1',
|
|
|
|
|
|
reputationLevel: '1',
|
|
|
|
|
|
appCategory: '类别1',
|
|
|
|
|
|
appSubcategory: '子类别1',
|
|
|
|
|
|
appTechnology: '技术1',
|
|
|
|
|
|
appName: '名称1',
|
|
|
|
|
|
appRisk: '风险等级1',
|
|
|
|
|
|
appLongname: '全称1',
|
|
|
|
|
|
appDescription: '这是描述'
|
|
|
|
|
|
},
|
|
|
|
|
|
whois: {
|
|
|
|
|
|
expireDate: '23-12',
|
|
|
|
|
|
registrarName: '注册商',
|
|
|
|
|
|
registrantOrg: '注册机构',
|
|
|
|
|
|
registrantCountry: 'China',
|
|
|
|
|
|
createDate: '22-12',
|
|
|
|
|
|
email: '1@2.3'
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
|
|
|
msg: 'success',
|
|
|
|
|
|
code: 200,
|
|
|
|
|
|
data: {
|
|
|
|
|
|
result: result
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
Mock.mock(new RegExp(`${BASE_CONFIG.baseUrl}${BASE_CONFIG.apiVersion}/entity/detail/kb/intelligence/tag.*`), 'get', function (requestObj) {
|
|
|
|
|
|
const result = {
|
|
|
|
|
|
malware: {
|
|
|
|
|
|
malwareName: 'malware'
|
|
|
|
|
|
},
|
|
|
|
|
|
darkweb: {
|
|
|
|
|
|
nodeType: 'nodeType'
|
|
|
|
|
|
},
|
|
|
|
|
|
userDefinedTags: [
|
|
|
|
|
|
{
|
|
|
|
|
|
id: 1,
|
|
|
|
|
|
tagValue: 'userTag1'
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
id: 2,
|
|
|
|
|
|
tagValue: 'userTag2'
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
id: 3,
|
|
|
|
|
|
tagValue: 'userTag3'
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
2023-06-02 17:47:54 +08:00
|
|
|
|
return {
|
|
|
|
|
|
msg: 'success',
|
|
|
|
|
|
code: 200,
|
|
|
|
|
|
data: result
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
2023-06-06 10:39:42 +08:00
|
|
|
|
Mock.mock(new RegExp(`${BASE_CONFIG.baseUrl}${BASE_CONFIG.apiVersion}/entity/detail/kb/intelligence/list.*`), 'get', function (requestObj) {
|
2023-06-02 17:47:54 +08:00
|
|
|
|
const result = [
|
|
|
|
|
|
{
|
|
|
|
|
|
location: {
|
|
|
|
|
|
isp: 'dba Omsoft',
|
|
|
|
|
|
updateTime: 1685696510,
|
|
|
|
|
|
createTime: 1685696510,
|
|
|
|
|
|
isValid: 1
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
malware: {
|
|
|
|
|
|
threatType: 'command and control',
|
|
|
|
|
|
malwareName: 'IcedID',
|
|
|
|
|
|
malwareAlias: 'BokBot,IceID',
|
|
|
|
|
|
updateTime: 1685696510,
|
|
|
|
|
|
createTime: 1685696510,
|
|
|
|
|
|
isValid: 1
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
darkweb: {
|
|
|
|
|
|
nodeType: 'i2p',
|
|
|
|
|
|
updateTime: 1685696510,
|
|
|
|
|
|
createTime: 1685696510,
|
|
|
|
|
|
isValid: 1
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
userDefinedTag: {
|
|
|
|
|
|
id: 1,
|
|
|
|
|
|
tagValue: '门户网站',
|
|
|
|
|
|
updateTime: 1685696500,
|
|
|
|
|
|
createTime: 1685696500,
|
|
|
|
|
|
isValid: 1
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
userDefinedTag: {
|
|
|
|
|
|
id: 1,
|
|
|
|
|
|
tagValue: '用户tag',
|
|
|
|
|
|
updateTime: 1685696500,
|
|
|
|
|
|
createTime: 1685696500,
|
|
|
|
|
|
isValid: 1
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
2023-06-02 14:30:57 +08:00
|
|
|
|
return {
|
|
|
|
|
|
msg: 'success',
|
|
|
|
|
|
code: 200,
|
|
|
|
|
|
data: {
|
|
|
|
|
|
result: result
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
2023-04-26 18:06:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const getQuery = (url) => {
|
|
|
|
|
|
// str为?之后的参数部分字符串
|
|
|
|
|
|
const str = url.substr(url.indexOf('?') + 1)
|
|
|
|
|
|
// arr每个元素都是完整的参数键值
|
|
|
|
|
|
const arr = str.split('&')
|
|
|
|
|
|
// result为存储参数键值的集合
|
|
|
|
|
|
const result = {}
|
|
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
|
|
|
|
// item的两个元素分别为参数名和参数值
|
|
|
|
|
|
const item = arr[i].split('=')
|
|
|
|
|
|
result[item[0]] = item[1]
|
|
|
|
|
|
}
|
|
|
|
|
|
return result
|
|
|
|
|
|
}
|