diff --git a/nezha-fronted/src/assets/css/components/page/dashboard/explore/queryPrompt.scss b/nezha-fronted/src/assets/css/components/page/dashboard/explore/queryPrompt.scss index 5b6090a0d..779d38df2 100644 --- a/nezha-fronted/src/assets/css/components/page/dashboard/explore/queryPrompt.scss +++ b/nezha-fronted/src/assets/css/components/page/dashboard/explore/queryPrompt.scss @@ -10,6 +10,7 @@ transform: unset; z-index: 11; max-height: 400px; + font-size: 14px; .explore-history-box-header { padding-left: 20px; } @@ -24,12 +25,18 @@ padding: 10px 0 10px 10px } .query-prompt-log { - padding: 20px 0 20px 20px; + padding: 0 20px 10px 20px; + color: $--color-text-primary; + .query-prompt-log-title { + margin: 5px 0 10px 0; + } .query-prompt-log-content { - height: 210px; + height: 220px; border: 1px solid $--border-color-light; border-radius: 2px; display: flex; + color: $--color-text-regular; + margin-bottom: 5px; .query-prompt-log-content-left { border-right: 1px solid $--border-color-light; width: 34%; @@ -37,17 +44,103 @@ box-sizing: border-box; height: 100%; overflow-y: auto; - .log-content-left-label { - height: 32px; - line-height: 32px; - text-transform: capitalize; + } + .log-content-left-label, .log-content-right-value{ + height: 32px; + line-height: 32px; + text-transform: capitalize; + box-sizing: border-box; + padding: 0 8px 0 20px; + display: flex; + align-items: center; + justify-content: space-between; + .log-content-left-label-text { + max-width: calc(100% - 36px); + min-width: calc(100% - 50px); } + .log-content-left-label-text.is-select { + color: $--color-primary; + } + .label-badge { + min-width: 16px; + height: 16px; + display: inline-block; + background: $--color-primary; + color: #ffffff; + font-size: 12px; + padding: 2px; + border-radius: 10px; + text-align: center; + line-height: 16px; + margin-right: 5px; + } + } + .log-content-left-label:hover, .log-content-right-value:hover{ + background: $--table-row-hover-background-color; } .query-prompt-log-content-right { flex: 1; overflow-y: auto; overflow-x: hidden; + .log-content-right-value { + width: 100%; + display: flex; + align-items: center; + .log-content-right-value-text { + width: 100%; + } + .nz-icon{ + width: 24px; + display: none; + color: $--color-primary; + } + } + .log-content-right-value.is-select{ + background: $--table-row-hover-background-color; + .log-content-right-value-text { + width: calc(100% - 24); + } + .nz-icon{ + display: inline-block; + } + } } } + .query-prompt-log-final { + height: 30px; + flex-shrink: 0; + border: 1px solid $--border-color-light; + border-radius: 2px; + line-height: 30px; + font-size: 14px; + padding: 0 10px; + display: flex; + align-items: center; + .query-prompt-log-final-box { + display: inline-block; + width: calc(100% - 24px); + height: 100%; + .nz-icon{ + display: none; + vertical-align: middle; + } + } + .query-prompt-log-final-text { + display: inline-block; + max-width: 100%; + vertical-align: middle; + } + + } + .query-prompt-log-final:hover { + .query-prompt-log-final-text { + display: inline-block; + max-width: calc(100% - 24px); + } + .nz-icon{ + display: inline-block; + } + } + } } diff --git a/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTab.vue b/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTab.vue index b096181ad..8158769ac 100644 --- a/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTab.vue +++ b/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTab.vue @@ -123,6 +123,7 @@ export default { data () { return { // 详情相关 + orderBy: '-id', fromRoute: fromRoute, graphShow: false, chartDatas: [], diff --git a/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTabNew.vue b/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTabNew.vue index 9c78f6d97..1dc1744f7 100644 --- a/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTabNew.vue +++ b/nezha-fronted/src/components/common/bottomBox/tabs/alertMessageTabNew.vue @@ -188,6 +188,7 @@ export default { }, data () { return { + orderBy: '-id', stateOptions: alertMessageConstant.states, url: 'alert/message', urlNew: 'alert/message/query', diff --git a/nezha-fronted/src/components/common/mixin/mainMixinFun.js b/nezha-fronted/src/components/common/mixin/mainMixinFun.js index aba788ac9..24356f389 100644 --- a/nezha-fronted/src/components/common/mixin/mainMixinFun.js +++ b/nezha-fronted/src/components/common/mixin/mainMixinFun.js @@ -270,6 +270,7 @@ export default { end = this.momentSetDay(noTime, 7, 'YYYY-MM-DD') } start += ' 00:00:00' + end += ' 23:59:59' start = this.momentTz(this.momentStrToTimestamp(start, 'YYYY-MM-DD HH:mm:ss')) end = this.momentTz(this.momentStrToTimestamp(end, 'YYYY-MM-DD HH:mm:ss')) } diff --git a/nezha-fronted/src/components/common/timePicker.vue b/nezha-fronted/src/components/common/timePicker.vue index 79d55416d..29d3e0fb4 100644 --- a/nezha-fronted/src/components/common/timePicker.vue +++ b/nezha-fronted/src/components/common/timePicker.vue @@ -585,6 +585,7 @@ export default { end = this.momentSetDay(noTime, 7, 'YYYY-MM-DD') } start += ' 00:00:00' + end = end + ' 23:59:59' start = this.momentTz(this.momentStrToTimestamp(start, 'YYYY-MM-DD HH:mm:ss')) end = this.momentTz(this.momentStrToTimestamp(end, 'YYYY-MM-DD HH:mm:ss')) } diff --git a/nezha-fronted/src/components/page/alert/alertMessage.vue b/nezha-fronted/src/components/page/alert/alertMessage.vue index dea032f80..6ac073953 100644 --- a/nezha-fronted/src/components/page/alert/alertMessage.vue +++ b/nezha-fronted/src/components/page/alert/alertMessage.vue @@ -212,6 +212,7 @@ export default { mixins: [dataListMixin, routerPathParams], data () { return { + orderBy: '-id', chartLoading: false, chartInfo: {}, alertMessageNzTableHeightOffset: 242, diff --git a/nezha-fronted/src/components/page/dashboard/dashboard.vue b/nezha-fronted/src/components/page/dashboard/dashboard.vue index f837f3bd6..bf865f290 100644 --- a/nezha-fronted/src/components/page/dashboard/dashboard.vue +++ b/nezha-fronted/src/components/page/dashboard/dashboard.vue @@ -8,94 +8,92 @@
-
- +
+
- +
diff --git a/nezha-fronted/src/components/page/dashboard/explore/logql/logqlMixin.js b/nezha-fronted/src/components/page/dashboard/explore/logql/logqlMixin.js index 4130f1e7a..d96d782fd 100644 --- a/nezha-fronted/src/components/page/dashboard/explore/logql/logqlMixin.js +++ b/nezha-fronted/src/components/page/dashboard/explore/logql/logqlMixin.js @@ -8,7 +8,7 @@ export default { LANGUAGE_SETUP_STARTED: false, parser, MONACO_EDITOR_OPTIONS: { - automaticLayout: true, + automaticLayout: false, formatOnType: true, formatOnPaste: true, codeLens: false, @@ -79,7 +79,6 @@ export default { * Enabling this might have a severe performance impact. * Defaults to true. */ - automaticLayout: true }, suggestFontSize: 12, wordWrap: 'on', diff --git a/nezha-fronted/src/components/page/dashboard/explore/promqlInput.vue b/nezha-fronted/src/components/page/dashboard/explore/promqlInput.vue index f2f3076d3..d1392bdc2 100644 --- a/nezha-fronted/src/components/page/dashboard/explore/promqlInput.vue +++ b/nezha-fronted/src/components/page/dashboard/explore/promqlInput.vue @@ -42,7 +42,7 @@ {{ appendMsg }}
- +
@@ -145,7 +145,7 @@
- +
@@ -1128,6 +1128,15 @@ export default { } }) } + }, + selectLog (str) { + if (!str || str.length === 0) return + this.expressionList[this.index] = str + this.codeMirrorValue[this.index] = str + this.dropDownVisible = false + this.$emit('change', str) + this.$forceUpdate() + this.cascaderValue = '' } }, watch: { diff --git a/nezha-fronted/src/components/page/dashboard/explore/queryPrompt/queryPrompt.vue b/nezha-fronted/src/components/page/dashboard/explore/queryPrompt/queryPrompt.vue index 0f06c9d20..60d6fbf42 100644 --- a/nezha-fronted/src/components/page/dashboard/explore/queryPrompt/queryPrompt.vue +++ b/nezha-fronted/src/components/page/dashboard/explore/queryPrompt/queryPrompt.vue @@ -62,22 +62,43 @@
-
1.Select label names and values
+
1.Select label names and values
-
- {{item}} +
+
+ {{item}} +
+ +
{{selectLogLabels[item].length}}
+ +
-
- +
+
+ {{item.value}} +
+
-
2.Resulting selector
+
2.Resulting selector
- {{logFinalStr}} +
+
{{logFinalStr}}
+ +
+
@@ -124,12 +145,13 @@ export default { pageSize: 20, total: 0 }, - logFinalStr: {}, + logFinalStr: '{}', logLabels: [], logLabelsShow: '', logValues: [], selectLogLabels: {}, - logLoading: false + logLoading: false, + activeLabel: '' } }, mounted () { @@ -226,12 +248,14 @@ export default { getLogLabelsValues (labels) { this.logLoading = true this.logValues = [] + this.activeLabel = labels this.$get(`/logs/loki/api/v1/label/${labels}/values`).then(res => { this.logLoading = false if (res.data) { const nodes = res.data.sort().map(d => ({ value: d, label: d, + type: labels, leaf: true })) this.logValues = nodes @@ -241,6 +265,47 @@ export default { console.log(this.logValues) }) }, + selectValue (obj) { + const key = obj.type + if (this.selectLogLabels[key]) { + const index = this.selectLogLabels[key].indexOf(obj.value) + if (index !== -1) { + this.selectLogLabels[key].splice(index, 1) + if (!this.selectLogLabels[key].length) { + delete this.selectLogLabels[key] + } + } else { + this.selectLogLabels[key].push(obj.value) + } + } else { + this.selectLogLabels[key] = [obj.value] + } + this.$forceUpdate() + this.renderLogQl() + }, + renderLogQl () { + let str = '{' + Object.keys(this.selectLogLabels).forEach(key => { + str += key + if (this.selectLogLabels[key].length === 1) { + str += '="' + str += this.selectLogLabels[key][0] + str += '"' + } else { + str += '=~"' + this.selectLogLabels[key].forEach(item => { + str += this.$lodash.escapeRegExp(item) + str += '|' + }) + str = str.slice(0, -1) + str += '"' + } + str += ',' + }) + str = str.slice(0, -1) + str += '}' + this.logFinalStr = str + }, hideMe () { this.$emit('close') }, @@ -271,6 +336,10 @@ export default { this.$emit('selectMetric', item) this.hideMe() }, + selectLog () { + this.$emit('selectLog', this.logFinalStr) + this.hideMe() + }, copyItem (value) { this.$copyText(value).then(() => { this.$message.success({ message: this.$t('overall.copySuccess') })