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.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', () => { | ||||
|  |  | |||
|  | @ -93,8 +93,30 @@ export class TimeSrv { | |||
|     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() { | ||||
|     const params = this.$location.search(); | ||||
| 
 | ||||
|     if (params.time && params['time.window']) { | ||||
|       this.time = this.getTimeWindow(params.time, params['time.window']); | ||||
|     } | ||||
| 
 | ||||
|     if (params.from) { | ||||
|       this.time.from = this.parseUrlParam(params.from) || this.time.from; | ||||
|     } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue