use series matchers to get label name/value

This commit is contained in:
Mitsuhiro Tanda 2018-06-13 14:03:52 +09:00
parent c7279a4e07
commit e62c083cf0
3 changed files with 22 additions and 25 deletions

View File

@ -113,7 +113,7 @@ export class PromCompleter {
_.uniq(
_.flatten(
result.map(r => {
return Object.keys(r.metric);
return Object.keys(r);
})
)
),
@ -151,7 +151,7 @@ export class PromCompleter {
var labelValues = this.transformToCompletions(
_.uniq(
result.map(r => {
return r.metric[labelName];
return r[labelName];
})
),
'label value'
@ -191,7 +191,7 @@ export class PromCompleter {
_.uniq(
_.flatten(
result.map(r => {
return Object.keys(r.metric);
return Object.keys(r);
})
)
),
@ -233,7 +233,7 @@ export class PromCompleter {
_.uniq(
_.flatten(
result.map(r => {
return Object.keys(r.metric);
return Object.keys(r);
})
)
),
@ -249,7 +249,7 @@ export class PromCompleter {
_.uniq(
_.flatten(
result.map(r => {
return Object.keys(r.metric);
return Object.keys(r);
})
)
),
@ -276,9 +276,11 @@ export class PromCompleter {
}
query = '{__name__' + op + '"' + expr + '"}';
}
return this.datasource.performInstantQuery({ expr: query }, new Date().getTime() / 1000).then(response => {
this.labelQueryCache[expr] = response.data.data.result;
return response.data.data.result;
let range = this.datasource.getTimeRange();
let url = '/api/v1/series?match[]=' + encodeURIComponent(query) + '&start=' + range.from + '&end=' + range.to;
return this.datasource.metadataRequest(url).then(response => {
this.labelQueryCache[expr] = response.data.data;
return response.data.data;
});
}

View File

@ -629,6 +629,14 @@ export class PrometheusDatasource {
return Math.ceil(date.valueOf() / 1000);
}
getTimeRange() {
let range = this.timeSrv.timeRange();
return {
from: this.getPrometheusTime(range.from, false),
to: this.getPrometheusTime(range.to, true)
};
}
getOriginalMetricName(labelData) {
return this.resultTransformer.getOriginalMetricName(labelData);
}

View File

@ -4,7 +4,7 @@ import { BackendSrv } from 'app/core/services/backend_srv';
jest.mock('../datasource');
jest.mock('app/core/services/backend_srv');
describe('Prometheus editor completer', function() {
describe('Prometheus editor completer', function () {
function getSessionStub(data) {
return {
getTokenAt: jest.fn(() => data.currentToken),
@ -18,22 +18,9 @@ describe('Prometheus editor completer', function() {
const backendSrv = <BackendSrv>{};
const datasourceStub = new PrometheusDatasource({}, {}, backendSrv, {}, {});
datasourceStub.performInstantQuery = jest.fn(() =>
Promise.resolve({
data: {
data: {
result: [
{
metric: {
job: 'node',
instance: 'localhost:9100',
},
},
],
},
},
})
);
datasourceStub.metadataRequest = jest.fn(() =>
Promise.resolve({ data: { data: [{ metric: { job: 'node', instance: 'localhost:9100', }, },], }, }));
datasourceStub.getTimeRange = jest.fn(() => { return { from: 1514732400, to: 1514818800 }; });
datasourceStub.performSuggestQuery = jest.fn(() => Promise.resolve(['node_cpu']));
const templateSrv = {