mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Refactor: use data rather than series in stream callback(#18126)
This commit is contained in:
parent
85da4a169d
commit
5f4b5dfecd
@ -309,9 +309,9 @@ export interface DataStreamState {
|
|||||||
request: DataQueryRequest;
|
request: DataQueryRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Series data may not be known yet
|
* Data may not be known yet
|
||||||
*/
|
*/
|
||||||
series?: DataFrame[];
|
data?: DataFrame[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Error in stream (but may still be running)
|
* Error in stream (but may still be running)
|
||||||
|
@ -11,7 +11,7 @@ import ErrorBoundary from 'app/core/components/ErrorBoundary/ErrorBoundary';
|
|||||||
import { getTimeSrv, TimeSrv } from '../services/TimeSrv';
|
import { getTimeSrv, TimeSrv } from '../services/TimeSrv';
|
||||||
import { applyPanelTimeOverrides, calculateInnerPanelHeight } from 'app/features/dashboard/utils/panel';
|
import { applyPanelTimeOverrides, calculateInnerPanelHeight } from 'app/features/dashboard/utils/panel';
|
||||||
import { profiler } from 'app/core/profiler';
|
import { profiler } from 'app/core/profiler';
|
||||||
import { getProcessedDataFrame } from '../state/PanelQueryState';
|
import { getProcessedDataFrames } from '../state/PanelQueryState';
|
||||||
import templateSrv from 'app/features/templating/template_srv';
|
import templateSrv from 'app/features/templating/template_srv';
|
||||||
import config from 'app/core/config';
|
import config from 'app/core/config';
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ export class PanelChrome extends PureComponent<Props, State> {
|
|||||||
this.setState({
|
this.setState({
|
||||||
data: {
|
data: {
|
||||||
state: LoadingState.Done,
|
state: LoadingState.Done,
|
||||||
series: getProcessedDataFrame(panel.snapshotData),
|
series: getProcessedDataFrames(panel.snapshotData),
|
||||||
},
|
},
|
||||||
isFirstLoad: false,
|
isFirstLoad: false,
|
||||||
});
|
});
|
||||||
|
@ -168,7 +168,7 @@ describe('PanelQueryRunner', () => {
|
|||||||
streamState = {
|
streamState = {
|
||||||
state: LoadingState.Streaming,
|
state: LoadingState.Streaming,
|
||||||
key: 'test-stream-1',
|
key: 'test-stream-1',
|
||||||
series: [
|
data: [
|
||||||
{
|
{
|
||||||
rows: [],
|
rows: [],
|
||||||
fields: [],
|
fields: [],
|
||||||
|
@ -34,7 +34,7 @@ export interface QueryRunnerOptions<
|
|||||||
}
|
}
|
||||||
|
|
||||||
export enum PanelQueryRunnerFormat {
|
export enum PanelQueryRunnerFormat {
|
||||||
series = 'series',
|
frames = 'frames',
|
||||||
legacy = 'legacy',
|
legacy = 'legacy',
|
||||||
both = 'both',
|
both = 'both',
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ export class PanelQueryRunner {
|
|||||||
* Listen for updates to the PanelData. If a query has already run for this panel,
|
* Listen for updates to the PanelData. If a query has already run for this panel,
|
||||||
* the results will be immediatly passed to the observer
|
* the results will be immediatly passed to the observer
|
||||||
*/
|
*/
|
||||||
subscribe(observer: PartialObserver<PanelData>, format = PanelQueryRunnerFormat.series): Unsubscribable {
|
subscribe(observer: PartialObserver<PanelData>, format = PanelQueryRunnerFormat.frames): Unsubscribable {
|
||||||
if (!this.subject) {
|
if (!this.subject) {
|
||||||
this.subject = new Subject(); // Delay creating a subject until someone is listening
|
this.subject = new Subject(); // Delay creating a subject until someone is listening
|
||||||
}
|
}
|
||||||
@ -65,10 +65,10 @@ export class PanelQueryRunner {
|
|||||||
if (format === PanelQueryRunnerFormat.legacy) {
|
if (format === PanelQueryRunnerFormat.legacy) {
|
||||||
this.state.sendLegacy = true;
|
this.state.sendLegacy = true;
|
||||||
} else if (format === PanelQueryRunnerFormat.both) {
|
} else if (format === PanelQueryRunnerFormat.both) {
|
||||||
this.state.sendSeries = true;
|
this.state.sendFrames = true;
|
||||||
this.state.sendLegacy = true;
|
this.state.sendLegacy = true;
|
||||||
} else {
|
} else {
|
||||||
this.state.sendSeries = true;
|
this.state.sendFrames = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the last result
|
// Send the last result
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { toDataQueryError, PanelQueryState, getProcessedDataFrame } from './PanelQueryState';
|
import { toDataQueryError, PanelQueryState, getProcessedDataFrames } from './PanelQueryState';
|
||||||
import { MockDataSourceApi } from 'test/mocks/datasource_srv';
|
import { MockDataSourceApi } from 'test/mocks/datasource_srv';
|
||||||
import { LoadingState } from '@grafana/data';
|
import { LoadingState } from '@grafana/data';
|
||||||
import { DataQueryResponse } from '@grafana/ui';
|
import { DataQueryResponse } from '@grafana/ui';
|
||||||
@ -65,7 +65,7 @@ describe('getProcessedDataFrame', () => {
|
|||||||
target: '',
|
target: '',
|
||||||
datapoints: [[100, 1], [200, 2]],
|
datapoints: [[100, 1], [200, 2]],
|
||||||
};
|
};
|
||||||
const data = getProcessedDataFrame([null, input1, input2, null, null]);
|
const data = getProcessedDataFrames([null, input1, input2, null, null]);
|
||||||
expect(data.length).toBe(2);
|
expect(data.length).toBe(2);
|
||||||
expect(data[0].fields[0].name).toBe(input1.target);
|
expect(data[0].fields[0].name).toBe(input1.target);
|
||||||
expect(data[0].rows).toBe(input1.datapoints);
|
expect(data[0].rows).toBe(input1.datapoints);
|
||||||
@ -83,10 +83,10 @@ describe('getProcessedDataFrame', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('supports null values from query OK', () => {
|
it('supports null values from query OK', () => {
|
||||||
expect(getProcessedDataFrame([null, null, null, null])).toEqual([]);
|
expect(getProcessedDataFrames([null, null, null, null])).toEqual([]);
|
||||||
expect(getProcessedDataFrame(undefined)).toEqual([]);
|
expect(getProcessedDataFrames(undefined)).toEqual([]);
|
||||||
expect(getProcessedDataFrame((null as unknown) as any[])).toEqual([]);
|
expect(getProcessedDataFrames((null as unknown) as any[])).toEqual([]);
|
||||||
expect(getProcessedDataFrame([])).toEqual([]);
|
expect(getProcessedDataFrames([])).toEqual([]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ describe('stream handling', () => {
|
|||||||
state: LoadingState.Loading,
|
state: LoadingState.Loading,
|
||||||
key: 'C',
|
key: 'C',
|
||||||
request: state.request, // From the same request
|
request: state.request, // From the same request
|
||||||
series: [makeSeriesStub('C')],
|
data: [makeSeriesStub('C')],
|
||||||
unsubscribe: () => {},
|
unsubscribe: () => {},
|
||||||
});
|
});
|
||||||
expect(state.streams.length).toBe(1);
|
expect(state.streams.length).toBe(1);
|
||||||
@ -146,7 +146,7 @@ describe('stream handling', () => {
|
|||||||
state: LoadingState.Loading,
|
state: LoadingState.Loading,
|
||||||
key: 'D',
|
key: 'D',
|
||||||
request: state.request, // From the same request
|
request: state.request, // From the same request
|
||||||
series: [makeSeriesStub('D')],
|
data: [makeSeriesStub('D')],
|
||||||
unsubscribe: () => {},
|
unsubscribe: () => {},
|
||||||
});
|
});
|
||||||
expect(state.streams.length).toBe(2);
|
expect(state.streams.length).toBe(2);
|
||||||
@ -163,7 +163,7 @@ describe('stream handling', () => {
|
|||||||
state: LoadingState.Loading,
|
state: LoadingState.Loading,
|
||||||
key: 'C', // The key to replace previous index 2
|
key: 'C', // The key to replace previous index 2
|
||||||
request: state.request, // From the same request
|
request: state.request, // From the same request
|
||||||
series: [makeSeriesStub('X')],
|
data: [makeSeriesStub('X')],
|
||||||
unsubscribe: () => {},
|
unsubscribe: () => {},
|
||||||
});
|
});
|
||||||
expect(state.streams.length).toBe(2);
|
expect(state.streams.length).toBe(2);
|
||||||
@ -181,7 +181,7 @@ describe('stream handling', () => {
|
|||||||
...state.request,
|
...state.request,
|
||||||
requestId: 'XXX', // Different request and id
|
requestId: 'XXX', // Different request and id
|
||||||
} as any,
|
} as any,
|
||||||
series: [makeSeriesStub('C')],
|
data: [makeSeriesStub('C')],
|
||||||
unsubscribe: () => {},
|
unsubscribe: () => {},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ export class PanelQueryState {
|
|||||||
// Active stream results
|
// Active stream results
|
||||||
streams: DataStreamState[] = [];
|
streams: DataStreamState[] = [];
|
||||||
|
|
||||||
sendSeries = false;
|
sendFrames = false;
|
||||||
sendLegacy = false;
|
sendLegacy = false;
|
||||||
|
|
||||||
// A promise for the running query
|
// A promise for the running query
|
||||||
@ -127,15 +127,15 @@ export class PanelQueryState {
|
|||||||
this.executor = null;
|
this.executor = null;
|
||||||
|
|
||||||
// Make sure we send something back -- called run() w/o subscribe!
|
// Make sure we send something back -- called run() w/o subscribe!
|
||||||
if (!(this.sendSeries || this.sendLegacy)) {
|
if (!(this.sendFrames || this.sendLegacy)) {
|
||||||
this.sendSeries = true;
|
this.sendFrames = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save the result state
|
// Save the result state
|
||||||
this.response = {
|
this.response = {
|
||||||
state: LoadingState.Done,
|
state: LoadingState.Done,
|
||||||
request: this.request,
|
request: this.request,
|
||||||
series: this.sendSeries ? getProcessedDataFrame(resp.data) : [],
|
series: this.sendFrames ? getProcessedDataFrames(resp.data) : [],
|
||||||
legacy: this.sendLegacy ? translateToLegacyData(resp.data) : undefined,
|
legacy: this.sendLegacy ? translateToLegacyData(resp.data) : undefined,
|
||||||
};
|
};
|
||||||
resolve(this.validateStreamsAndGetPanelData());
|
resolve(this.validateStreamsAndGetPanelData());
|
||||||
@ -156,7 +156,7 @@ export class PanelQueryState {
|
|||||||
// it will then delegate real changes to the PanelQueryRunner
|
// it will then delegate real changes to the PanelQueryRunner
|
||||||
dataStreamObserver: DataStreamObserver = (stream: DataStreamState) => {
|
dataStreamObserver: DataStreamObserver = (stream: DataStreamState) => {
|
||||||
// Streams only work with the 'series' format
|
// Streams only work with the 'series' format
|
||||||
this.sendSeries = true;
|
this.sendFrames = true;
|
||||||
|
|
||||||
// Add the stream to our list
|
// Add the stream to our list
|
||||||
let found = false;
|
let found = false;
|
||||||
@ -189,8 +189,8 @@ export class PanelQueryState {
|
|||||||
const series: DataFrame[] = [];
|
const series: DataFrame[] = [];
|
||||||
|
|
||||||
for (const stream of this.streams) {
|
for (const stream of this.streams) {
|
||||||
if (stream.series) {
|
if (stream.data) {
|
||||||
series.push.apply(series, stream.series);
|
series.push.apply(series, stream.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -243,7 +243,7 @@ export class PanelQueryState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
active.push(stream);
|
active.push(stream);
|
||||||
series.push.apply(series, stream.series);
|
series.push.apply(series, stream.data);
|
||||||
|
|
||||||
if (!this.isFinished(stream.state)) {
|
if (!this.isFinished(stream.state)) {
|
||||||
done = false;
|
done = false;
|
||||||
@ -277,11 +277,11 @@ export class PanelQueryState {
|
|||||||
* Make sure all requested formats exist on the data
|
* Make sure all requested formats exist on the data
|
||||||
*/
|
*/
|
||||||
getDataAfterCheckingFormats(): PanelData {
|
getDataAfterCheckingFormats(): PanelData {
|
||||||
const { response, sendLegacy, sendSeries } = this;
|
const { response, sendLegacy, sendFrames } = this;
|
||||||
if (sendLegacy && (!response.legacy || !response.legacy.length)) {
|
if (sendLegacy && (!response.legacy || !response.legacy.length)) {
|
||||||
response.legacy = response.series.map(v => toLegacyResponseData(v));
|
response.legacy = response.series.map(v => toLegacyResponseData(v));
|
||||||
}
|
}
|
||||||
if (sendSeries && !response.series.length && response.legacy) {
|
if (sendFrames && !response.series.length && response.legacy) {
|
||||||
response.series = response.legacy.map(v => toDataFrame(v));
|
response.series = response.legacy.map(v => toDataFrame(v));
|
||||||
}
|
}
|
||||||
return this.validateStreamsAndGetPanelData();
|
return this.validateStreamsAndGetPanelData();
|
||||||
@ -349,7 +349,7 @@ function translateToLegacyData(data: DataQueryResponseData) {
|
|||||||
*
|
*
|
||||||
* This is also used by PanelChrome for snapshot support
|
* This is also used by PanelChrome for snapshot support
|
||||||
*/
|
*/
|
||||||
export function getProcessedDataFrame(results?: any[]): DataFrame[] {
|
export function getProcessedDataFrames(results?: any[]): DataFrame[] {
|
||||||
if (!results) {
|
if (!results) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
@ -189,7 +189,7 @@ describe('runQueriesBatchEpic', () => {
|
|||||||
)
|
)
|
||||||
.whenQueryObserverReceivesEvent({
|
.whenQueryObserverReceivesEvent({
|
||||||
state: LoadingState.Done,
|
state: LoadingState.Done,
|
||||||
series: null,
|
data: null,
|
||||||
delta,
|
delta,
|
||||||
key: 'some key',
|
key: 'some key',
|
||||||
request: {} as DataQueryRequest,
|
request: {} as DataQueryRequest,
|
||||||
|
@ -104,8 +104,8 @@ export const runQueriesBatchEpic: Epic<ActionOf<any>, ActionOf<any>, StoreState>
|
|||||||
// observer subscription, handles datasourceInstance.query observer events and pushes that forward
|
// observer subscription, handles datasourceInstance.query observer events and pushes that forward
|
||||||
const streamSubscription = streamHandler.subscribe({
|
const streamSubscription = streamHandler.subscribe({
|
||||||
next: event => {
|
next: event => {
|
||||||
const { state, error, series, delta } = event;
|
const { state, error, data, delta } = event;
|
||||||
if (!series && !delta && !error) {
|
if (!data && !delta && !error) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import { DataQueryResponse, DataQueryResponseData } from '@grafana/ui';
|
|||||||
import { TableData, isTableData, LogsModel, toDataFrame, guessFieldTypes, TimeSeries } from '@grafana/data';
|
import { TableData, isTableData, LogsModel, toDataFrame, guessFieldTypes, TimeSeries } from '@grafana/data';
|
||||||
|
|
||||||
import { ExploreItemState, ExploreMode } from 'app/types/explore';
|
import { ExploreItemState, ExploreMode } from 'app/types/explore';
|
||||||
import { getProcessedDataFrame } from 'app/features/dashboard/state/PanelQueryState';
|
import { getProcessedDataFrames } from 'app/features/dashboard/state/PanelQueryState';
|
||||||
import TableModel, { mergeTablesIntoModel } from 'app/core/table_model';
|
import TableModel, { mergeTablesIntoModel } from 'app/core/table_model';
|
||||||
import { sortLogsResult } from 'app/core/utils/explore';
|
import { sortLogsResult } from 'app/core/utils/explore';
|
||||||
import { dataFrameToLogsModel } from 'app/core/logs_model';
|
import { dataFrameToLogsModel } from 'app/core/logs_model';
|
||||||
@ -101,7 +101,7 @@ export class ResultProcessor {
|
|||||||
};
|
};
|
||||||
|
|
||||||
private makeTimeSeriesList = (rawData: any[]) => {
|
private makeTimeSeriesList = (rawData: any[]) => {
|
||||||
const dataList = getProcessedDataFrame(rawData);
|
const dataList = getProcessedDataFrames(rawData);
|
||||||
const dataProcessor = new DataProcessor({ xaxis: {}, aliasColors: [] }); // Hack before we use GraphSeriesXY instead
|
const dataProcessor = new DataProcessor({ xaxis: {}, aliasColors: [] }); // Hack before we use GraphSeriesXY instead
|
||||||
const timeSeries = dataProcessor.getSeriesList({ dataList });
|
const timeSeries = dataProcessor.getSeriesList({ dataList });
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ class MetricsPanelCtrl extends PanelCtrl {
|
|||||||
data: data.legacy,
|
data: data.legacy,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.handleDataFrame(data.series);
|
this.handleDataFrames(data.series);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -217,7 +217,7 @@ class MetricsPanelCtrl extends PanelCtrl {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
handleDataFrame(data: DataFrame[]) {
|
handleDataFrames(data: DataFrame[]) {
|
||||||
if (this.dashboard && this.dashboard.snapshot) {
|
if (this.dashboard && this.dashboard.snapshot) {
|
||||||
this.panel.snapshotData = data;
|
this.panel.snapshotData = data;
|
||||||
}
|
}
|
||||||
|
@ -113,7 +113,7 @@ export class StreamWorker {
|
|||||||
const maxRows = query.buffer ? query.buffer : stream.request.maxDataPoints;
|
const maxRows = query.buffer ? query.buffer : stream.request.maxDataPoints;
|
||||||
|
|
||||||
// Edit the first series
|
// Edit the first series
|
||||||
const series = stream.series[0];
|
const series = stream.data[0];
|
||||||
let rows = series.rows.concat(append);
|
let rows = series.rows.concat(append);
|
||||||
const extra = maxRows - rows.length;
|
const extra = maxRows - rows.length;
|
||||||
if (extra < 0) {
|
if (extra < 0) {
|
||||||
@ -143,7 +143,7 @@ export class SignalWorker extends StreamWorker {
|
|||||||
constructor(key: string, query: TestDataQuery, request: DataQueryRequest, observer: DataStreamObserver) {
|
constructor(key: string, query: TestDataQuery, request: DataQueryRequest, observer: DataStreamObserver) {
|
||||||
super(key, query, request, observer);
|
super(key, query, request, observer);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.stream.series = [this.initBuffer(query.refId)];
|
this.stream.data = [this.initBuffer(query.refId)];
|
||||||
this.looper();
|
this.looper();
|
||||||
}, 10);
|
}, 10);
|
||||||
|
|
||||||
@ -253,7 +253,7 @@ export class FetchWorker extends StreamWorker {
|
|||||||
|
|
||||||
onHeader = (series: DataFrame) => {
|
onHeader = (series: DataFrame) => {
|
||||||
series.refId = this.refId;
|
series.refId = this.refId;
|
||||||
this.stream.series = [series];
|
this.stream.data = [series];
|
||||||
};
|
};
|
||||||
|
|
||||||
onRow = (row: any[]) => {
|
onRow = (row: any[]) => {
|
||||||
@ -269,7 +269,7 @@ export class LogsWorker extends StreamWorker {
|
|||||||
super(key, query, request, observer);
|
super(key, query, request, observer);
|
||||||
|
|
||||||
window.setTimeout(() => {
|
window.setTimeout(() => {
|
||||||
this.stream.series = [this.initBuffer(query.refId)];
|
this.stream.data = [this.initBuffer(query.refId)];
|
||||||
this.looper();
|
this.looper();
|
||||||
}, 10);
|
}, 10);
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ import config from 'app/core/config';
|
|||||||
import TimeSeries from 'app/core/time_series2';
|
import TimeSeries from 'app/core/time_series2';
|
||||||
import { DataFrame, DataLink } from '@grafana/data';
|
import { DataFrame, DataLink } from '@grafana/data';
|
||||||
import { getColorFromHexRgbOrName, LegacyResponseData, VariableSuggestion } from '@grafana/ui';
|
import { getColorFromHexRgbOrName, LegacyResponseData, VariableSuggestion } from '@grafana/ui';
|
||||||
import { getProcessedDataFrame } from 'app/features/dashboard/state/PanelQueryState';
|
import { getProcessedDataFrames } from 'app/features/dashboard/state/PanelQueryState';
|
||||||
import { PanelQueryRunnerFormat } from 'app/features/dashboard/state/PanelQueryRunner';
|
import { PanelQueryRunnerFormat } from 'app/features/dashboard/state/PanelQueryRunner';
|
||||||
import { GraphContextMenuCtrl } from './GraphContextMenuCtrl';
|
import { GraphContextMenuCtrl } from './GraphContextMenuCtrl';
|
||||||
import { getDataLinksVariableSuggestions } from 'app/features/panel/panellinks/link_srv';
|
import { getDataLinksVariableSuggestions } from 'app/features/panel/panellinks/link_srv';
|
||||||
@ -143,7 +143,7 @@ class GraphCtrl extends MetricsPanelCtrl {
|
|||||||
_.defaults(this.panel.xaxis, this.panelDefaults.xaxis);
|
_.defaults(this.panel.xaxis, this.panelDefaults.xaxis);
|
||||||
_.defaults(this.panel.options, this.panelDefaults.options);
|
_.defaults(this.panel.options, this.panelDefaults.options);
|
||||||
|
|
||||||
this.dataFormat = PanelQueryRunnerFormat.series;
|
this.dataFormat = PanelQueryRunnerFormat.frames;
|
||||||
this.processor = new DataProcessor(this.panel);
|
this.processor = new DataProcessor(this.panel);
|
||||||
this.contextMenuCtrl = new GraphContextMenuCtrl($scope);
|
this.contextMenuCtrl = new GraphContextMenuCtrl($scope);
|
||||||
|
|
||||||
@ -210,12 +210,12 @@ class GraphCtrl extends MetricsPanelCtrl {
|
|||||||
|
|
||||||
// This should only be called from the snapshot callback
|
// This should only be called from the snapshot callback
|
||||||
onDataReceived(dataList: LegacyResponseData[]) {
|
onDataReceived(dataList: LegacyResponseData[]) {
|
||||||
this.handleDataFrame(getProcessedDataFrame(dataList));
|
this.handleDataFrames(getProcessedDataFrames(dataList));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Directly support DataFrame skipping event callbacks
|
// Directly support DataFrame skipping event callbacks
|
||||||
handleDataFrame(data: DataFrame[]) {
|
handleDataFrames(data: DataFrame[]) {
|
||||||
super.handleDataFrame(data);
|
super.handleDataFrames(data);
|
||||||
|
|
||||||
this.dataList = data;
|
this.dataList = data;
|
||||||
this.seriesList = this.processor.getSeriesList({
|
this.seriesList = this.processor.getSeriesList({
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DataProcessor } from '../data_processor';
|
import { DataProcessor } from '../data_processor';
|
||||||
import { getProcessedDataFrame } from 'app/features/dashboard/state/PanelQueryState';
|
import { getProcessedDataFrames } from 'app/features/dashboard/state/PanelQueryState';
|
||||||
|
|
||||||
describe('Graph DataProcessor', () => {
|
describe('Graph DataProcessor', () => {
|
||||||
const panel: any = {
|
const panel: any = {
|
||||||
@ -11,7 +11,7 @@ describe('Graph DataProcessor', () => {
|
|||||||
|
|
||||||
describe('getTimeSeries from LegacyResponseData', () => {
|
describe('getTimeSeries from LegacyResponseData', () => {
|
||||||
// Try each type of data
|
// Try each type of data
|
||||||
const dataList = getProcessedDataFrame([
|
const dataList = getProcessedDataFrames([
|
||||||
{
|
{
|
||||||
alias: 'First (time_series)',
|
alias: 'First (time_series)',
|
||||||
datapoints: [[1, 1001], [2, 1002], [3, 1003]],
|
datapoints: [[1, 1001], [2, 1002], [3, 1003]],
|
||||||
|
Loading…
Reference in New Issue
Block a user