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 () {