Commit 776e6e2c by Alexander Zobnin

ace: redefine completions for prometheus and add initial docs for functions

parent 679ddc96
......@@ -65,6 +65,323 @@ oop.inherits(PrometheusHighlightRules, TextHighlightRules);
exports.PrometheusHighlightRules = PrometheusHighlightRules;
});
ace.define("ace/mode/prometheus_completions",["require","exports","module","ace/token_iterator", "ace/lib/lang"], function(require, exports, module) {
"use strict";
var lang = require("../lib/lang");
var prometheusKeyWords = [
"by", "without", "keep_common", "offset", "bool", "and", "or", "unless", "ignoring", "on", "group_left",
"group_right", "count", "count_values", "min", "max", "avg", "sum", "stddev", "stdvar", "bottomk", "topk", "quantile"
];
var keyWordsCompletions = prometheusKeyWords.map(function(word) {
return {
caption: word,
value: word,
meta: "keyword",
score: Number.MAX_VALUE
}
});
var prometheusFunctions = [
{
name: 'abs()', value: 'abs',
def: 'abs(v instant-vector)',
docText: 'Returns the input vector with all sample values converted to their absolute value.'
},
{
name: 'abs()', value: 'abs',
def: 'abs(v instant-vector)',
docText: 'returns the input vector with all sample values converted to their absolute value.'
},
{
name: 'absent()', value: 'absent',
def: 'absent(v instant-vector)',
docText: 'returns an empty vector if the vector passed to it has any elements and a 1-element vector with the value 1 if the vector passed to it has no elements. This is useful for alerting on when no time series exist for a given metric name and label combination.'
},
{
name: 'ceil()', value: 'ceil',
def: 'ceil(v instant-vector)',
docText: 'rounds the sample values of all elements in `v` up to the nearest integer.'
},
{
name: 'changes()', value: 'changes',
def: 'changes()',
docText: ''
},
{
name: 'clamp_max()', value: 'clamp_max',
def: 'clamp_max()',
docText: ''
},
{
name: 'clamp_min()', value: 'clamp_min',
def: 'clamp_min()',
docText: ''
},
{
name: 'count_scalar()', value: 'count_scalar',
def: 'count_scalar()',
docText: ''
},
{
name: 'day_of_month()', value: 'day_of_month',
def: 'day_of_month()',
docText: ''
},
{
name: 'day_of_week()', value: 'day_of_week',
def: 'day_of_week()',
docText: ''
},
{
name: 'days_in_month()', value: 'days_in_month',
def: 'days_in_month()',
docText: ''
},
{
name: 'delta()', value: 'delta',
def: 'delta()',
docText: ''
},
{
name: 'deriv()', value: 'deriv',
def: 'deriv()',
docText: ''
},
{
name: 'drop_common_labels()', value: 'drop_common_labels',
def: 'drop_common_labels()',
docText: ''
},
{
name: 'exp()', value: 'exp',
def: 'exp()',
docText: ''
},
{
name: 'floor()', value: 'floor',
def: 'floor()',
docText: ''
},
{
name: 'histogram_quantile()', value: 'histogram_quantile',
def: 'histogram_quantile()',
docText: ''
},
{
name: 'holt_winters()', value: 'holt_winters',
def: 'holt_winters()',
docText: ''
},
{
name: 'hour()', value: 'hour',
def: 'hour()',
docText: ''
},
{
name: 'idelta()', value: 'idelta',
def: 'idelta()',
docText: ''
},
{
name: 'increase()', value: 'increase',
def: 'increase()',
docText: ''
},
{
name: 'irate()', value: 'irate',
def: 'irate()',
docText: ''
},
{
name: 'label_replace()', value: 'label_replace',
def: 'label_replace()',
docText: ''
},
{
name: 'ln()', value: 'ln',
def: 'ln()',
docText: ''
},
{
name: 'log2()', value: 'log2',
def: 'log2()',
docText: ''
},
{
name: 'log10()', value: 'log10',
def: 'log10()',
docText: ''
},
{
name: 'minute()', value: 'minute',
def: 'minute()',
docText: ''
},
{
name: 'month()', value: 'month',
def: 'month()',
docText: ''
},
{
name: 'predict_linear()', value: 'predict_linear',
def: 'predict_linear()',
docText: ''
},
{
name: 'rate()', value: 'rate',
def: 'rate()',
docText: ''
},
{
name: 'resets()', value: 'resets',
def: 'resets()',
docText: ''
},
{
name: 'round()', value: 'round',
def: 'round()',
docText: ''
},
{
name: 'scalar()', value: 'scalar',
def: 'scalar()',
docText: ''
},
{
name: 'sort()', value: 'sort',
def: 'sort()',
docText: ''
},
{
name: 'sort_desc()', value: 'sort_desc',
def: 'sort_desc()',
docText: ''
},
{
name: 'sqrt()', value: 'sqrt',
def: 'sqrt()',
docText: ''
},
{
name: 'time()', value: 'time',
def: 'time()',
docText: ''
},
{
name: 'vector()', value: 'vector',
def: 'vector()',
docText: ''
},
{
name: 'year()', value: 'year',
def: 'year()',
docText: ''
},
{
name: 'avg_over_time()', value: 'avg_over_time',
def: 'avg_over_time()',
docText: ''
},
{
name: 'min_over_time()', value: 'min_over_time',
def: 'min_over_time()',
docText: ''
},
{
name: 'max_over_time()', value: 'max_over_time',
def: 'max_over_time()',
docText: ''
},
{
name: 'sum_over_time()', value: 'sum_over_time',
def: 'sum_over_time()',
docText: ''
},
{
name: 'count_over_time()', value: 'count_over_time',
def: 'count_over_time()',
docText: ''
},
{
name: 'quantile_over_time()', value: 'quantile_over_time',
def: 'quantile_over_time()',
docText: ''
},
{
name: 'stddev_over_time()', value: 'stddev_over_time',
def: 'stddev_over_time()',
docText: ''
},
{
name: 'stdvar_over_time()', value: 'stdvar_over_time',
def: 'stdvar_over_time()',
docText: ''
},
];
function wrapText(str, len) {
len = len || 60;
var lines = [];
var space_index = 0;
var line_start = 0;
var next_line_end = len;
var line = "";
for (var i = 0; i < str.length; i++) {
if (str[i] === ' ') {
space_index = i;
} else if (i >= next_line_end && space_index != 0) {
line = str.slice(line_start, space_index);
lines.push(line);
line_start = space_index + 1;
next_line_end = i + len;
space_index = 0;
}
}
line = str.slice(line_start);
lines.push(line);
return lines.join("&nbsp<br>");
}
function convertMarkDownTags(text) {
text = text.replace(/```(.+)```/, "<pre>$1</pre>");
text = text.replace(/`([^`]+)`/, "<code>$1</code>");
return text;
}
function convertToHTML(item) {
var docText = lang.escapeHTML(item.docText);
docText = convertMarkDownTags(wrapText(docText));
return [
"<b>", lang.escapeHTML(item.def), "</b>", "<hr></hr>", docText, "<br>&nbsp"
].join("");
}
var functionsCompletions = prometheusFunctions.map(function(item) {
return {
caption: item.name,
value: item.value,
docHTML: convertToHTML(item),
meta: "function",
score: Number.MAX_VALUE
};
});
var PrometheusCompletions = function() {};
(function() {
this.getCompletions = function(state, session, pos, prefix, callback) {
var completions = keyWordsCompletions.concat(functionsCompletions);
callback(null, completions);
};
}).call(PrometheusCompletions.prototype);
exports.PrometheusCompletions = PrometheusCompletions;
});
ace.define("ace/mode/behaviour/prometheus",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) {
"use strict";
......@@ -142,11 +459,15 @@ ace.define("ace/mode/prometheus",["require","exports","module","ace/lib/oop","ac
var oop = require("../lib/oop");
var TextMode = require("./text").Mode;
var PrometheusHighlightRules = require("./prometheus_highlight_rules").PrometheusHighlightRules;
var PrometheusCompletions = require("./prometheus_completions").PrometheusCompletions;
var PrometheusBehaviour = require("./behaviour/prometheus").PrometheusBehaviour;
var Mode = function() {
this.HighlightRules = PrometheusHighlightRules;
this.$behaviour = new PrometheusBehaviour();
this.$completer = new PrometheusCompletions();
// replace keyWordCompleter
this.completer = this.$completer;
};
oop.inherits(Mode, TextMode);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment