Skip to content

Commit b8aa8b3

Browse files
committed
feat(prometheus): restore old prometheus query editor, revert this commit in prometheus query editor v2 branch
1 parent c77d72b commit b8aa8b3

File tree

7 files changed

+89
-403
lines changed

7 files changed

+89
-403
lines changed

public/app/plugins/datasource/prometheus/datasource.ts

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -256,23 +256,14 @@ export function PrometheusDatasource(instanceSettings, $q, backendSrv, templateS
256256
return this.renderTemplate(options.legendFormat, labelData) || '{}';
257257
};
258258

259-
this.renderTemplate = function(format, data) {
260-
var originalSettings = _.templateSettings;
261-
_.templateSettings = {
262-
interpolate: /\{\{(.+?)\}\}/g
263-
};
264-
265-
var template = _.template(templateSrv.replace(format));
266-
var result;
267-
try {
268-
result = template(data);
269-
} catch (e) {
270-
result = null;
271-
}
272-
273-
_.templateSettings = originalSettings;
274-
275-
return result;
259+
this.renderTemplate = function(aliasPattern, aliasData) {
260+
var aliasRegex = /\{\{\s*(.+?)\s*\}\}/g;
261+
return aliasPattern.replace(aliasRegex, function(match, g1) {
262+
if (aliasData[g1]) {
263+
return aliasData[g1];
264+
}
265+
return g1;
266+
});
276267
};
277268

278269
this.getOriginalMetricName = function(labelData) {

public/app/plugins/datasource/prometheus/metric_find_query.js

Lines changed: 50 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,27 @@ function (_) {
1111
}
1212

1313
PrometheusMetricFindQuery.prototype.process = function() {
14-
var labelValuesRegex = /^label_values\((?:(.+),\s*)?([a-zA-Z_][a-zA-Z0-9_]+)\)$/;
15-
var metricNamesRegex = /^metrics\((.+)\)$/;
16-
var labelsRegex = /^labels\((.+)\)$/;
17-
var queryResultRegex = /^query_result\((.+)\)$/;
18-
19-
var labelsQuery = this.query.match(labelsRegex);
20-
if (labelsQuery) {
21-
return this.labelsQuery(labelsQuery[1]);
22-
}
23-
24-
var labelValuesQuery = this.query.match(labelValuesRegex);
25-
if (labelValuesQuery) {
26-
if (labelValuesQuery[1]) {
27-
return this.labelValuesQuery(labelValuesQuery[2], labelValuesQuery[1]);
14+
var label_values_regex = /^label_values\((?:(.+),\s*)?([a-zA-Z_][a-zA-Z0-9_]+)\)$/;
15+
var metric_names_regex = /^metrics\((.+)\)$/;
16+
var query_result_regex = /^query_result\((.+)\)$/;
17+
18+
var label_values_query = this.query.match(label_values_regex);
19+
if (label_values_query) {
20+
if (label_values_query[1]) {
21+
return this.labelValuesQuery(label_values_query[2], label_values_query[1]);
2822
} else {
29-
return this.labelValuesQuery(labelValuesQuery[2], null);
23+
return this.labelValuesQuery(label_values_query[2], null);
3024
}
3125
}
3226

33-
var metricNamesQuery = this.query.match(metricNamesRegex);
34-
if (metricNamesQuery) {
35-
return this.metricNameQuery(metricNamesQuery[1]);
27+
var metric_names_query = this.query.match(metric_names_regex);
28+
if (metric_names_query) {
29+
return this.metricNameQuery(metric_names_query[1]);
3630
}
3731

38-
var queryResultQuery = this.query.match(queryResultRegex);
39-
if (queryResultQuery) {
40-
return this.queryResultQuery(queryResultQuery[1]);
32+
var query_result_query = this.query.match(query_result_regex);
33+
if (query_result_query) {
34+
return this.queryResultQuery(query_result_query[1]);
4135
}
4236

4337
// if query contains full metric name, return metric name and label list
@@ -73,71 +67,45 @@ function (_) {
7367
}
7468
};
7569

76-
PrometheusMetricFindQuery.prototype.labelsQuery = function(metric) {
77-
var url;
78-
79-
url = '/api/v1/series?match[]=' + encodeURIComponent(metric)
80-
+ '&start=' + (this.range.from.valueOf() / 1000)
81-
+ '&end=' + (this.range.to.valueOf() / 1000);
82-
83-
return this.datasource._request('GET', url)
84-
.then(function(result) {
85-
var tags = {};
86-
_.each(result.data.data, function(metric) {
87-
_.each(metric, function(value, key) {
88-
if (key === "__name__") {
89-
return;
90-
}
91-
92-
tags[key] = key;
93-
});
94-
});
95-
96-
return _.map(tags, function(value) {
97-
return {text: value, value: value};
98-
});
99-
});
100-
};
101-
10270
PrometheusMetricFindQuery.prototype.metricNameQuery = function(metricFilterPattern) {
10371
var url = '/api/v1/label/__name__/values';
10472

10573
return this.datasource._request('GET', url)
106-
.then(function(result) {
107-
return _.chain(result.data.data)
108-
.filter(function(metricName) {
109-
var r = new RegExp(metricFilterPattern);
110-
return r.test(metricName);
111-
})
112-
.map(function(matchedMetricName) {
113-
return {
114-
text: matchedMetricName,
115-
expandable: true
116-
};
117-
})
118-
.value();
119-
});
74+
.then(function(result) {
75+
return _.chain(result.data.data)
76+
.filter(function(metricName) {
77+
var r = new RegExp(metricFilterPattern);
78+
return r.test(metricName);
79+
})
80+
.map(function(matchedMetricName) {
81+
return {
82+
text: matchedMetricName,
83+
expandable: true
84+
};
85+
})
86+
.value();
87+
});
12088
};
12189

12290
PrometheusMetricFindQuery.prototype.queryResultQuery = function(query) {
12391
var url = '/api/v1/query?query=' + encodeURIComponent(query) + '&time=' + (this.range.to.valueOf() / 1000);
12492

12593
return this.datasource._request('GET', url)
126-
.then(function(result) {
127-
return _.map(result.data.data.result, function(metricData) {
128-
var text = metricData.metric.__name__ || '';
129-
delete metricData.metric.__name__;
130-
text += '{' +
131-
_.map(metricData.metric, function(v, k) { return k + '="' + v + '"'; }).join(',') +
132-
'}';
133-
text += ' ' + metricData.value[1] + ' ' + metricData.value[0] * 1000;
134-
135-
return {
136-
text: text,
137-
expandable: true
138-
};
139-
});
94+
.then(function(result) {
95+
return _.map(result.data.data.result, function(metricData) {
96+
var text = metricData.metric.__name__ || '';
97+
delete metricData.metric.__name__;
98+
text += '{' +
99+
_.map(metricData.metric, function(v, k) { return k + '="' + v + '"'; }).join(',') +
100+
'}';
101+
text += ' ' + metricData.value[1] + ' ' + metricData.value[0] * 1000;
102+
103+
return {
104+
text: text,
105+
expandable: true
106+
};
140107
});
108+
});
141109
};
142110

143111
PrometheusMetricFindQuery.prototype.metricNameAndLabelsQuery = function(query) {
@@ -147,14 +115,14 @@ function (_) {
147115

148116
var self = this;
149117
return this.datasource._request('GET', url)
150-
.then(function(result) {
151-
return _.map(result.data.data, function(metric) {
152-
return {
153-
text: self.datasource.getOriginalMetricName(metric),
154-
expandable: true
155-
};
156-
});
118+
.then(function(result) {
119+
return _.map(result.data.data, function(metric) {
120+
return {
121+
text: self.datasource.getOriginalMetricName(metric),
122+
expandable: true
123+
};
157124
});
125+
});
158126
};
159127

160128
return PrometheusMetricFindQuery;

public/app/plugins/datasource/prometheus/partials/query.editor.html

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,18 @@
1-
<query-editor-row query-ctrl="ctrl" can-collapse="false" has-text-edit-mode="true">
2-
3-
<div class="gf-form" ng-if="!ctrl.target.editorMode">
4-
<input type="text" class="gf-form-input" ng-model="ctrl.target.expr" spellcheck="false" ng-blur="ctrl.refresh()"></input>
5-
</div>
6-
7-
<div class="gf-form-inline" ng-if="ctrl.target.editorMode">
8-
<div class="gf-form">
9-
<label class="gf-form-label width-8 query-keyword">Query</label>
10-
<metric-segment segment="ctrl.metricSegment" get-options="ctrl.getMetricOptions()" on-change="ctrl.queryChanged()"></metric-segment>
11-
</div>
12-
13-
<div class="gf-form" ng-repeat="part in ctrl.query.functions">
14-
<query-part-editor class="gf-form-label query-part"
15-
part="part"
16-
remove-action="ctrl.removePart(query.functions, part)"
17-
part-updated="ctrl.partUpdated(query.functions, part)"
18-
get-options="ctrl.getPartOptions(part)">
19-
</query-part-editor>
20-
</div>
21-
22-
<div class="gf-form">
23-
<label class="dropdown"
24-
dropdown-typeahead="ctrl.addQueryPartMenu"
25-
dropdown-typeahead-on-select="ctrl.addQueryPart($item, $subItem)">
26-
</label>
27-
</div>
28-
1+
<query-editor-row query-ctrl="ctrl" can-collapse="false">
2+
<div class="gf-form-inline">
293
<div class="gf-form gf-form--grow">
30-
<div class="gf-form-label gf-form-label--grow"></div>
4+
<label class="gf-form-label width-8">Query</label>
5+
<input type="text" class="gf-form-input" ng-model="ctrl.target.expr" spellcheck='false' placeholder="query expression" data-min-length=0 data-items=100 ng-model-onblur ng-change="ctrl.refreshMetricData()">
6+
</div>
7+
<div class="gf-form max-width-22">
8+
<label class="gf-form-label">Metric lookup</label>
9+
<input type="text" class="gf-form-input" ng-model="ctrl.target.metric" spellcheck='false' bs-typeahead="ctrl.suggestMetrics" placeholder="metric name" data-min-length=0 data-items=100>
3110
</div>
3211
</div>
3312

3413
<div class="gf-form-inline">
3514
<div class="gf-form max-width-26">
36-
<label class="gf-form-label width-8 query-keyword">Legend format</label>
15+
<label class="gf-form-label width-8">Legend format</label>
3716
<input type="text" class="gf-form-input" ng-model="ctrl.target.legendFormat"
3817
spellcheck='false' placeholder="legend format" data-min-length=0 data-items=1000
3918
ng-model-onblur ng-change="ctrl.refreshMetricData()">

public/app/plugins/datasource/prometheus/prom_query.ts

Lines changed: 0 additions & 119 deletions
This file was deleted.

0 commit comments

Comments
 (0)