diff --git a/src/assets/css/font/iconfont.css b/src/assets/css/font/iconfont.css
index eaf670b8..9873ea5b 100644
--- a/src/assets/css/font/iconfont.css
+++ b/src/assets/css/font/iconfont.css
@@ -1,8 +1,8 @@
@font-face {
font-family: "cn-icon"; /* Project id 2614877 */
- src: url('iconfont.woff2?t=1691461947018') format('woff2'),
- url('iconfont.woff?t=1691461947018') format('woff'),
- url('iconfont.ttf?t=1691461947018') format('truetype');
+ src: url('iconfont.woff2?t=1691573279860') format('woff2'),
+ url('iconfont.woff?t=1691573279860') format('woff'),
+ url('iconfont.ttf?t=1691573279860') format('truetype');
}
.cn-icon {
@@ -13,6 +13,30 @@
-moz-osx-font-smoothing: grayscale;
}
+.cn-icon-Event1:before {
+ content: "\e80b";
+}
+
+.cn-icon-Score:before {
+ content: "\e80a";
+}
+
+.cn-icon-Intelligence:before {
+ content: "\e7ff";
+}
+
+.cn-icon-FQDN:before {
+ content: "\e800";
+}
+
+.cn-icon-Event:before {
+ content: "\e801";
+}
+
+.cn-icon-User-defined:before {
+ content: "\e804";
+}
+
.cn-icon-jump-to:before {
content: "\e7fe";
}
diff --git a/src/assets/css/font/iconfont.js b/src/assets/css/font/iconfont.js
index b286b32a..bde1bd89 100644
--- a/src/assets/css/font/iconfont.js
+++ b/src/assets/css/font/iconfont.js
@@ -1 +1 @@
-window._iconfont_svg_string_2614877='',function(l){var a=(a=document.getElementsByTagName("script"))[a.length-1],c=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var h,o,i,m,v,z=function(a,c){c.parentNode.insertBefore(a,c)};if(c&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,c=document.createElement("div");c.innerHTML=l._iconfont_svg_string_2614877,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(a=document.body).firstChild?z(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),h()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=h,m=l.document,v=!1,s(),m.onreadystatechange=function(){"complete"==m.readyState&&(m.onreadystatechange=null,t())})}function t(){v||(v=!0,i())}function s(){try{m.documentElement.doScroll("left")}catch(a){return void setTimeout(s,50)}t()}}(window);
\ No newline at end of file
+window._iconfont_svg_string_2614877='',function(l){var a=(a=document.getElementsByTagName("script"))[a.length-1],c=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var h,o,i,m,v,z=function(a,c){c.parentNode.insertBefore(a,c)};if(c&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,c=document.createElement("div");c.innerHTML=l._iconfont_svg_string_2614877,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(a=document.body).firstChild?z(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),h()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=h,m=l.document,v=!1,n(),m.onreadystatechange=function(){"complete"==m.readyState&&(m.onreadystatechange=null,t())})}function t(){v||(v=!0,i())}function n(){try{m.documentElement.doScroll("left")}catch(a){return void setTimeout(n,50)}t()}}(window);
diff --git a/src/assets/css/font/iconfont.ttf b/src/assets/css/font/iconfont.ttf
index ed4efbce..c613dd14 100644
Binary files a/src/assets/css/font/iconfont.ttf and b/src/assets/css/font/iconfont.ttf differ
diff --git a/src/assets/css/font/iconfont.woff b/src/assets/css/font/iconfont.woff
index c6c5f4eb..1f77145a 100644
Binary files a/src/assets/css/font/iconfont.woff and b/src/assets/css/font/iconfont.woff differ
diff --git a/src/assets/css/font/iconfont.woff2 b/src/assets/css/font/iconfont.woff2
index ce23bbfc..c02f6ea7 100644
Binary files a/src/assets/css/font/iconfont.woff2 and b/src/assets/css/font/iconfont.woff2 differ
diff --git a/src/views/entityExplorer/entityList/Row.vue b/src/views/entityExplorer/entityList/Row.vue
index c805fcb7..e7936c7c 100644
--- a/src/views/entityExplorer/entityList/Row.vue
+++ b/src/views/entityExplorer/entityList/Row.vue
@@ -132,6 +132,32 @@
+
+
+
+
+
+
+ {{ $t('network.score') }} :
+ {{ score }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('dnsInsight.event') }} :
+ {{ eventNum }}
+
+
+
+
+
+
@@ -176,7 +202,8 @@ export default {
return {
loading: false,
isCollapse: true, // 是否是折叠状态
- levelTwoTags: []
+ levelTwoTags: [],
+ loadingNetworkQuality: false // 分数的loading
}
},
computed: {
diff --git a/src/views/entityExplorer/entityList/detailOverview/App.vue b/src/views/entityExplorer/entityList/detailOverview/App.vue
index d5a6932e..7d8eba3f 100644
--- a/src/views/entityExplorer/entityList/detailOverview/App.vue
+++ b/src/views/entityExplorer/entityList/detailOverview/App.vue
@@ -135,7 +135,7 @@
-
{{$t('overall.alert')}}
+
{{$t('overall.performanceEvents')}}
diff --git a/src/views/entityExplorer/entityList/detailOverview/Domain.vue b/src/views/entityExplorer/entityList/detailOverview/Domain.vue
index 89c7c57f..e5650b9c 100644
--- a/src/views/entityExplorer/entityList/detailOverview/Domain.vue
+++ b/src/views/entityExplorer/entityList/detailOverview/Domain.vue
@@ -140,7 +140,7 @@
-
{{$t('overall.alert')}}
+
{{$t('overall.performanceEvents')}}
diff --git a/src/views/entityExplorer/entityList/detailOverview/Ip.vue b/src/views/entityExplorer/entityList/detailOverview/Ip.vue
index a4c8c9cb..44950c02 100644
--- a/src/views/entityExplorer/entityList/detailOverview/Ip.vue
+++ b/src/views/entityExplorer/entityList/detailOverview/Ip.vue
@@ -172,7 +172,7 @@
-
{{$t('overall.alert')}}
+
{{$t('overall.performanceEvents')}}
diff --git a/src/views/entityExplorer/entityList/entityListMixin.js b/src/views/entityExplorer/entityList/entityListMixin.js
index e663c50b..a3eca2ed 100644
--- a/src/views/entityExplorer/entityList/entityListMixin.js
+++ b/src/views/entityExplorer/entityList/entityListMixin.js
@@ -7,6 +7,7 @@ import { riskLevelMapping, unitTypes } from '@/utils/constants'
import { getSecond } from '@/utils/date-util'
import { valueToRangeValue } from '@/utils/unit-convert'
import { shallowRef } from 'vue'
+import { computeScore } from '@/utils/tools'
export default {
props: {
@@ -21,7 +22,14 @@ export default {
chartOption: null,
unitTypes,
valueToRangeValue,
- echartsArray: []
+ echartsArray: [],
+ loadingNetworkQuality: false,
+ score: '-', // 网络质量评分
+ scoreUrl: '', // 网络质量评分url
+ eventNum: 0, // 性能事件和安全事件数量之和
+ loadingEvent: false, // event的loading
+ performanceEventUrl: '', // 性能事件接口url
+ securityEventUrl: '' // 安全事件接口url
}
},
computed: {
@@ -244,24 +252,64 @@ export default {
if (this.entity.entityType) {
switch (this.entity.entityType) {
case 'ip': {
- // this.trafficUrl = api.entityIpDetailTraffic
+ this.scoreUrl = api.entity.entityList.ipPerformance
this.trafficUrl = api.entity.entityList.ipThroughput
+ this.securityEventUrl = api.entity.entityList.ipSecurity
+ this.performanceEventUrl = api.entity.entityList.ipEventPerformance
break
}
case 'domain': {
- // this.trafficUrl = api.entityDomainDetailTraffic
+ this.scoreUrl = api.entity.entityList.domainPerformance
this.trafficUrl = api.entity.entityList.domainThroughput
+ this.securityEventUrl = api.entity.entityList.domainSecurity
+ this.performanceEventUrl = api.entity.entityList.domainEventPerformance
break
}
case 'app': {
- // this.trafficUrl = api.entityAppDetailTraffic
+ this.scoreUrl = api.entity.entityList.appPerformance
this.trafficUrl = api.entity.entityList.appThroughput
+ this.securityEventUrl = api.entity.entityList.appSecurity
+ this.performanceEventUrl = api.entity.entityList.appEventPerformance
break
}
default:
break
}
}
+ },
+ /** 获取网络评分 */
+ queryNetworkQuantity () {
+ this.loadingNetworkQuality = true
+
+ get(this.scoreUrl, this.getQueryParams()).then(response => {
+ if (response.code === 200) {
+ const data = {
+ establishLatencyMs: response.data.result.establishLatencyValue || null,
+ httpResponseLatency: response.data.result.httpResponseLatencyValue || null,
+ sslConLatency: response.data.result.sslConLatencyValue || null,
+ tcpLostlenPercent: response.data.result.sequenceGapLossPercentValue || null,
+ pktRetransPercent: response.data.result.pktRetransPercentValue || null
+ }
+ this.score = computeScore(data)
+ }
+ }).finally(() => {
+ this.loadingNetworkQuality = false
+ })
+ },
+ /** 获取事件数量 */
+ queryEventNum () {
+ this.loadingEvent = true
+ const performance = get(this.performanceEventUrl, this.getQueryParams())
+ const security = get(this.securityEventUrl, this.getQueryParams())
+ this.eventNum = 0
+
+ Promise.all([performance, security]).then(response => {
+ this.eventNum = response[0].data.result.length + response[1].data.result.length
+ }).catch(e => {
+ this.eventNum = 0
+ }).finally(() => {
+ this.loadingEvent = false
+ })
}
},
watch: {
@@ -283,6 +331,8 @@ export default {
this.querySecurity()
this.queryEntityDetailTraffic()
this.queryPerformance()
+ this.queryNetworkQuantity()
+ this.queryEventNum()
})
},
beforeUnmount () {