diff --git a/nezha-fronted/src/components/common/rightBox/moduleBox.vue b/nezha-fronted/src/components/common/rightBox/moduleBox.vue index 6b14d9bd5..a139bf14f 100644 --- a/nezha-fronted/src/components/common/rightBox/moduleBox.vue +++ b/nezha-fronted/src/components/common/rightBox/moduleBox.vue @@ -80,6 +80,8 @@ :result-format="resultFormat" > + +
@@ -89,6 +91,7 @@
+ @@ -141,14 +144,14 @@ - + - - + +
@@ -173,6 +176,7 @@
+
@@ -198,6 +202,7 @@
+
@@ -217,84 +222,86 @@
- -
-
-
- {{$t('project.endpoint.item') + index}} - - - -
-
- - - - - - - - - - - -
- -
- - - - - - - - -
-
-
- - {{$t('overall.moreOption')}} - + + +
+
+
+ {{$t('project.endpoint.item') + index}} + + +
+
+ + + + + + + + + + + +
+ +
+ + + + + + + +
+
+
+ + {{$t('overall.moreOption')}} + +
-
- - - -
- +
+
+ + + +
+
+ @@ -304,22 +311,22 @@ - + - - + - + - + +
@@ -328,210 +335,355 @@
-
-
- - - - - - - - - - - - - - - - - - - - - - -
-
- - - - = - - - - -
-
-
- - - -
-
- -
-
- {{item2.type}} - - - - -
-
- - - - - - -
-
- -
- - +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + = - - + + - - -
- - - -
-
- - - - - - -
-
- - - - - - - - -
-
- -
- - - - = - - - - - +
-
- - - +
+ + +
-
-
-
- + + + +
+
+
+ {{$t('project.endpoint.item') + subIndex}} + + + +
+
+ + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+
+ + {{$t('overall.moreOption')}} + + +
+
-
- - - - - - - - - - - +
+ + + +
+ + + +
+
+ {{item2.type}} + + + + +
+
+ + + + + + +
+
+ +
+ + + + = + + + + + +
+ + + +
+
+ + + + + + +
+
+ + + + + + + + +
+
+ +
+ + + + = + + + + + +
+
+
+ + + +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
-
- -
-
@@ -681,6 +833,10 @@ export default { { value: 'syslog', name: 'Syslog' + }, + { + value: 'kubernetes', + name: 'Kubernetes' } ], authType: 0, @@ -689,6 +845,8 @@ export default { { name: this.$t('project.endpoint.authTypeWord'), value: 1 }, { name: this.$t('project.endpoint.authTypeToken'), value: 2 } ], + + logsAuthType: [0], configsCopyValue: '', logsCopyValue: [], pipelineOption: [ @@ -751,7 +909,30 @@ export default { label: 'Labelkeep' }], metricsShow: true, - logsShow: true + logsShow: true, + + logsRoleList: [ + { + value: 'endpoints', + label: 'endpoints' + }, + { + value: 'service', + label: 'service' + }, + { + value: 'pod', + label: 'pod' + }, + { + value: 'node', + label: 'node' + }, + { + value: 'ingress', + label: 'ingress' + } + ] } }, methods: { @@ -885,18 +1066,11 @@ export default { pipeline.expressions = this.labelsToJson(pipeline.expressions) } }) - if (item.type === 'file') { - delete item.unit - delete item.appName - delete item.listenAddress - } else if (item.type === 'journal') { - delete item.fileName - delete item.appName - delete item.listenAddress - } else if (item.type === 'syslog') { - delete item.fileName - delete item.unit - } + item.namespaces && delete item.namespaces.tags + item.relabel_config && item.relabel_config.forEach(subItem => { + delete subItem.tags + delete subItem.showAllRelabelOption + }) }) params.configs[0].config.relabel_config && params.configs[0].config.relabel_config.forEach(item => { delete item.tags @@ -925,6 +1099,10 @@ export default { this.activeNameLogs[keyArr[3]] = 'Labels' } else if (str === 'pipeline') { this.activeNameLogs[keyArr[3]] = 'Pipeline' + } else if (str === 'relabel_config') { + this.activeNameLogs[keyArr[3]] = 'Relabel' + } else if (str === 'basic_auth' || str === 'bearer_token') { + this.activeNameLogs[keyArr[3]] = 'Auth' } this.activeNameLogs = [...this.activeNameLogs] } @@ -1041,6 +1219,13 @@ export default { this.$refs.moduleForm.clearValidate('configs.0.config.relabel_config.' + index + '.regex') this.$refs.moduleForm.clearValidate('configs.0.config.relabel_config.' + index + '.replacement') }, + logsActionChange (index, subIndex) { + this.$refs.moduleForm.clearValidate('configs.1.config.' + index + '.relabel_config.' + index + '.target_label') + this.$refs.moduleForm.clearValidate('configs.1.config.' + index + '.relabel_config.' + index + '.source_labels') + this.$refs.moduleForm.clearValidate('configs.1.config.' + index + '.relabel_config.' + index + '.regex') + this.$refs.moduleForm.clearValidate('configs.1.config.' + index + '.relabel_config.' + index + '.replacement') + }, + addRelabel () { this.editModule.configs[0].config.relabel_config.push({ source_labels: [], @@ -1066,13 +1251,29 @@ export default { this.editModule.configs[0].config.relabel_config.splice(index, 1) this.$refs.moduleForm.clearValidate() }, + + logsAddRelabel (index) { + this.editModule.configs[1].config[index].relabel_config.push({ + source_labels: [], + target_label: '', + action: '', + regex: '(.*)', + replacement: '$1', + showAllRelabelOption: false + }) + }, + logsRemoveRelabel (index, subIndex) { + this.editModule.configs[1].config[index].relabel_config.splice(subIndex, 1) + this.$refs.moduleForm.clearValidate() + }, + tagsChange (newTags, index) { this.editModule.paramObj[index].value = newTags.map(item => item.text) }, - tagsChangeRelabel (newTags, index) { - this.editModule.configs[0].config.relabel_config[index].source_labels = newTags.map(item => item.text) - this.$refs.moduleForm.clearValidate('configs.0.config.relabel_config.' + index + '.source_labels') + logsTagsChange (newTags, item) { + this.$set(item.namespaces, 'names', newTags.map(item => item.text)) }, + beforeAddingTag (tag) { const regx = /[a-zA-Z_:][a-zA-Z0-9_:]*/ if (regx.test(tag.tag.text)) { @@ -1081,11 +1282,26 @@ export default { this.$message.error(this.$t('tip.tagError')) } }, + tagsChangeRelabel (newTags, index) { + this.editModule.configs[0].config.relabel_config[index].source_labels = newTags.map(item => item.text) + this.$refs.moduleForm.clearValidate('configs.0.config.relabel_config.' + index + '.source_labels') + }, relabelTabBlur (tag) { this.$nextTick(() => { this.$refs.relabelTag[0].newTag = '' }) }, + + logsTagsChangeRelabel (newTags, index, subIndex) { + this.editModule.configs[1].config[index].relabel_config[subIndex].source_labels = newTags.map(item => item.text) + this.$refs.moduleForm.clearValidate('configs.1.config.' + index + '.relabel_config.' + subIndex + '.source_labels') + }, + logsRelabelTabBlur (index, subIndex) { + this.$nextTick(() => { + this.$refs['logsRelabelTag' + index + subIndex][0].newTag = '' + }) + }, + // 将param转为json字符串格式 paramToJson (param) { const tempParam = {} @@ -1120,6 +1336,16 @@ export default { return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0) } }, + changeBasicType () { + if (this.editModule.configs[0].config.protocol === 'snmp') { + this.editModule.configs[0].config.metrics_path = '' + this.editModule.configs[0].config.bearer_token = '' + this.editModule.configs[0].config.basic_auth = { + username: '', + password: '' + } + } + }, changeAuthType () { this.editModule.configs[0].config.bearer_token = '' this.editModule.configs[0].config.basic_auth = { @@ -1127,35 +1353,70 @@ export default { password: '' } }, - changeBasicType () { - if (this.editModule.configs[0].config.protocol === 'snmp') { - this.editModule.configs[0].config.metrics_path = '' - } + + logsAuthTypeChange (item) { + this.$set(item, 'bearer_token', '') + this.$set(item, 'basic_auth', { + username: '', + password: '' + }) }, - logsLogsArrAdd () { + logsArrAdd () { this.activeNameLogs.push('Basic') this.logsCopyValue.push('') + this.logsAuthType.push(0) this.editModule.configs[1].config.push({ type: 'file', fileName: '', unit: '', appName: '', listenAddress: '', + apiServer: '', + role: '', + namespaces: { + tags: '', + names: [] + }, labels: '', labelModule: [{ key: '', value: '' }], - pipeline: [] + pipeline: [], + basic_auth: { + username: '', + password: '' + }, + bearer_token: '', + relabel_config: [] }) }, removeLogsArr (index) { if (this.editModule.configs[1].config.length !== 1) { + this.activeNameLogs.splice(index, 1) + this.logsCopyValue.splice(index, 1) + this.logsAuthType.splice(index, 1) this.editModule.configs[1].config.splice(index, 1) } }, - logsBasicTypeChange (i) { - this.editModule.configs[1].config[i].fileName = '' - this.editModule.configs[1].config[i].unit = '' - this.editModule.configs[1].config[i].appName = '' - this.editModule.configs[1].config[i].listenAddress = '' + logsBasicTypeChange (item, val) { + item.fileName = '' + item.unit = '' + item.appName = '' + item.listenAddress = '' + item.apiServer = '' + item.role = '' + item.namespaces = { + tags: '', + names: [] + } + if (val === 'kubernetes') { + item.apiServer = '127.0.0.1' + item.role = 'pod' + } else { + item.bearer_token = '' + item.basic_auth = { + username: '', + password: '' + } + } }, copyValue () { const domUrl = document.createElement('input') @@ -1337,6 +1598,16 @@ export default { this.expandedWalkData.push(this.editModule.configs[0].config.walk[i].substring(0, this.editModule.configs[0].config.walk[i].lastIndexOf('.'))) } } + + this.editModule.configs[1].config.forEach((item, index) => { + if (item.bearer_token) { + this.logsAuthType[index] = 2 + } else if (item.basic_auth && item.basic_auth.username) { + this.logsAuthType[index] = 1 + } else { + this.logsAuthType[index] = 0 + } + }) } }, editModule: { @@ -1351,7 +1622,7 @@ export default { if (!params[0].config[key]) { delete params[0].config[key] } - if (Array.isArray(params[0].config[key]) && !params[0].config[key].length) { + if ((Array.isArray(params[0].config[key]) && !params[0].config[key].length) || (JSON.stringify(params[0].config[key]) == '{}')) { delete params[0].config[key] } }) @@ -1371,6 +1642,7 @@ export default { delete item.tags delete item.showAllRelabelOption }) + params[1].config.forEach(item => { if (item.labelModule) { item.labels = this.labelsToJson(item.labelModule) @@ -1384,18 +1656,32 @@ export default { pipeline.expressions = this.labelsToJson(pipeline.expressions) } }) - if (item.type === 'file') { - delete item.unit - delete item.appName - delete item.listenAddress - } else if (item.type === 'journal') { - delete item.fileName - delete item.appName - delete item.listenAddress - } else if (item.type === 'syslog') { - delete item.fileName - delete item.unit + + if (item.namespaces) { + delete item.namespaces.tags + if (!item.namespaces.names.length) { + delete item.namespaces.names + } } + Object.keys(item).forEach(key => { + if (!item[key]) { + delete item[key] + } + if ((Array.isArray(item[key]) && !item[key].length) || (JSON.stringify(item[key]) == '{}')) { + delete item[key] + } + }) + if (item.basic_auth && !item.basic_auth.username) { + delete item.basic_auth + } + if (item.basic_auth && !item.basic_auth.password) { + delete item.basic_auth + } + + item.relabel_config && item.relabel_config.forEach(subItem => { + delete subItem.tags + delete subItem.showAllRelabelOption + }) }) this.configsCopyValue = JSON.stringify(params, null, 2) } diff --git a/nezha-fronted/src/components/page/monitor/module/moduleList.vue b/nezha-fronted/src/components/page/monitor/module/moduleList.vue index 2a76e82fd..ae3565c69 100644 --- a/nezha-fronted/src/components/page/monitor/module/moduleList.vue +++ b/nezha-fronted/src/components/page/monitor/module/moduleList.vue @@ -235,9 +235,21 @@ export default { unit: '', appName: '', listenAddress: '', + apiServer: '', + role: '', + namespaces: { + tags: '', + names: [] + }, labels: '', labelModule: [{ key: '', value: '' }], - pipeline: [] + pipeline: [], + basic_auth: { + username: '', + password: '' + }, + bearer_token: '', + relabel_config: [] }], enable: 1 } @@ -323,6 +335,7 @@ export default { item.showAllRelabelOption = false item.tags = '' }) + this.object.configs[1].config.forEach(item => { item.labelModule = [] if (JSON.stringify(item.labels) !== '{}' && item.labels) { @@ -356,18 +369,10 @@ export default { pipeline.expressions = expressionsArr } }) - if (item.type === 'file') { - item.unit = '' - item.appName = '' - item.listenAddress = '' - } else if (item.type === 'journal') { - item.fileName = '' - item.appName = '' - item.listenAddress = '' - } else if (item.type === 'syslog') { - item.fileName = '' - item.unit = '' - } + item.relabel_config && item.relabel_config.forEach(item => { + item.showAllRelabelOption = false + item.tags = '' + }) }) if (JSON.stringify(this.object.configs[0].config.labels) !== '{}' && this.object.configs[0].config.labels) { Object.keys(this.object.configs[0].config.labels).forEach(key => {