@@ -49,6 +49,73 @@ describe('PrometheusDatasource', function() {
49
49
expect ( results . data [ 0 ] . target ) . to . be ( 'test{job="testjob"}' ) ;
50
50
} ) ;
51
51
} ) ;
52
+ describe ( 'When querying prometheus with one target which return multiple series' , function ( ) {
53
+ var results ;
54
+ var start = 1443438675 ;
55
+ var end = 1443460275 ;
56
+ var step = 60 ;
57
+ var urlExpected = 'proxied/api/v1/query_range?query=' +
58
+ encodeURIComponent ( 'test{job="testjob"}' ) +
59
+ '&start=' + start + '&end=' + end + '&step=' + step ;
60
+ var query = {
61
+ range : { from : moment ( 1443438674760 ) , to : moment ( 1443460274760 ) } ,
62
+ targets : [ { expr : 'test{job="testjob"}' } ] ,
63
+ interval : '60s'
64
+ } ;
65
+ var response = {
66
+ status : "success" ,
67
+ data : {
68
+ resultType : "matrix" ,
69
+ result : [
70
+ {
71
+ metric : { "__name__" : "test" , job : "testjob" , series : 'series 1' } ,
72
+ values : [
73
+ [ start + step * 1 , "3846" ] ,
74
+ [ start + step * 3 , "3847" ] ,
75
+ [ end - step * 1 , "3848" ] ,
76
+ ]
77
+ } ,
78
+ {
79
+ metric : { "__name__" : "test" , job : "testjob" , series : 'series 2' } ,
80
+ values : [
81
+ [ start + step * 2 , "4846" ]
82
+ ]
83
+ } ,
84
+ ]
85
+ }
86
+ } ;
87
+ beforeEach ( function ( ) {
88
+ ctx . $httpBackend . expect ( 'GET' , urlExpected ) . respond ( response ) ;
89
+ ctx . ds . query ( query ) . then ( function ( data ) { results = data ; } ) ;
90
+ ctx . $httpBackend . flush ( ) ;
91
+ } ) ;
92
+ it ( 'should be same length' , function ( ) {
93
+ expect ( results . data . length ) . to . be ( 2 ) ;
94
+ expect ( results . data [ 0 ] . datapoints . length ) . to . be ( ( end - start ) / step + 1 ) ;
95
+ expect ( results . data [ 1 ] . datapoints . length ) . to . be ( ( end - start ) / step + 1 ) ;
96
+ } ) ;
97
+ it ( 'should fill null until first datapoint in response' , function ( ) {
98
+ expect ( results . data [ 0 ] . datapoints [ 0 ] [ 1 ] ) . to . be ( start * 1000 ) ;
99
+ expect ( results . data [ 0 ] . datapoints [ 0 ] [ 0 ] ) . to . be ( null ) ;
100
+ expect ( results . data [ 0 ] . datapoints [ 1 ] [ 1 ] ) . to . be ( ( start + step * 1 ) * 1000 ) ;
101
+ expect ( results . data [ 0 ] . datapoints [ 1 ] [ 0 ] ) . to . be ( 3846 ) ;
102
+ } ) ;
103
+ it ( 'should fill null after last datapoint in response' , function ( ) {
104
+ var length = ( end - start ) / step + 1 ;
105
+ expect ( results . data [ 0 ] . datapoints [ length - 2 ] [ 1 ] ) . to . be ( ( end - step * 1 ) * 1000 ) ;
106
+ expect ( results . data [ 0 ] . datapoints [ length - 2 ] [ 0 ] ) . to . be ( 3848 ) ;
107
+ expect ( results . data [ 0 ] . datapoints [ length - 1 ] [ 1 ] ) . to . be ( end * 1000 ) ;
108
+ expect ( results . data [ 0 ] . datapoints [ length - 1 ] [ 0 ] ) . to . be ( null ) ;
109
+ } ) ;
110
+ it ( 'should fill null at gap between series' , function ( ) {
111
+ expect ( results . data [ 0 ] . datapoints [ 2 ] [ 1 ] ) . to . be ( ( start + step * 2 ) * 1000 ) ;
112
+ expect ( results . data [ 0 ] . datapoints [ 2 ] [ 0 ] ) . to . be ( null ) ;
113
+ expect ( results . data [ 1 ] . datapoints [ 1 ] [ 1 ] ) . to . be ( ( start + step * 1 ) * 1000 ) ;
114
+ expect ( results . data [ 1 ] . datapoints [ 1 ] [ 0 ] ) . to . be ( null ) ;
115
+ expect ( results . data [ 1 ] . datapoints [ 3 ] [ 1 ] ) . to . be ( ( start + step * 3 ) * 1000 ) ;
116
+ expect ( results . data [ 1 ] . datapoints [ 3 ] [ 0 ] ) . to . be ( null ) ;
117
+ } ) ;
118
+ } ) ;
52
119
describe ( 'When performing metricFindQuery' , function ( ) {
53
120
var results ;
54
121
var response ;
0 commit comments