import _ from 'lodash'; import { QueryCtrl } from 'app/plugins/sdk'; import { defaultQuery } from './runStreams'; import { getBackendSrv } from 'app/core/services/backend_srv'; import { dateTime, dateMath } from '@grafana/data'; export const defaultPulse: any = { timeStep: 60, onCount: 3, onValue: 2, offCount: 3, offValue: 1, }; export const defaultCSVWave: any = { timeStep: 60, valuesCSV: '0,0,2,2,1,1', }; const showLabelsFor = ['random_walk', 'predictable_pulse', 'predictable_csv_wave']; export class TestDataQueryCtrl extends QueryCtrl { static templateUrl = 'partials/query.editor.html'; scenarioList: any; scenario: any; newPointValue: number; newPointTime: any; selectedPoint: any; showLabels = false; /** @ngInject */ constructor($scope: any, $injector: any) { super($scope, $injector); this.target.scenarioId = this.target.scenarioId || 'random_walk'; this.scenarioList = []; this.newPointTime = dateTime(); this.selectedPoint = { text: 'Select point', value: null }; this.showLabels = showLabelsFor.includes(this.target.scenarioId); } getPoints() { return _.map(this.target.points, (point, index) => { return { text: dateTime(point[1]).format('MMMM Do YYYY, H:mm:ss') + ' : ' + point[0], value: index, }; }); } pointSelected(option: any) { this.selectedPoint = option; } deletePoint() { this.target.points.splice(this.selectedPoint.value, 1); this.selectedPoint = { text: 'Select point', value: null }; this.refresh(); } addPoint() { this.target.points = this.target.points || []; this.newPointTime = dateMath.parse(this.newPointTime); this.target.points.push([this.newPointValue, this.newPointTime.valueOf()]); this.target.points = _.sortBy(this.target.points, p => p[1]); this.refresh(); } $onInit() { return getBackendSrv() .get('/api/tsdb/testdata/scenarios') .then((res: any) => { this.scenarioList = res; this.scenario = _.find(this.scenarioList, { id: this.target.scenarioId }); }); } scenarioChanged() { this.scenario = _.find(this.scenarioList, { id: this.target.scenarioId }); this.target.stringInput = this.scenario.stringInput; this.showLabels = showLabelsFor.includes(this.target.scenarioId); if (this.target.scenarioId === 'manual_entry') { this.target.points = this.target.points || []; } else { delete this.target.points; } if (this.target.scenarioId === 'streaming_client') { this.target.stream = _.defaults(this.target.stream || {}, defaultQuery); } else { delete this.target.stream; } if (this.target.scenarioId === 'predictable_pulse') { this.target.pulseWave = _.defaults(this.target.pulseWave || {}, defaultPulse); } else { delete this.target.pulseWave; } if (this.target.scenarioId === 'predictable_csv_wave') { this.target.csvWave = _.defaults(this.target.csvWave || {}, defaultCSVWave); } else { delete this.target.csvWave; } this.refresh(); } streamChanged() { this.refresh(); } }