completer.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. ///<reference path="../../../headers/common.d.ts" />
  2. import {PrometheusDatasource} from "./datasource";
  3. export class PromCompleter {
  4. identifierRegexps = [/[\[\]a-zA-Z_0-9=]/];
  5. constructor(private datasource: PrometheusDatasource) {
  6. }
  7. getCompletions(editor, session, pos, prefix, callback) {
  8. let token = session.getTokenAt(pos.row, pos.column);
  9. switch (token.type) {
  10. case 'label.name':
  11. callback(null, ['instance', 'job'].map(function (key) {
  12. return {
  13. caption: key,
  14. value: key,
  15. meta: "label name",
  16. score: Number.MAX_VALUE
  17. };
  18. }));
  19. return;
  20. case 'label.value':
  21. callback(null, []);
  22. return;
  23. }
  24. if (prefix === '[') {
  25. var vectors = [];
  26. for (let unit of ['s', 'm', 'h']) {
  27. for (let value of [1,5,10,30]) {
  28. vectors.push({caption: value+unit, value: '['+value+unit, meta: 'range vector'});
  29. }
  30. }
  31. callback(null, vectors);
  32. return;
  33. }
  34. var query = prefix;
  35. var line = editor.session.getLine(pos.row);
  36. return this.datasource.performSuggestQuery(query, true).then(metricNames => {
  37. callback(null, metricNames.map(name => {
  38. let value = name;
  39. if (prefix === '(') {
  40. value = '(' + name;
  41. }
  42. return {
  43. caption: name,
  44. value: value,
  45. meta: 'metric',
  46. };
  47. }));
  48. });
  49. }
  50. }