Browse Source

code-editor: prometheus metrics autocomplete

Alexander Zobnin 8 years ago
parent
commit
1c8c746956

+ 20 - 1
public/app/core/components/code_editor/code_editor.ts

@@ -125,6 +125,23 @@ function link(scope, elem, attrs) {
     }
   });
 
+  let extCompleter = {
+    getCompletions: getExtCompletions
+  };
+
+  function getExtCompletions(editor, session, pos, prefix, callback) {
+    scope.getMetrics(prefix).then(results => {
+      let wordList = results;
+      callback(null, wordList.map(word => {
+        return {
+          caption: word,
+          value: word,
+          meta: "metric"
+        };
+      }));
+    });
+  }
+
   function setLangMode(lang) {
     let aceModeName = `ace/mode/${lang}`;
     fixModuleUrl("mode", lang);
@@ -136,6 +153,7 @@ function link(scope, elem, attrs) {
         enableLiveAutocompletion: true,
         enableSnippets: true
       });
+      codeEditor.completers.push(extCompleter);
     });
   }
 
@@ -157,7 +175,8 @@ export function codeEditorDirective() {
     template: editorTemplate,
     scope: {
       content: "=",
-      onChange: "&"
+      onChange: "&",
+      getMetrics: "="
     },
     link: link
   };

+ 3 - 1
public/app/plugins/datasource/prometheus/partials/query.editor.html

@@ -7,7 +7,9 @@
 
 	<div class="gf-form-inline">
 		<div class="gf-form gf-form--grow">
-			<code-editor content="ctrl.target.expr" on-change="ctrl.refreshMetricData()" data-mode="prometheus"></code-editor>
+			<code-editor content="ctrl.target.expr" on-change="ctrl.refreshMetricData()"
+				get-metrics="ctrl.getMetricsAutocomplete" data-mode="prometheus">
+			</code-editor>
 		</div>
 	</div>
 

+ 5 - 0
public/app/plugins/datasource/prometheus/query_ctrl.ts

@@ -15,6 +15,7 @@ class PrometheusQueryCtrl extends QueryCtrl {
   formats: any;
   oldTarget: any;
   suggestMetrics: any;
+  getMetricsAutocomplete: any;
   linkToPrometheus: any;
 
   /** @ngInject */
@@ -51,6 +52,10 @@ class PrometheusQueryCtrl extends QueryCtrl {
       this.datasource.performSuggestQuery(query).then(callback);
     };
 
+    this.getMetricsAutocomplete = (query) => {
+      return this.datasource.performSuggestQuery(query);
+    };
+
     this.updateLink();
   }