diff --git a/nezha-fronted/src/components/charts/chart-alert-list.vue b/nezha-fronted/src/components/charts/chart-alert-list.vue
index c376a8b53..b938daa22 100644
--- a/nezha-fronted/src/components/charts/chart-alert-list.vue
+++ b/nezha-fronted/src/components/charts/chart-alert-list.vue
@@ -68,6 +68,7 @@
@tableDataSort="tableDataSort"
@del="deleteMessage"
@showText="showText"
+ @addSilence="addSilence"
@messageDetail="messageDetail"
ref="alertListTable"
:form="'chartList'"
@@ -159,6 +160,7 @@
+
@@ -171,13 +173,15 @@ import pickTime from '../common/pickTime'
import chart from '../page/dashboard/overview/chart'
import alertMessageTable from '@/components/common/table/alert/alertMessageTable.vue'
import chartDataList from '@/components/common/mixin/chartDataList'
+import alertSilenceBox from '@/components/common/rightBox/alertSilenceBox'
export default {
name: 'chartTable',
components: {
loading: loading,
chart: chart,
'pick-time': pickTime,
- alertMessageTable: alertMessageTable
+ alertMessageTable: alertMessageTable,
+ alertSilenceBox
},
props: {
// 看板id
@@ -207,6 +211,7 @@ export default {
data () {
return {
currentMsg: null,
+ silenceBoxShow: false,
tableHeight: 0,
data: {}, // 该图表信息,chartItem
unit: {},
@@ -323,7 +328,22 @@ export default {
logData: [],
chartLoading: false,
dialogShowText: false,
- dialogText: ''
+ dialogText: '',
+ blankSilenceObject: {
+ id: '',
+ startAt: '',
+ endAt: '',
+ ruleId: '',
+ type: 'asset',
+ linkId: '',
+ remark: '',
+ time: [],
+ matchers: [
+ { name: '', value: '', regex: 0 }
+ ],
+ name: ''
+ },
+ objectSilence: {},
}
},
computed: {
@@ -630,7 +650,7 @@ export default {
this.$get('/alert/message', queryParam).then(response => {
if (response.code === 200) {
this.storedTableData = response.data.list
- this.storedScreanTableData = response.data.list
+ this.storedScreanTableData = JSON.parse(JSON.stringify(response.data.list))
this.pageObj.total = response.data.total
this.isError = false
this.errorContent = ''
@@ -690,7 +710,7 @@ export default {
this.$get('/alert/message', queryParam).then(response => {
if (response.code == 200) {
this.storedTableData = response.data.list
- this.storedScreanTableData = response.data.list
+ this.storedScreanTableData = JSON.parse(JSON.stringify(response.data.list))
const axiosAll = []
this.$nextTick(() => {
this.storedScreanTableData.forEach((item) => {
@@ -1094,6 +1114,43 @@ export default {
showText (row) {
this.dialogShowText = true
this.dialogText = row.alertRule.trbShot
+ },
+ addSilence (row, type) {
+ this.blankSilenceObject.startAt = bus.timeFormate(bus.getOffsetTimezoneData(), 'yyyy-MM-dd hh:mm:ss')
+ this.blankSilenceObject.endAt = bus.timeFormate(bus.getOffsetTimezoneData(1), 'yyyy-MM-dd hh:mm:ss')
+ this.objectSilence = JSON.parse(JSON.stringify(this.blankSilenceObject))
+ this.objectSilence.name = 'Quick silence'
+ if (type !== 'alertMessage' && type !== 'alertRule') {
+ this.objectSilence.matchers = [
+ { name: type, value: row.name, regex: 0 },
+ { name: type + '_id', value: row.id, regex: 0 }
+ ]
+ } else if (type === 'alertMessage') {
+ if (typeof row.labels === 'string') row.labels = JSON.parse(row.labels)
+ const labels = JSON.parse(JSON.stringify(row.labels))
+ this.objectSilence.matchers = []
+ const filterArr = ['alertname', 'severity_id', 'severity', 'rule_type']
+ Object.keys(labels).forEach((key, i) => {
+ if (filterArr.indexOf(key) != -1) {
+ return
+ }
+ this.objectSilence.matchers.push(
+ { name: key, value: labels[key], regex: 0 }
+ )
+ })
+ } else if (type === 'alertRule') {
+ this.objectSilence.matchers = [
+ { name: 'alertName', value: row.name, regex: 0 }
+ ]
+ }
+ this.silenceBoxShow = true
+ },
+ closeSilenceBox (refresh) {
+ this.silenceBoxShow = false
+ if (refresh) {
+ this.delFlag = true
+ this.getAlertList()
+ }
}
},
created () {