mirror of https://github.com/grafana/grafana.git
				
				
				
			TimeSrv: Enable value time windowing in TimeSrv (#18636)
This introduces change to TimeSrv that enables time & time.window query param. Thanks to that time range of a dashboard can be specified as a window(time.window param) around given timestamp(time param)
This commit is contained in:
		
							parent
							
								
									774b7267df
								
							
						
					
					
						commit
						6d3a05a02b
					
				|  | @ -144,6 +144,39 @@ describe('timeSrv', () => { | ||||||
|       expect(timeSrv.time.from).toEqual('now-6h'); |       expect(timeSrv.time.from).toEqual('now-6h'); | ||||||
|       expect(timeSrv.time.to).toEqual('now'); |       expect(timeSrv.time.to).toEqual('now'); | ||||||
|     }); |     }); | ||||||
|  | 
 | ||||||
|  |     describe('data point windowing', () => { | ||||||
|  |       it('handles time window specfied as interval string', () => { | ||||||
|  |         location = { | ||||||
|  |           search: jest.fn(() => ({ | ||||||
|  |             time: '1410337645000', | ||||||
|  |             'time.window': '10s', | ||||||
|  |           })), | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         timeSrv = new TimeSrv(rootScope as any, jest.fn() as any, location as any, timer, new ContextSrvStub() as any); | ||||||
|  | 
 | ||||||
|  |         timeSrv.init(_dashboard); | ||||||
|  |         const time = timeSrv.timeRange(); | ||||||
|  |         expect(time.from.valueOf()).toEqual(1410337640000); | ||||||
|  |         expect(time.to.valueOf()).toEqual(1410337650000); | ||||||
|  |       }); | ||||||
|  |       it('handles time window specified in ms', () => { | ||||||
|  |         location = { | ||||||
|  |           search: jest.fn(() => ({ | ||||||
|  |             time: '1410337645000', | ||||||
|  |             'time.window': '10000', | ||||||
|  |           })), | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         timeSrv = new TimeSrv(rootScope as any, jest.fn() as any, location as any, timer, new ContextSrvStub() as any); | ||||||
|  | 
 | ||||||
|  |         timeSrv.init(_dashboard); | ||||||
|  |         const time = timeSrv.timeRange(); | ||||||
|  |         expect(time.from.valueOf()).toEqual(1410337640000); | ||||||
|  |         expect(time.to.valueOf()).toEqual(1410337650000); | ||||||
|  |       }); | ||||||
|  |     }); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   describe('setTime', () => { |   describe('setTime', () => { | ||||||
|  |  | ||||||
|  | @ -93,8 +93,30 @@ export class TimeSrv { | ||||||
|     return null; |     return null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   private getTimeWindow(time: string, timeWindow: string) { | ||||||
|  |     const valueTime = parseInt(time, 10); | ||||||
|  |     let timeWindowMs; | ||||||
|  | 
 | ||||||
|  |     if (timeWindow.match(/^\d+$/) && parseInt(timeWindow, 10)) { | ||||||
|  |       // when time window specified in ms
 | ||||||
|  |       timeWindowMs = parseInt(timeWindow, 10); | ||||||
|  |     } else { | ||||||
|  |       timeWindowMs = kbn.interval_to_ms(timeWindow); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return { | ||||||
|  |       from: toUtc(valueTime - timeWindowMs / 2), | ||||||
|  |       to: toUtc(valueTime + timeWindowMs / 2), | ||||||
|  |     }; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   private initTimeFromUrl() { |   private initTimeFromUrl() { | ||||||
|     const params = this.$location.search(); |     const params = this.$location.search(); | ||||||
|  | 
 | ||||||
|  |     if (params.time && params['time.window']) { | ||||||
|  |       this.time = this.getTimeWindow(params.time, params['time.window']); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     if (params.from) { |     if (params.from) { | ||||||
|       this.time.from = this.parseUrlParam(params.from) || this.time.from; |       this.time.from = this.parseUrlParam(params.from) || this.time.from; | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue