From e98254e1e3393d8dd008f013424a933649ca8bbc Mon Sep 17 00:00:00 2001 From: Mitsuhiro Tanda Date: Thu, 7 Sep 2017 17:10:52 +0900 Subject: [PATCH] show only label name in label matcher (#9167) --- .../components/code_editor/mode-prometheus.js | 36 +++++++++++++++++-- .../datasource/prometheus/completer.ts | 18 ++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/public/app/core/components/code_editor/mode-prometheus.js b/public/app/core/components/code_editor/mode-prometheus.js index 0bed46e755b..4d2b2e9fe96 100644 --- a/public/app/core/components/code_editor/mode-prometheus.js +++ b/public/app/core/components/code_editor/mode-prometheus.js @@ -49,15 +49,42 @@ var PrometheusHighlightRules = function() { regex : "\\+|\\-|\\*|\\/|%|\\^|=|==|!=|<=|>=|<|>|=\\~|!\\~" }, { token : "paren.lparen", - regex : "[[({]" + regex : "[[(]" + }, { + token : "paren.lparen", + regex : "{", + next : "start-label-matcher" }, { token : "paren.rparen", - regex : "[\\])}]" + regex : "[\\])]" + }, { + token : "paren.rparen", + regex : "}" }, { token : "text", regex : "\\s+" + } ], + "start-label-matcher" : [ { + token : "label.name", + regex : '[a-zA-Z_][a-zA-Z0-9_]*' + }, { + token : "label.matching_operator", + regex : '=|!=|=~|!~' + }, { + token : "label.value", + regex : '"[^"]*"|\'[^\']*\'' + }, { + token : "label.matching_delimiter", + regex : ",", + push : 'start-label-matcher' + }, { + token : "label.matching_end", + regex : "}", + next : "start" } ] }; + + this.normalizeRules(); }; oop.inherits(PrometheusHighlightRules, TextHighlightRules); @@ -373,6 +400,11 @@ var PrometheusCompletions = function() {}; (function() { this.getCompletions = function(state, session, pos, prefix, callback) { + let token = session.getTokenAt(pos.row, pos.column); + if (token.type === 'label.name' || token.type === 'label.value') { + return callback(null, []); + } + var completions = keyWordsCompletions.concat(functionsCompletions); callback(null, completions); }; diff --git a/public/app/plugins/datasource/prometheus/completer.ts b/public/app/plugins/datasource/prometheus/completer.ts index 238ab208228..e1b0984399d 100644 --- a/public/app/plugins/datasource/prometheus/completer.ts +++ b/public/app/plugins/datasource/prometheus/completer.ts @@ -9,6 +9,24 @@ export class PromCompleter { } getCompletions(editor, session, pos, prefix, callback) { + let token = session.getTokenAt(pos.row, pos.column); + + switch (token.type) { + case 'label.name': + callback(null, ['instance', 'job'].map(function (key) { + return { + caption: key, + value: key, + meta: "label name", + score: Number.MAX_VALUE + }; + })); + return; + case 'label.value': + callback(null, []); + return; + } + if (prefix === '[') { var vectors = []; for (let unit of ['s', 'm', 'h']) {