diff --git a/public/app/plugins/datasource/testdata/StreamHandler.ts b/public/app/plugins/datasource/testdata/StreamHandler.ts index 389c20a8bf3..c56a508193f 100644 --- a/public/app/plugins/datasource/testdata/StreamHandler.ts +++ b/public/app/plugins/datasource/testdata/StreamHandler.ts @@ -18,6 +18,7 @@ export const defaultQuery: StreamingQuery = { speed: 250, // ms spread: 3.5, noise: 2.2, + bands: 1, }; type StreamWorkers = { @@ -42,7 +43,7 @@ export class StreamHandler { // set stream option defaults query.stream = defaults(query.stream, defaultQuery); // create stream key - const key = req.dashboardId + '/' + req.panelId + '/' + query.refId; + const key = req.dashboardId + '/' + req.panelId + '/' + query.refId + '@' + query.stream.bands; if (this.workers[key]) { const existing = this.workers[key]; @@ -146,39 +147,47 @@ export class StreamWorker { export class SignalWorker extends StreamWorker { value: number; + bands = 1; + constructor(key: string, query: TestDataQuery, request: DataQueryRequest, observer: DataStreamObserver) { super(key, query, request, observer); setTimeout(() => { this.stream.series = [this.initBuffer(query.refId)]; this.looper(); }, 10); + + this.bands = query.stream.bands ? query.stream.bands : 0; } nextRow = (time: number) => { const { spread, noise } = this.query; this.value += (Math.random() - 0.5) * spread; - return [ - time, - this.value, // Value - this.value - Math.random() * noise, // MIN - this.value + Math.random() * noise, // MAX - ]; + const row = [time, this.value]; + for (let i = 0; i < this.bands; i++) { + const v = row[row.length - 1]; + row.push(v - Math.random() * noise); // MIN + row.push(v + Math.random() * noise); // MAX + } + return row; }; initBuffer(refId: string): SeriesData { const { speed, buffer } = this.query; const data = { - fields: [ - { name: 'Time', type: FieldType.time }, - { name: 'Value', type: FieldType.number }, - { name: 'Min', type: FieldType.number }, - { name: 'Max', type: FieldType.number }, - ], + fields: [{ name: 'Time', type: FieldType.time }, { name: 'Value', type: FieldType.number }], rows: [], refId, name: 'Signal ' + refId, } as SeriesData; + for (let i = 0; i < this.bands; i++) { + const suffix = this.bands > 1 ? ` ${i + 1}` : ''; + data.fields.push({ name: 'Min' + suffix, type: FieldType.number }); + data.fields.push({ name: 'Max' + suffix, type: FieldType.number }); + } + + console.log('START', data); + const request = this.stream.request; this.value = Math.random() * 100; diff --git a/public/app/plugins/datasource/testdata/partials/query.editor.html b/public/app/plugins/datasource/testdata/partials/query.editor.html index e70abb4d96d..4a2f59e749f 100644 --- a/public/app/plugins/datasource/testdata/partials/query.editor.html +++ b/public/app/plugins/datasource/testdata/partials/query.editor.html @@ -43,7 +43,7 @@ @@ -78,6 +78,16 @@ step="0.1" ng-change="ctrl.streamChanged()" /> +
+ + +