|
@@ -100,6 +100,7 @@ export class PrometheusDatasource {
|
|
|
var query: any = {};
|
|
var query: any = {};
|
|
|
query.expr = this.templateSrv.replace(target.expr, options.scopedVars, self.interpolateQueryExpr);
|
|
query.expr = this.templateSrv.replace(target.expr, options.scopedVars, self.interpolateQueryExpr);
|
|
|
query.requestId = options.panelId + target.refId;
|
|
query.requestId = options.panelId + target.refId;
|
|
|
|
|
+ query.format = target.format;
|
|
|
|
|
|
|
|
var interval = this.templateSrv.replace(target.interval, options.scopedVars) || options.interval;
|
|
var interval = this.templateSrv.replace(target.interval, options.scopedVars) || options.interval;
|
|
|
var intervalFactor = target.intervalFactor || 1;
|
|
var intervalFactor = target.intervalFactor || 1;
|
|
@@ -115,7 +116,11 @@ export class PrometheusDatasource {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
var allQueryPromise = _.map(queries, query => {
|
|
var allQueryPromise = _.map(queries, query => {
|
|
|
- return this.performTimeSeriesQuery(query, start, end);
|
|
|
|
|
|
|
+ if (query.format === 'time_series') {
|
|
|
|
|
+ return this.performTimeSeriesQuery(query, start, end);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return this.performInstantQuery(query, end);
|
|
|
|
|
+ }
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
return this.$q.all(allQueryPromise).then(responseList => {
|
|
return this.$q.all(allQueryPromise).then(responseList => {
|
|
@@ -131,7 +136,11 @@ export class PrometheusDatasource {
|
|
|
result.push(self.transformMetricDataToTable(response.data.data.result));
|
|
result.push(self.transformMetricDataToTable(response.data.data.result));
|
|
|
} else {
|
|
} else {
|
|
|
for (let metricData of response.data.data.result) {
|
|
for (let metricData of response.data.data.result) {
|
|
|
- result.push(self.transformMetricData(metricData, activeTargets[index], start, end));
|
|
|
|
|
|
|
+ if (response.data.data.resultType === 'matrix') {
|
|
|
|
|
+ result.push(self.transformMetricData(metricData, activeTargets[index], start, end));
|
|
|
|
|
+ } else if (response.data.data.resultType === 'vector') {
|
|
|
|
|
+ result.push(self.transformInstantMetricData(metricData, activeTargets[index]));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
@@ -158,6 +167,11 @@ export class PrometheusDatasource {
|
|
|
return this._request('GET', url, query.requestId);
|
|
return this._request('GET', url, query.requestId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ performInstantQuery(query, time) {
|
|
|
|
|
+ var url = '/api/v1/query?query=' + encodeURIComponent(query.expr) + '&time=' + time;
|
|
|
|
|
+ return this._request('GET', url, query.requestId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
performSuggestQuery(query, cache = false) {
|
|
performSuggestQuery(query, cache = false) {
|
|
|
var url = '/api/v1/label/__name__/values';
|
|
var url = '/api/v1/label/__name__/values';
|
|
|
|
|
|
|
@@ -342,6 +356,13 @@ export class PrometheusDatasource {
|
|
|
return table;
|
|
return table;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ transformInstantMetricData(md, options) {
|
|
|
|
|
+ var dps = [], metricLabel = null;
|
|
|
|
|
+ metricLabel = this.createMetricLabel(md.metric, options);
|
|
|
|
|
+ dps.push([parseFloat(md.value[1]), md.value[0] * 1000]);
|
|
|
|
|
+ return { target: metricLabel, datapoints: dps };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
createMetricLabel(labelData, options) {
|
|
createMetricLabel(labelData, options) {
|
|
|
if (_.isUndefined(options) || _.isEmpty(options.legendFormat)) {
|
|
if (_.isUndefined(options) || _.isEmpty(options.legendFormat)) {
|
|
|
return this.getOriginalMetricName(labelData);
|
|
return this.getOriginalMetricName(labelData);
|