This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
cyber-narrator-cn-ui/src/views/charts2/Chart.vue

302 lines
10 KiB
Vue
Raw Normal View History

2022-07-06 21:08:12 +08:00
<template>
<div class="cn-chart" style="height: 100%; width: 100%;">
<loading :loading="loading && !disableLoading"></loading>
2022-07-06 21:08:12 +08:00
<network-overview-line
2022-07-08 09:34:09 +08:00
v-if="chart.type === typeMapping.networkOverview.line"
:chart="chart"
:metric="metric"
:time-filter="timeFilter"
ref="networkLine"
@toggleLoading="toggleLoading"
2022-07-06 21:08:12 +08:00
></network-overview-line>
2022-07-08 09:34:09 +08:00
<network-overview-ddos-detection
v-else-if="chart.type === typeMapping.networkOverview.ddosDetection"
:chart="chart"
:time-filter="timeFilter"
@toggleLoading="toggleLoading"
2022-07-08 09:34:09 +08:00
></network-overview-ddos-detection>
<network-overview-performance-event
v-else-if="chart.type === typeMapping.networkOverview.performanceEvent"
:chart="chart"
:time-filter="timeFilter"
@toggleLoading="toggleLoading"
2022-07-08 09:34:09 +08:00
></network-overview-performance-event>
<network-overview-tabs
v-else-if="chart.type === typeMapping.networkOverview.table"
:time-filter="timeFilter"
:metric="metric"
:chart="chart"
:ref="`tab${chart.id}`"
@toggleLoading="toggleLoading"
></network-overview-tabs>
2022-09-26 16:58:33 +08:00
<npm-app-event-table
v-else-if="chart.type === typeMapping.npm.appEventTable"
:time-filter="timeFilter"
:chart="chart"
:chartData="chartData"
:ref="`tab${chart.id}`"
@toggleLoading="toggleLoading"
></npm-app-event-table>
2022-07-19 10:16:44 +08:00
<network-overview-apps
v-else-if="chart.type === typeMapping.networkOverview.appList"
:chart="chart"
:metric="metric"
:time-filter="timeFilter"
@toggleLoading="toggleLoading"
2022-07-19 10:16:44 +08:00
>
</network-overview-apps>
2022-07-18 15:04:32 +08:00
<npm-tabs
v-else-if="chart.type === typeMapping.npm.npmTabs"
:time-filter="timeFilter"
2022-08-11 15:49:41 +08:00
:chart="chart"
@tabChange="npmTabChange"
@toggleLoading="toggleLoading"
2022-07-18 15:04:32 +08:00
></npm-tabs>
<npm-network-quantity
v-else-if="chart.type === typeMapping.npm.npmNetworkQuantity"
:time-filter="timeFilter"
2022-07-18 15:04:32 +08:00
:chart="chart"
@toggleLoading="toggleLoading"
2022-07-18 15:04:32 +08:00
></npm-network-quantity>
2022-07-26 16:44:35 +08:00
<npm-app-category-score
v-else-if="chart.type === typeMapping.npm.npmAppCategoryScore"
:time-filter="timeFilter"
2022-07-26 16:44:35 +08:00
:chart="chart"
@toggleLoading="toggleLoading"
2022-07-26 16:44:35 +08:00
></npm-app-category-score>
<npm-map
v-else-if="chart.type === typeMapping.npm.npmMap"
:time-filter="timeFilter"
2022-07-26 16:44:35 +08:00
:chart="chart"
@toggleLoading="toggleLoading"
2022-07-26 16:44:35 +08:00
></npm-map>
2022-07-26 22:07:53 +08:00
<npm-line
v-else-if="chart.type === typeMapping.npm.npmLine"
:time-filter="timeFilter"
2022-07-26 22:07:53 +08:00
:chart="chart"
@toggleLoading="toggleLoading"
2022-07-26 22:07:53 +08:00
></npm-line>
<npm-events-header
v-else-if="chart.type === typeMapping.npm.npmEventsHeader"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></npm-events-header>
<npm-events-by-type
v-else-if="chart.type === typeMapping.npm.npmEventsByType"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></npm-events-by-type>
<npm-recent-events
v-else-if="chart.type === typeMapping.npm.npmRecentEvents"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></npm-recent-events>
2022-08-11 15:49:41 +08:00
<related-sessions
v-else-if="chart.type === typeMapping.npm.relatedSessions"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
2022-08-11 15:49:41 +08:00
></related-sessions>
<npm-ip-map
v-else-if="chart.type === typeMapping.npm.npmIpMap"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
2022-08-11 15:49:41 +08:00
></npm-ip-map>
<npm-traffic-line
v-else-if="chart.type === typeMapping.npm.npmTrafficLine"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
2022-08-11 15:49:41 +08:00
></npm-traffic-line>
2022-09-10 23:13:42 +08:00
<link-block
v-else-if="chart.type === typeMapping.linkMonitor.linkBlock"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></link-block>
<link-traffic-sankey
v-else-if="chart.type === typeMapping.linkMonitor.linkTrafficSankey"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></link-traffic-sankey>
2022-09-13 14:51:44 +08:00
<link-traffic-line
v-else-if="chart.type === typeMapping.linkMonitor.linkTrafficLine"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></link-traffic-line>
2022-09-15 15:51:00 +08:00
<link-direction-grid
v-else-if="chart.type === typeMapping.linkMonitor.linkDirectionGrid"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></link-direction-grid>
2022-09-13 20:10:58 +08:00
<dns-active-malicious-domain
v-else-if="chart.type === typeMapping.dnsInsight.dnsActiveMaliciousDomain"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></dns-active-malicious-domain>
<dns-event-chart
v-else-if="chart.type === typeMapping.dnsInsight.dnsEventChart"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></dns-event-chart>
<dns-recent-events
v-else-if="chart.type === typeMapping.dnsInsight.dnsRecentEvents"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></dns-recent-events>
<dns-traffic-line
v-else-if="chart.type === typeMapping.dnsInsight.dnsTrafficLine"
:time-filter="timeFilter"
:chart="chart"
@toggleLoading="toggleLoading"
></dns-traffic-line>
2023-04-25 16:04:20 +08:00
<entity-detail-basic-info
v-else-if="chart.type === typeMapping.entityDetail.basicInfo"
:chart="chart"
:entity="entity"
@toggleLoading="toggleLoading"
></entity-detail-basic-info>
<entity-detail-line
v-else-if="chart.type === typeMapping.entityDetail.line"
:chart="chart"
:entity="entity"
@toggleLoading="toggleLoading"
></entity-detail-line>
<entity-detail-tabs-chart
v-else-if="chart.type === typeMapping.entityDetail.tabsChart"
:chart="chart"
:entity="entity"
@toggleLoading="toggleLoading"
></entity-detail-tabs-chart>
2022-07-06 21:08:12 +08:00
</div>
</template>
<script>
import Loading from '@/components/common/Loading'
import { typeMapping } from '@/views/charts2/chart-tools'
2022-08-11 15:49:41 +08:00
import NetworkOverviewLine from '@/views/charts2/charts/networkOverview/NetworkOverviewLine'
import NetworkOverviewDdosDetection from '@/views/charts2/charts/networkOverview/NetworkOverviewDdosDetection'
import NetworkOverviewPerformanceEvent from '@/views/charts2/charts/networkOverview/NetworkOverviewPerformanceEvent'
import NetworkOverviewTabs from '@/views/charts2/charts/networkOverview/NetworkOverviewTabs'
import NetworkOverviewApps from '@/views/charts2/charts/networkOverview/NetworkOverviewApps'
import NpmTabs from '@/views/charts2/charts/npm/NpmTabs'
import NpmAppEventTable from '@/views/charts2/charts/npm/NpmAppEventTable'
import NpmNetworkQuantity from '@/views/charts2/charts/npm/NpmNetworkQuantity'
import NpmAppCategoryScore from '@/views/charts2/charts/npm/NpmAppCategoryScore'
import NpmMap from '@/views/charts2/charts/npm/NpmMap'
import NpmLine from '@/views/charts2/charts/npm/NpmLine'
import NpmEventsByType from '@/views/charts2/charts/npm/NpmEventsByType'
import NpmRecentEvents from '@/views/charts2/charts/npm/NpmRecentEvents'
import NpmEventsHeader from '@/views/charts2/charts/npm/NpmEventsHeader'
import RelatedSessions from '@/views/charts2/charts/npm/RelatedSessions'
import NpmIpMap from '@/views/charts2/charts/npm/NpmIpMap'
import NpmTrafficLine from '@/views/charts2/charts/npm/NpmTrafficLine'
2022-09-10 23:13:42 +08:00
import LinkBlock from '@/views/charts2/charts/linkMonitor/LinkBlock'
import LinkTrafficSankey from '@/views/charts2/charts/linkMonitor/LinkTrafficSankey'
2022-09-13 14:51:44 +08:00
import LinkTrafficLine from '@/views/charts2/charts/linkMonitor/LinkTrafficLine'
2022-09-13 20:10:58 +08:00
import DnsActiveMaliciousDomain from '@/views/charts2/charts/dnsInsight/DnsActiveMaliciousDomain'
import DnsEventChart from '@/views/charts2/charts/dnsInsight/DnsEventChart'
import DnsRecentEvents from '@/views/charts2/charts/dnsInsight/DnsRecentEvents'
import DnsTrafficLine from '@/views/charts2/charts/dnsInsight/DnsTrafficLine'
2023-04-25 16:04:20 +08:00
import EntityDetailBasicInfo from '@/views/charts2/charts/entityDetail/EntityDetailBasicInfo'
import EntityDetailLine from '@/views/charts2/charts/entityDetail/EntityDetailLine'
import EntityDetailTabsChart from '@/views/charts2/charts/entityDetail/EntityDetailTabsChart'
2022-09-13 20:10:58 +08:00
import { getNowTime } from '@/utils/date-util'
import { ref } from 'vue'
2022-09-15 15:51:00 +08:00
import LinkDirectionGrid from '@/views/charts2/charts/linkMonitor/LinkDirectionGrid'
2022-07-06 21:08:12 +08:00
export default {
name: 'Chart',
components: {
2022-09-15 15:51:00 +08:00
LinkDirectionGrid,
NpmEventsHeader,
NpmRecentEvents,
NpmEventsByType,
2022-07-26 22:07:53 +08:00
NpmLine,
2022-07-26 16:44:35 +08:00
NpmMap,
NpmAppCategoryScore,
2022-07-06 21:08:12 +08:00
Loading,
2022-07-08 09:34:09 +08:00
NetworkOverviewLine,
NetworkOverviewDdosDetection,
NetworkOverviewPerformanceEvent,
2022-07-18 15:04:32 +08:00
NetworkOverviewTabs,
2022-07-19 10:16:44 +08:00
NetworkOverviewApps,
2022-07-18 15:04:32 +08:00
NpmTabs,
NpmNetworkQuantity,
2022-08-11 15:49:41 +08:00
NpmAppEventTable,
RelatedSessions,
NpmIpMap,
2022-09-10 23:13:42 +08:00
NpmTrafficLine,
LinkBlock,
2022-09-13 14:51:44 +08:00
LinkTrafficSankey,
2022-09-13 20:10:58 +08:00
LinkTrafficLine,
DnsActiveMaliciousDomain,
DnsEventChart,
DnsRecentEvents,
2023-04-25 16:04:20 +08:00
DnsTrafficLine,
EntityDetailBasicInfo,
EntityDetailLine,
EntityDetailTabsChart
2022-07-06 21:08:12 +08:00
},
props: {
2022-07-22 18:09:18 +08:00
chart: Object,
metric: String,
2022-07-22 18:09:18 +08:00
timeFilter: Object,
2023-04-25 16:04:20 +08:00
extraParams: Object,
entity: Object
2022-07-06 21:08:12 +08:00
},
data () {
return {
typeMapping,
loading: true,
chartData: null,
queryParams: {}
}
},
computed: {
// 排除某些不需要loading的图表例如npm-tabs
disableLoading () {
2022-10-13 16:56:06 +08:00
const disableChartTypes = [typeMapping.npm.npmTabs, typeMapping.linkMonitor.linkTrafficLine]
return disableChartTypes.indexOf(this.chart.type) > -1
}
},
setup (props) {
const dateRangeValue = 60
const { startTime, endTime } = getNowTime(dateRangeValue)
const chartTimeFilter = ref({ startTime, endTime, dateRangeValue })
const table = ref({})
return {
table,
chartTimeFilter
2022-07-06 21:08:12 +08:00
}
},
methods: {
npmTabChange (index) {
this.$emit('npmTabChange', index)
},
resizeLine () {
this.$nextTick(function () {
setTimeout(() => {
if (this.$refs.networkLine) {
this.$refs.networkLine.resize()
}
}, 250)
})
},
toggleLoading (loading) {
this.loading = loading
}
2022-07-06 21:08:12 +08:00
}
}
</script>