Compare commits
16 Commits
dev-css-re
...
22.12-6suo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2aa7f6edfb | ||
|
|
6ed9c4f5fe | ||
|
|
6f8631f947 | ||
|
|
63ab36f4d2 | ||
|
|
cccc1f0e6a | ||
|
|
4651709529 | ||
|
|
6ab98be4c8 | ||
|
|
7b96f979a4 | ||
|
|
a59bff2cb7 | ||
|
|
04651581fe | ||
|
|
84ca05dccc | ||
|
|
780de66ddf | ||
|
|
9205d7645d | ||
|
|
ec486fe930 | ||
|
|
12c31b5bf6 | ||
|
|
96591cb9ef |
@@ -1,4 +1,5 @@
|
||||
var BASE_CONFIG = {
|
||||
baseUrl: 'http://192.168.44.54:8090/',
|
||||
version: '2.0.2021.05.11.19.43'
|
||||
baseUrl: 'http://192.168.44.54:8093/',
|
||||
version: '23.02.08',
|
||||
logUrl: 'http://192.168.44.114:8088/superset/explore/?r=12&standalone=1'
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>images/logo.svg">
|
||||
<script src="config.js"></script>
|
||||
<title>Cyber Narrator</title>
|
||||
<title>域名解析服务监测系统</title>
|
||||
</head>
|
||||
<body class="theme-light">
|
||||
<noscript>
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
<template>
|
||||
<div class="logins">
|
||||
<div class="inside">
|
||||
<div class="title">
|
||||
<img src="../public/images/logo-title.svg" />
|
||||
</div>
|
||||
<div class="title">域名解析服务监测系统</div>
|
||||
<el-form class="login__box">
|
||||
<el-form-item>
|
||||
<el-input
|
||||
@@ -193,12 +191,12 @@ export default {
|
||||
}
|
||||
|
||||
.title {
|
||||
margin-top: 65px;
|
||||
margin-top: 90px;
|
||||
padding: 0 70px;
|
||||
color: white;
|
||||
font-size: 40px;
|
||||
text-align: center;
|
||||
}
|
||||
.title > img {
|
||||
height: 135px;
|
||||
}
|
||||
.login__box {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
@@ -98,6 +98,8 @@
|
||||
.domain-detail-list {
|
||||
display: table;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
|
||||
.domain-detail-list__row {
|
||||
display: table-row;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
.cn-chart__whois {
|
||||
overflow: auto;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
display: flex;
|
||||
&.panel__time--scrolled-out {
|
||||
position: fixed;
|
||||
top: 70px;
|
||||
top: 120px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
&>div {
|
||||
@@ -18,7 +18,7 @@
|
||||
.chart-list {
|
||||
&.chart-list--screen {
|
||||
display: grid;
|
||||
height: calc(100vh - 90px);
|
||||
height: calc(100vh - 130px);
|
||||
width: 100%;
|
||||
grid-template-columns: repeat(30,1fr);
|
||||
grid-template-rows: repeat(19,1fr);
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
<div class="banner__left">
|
||||
<span @click="shrink" class="shrink-button" :class="{'shrink-button--collapse': showMenu}"><i
|
||||
class="cn-icon cn-icon-navigation"></i></span>
|
||||
<img alt="loading..." height="26" :src="logo?logo:require('../../assets/img/logo-header.svg')" @click="jump('/panel/networkOverview', '', '', 0)" style="cursor: pointer"/>
|
||||
<span style="color: white; font-size: 20px;">域名解析服务监测系统</span>
|
||||
</div>
|
||||
<!--个人操作-->
|
||||
<div class="personal">
|
||||
<el-dropdown>
|
||||
<div class="header-menu--item"><i class="cn-icon cn-icon-language"></i></div>
|
||||
<!-- <el-dropdown>
|
||||
<div class="header-menu--item"><i class="cn-icon cn-icon-language"></i></div>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item>
|
||||
@@ -24,7 +24,7 @@
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</el-dropdown>-->
|
||||
<el-dropdown>
|
||||
<div class='login-user header-menu--item'>{{ username }} <i class="cn-icon cn-icon-arrow-down"></i></div>
|
||||
<template #dropdown>
|
||||
|
||||
@@ -19,6 +19,11 @@ const routes = [
|
||||
path: '/panel/:typeName',
|
||||
component: () => import('@/views/charts2/Panel')
|
||||
},
|
||||
{
|
||||
name: 'dns6',
|
||||
path: '/dns6/:typeName',
|
||||
component: () => import('@/views/charts/Panel')
|
||||
},
|
||||
{
|
||||
path: '/report/builtIn',
|
||||
component: () => import('@/views/report/reportTest')
|
||||
|
||||
@@ -318,11 +318,12 @@ export async function getI18n () {
|
||||
|
||||
/* 获得原始的3611-2 json字符串数据 */
|
||||
export async function getIso36112JsonData (suffix) {
|
||||
const url = `${window.location.protocol}//${window.location.host}/geojson/${suffix}.json`
|
||||
const request = new Promise(resolve => {
|
||||
axios({
|
||||
url: `${window.location.protocol}//${window.location.host}:${window.location.port}/geojson/${suffix}.json`
|
||||
}).then(response => {
|
||||
axios({ url }).then(response => {
|
||||
resolve(response.data || response || null)
|
||||
}).catch(err => {
|
||||
console.error(err)
|
||||
})
|
||||
})
|
||||
return await request
|
||||
|
||||
@@ -63,7 +63,8 @@ export const panelTypeAndRouteMapping = {
|
||||
cryptocurrency: 7,
|
||||
ipDrillDownTest: 8,
|
||||
linkMonitor: 14,
|
||||
linkMonitorDrillDown: 15
|
||||
linkMonitorDrillDown: 15,
|
||||
dns6: 18
|
||||
}
|
||||
|
||||
/* operationLog state 执行状态属性 值与名称之间的映射 */
|
||||
@@ -1554,7 +1555,7 @@ export const npmCategoryInfoMapping = [
|
||||
|
||||
// 整屏滚动的路径映射
|
||||
export const wholeScreenRouterMapping = {
|
||||
dns: '/panel/dnsServiceInsights'
|
||||
dns: '/dns6/dns6'
|
||||
}
|
||||
|
||||
export const themeData = [
|
||||
|
||||
@@ -17,6 +17,9 @@ function asciiCompute (num, ascii = 1000, units, dot = 2) {
|
||||
return ['', '']
|
||||
}
|
||||
num = Number(num)
|
||||
if (num === 0) {
|
||||
return [0, '']
|
||||
}
|
||||
let carry = 0
|
||||
if (num > 1) {
|
||||
const log = Math.log(num) / Math.log(ascii)
|
||||
|
||||
@@ -38,21 +38,6 @@ export default {
|
||||
i18n: 'overall.operationLog',
|
||||
path: '/administration/operationLog',
|
||||
icon: 'cn-icon cn-icon-operation-log'
|
||||
},
|
||||
{
|
||||
i18n: 'I18n',
|
||||
path: '/administration/i18n',
|
||||
icon: 'cn-icon cn-icon-i18n'
|
||||
},
|
||||
{
|
||||
i18n: 'galaxyProxy.galaxyProxy',
|
||||
path: '/administration/galaxyProxy',
|
||||
icon: 'cn-icon cn-icon-proxy'
|
||||
},
|
||||
{
|
||||
i18n: 'overall.chart',
|
||||
path: '/administration/chart',
|
||||
icon: 'cn-icon cn-icon-chart'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ export default {
|
||||
const boxDom = document.getElementById('frame-box')
|
||||
const dom = document.getElementById('frame')
|
||||
const height = boxDom.offsetHeight
|
||||
dom.src = `http://192.168.44.114:8088/superset/explore/?r=15&standalone=1&height=${height || 800}`
|
||||
dom.src = BASE_CONFIG.logUrl + '&height=' + (height + 100)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -114,8 +114,8 @@ export default {
|
||||
},
|
||||
reload () {
|
||||
this.copyDataList.forEach(item => {
|
||||
if (this.$refs['chart' + item.id]) {
|
||||
this.$refs['chart' + item.id].reload()
|
||||
if (this.$refs['chart' + item.id] && this.$refs['chart' + item.id][0]) {
|
||||
this.$refs['chart' + item.id][0].reload()
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
@@ -11,20 +11,40 @@
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "org") || '-'}}</div>
|
||||
</div>
|
||||
<div class="domain-detail-list__row">
|
||||
<div class="domain-detail-list__label">Email</div>
|
||||
<div class="domain-detail-list__label">注册机构邮箱</div>
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "email") || '-'}}</div>
|
||||
</div>
|
||||
<div class="domain-detail-list__row">
|
||||
<div class="domain-detail-list__label">{{$t('overall.country')}}</div>
|
||||
<div class="domain-detail-list__label">注册机构电话</div>
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "domainWhoisPhone") || '-'}}</div>
|
||||
</div>
|
||||
<div class="domain-detail-list__row">
|
||||
<div class="domain-detail-list__label">注册国家</div>
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "country") || '-'}}</div>
|
||||
</div>
|
||||
<div class="domain-detail-list__row">
|
||||
<div class="domain-detail-list__label">{{$t('entities.creationDate')}}</div>
|
||||
<div class="domain-detail-list__content">{{ dateFormatByAppearance($_.get(chartData, "createTime") * 1) || '-'}}</div>
|
||||
<div class="domain-detail-list__label">注册地邮编</div>
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "domainWhoisPostcode") || '-'}}</div>
|
||||
</div>
|
||||
<div class="domain-detail-list__row">
|
||||
<div class="domain-detail-list__label">{{$t('entities.expirationDate')}}</div>
|
||||
<div class="domain-detail-list__content">{{ dateFormatByAppearance($_.get(chartData, "expirationTime") * 1) || '-'}}</div>
|
||||
<div class="domain-detail-list__label">{{$t('entities.creationDate')}}</div>
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "createTime") ? dateFormatByAppearance($_.get(chartData, "createTime") * 1) : '-'}}</div>
|
||||
</div>
|
||||
<div class="domain-detail-list__row">
|
||||
<div class="domain-detail-list__label">过期时间</div>
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "expirationTime") ? dateFormatByAppearance($_.get(chartData, "expirationTime") * 1) : '-'}}</div>
|
||||
</div>
|
||||
<div class="domain-detail-list__row">
|
||||
<div class="domain-detail-list__label">主办单位名称</div>
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "domainIcpCompanyName") || '-'}}</div>
|
||||
</div>
|
||||
<div class="domain-detail-list__row">
|
||||
<div class="domain-detail-list__label">主办单位性质</div>
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "domainIcpCompanyType") || '-'}}</div>
|
||||
</div>
|
||||
<div class="domain-detail-list__row">
|
||||
<div class="domain-detail-list__label">网站备案号</div>
|
||||
<div class="domain-detail-list__content">{{ $_.get(chartData, "domainIcpSiteLicense") || '-'}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -126,7 +126,7 @@ export default {
|
||||
? legendMapping[
|
||||
`${this.entity && this.entity.ip ? 'ip_' : ''}${r.legend}`
|
||||
]
|
||||
: (legendMapping[r.legend] ? legendMapping[r.legend] : humpToSpace(r.legend)),
|
||||
: (legendMapping[r.legend] ? legendMapping[r.legend] : r.legend),
|
||||
data: r.values.map((v) => [
|
||||
Number(v[0]) * 1000,
|
||||
Number(v[1]),
|
||||
|
||||
@@ -35,10 +35,12 @@ export default {
|
||||
initEcharts (id) {
|
||||
this.initDom(id, 2)
|
||||
const chartParams = this.chartInfo.params
|
||||
const domains = this.chartData.map(function (item, i) {
|
||||
let domains = this.chartData.map(function (item, i) {
|
||||
return item.domain
|
||||
}).join(',')
|
||||
|
||||
// 参数字符串限制长度在4300以内。经测试,超过4600左右会报错
|
||||
domains = domains.substring(0, 4300)
|
||||
domains = domains.substring(0, domains.lastIndexOf(','))
|
||||
const byType = new Promise(resolve => {
|
||||
get(replaceUrlPlaceholder(chartParams.byCategoryUrl, { domains: domains })).then(response => {
|
||||
if (response.code === 200) {
|
||||
@@ -47,7 +49,7 @@ export default {
|
||||
} else {
|
||||
// this.noData0 = false
|
||||
// chartOption = this.$_.cloneDeep(this.chartOption)
|
||||
const data = response.data.result.sort(reverseSortBy('uniqDomains')).map(d => {
|
||||
const originalData = response.data.result.sort(reverseSortBy('uniqDomains')).map(d => {
|
||||
return {
|
||||
data: d,
|
||||
name: d.categoryName,
|
||||
@@ -55,6 +57,22 @@ export default {
|
||||
unitType: chartParams.unitType
|
||||
}
|
||||
})
|
||||
const data = originalData.filter((d, i) => i < 5)
|
||||
let otherValue = 0
|
||||
originalData.forEach((d, i) => {
|
||||
if (i > 4) {
|
||||
otherValue += parseInt(d.uniqDomains)
|
||||
}
|
||||
})
|
||||
data.push({
|
||||
data: {
|
||||
uniqDomains: otherValue,
|
||||
categoryName: 'other'
|
||||
},
|
||||
name: 'other',
|
||||
value: otherValue,
|
||||
unitType: chartParams.unitType
|
||||
})
|
||||
this.chartOption.series[0].data = data
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,10 +202,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="content__data-protocol-value">
|
||||
<div class="content__data-protocol-value-title">{{$t('protocol.requestVolume')}}</div>
|
||||
<div class="content__data-protocol-value-num">{{unitConvert($_.get(chartData, 'bytes'), chartInfo.params.unitType).join('')}}</div>
|
||||
<div class="content__data-protocol-value-title">{{$t('protocol.totalFlow')}}</div>
|
||||
<div class="content__data-protocol-value-num">{{unitConvert($_.get(chartData, 'count'), chartInfo.params.unitType).join('')}}</div>
|
||||
</div>
|
||||
<div class="content__data-protocol-percent"><span>{{$t('protocol.proportion')}}</span> <span>{{unitConvert($_.get(chartData, 'bytesPercent'), unitTypes.percent).join('')}}</span></div>
|
||||
<div class="content__data-protocol-percent"><span>{{$t('protocol.proportion')}}</span> <span>{{unitConvert($_.get(chartData, 'countPercent'), unitTypes.percent).join('')}}</span></div>
|
||||
</div>
|
||||
<div class="content__data-protocol">
|
||||
<div class="content__data-protocol-all">
|
||||
@@ -214,10 +214,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="content__data-protocol-value">
|
||||
<div class="content__data-protocol-value-title">{{$t('protocol.totalFlow')}}</div>
|
||||
<div class="content__data-protocol-value-num">{{unitConvert($_.get(chartData, 'count'), chartInfo.params.unitType).join('')}}</div>
|
||||
<div class="content__data-protocol-value-title">{{$t('protocol.requestVolume')}}</div>
|
||||
<div class="content__data-protocol-value-num">{{unitConvert($_.get(chartData, 'bytes'), unitTypes.byte).join('')}}</div>
|
||||
</div>
|
||||
<div class="content__data-protocol-percent"><span>{{$t('protocol.proportion')}}</span> <span>{{unitConvert($_.get(chartData, 'countPercent'), unitTypes.percent).join('')}}</span></div>
|
||||
<div class="content__data-protocol-percent"><span>{{$t('protocol.proportion')}}</span> <span>{{unitConvert($_.get(chartData, 'bytesPercent'), unitTypes.percent).join('')}}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -64,11 +64,11 @@ export const legendMapping = {
|
||||
ip_packets_sent_rate: i18n.global.t('trafficSummary.packetsPerSecondS2c'),
|
||||
dnsLatency: i18n.global.t('dns.latency'),
|
||||
queryRate: i18n.global.t('dns.query.rate'),
|
||||
formatErrorRate: i18n.global.t('dns.formatErrorRate'),
|
||||
serverFailureRate: i18n.global.t('dns.serverFailureRate'),
|
||||
nonExistentDomainRate: i18n.global.t('dns.nonExistentDomainRate'),
|
||||
notImplementedRate: i18n.global.t('dns.notImplementedRate'),
|
||||
queryRefusedRate: i18n.global.t('dns.queryRefusedRate'),
|
||||
formatErrorRate: 'FormErr',
|
||||
serverFailureRate: 'ServFail',
|
||||
nonExistentDomainRate: 'NXDomain',
|
||||
notImplementedRate: 'NotImp',
|
||||
queryRefusedRate: 'Refused',
|
||||
sequenceGapLossPercent: i18n.global.t('entity.ip.sequenceGapLossPercent'),
|
||||
establishLatency: i18n.global.t('entity.ip.establishLatency'),
|
||||
httpResponseLatency: i18n.global.t('entity.ip.httpResponseLatency'),
|
||||
|
||||
@@ -22,6 +22,9 @@ export const line = {
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
splitLine: {
|
||||
show: false
|
||||
},
|
||||
axisLabel: {
|
||||
formatter: function (value) {
|
||||
return unitConvert(value, unitTypes.number, null, null, 0).join(' ')
|
||||
@@ -30,7 +33,7 @@ export const line = {
|
||||
},
|
||||
animation: false,
|
||||
grid: {
|
||||
left: 55,
|
||||
left: 60,
|
||||
bottom: 30,
|
||||
top: 20,
|
||||
right: 25
|
||||
@@ -62,7 +65,7 @@ export const line = {
|
||||
{
|
||||
name: '',
|
||||
type: 'line',
|
||||
smooth: false,
|
||||
smooth: true,
|
||||
symbol: 'none',
|
||||
data: [],
|
||||
markLine: {}
|
||||
|
||||
@@ -32,8 +32,8 @@ export default {
|
||||
methods: {
|
||||
reload () {
|
||||
this.dnsScreenDataList.forEach(item => {
|
||||
if (this.$refs['chart' + item.id]) {
|
||||
this.$refs['chart' + item.id].getChartData()
|
||||
if (this.$refs['chart' + item.id] && this.$refs['chart' + item.id][0]) {
|
||||
this.$refs['chart' + item.id][0].getChartData()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -247,7 +247,7 @@ export default {
|
||||
handleData (prevRequest, request, _t) {
|
||||
this.toggleLoading(true)
|
||||
Promise.all([prevRequest, request]).then(res => {
|
||||
this.isNoData = (res[0].data.result.length && res[1].data.result.length) === 0
|
||||
this.isNoData = res[0].data.result.length === 0 && res[1].data.result.length === 0
|
||||
if (this.isNoData) {
|
||||
this.appData = this.appData.map(t => {
|
||||
return {
|
||||
|
||||
@@ -205,7 +205,7 @@ export default {
|
||||
*/
|
||||
initExpendTab () {
|
||||
if (this.$route.query.eventId) {
|
||||
if (parseFloat(this.$route.query.eventId) === this.detection.eventId) {
|
||||
if (this.$route.query.eventId === this.detection.eventId) {
|
||||
const container = document.getElementById('cnContainer')
|
||||
const dom = document.getElementsByClassName('cn-detection__case')
|
||||
// 未展开的item折叠块,高度67+下边距10+底部线高度1,兼容不同分辨率下的tab高度
|
||||
|
||||
@@ -294,7 +294,7 @@ export default {
|
||||
const chartDom = document.getElementById(`eventSeverityTrendBar${this.pageType}`)
|
||||
const eventSeverityTrendOption = this.$_.cloneDeep(multipleBarOption)
|
||||
|
||||
const xData = []
|
||||
let xData = []
|
||||
dataMap.forEach(function (value) {
|
||||
// eventSeverityTrendOption.series[Number(getSeriesIndex(key))].data = value.map(v => Number(v[1]))
|
||||
value.forEach(item => {
|
||||
@@ -303,6 +303,9 @@ export default {
|
||||
}
|
||||
})
|
||||
})
|
||||
xData = xData.sort((a, b) => {
|
||||
return new Date(a) - new Date(b)
|
||||
})
|
||||
eventSeverityTrendOption.series.forEach(serie => {
|
||||
const seriesData = []
|
||||
xData.forEach(item => {
|
||||
|
||||
Reference in New Issue
Block a user