|
|
|
@ -49,6 +49,73 @@ describe('PrometheusDatasource', function() { |
|
|
|
|
expect(results.data[0].target).to.be('test{job="testjob"}'); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
describe('When querying prometheus with one target which return multiple series', function() { |
|
|
|
|
var results; |
|
|
|
|
var start = 1443438675; |
|
|
|
|
var end = 1443460275; |
|
|
|
|
var step = 60; |
|
|
|
|
var urlExpected = 'proxied/api/v1/query_range?query=' + |
|
|
|
|
encodeURIComponent('test{job="testjob"}') + |
|
|
|
|
'&start=' + start + '&end=' + end + '&step=' + step; |
|
|
|
|
var query = { |
|
|
|
|
range: { from: moment(1443438674760), to: moment(1443460274760) }, |
|
|
|
|
targets: [{ expr: 'test{job="testjob"}' }], |
|
|
|
|
interval: '60s' |
|
|
|
|
}; |
|
|
|
|
var response = { |
|
|
|
|
status: "success", |
|
|
|
|
data: { |
|
|
|
|
resultType: "matrix", |
|
|
|
|
result: [ |
|
|
|
|
{ |
|
|
|
|
metric: {"__name__": "test", job: "testjob", series: 'series 1'}, |
|
|
|
|
values: [ |
|
|
|
|
[start + step * 1, "3846"], |
|
|
|
|
[start + step * 3, "3847"], |
|
|
|
|
[end - step * 1, "3848"], |
|
|
|
|
] |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
metric: {"__name__": "test", job: "testjob", series: 'series 2'}, |
|
|
|
|
values: [ |
|
|
|
|
[start + step * 2, "4846"] |
|
|
|
|
] |
|
|
|
|
}, |
|
|
|
|
] |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
beforeEach(function() { |
|
|
|
|
ctx.$httpBackend.expect('GET', urlExpected).respond(response); |
|
|
|
|
ctx.ds.query(query).then(function(data) { results = data; }); |
|
|
|
|
ctx.$httpBackend.flush(); |
|
|
|
|
}); |
|
|
|
|
it('should be same length', function() { |
|
|
|
|
expect(results.data.length).to.be(2); |
|
|
|
|
expect(results.data[0].datapoints.length).to.be((end - start) / step + 1); |
|
|
|
|
expect(results.data[1].datapoints.length).to.be((end - start) / step + 1); |
|
|
|
|
}); |
|
|
|
|
it('should fill null until first datapoint in response', function() { |
|
|
|
|
expect(results.data[0].datapoints[0][1]).to.be(start * 1000); |
|
|
|
|
expect(results.data[0].datapoints[0][0]).to.be(null); |
|
|
|
|
expect(results.data[0].datapoints[1][1]).to.be((start + step * 1) * 1000); |
|
|
|
|
expect(results.data[0].datapoints[1][0]).to.be(3846); |
|
|
|
|
}); |
|
|
|
|
it('should fill null after last datapoint in response', function() { |
|
|
|
|
var length = (end - start) / step + 1; |
|
|
|
|
expect(results.data[0].datapoints[length-2][1]).to.be((end - step * 1) * 1000); |
|
|
|
|
expect(results.data[0].datapoints[length-2][0]).to.be(3848); |
|
|
|
|
expect(results.data[0].datapoints[length-1][1]).to.be(end * 1000); |
|
|
|
|
expect(results.data[0].datapoints[length-1][0]).to.be(null); |
|
|
|
|
}); |
|
|
|
|
it('should fill null at gap between series', function() { |
|
|
|
|
expect(results.data[0].datapoints[2][1]).to.be((start + step * 2) * 1000); |
|
|
|
|
expect(results.data[0].datapoints[2][0]).to.be(null); |
|
|
|
|
expect(results.data[1].datapoints[1][1]).to.be((start + step * 1) * 1000); |
|
|
|
|
expect(results.data[1].datapoints[1][0]).to.be(null); |
|
|
|
|
expect(results.data[1].datapoints[3][1]).to.be((start + step * 3) * 1000); |
|
|
|
|
expect(results.data[1].datapoints[3][0]).to.be(null); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
describe('When performing metricFindQuery', function() { |
|
|
|
|
var results; |
|
|
|
|
var response; |
|
|
|
|