DataFrame: Deprecate MutableDataFrame (#67569)

This commit is contained in:
Ryan McKinley 2023-05-01 19:41:40 -07:00 committed by GitHub
parent d31d1576fb
commit 86302bc1ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 266 additions and 219 deletions

View File

@ -86,7 +86,9 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "18"],
[0, 0, 0, "Do not use any type assertions.", "19"],
[0, 0, 0, "Do not use any type assertions.", "20"],
[0, 0, 0, "Do not use any type assertions.", "21"]
[0, 0, 0, "Do not use any type assertions.", "21"],
[0, 0, 0, "Do not use any type assertions.", "22"],
[0, 0, 0, "Do not use any type assertions.", "23"]
],
"packages/grafana-data/src/datetime/datemath.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],

View File

@ -10,10 +10,16 @@ import { guessFieldTypeFromValue, guessFieldTypeForField, toDataFrameDTO } from
/** @deprecated */
export type MutableField<T = any> = Field<T>;
/** @deprecated */
type MutableVectorCreator = (buffer?: any[]) => any[];
export const MISSING_VALUE = undefined; // Treated as connected in new graph panel
/**
* MutableDataFrame is a complex wrapper around the DataFrame interface
*
* @deprecated use standard DataFrame, or create one with PartialDataFrame
*/
export class MutableDataFrame<T = any> extends FunctionalVector<T> implements DataFrame {
name?: string;
refId?: string;

View File

@ -2,8 +2,8 @@ import { dateTime } from '../datetime/moment_wrapper';
import { DataFrameDTO, FieldType, TableData, TimeSeries } from '../types/index';
import { ArrayDataFrame } from './ArrayDataFrame';
import { MutableDataFrame } from './MutableDataFrame';
import {
createDataFrame,
guessFieldTypeFromValue,
guessFieldTypes,
isDataFrame,
@ -130,7 +130,7 @@ describe('toDataFrame', () => {
});
it('Guess Column Types from series', () => {
const series = new MutableDataFrame({
const series = createDataFrame({
fields: [
{ name: 'A (number)', values: [123, null] },
{ name: 'B (strings)', values: [null, 'Hello'] },

View File

@ -27,7 +27,6 @@ import {
import { arrayToDataFrame } from './ArrayDataFrame';
import { dataFrameFromJSON } from './DataFrameJSON';
import { MutableDataFrame } from './MutableDataFrame';
function convertTableToDataFrame(table: TableData): DataFrame {
const fields = table.columns.map((c) => {
@ -315,7 +314,7 @@ export function toDataFrame(data: any): DataFrame {
}
// This will convert the array values into Vectors
return new MutableDataFrame(data as DataFrameDTO);
return createDataFrame(data as DataFrameDTO);
}
// Handle legacy docs/json type
@ -567,3 +566,35 @@ export function preProcessPanelData(data: PanelData, lastResult?: PanelData): Pa
timings: { dataProcessingTime: STOPTIME - STARTTIME },
};
}
export interface PartialDataFrame extends Omit<DataFrame, 'fields' | 'length'> {
fields: Array<Partial<Field>>;
}
export function createDataFrame(input: PartialDataFrame): DataFrame {
let length = 0;
const fields = input.fields.map((p, idx) => {
const { state, ...field } = p;
if (!field.name) {
field.name = `Field ${idx + 1}`;
}
if (!field.config) {
field.config = {};
}
if (!field.values) {
field.values = new Array(length);
} else if (field.values.length > length) {
length = field.values.length;
}
if (!field.type) {
field.type = guessFieldTypeForField(field as Field) ?? FieldType.other;
}
return field as Field;
});
return {
...input,
fields,
length,
};
}

View File

@ -508,8 +508,25 @@ function createEmptyDisplayOptions(extend = {}): GetFieldDisplayValuesOptions {
}
function createDisplayOptions(extend: Partial<GetFieldDisplayValuesOptions> = {}): GetFieldDisplayValuesOptions {
const options: GetFieldDisplayValuesOptions = {
data: [
const options = merge(
{
replaceVariables: (value: string) => {
return value;
},
reduceOptions: {
calcs: [],
},
fieldConfig: {
overrides: [],
defaults: {},
},
theme: createTheme(),
},
extend
);
if (!options.data?.length) {
options.data = [
toDataFrame({
name: 'Series Name',
fields: [
@ -518,21 +535,9 @@ function createDisplayOptions(extend: Partial<GetFieldDisplayValuesOptions> = {}
{ name: 'Field 3', values: [2, 4, 6] },
],
}),
],
replaceVariables: (value: string) => {
return value;
},
reduceOptions: {
calcs: [],
},
fieldConfig: {
overrides: [],
defaults: {},
},
theme: createTheme(),
};
return merge(options, extend);
];
}
return options;
}
describe('fixCellTemplateExpressions', () => {

View File

@ -1,4 +1,4 @@
import { ArrayDataFrame, MutableDataFrame, toDataFrame } from '../dataframe';
import { ArrayDataFrame, createDataFrame, toDataFrame } from '../dataframe';
import { rangeUtil } from '../datetime';
import { createTheme } from '../themes';
import { FieldMatcherID } from '../transformations';
@ -177,11 +177,11 @@ describe('applyFieldOverrides', () => {
};
describe('given multiple data frames', () => {
const f0 = new MutableDataFrame({
const f0 = createDataFrame({
name: 'A',
fields: [{ name: 'message', type: FieldType.string, values: [10, 20] }],
});
const f1 = new MutableDataFrame({
const f1 = createDataFrame({
name: 'B',
fields: [{ name: 'info', type: FieldType.string, values: [10, 20] }],
});
@ -676,7 +676,7 @@ describe('getLinksSupplier', () => {
getTimeRangeForUrl: () => ({ from: 'now-7d', to: 'now' }),
});
const f0 = new MutableDataFrame({
const f0 = createDataFrame({
name: 'A',
fields: [
{
@ -712,7 +712,7 @@ describe('getLinksSupplier', () => {
});
const datasourceUid = '1234';
const f0 = new MutableDataFrame({
const f0 = createDataFrame({
name: 'A',
fields: [
{
@ -766,7 +766,7 @@ describe('getLinksSupplier', () => {
const datasourceUid = '1234';
const range = rangeUtil.relativeToTimeRange({ from: 600, to: 0 });
const f0 = new MutableDataFrame({
const f0 = createDataFrame({
name: 'A',
fields: [
{
@ -827,7 +827,7 @@ describe('getLinksSupplier', () => {
it('handles link click handlers', () => {
const onClickSpy = jest.fn();
const replaceSpy = jest.fn();
const f0 = new MutableDataFrame({
const f0 = createDataFrame({
name: 'A',
fields: [
{
@ -867,7 +867,7 @@ describe('getLinksSupplier', () => {
const replaceSpy = jest.fn().mockReturnValue('url interpolated 10');
const onBuildUrlSpy = jest.fn();
const f0 = new MutableDataFrame({
const f0 = createDataFrame({
name: 'A',
fields: [
{

View File

@ -1,4 +1,4 @@
import { MutableDataFrame, toDataFrame } from '../dataframe';
import { createDataFrame, toDataFrame } from '../dataframe';
import { createTheme } from '../themes';
import { applyFieldOverrides } from './fieldOverrides';
@ -85,7 +85,7 @@ describe('getFieldDisplayValuesProxy', () => {
it('should use default display processor if display is not defined', () => {
const p = getFieldDisplayValuesProxy({
frame: new MutableDataFrame({ fields: [{ name: 'test', values: [1, 2] }] }),
frame: createDataFrame({ fields: [{ name: 'test', values: [1, 2] }] }),
rowIndex: 0,
});
expect(p.test.text).toBe('1');

View File

@ -1,7 +1,6 @@
import { difference } from 'lodash';
import { MutableDataFrame } from '../dataframe/MutableDataFrame';
import { guessFieldTypeFromValue } from '../dataframe/processDataFrame';
import { createDataFrame, guessFieldTypeFromValue } from '../dataframe/processDataFrame';
import { Field, FieldType } from '../types/index';
import { fieldReducers, ReducerID, reduceField } from './fieldReducer';
@ -24,7 +23,7 @@ function createField<T>(name: string, values?: T[], type?: FieldType): Field<T>
}
describe('Stats Calculators', () => {
const basicTable = new MutableDataFrame({
const basicTable = createDataFrame({
fields: [
{ name: 'a', values: [10, 20] },
{ name: 'b', values: [20, 30] },

View File

@ -1,6 +1,5 @@
import { map } from 'rxjs/operators';
import { MutableDataFrame } from '../../dataframe';
import { getFieldDisplayName } from '../../field/fieldState';
import { DataFrame, DataTransformerInfo, Field, FieldType, SpecialValue } from '../../types';
import { fieldMatchers } from '../matchers';
@ -75,13 +74,14 @@ export const groupingToMatrixTransformer: DataTransformerInfo<GroupingToMatrixTr
matrixValues[columnName][rowName] = value;
}
const resultFrame = new MutableDataFrame();
resultFrame.addField({
name: rowColumnField,
values: rowValues,
type: FieldType.string,
});
const fields: Field[] = [
{
name: rowColumnField,
values: rowValues,
type: FieldType.string,
config: {},
},
];
for (const columnName of columnValues) {
let values = [];
@ -98,7 +98,7 @@ export const groupingToMatrixTransformer: DataTransformerInfo<GroupingToMatrixTr
valueField.config = { ...valueField.config, displayNameFromDS: undefined };
}
resultFrame.addField({
fields.push({
name: columnName.toString(),
values: values,
config: valueField.config,
@ -106,7 +106,12 @@ export const groupingToMatrixTransformer: DataTransformerInfo<GroupingToMatrixTr
});
}
return [resultFrame];
return [
{
fields,
length: rowValues.length,
},
];
})
),
};

View File

@ -1,11 +1,11 @@
import { MutableDataFrame } from '../dataframe/MutableDataFrame';
import { createDataFrame } from '../dataframe';
import { dateTime } from '../datetime/moment_wrapper';
import { TimeRange } from '../types/time';
import { getFlotPairs, getFlotPairsConstant } from './flotPairs';
describe('getFlotPairs', () => {
const series = new MutableDataFrame({
const series = createDataFrame({
fields: [
{ name: 'a', values: [1, 2, 3] },
{ name: 'b', values: [100, 200, 300] },

View File

@ -8,7 +8,7 @@ import {
DataSourceInstanceSettings,
DataSourceJsonData,
DataSourceRef,
MutableDataFrame,
createDataFrame,
} from '@grafana/data';
import {
@ -240,10 +240,12 @@ describe('DataSourceWithBackend', () => {
let obs = toStreamingDataResponse(rsp, request, standardStreamOptionsProvider);
expect(obs).toBeDefined();
let frame = new MutableDataFrame();
frame.meta = {
channel: 'a/b/c',
};
let frame = createDataFrame({
meta: {
channel: 'a/b/c',
},
fields: [],
});
rsp.data = [frame];
obs = toStreamingDataResponse(rsp, request, standardStreamOptionsProvider);
expect(obs).toBeDefined();

View File

@ -1,4 +1,4 @@
import { FieldType, MutableDataFrame } from '@grafana/data';
import { FieldType, createDataFrame } from '@grafana/data';
import { applyNullInsertThreshold } from './nullInsertThreshold';
@ -48,7 +48,7 @@ function genFrame() {
describe('nullInsertThreshold Transformer', () => {
test('should insert nulls at +threshold between adjacent > threshold: 1', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [1, 3, 10] },
@ -65,7 +65,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should insert nulls at +threshold between adjacent > threshold: 2', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [5, 7, 11] },
@ -82,7 +82,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should insert nulls at +interval between adjacent > interval: 1', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1, 3, 10] },
@ -99,7 +99,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should insert leading null at beginning +interval when timeRange.from.valueOf() exceeds threshold', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [4, 6, 13] },
@ -154,7 +154,7 @@ describe('nullInsertThreshold Transformer', () => {
// this tests that intervals at 24hr but starting not at 12am UTC are not always snapped to 12am UTC
test('should insert leading null at beginning +interval when timeRange.from.valueOf() exceeds threshold 11PM UTC', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{
@ -181,7 +181,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should insert trailing null at end +interval when timeRange.to.valueOf() exceeds threshold', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1, 3, 10] },
@ -197,7 +197,7 @@ describe('nullInsertThreshold Transformer', () => {
expect(result.fields[2].values).toEqual(['a', null, 'b', null, null, null, null, null, null, 'c', null, null]);
// should work for frames with 1 datapoint
const df2 = new MutableDataFrame({
const df2 = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1] },
@ -216,7 +216,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should not insert trailing null at end +interval when timeRange.to.valueOf() equals threshold', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1] },
@ -234,7 +234,7 @@ describe('nullInsertThreshold Transformer', () => {
// TODO: make this work
test.skip('should insert nulls at +threshold (when defined) instead of +interval', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 2 }, values: [5, 7, 11] },
@ -251,7 +251,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should noop on 0 datapoints', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [] },
@ -265,7 +265,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should noop on invalid threshold', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [1, 2, 4] },
@ -279,7 +279,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should noop on invalid interval', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: -1 }, values: [1, 2, 4] },
@ -293,7 +293,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should noop when no missing steps', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1, 2, 3] },
@ -307,7 +307,7 @@ describe('nullInsertThreshold Transformer', () => {
});
test('should noop when refFieldName not found', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1, 2, 5] },

View File

@ -1,11 +1,11 @@
import { FieldType, MutableDataFrame } from '@grafana/data';
import { FieldType, createDataFrame } from '@grafana/data';
import { applyNullInsertThreshold } from './nullInsertThreshold';
import { nullToValue } from './nullToValue';
describe('nullToValue Transformer', () => {
test('should change all nulls to configured zero value', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [1, 3, 10] },
@ -32,7 +32,7 @@ describe('nullToValue Transformer', () => {
});
test('should change all nulls to configured positive value', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [5, 7, 11] },
@ -59,7 +59,7 @@ describe('nullToValue Transformer', () => {
});
test('should change all nulls to configured negative value', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1, 3, 10] },
@ -76,7 +76,7 @@ describe('nullToValue Transformer', () => {
});
test('should have no effect without nulls', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1, 2, 3] },

View File

@ -1,12 +1,6 @@
import { of } from 'rxjs';
import {
DataQueryResponse,
FieldType,
LogRowContextQueryDirection,
LogRowModel,
MutableDataFrame,
} from '@grafana/data';
import { DataQueryResponse, FieldType, LogRowContextQueryDirection, LogRowModel, createDataFrame } from '@grafana/data';
import LokiLanguageProvider from './LanguageProvider';
import { LogContextProvider } from './LogContextProvider';
@ -25,7 +19,7 @@ defaultDatasourceMock.languageProvider = defaultLanguageProviderMock;
const defaultLogRow = {
rowIndex: 0,
dataFrame: new MutableDataFrame({
dataFrame: createDataFrame({
fields: [
{
name: 'ts',

View File

@ -1,4 +1,4 @@
import { MutableDataFrame } from '@grafana/data';
import { createDataFrame } from '@grafana/data';
import { getDerivedFields } from './getDerivedFields';
@ -16,7 +16,7 @@ jest.mock('@grafana/runtime', () => ({
describe('getDerivedFields', () => {
it('adds links to fields', () => {
const df = new MutableDataFrame({ fields: [{ name: 'line', values: ['nothing', 'trace1=1234', 'trace2=foo'] }] });
const df = createDataFrame({ fields: [{ name: 'line', values: ['nothing', 'trace1=1234', 'trace2=foo'] }] });
const newFields = getDerivedFields(df, [
{
matcherRegex: 'trace1=(\\w+)',

View File

@ -7,7 +7,7 @@ import {
dateTime,
FieldType,
MetricFindValue,
MutableDataFrame,
createDataFrame,
TimeRange,
} from '@grafana/data';
import { backendSrv } from 'app/core/services/backend_srv';
@ -54,7 +54,7 @@ describe('MSSQLDatasource', () => {
tempvar: {
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'title', values: ['aTitle', 'aTitle2', 'aTitle3'] },
{ name: 'text', values: ['some text', 'some text2', 'some text3'] },
@ -130,7 +130,7 @@ describe('MSSQLDatasource', () => {
refId: 'datasets',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [{ name: 'name', type: FieldType.string, values: ['test1', 'test2', 'test3'] }],
})
),
@ -152,7 +152,7 @@ describe('MSSQLDatasource', () => {
refId: 'tables',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [{ name: 'schemaAndName', type: FieldType.string, values: ['test1', 'test2', 'test3'] }],
})
),
@ -175,7 +175,7 @@ describe('MSSQLDatasource', () => {
refId: 'columns',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'column', type: FieldType.string, values: ['test1', 'test2', 'test3'] },
{ name: 'type', type: FieldType.string, values: ['int', 'char', 'bool'] },
@ -216,7 +216,7 @@ describe('MSSQLDatasource', () => {
tempvar: {
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: '__value', values: ['value1', 'value2', 'value3'] },
{ name: '__text', values: ['aTitle', 'aTitle2', 'aTitle3'] },
@ -254,7 +254,7 @@ describe('MSSQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'id', values: [1, 2, 3] },
{ name: 'values', values: ['test1', 'test2', 'test3'] },
@ -297,7 +297,7 @@ describe('MSSQLDatasource', () => {
tempvar: {
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: '__text', values: ['aTitle', 'aTitle', 'aTitle'] },
{ name: '__value', values: ['same', 'same', 'diff'] },
@ -330,7 +330,7 @@ describe('MSSQLDatasource', () => {
tempvar: {
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [{ name: 'test', values: ['aTitle'] }],
})
),

View File

@ -6,7 +6,7 @@ import {
DataSourceInstanceSettings,
dateTime,
FieldType,
MutableDataFrame,
createDataFrame,
} from '@grafana/data';
import { FetchResponse, setBackendSrv } from '@grafana/runtime';
import { backendSrv } from 'app/core/services/backend_srv'; // will use the version in __mocks__
@ -115,7 +115,7 @@ describe('MySQLDatasource', () => {
refId: 'datasets',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [{ name: 'name', type: FieldType.string, values: ['test1', 'test2', 'test3'] }],
})
),
@ -137,7 +137,7 @@ describe('MySQLDatasource', () => {
refId: 'tables',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [{ name: 'table_name', type: FieldType.string, values: ['test1', 'test2', 'test3'] }],
})
),
@ -159,7 +159,7 @@ describe('MySQLDatasource', () => {
refId: 'fields',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'column_name', type: FieldType.string, values: ['test1', 'test2', 'test3'] },
{ name: 'data_type', type: FieldType.string, values: ['int', 'char', 'bool'] },
@ -199,7 +199,7 @@ describe('MySQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'title', values: ['aTitle', 'aTitle2', 'aTitle3'] },
{ name: 'text', values: ['some text', 'some text2', 'some text3'] },
@ -232,7 +232,7 @@ describe('MySQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'title', values: ['aTitle', 'aTitle2', 'aTitle3'] },
{ name: 'text', values: ['some text', 'some text2', 'some text3'] },
@ -267,7 +267,7 @@ describe('MySQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'title', values: ['aTitle', 'aTitle2', 'aTitle3'] },
{ name: 'text', values: ['some text', 'some text2', 'some text3'] },
@ -300,7 +300,7 @@ describe('MySQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: '__value', values: ['value1', 'value2', 'value3'] },
{ name: '__text', values: ['aTitle', 'aTitle2', 'aTitle3'] },
@ -335,7 +335,7 @@ describe('MySQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'id', values: [1, 2, 3] },
{ name: 'values', values: ['test1', 'test2', 'test3'] },
@ -373,7 +373,7 @@ describe('MySQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: '__text', values: ['aTitle', 'aTitle', 'aTitle'] },
{ name: '__value', values: ['same', 'same', 'diff'] },

View File

@ -9,7 +9,7 @@ import {
dateTime,
FieldType,
LoadingState,
MutableDataFrame,
createDataFrame,
} from '@grafana/data';
import { FetchResponse } from '@grafana/runtime';
import { backendSrv } from 'app/core/services/backend_srv'; // will use the version in __mocks__
@ -113,7 +113,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'A',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'time', values: [1599643351085] },
{ name: 'metric', values: [30.226249741223704], labels: { metric: 'America' } },
@ -204,7 +204,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'A',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'time', values: [1599643351085] },
{ name: 'metric', values: ['America'] },
@ -349,7 +349,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'tables',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [{ name: 'table', type: FieldType.string, values: ['test1', 'test2', 'test3'] }],
})
),
@ -372,7 +372,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'meta',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [{ name: 'version', type: FieldType.string, values: ['test1'] }],
})
),
@ -394,7 +394,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'meta',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [{ name: 'extversion', type: FieldType.string, values: ['test1'] }],
})
),
@ -416,7 +416,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'columns',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'column', type: FieldType.string, values: ['test1', 'test2', 'test3'] },
{ name: 'type', type: FieldType.string, values: ['int', 'char', 'bool'] },
@ -458,7 +458,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'title', values: ['aTitle', 'aTitle2', 'aTitle3'] },
{ name: 'text', values: ['some text', 'some text2', 'some text3'] },
@ -491,7 +491,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'title', values: ['aTitle', 'aTitle2', 'aTitle3'] },
{ name: 'text', values: ['some text', 'some text2', 'some text3'] },
@ -533,7 +533,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'title', values: ['aTitle', 'aTitle2', 'aTitle3'] },
{ name: 'text', values: ['some text', 'some text2', 'some text3'] },
@ -573,7 +573,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: '__value', values: ['value1', 'value2', 'value3'] },
{ name: '__text', values: ['aTitle', 'aTitle2', 'aTitle3'] },
@ -607,7 +607,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'id', values: [1, 2, 3] },
{ name: 'values', values: ['test1', 'test2', 'test3'] },
@ -644,7 +644,7 @@ describe('PostgreSQLDatasource', () => {
refId: 'tempvar',
frames: [
dataFrameToJSON(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: '__text', values: ['aTitle', 'aTitle', 'aTitle'] },
{ name: '__value', values: ['same', 'same', 'diff'] },

View File

@ -3,7 +3,7 @@ import {
DataQueryRequest,
DataQueryResponse,
FieldType,
MutableDataFrame,
createDataFrame,
PreferredVisualisationType,
} from '@grafana/data';
@ -191,7 +191,7 @@ describe('Prometheus Result Transformer', () => {
const response = {
state: 'Done',
data: [
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [6, 5, 4] },
@ -226,7 +226,7 @@ describe('Prometheus Result Transformer', () => {
const response = {
state: 'Done',
data: [
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [6, 5, 4] },
@ -238,7 +238,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [2, 3, 7] },
@ -280,7 +280,7 @@ describe('Prometheus Result Transformer', () => {
const response = {
state: 'Done',
data: [
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [6, 5, 4] },
@ -292,7 +292,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'B',
fields: [
{ name: 'time', type: FieldType.time, values: [6, 5, 4] },
@ -325,7 +325,7 @@ describe('Prometheus Result Transformer', () => {
const response = {
state: 'Done',
data: [
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -337,7 +337,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -349,7 +349,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -390,7 +390,7 @@ describe('Prometheus Result Transformer', () => {
const response = {
state: 'Done',
data: [
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -402,7 +402,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -414,7 +414,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -426,7 +426,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'B',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -438,7 +438,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'B',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -450,7 +450,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'B',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -485,7 +485,7 @@ describe('Prometheus Result Transformer', () => {
state: 'Done',
data: [
// 10
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -497,7 +497,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -509,7 +509,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -522,7 +522,7 @@ describe('Prometheus Result Transformer', () => {
],
}),
// 20
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -534,7 +534,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -546,7 +546,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -559,7 +559,7 @@ describe('Prometheus Result Transformer', () => {
],
}),
// 30
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -571,7 +571,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -583,7 +583,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -625,7 +625,7 @@ describe('Prometheus Result Transformer', () => {
const response = {
state: 'Done',
data: [
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -637,7 +637,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
name: 'exemplar',
meta: {
@ -675,7 +675,7 @@ describe('Prometheus Result Transformer', () => {
const response = {
state: 'Done',
data: [
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'Time', type: FieldType.time, values: [6, 5, 4] },
@ -687,7 +687,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'A',
name: 'exemplar',
meta: {
@ -741,7 +741,7 @@ describe('Prometheus Result Transformer', () => {
describe('transformDFToTable', () => {
it('transforms dataFrame with response length 1 to table dataFrame', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [6, 5, 4] },
@ -765,7 +765,7 @@ describe('Prometheus Result Transformer', () => {
});
it('transforms dataFrame with response length 2 to table dataFrame', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
refId: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [6, 5, 4] },
@ -794,7 +794,7 @@ describe('Prometheus Result Transformer', () => {
const value2 = 'value2';
const dataframes = [
new MutableDataFrame({
createDataFrame({
refId: 'A',
fields: [
{ name: 'time', type: FieldType.time, values: [6, 5, 4] },
@ -806,7 +806,7 @@ describe('Prometheus Result Transformer', () => {
},
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'B',
fields: [],
}),

View File

@ -9,7 +9,7 @@ import {
FieldType,
getDefaultTimeRange,
LoadingState,
MutableDataFrame,
createDataFrame,
PluginType,
} from '@grafana/data';
import {
@ -121,7 +121,7 @@ describe('Tempo data source', () => {
it('parses json fields from backend', async () => {
setupBackendSrv(
new MutableDataFrame({
createDataFrame({
fields: [
{ name: 'traceID', values: ['04450900759028499335'] },
{ name: 'spanID', values: ['4322526419282105830'] },
@ -796,7 +796,7 @@ const defaultSettings: DataSourceInstanceSettings<TempoJsonData> = {
readOnly: false,
};
const rateMetric = new MutableDataFrame({
const rateMetric = createDataFrame({
refId: 'topk(5, sum(rate(traces_spanmetrics_calls_total{span_kind="SPAN_KIND_SERVER"}[$__range])) by (span_name))',
fields: [
{ name: 'Time', values: [1653725618609, 1653725618609] },
@ -808,7 +808,7 @@ const rateMetric = new MutableDataFrame({
],
});
const errorRateMetric = new MutableDataFrame({
const errorRateMetric = createDataFrame({
refId:
'topk(5, sum(rate(traces_spanmetrics_calls_total{status_code="STATUS_CODE_ERROR",span_name=~"HTTP Client|HTTP GET - root"}[$__range])) by (span_name))',
fields: [
@ -821,7 +821,7 @@ const errorRateMetric = new MutableDataFrame({
],
});
const durationMetric = new MutableDataFrame({
const durationMetric = createDataFrame({
refId:
'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{span_name=~"HTTP GET - root"}[$__range])) by (le))',
fields: [
@ -833,7 +833,7 @@ const durationMetric = new MutableDataFrame({
],
});
const totalsPromMetric = new MutableDataFrame({
const totalsPromMetric = createDataFrame({
refId: 'traces_service_graph_request_total',
fields: [
{ name: 'Time', values: [1628169788000, 1628169788000] },
@ -846,7 +846,7 @@ const totalsPromMetric = new MutableDataFrame({
],
});
const secondsPromMetric = new MutableDataFrame({
const secondsPromMetric = createDataFrame({
refId: 'traces_service_graph_request_server_seconds_sum',
fields: [
{ name: 'Time', values: [1628169788000, 1628169788000] },
@ -859,7 +859,7 @@ const secondsPromMetric = new MutableDataFrame({
],
});
const failedPromMetric = new MutableDataFrame({
const failedPromMetric = createDataFrame({
refId: 'traces_service_graph_request_failed_total',
fields: [
{ name: 'Time', values: [1628169788000, 1628169788000] },

View File

@ -1,4 +1,4 @@
import { DataFrameView, dateTime, MutableDataFrame } from '@grafana/data';
import { DataFrameView, dateTime, createDataFrame } from '@grafana/data';
import { createGraphFrames, mapPromMetricsToServiceMap } from './graphTransform';
import { bigResponse } from './testResponse';
@ -116,7 +116,7 @@ describe('mapPromMetricsToServiceMap', () => {
});
});
const singleSpanResponse = new MutableDataFrame({
const singleSpanResponse = createDataFrame({
fields: [
{ name: 'traceID', values: ['04450900759028499335'] },
{ name: 'spanID', values: ['4322526419282105830'] },
@ -128,7 +128,7 @@ const singleSpanResponse = new MutableDataFrame({
],
});
const missingSpanResponse = new MutableDataFrame({
const missingSpanResponse = createDataFrame({
fields: [
{ name: 'traceID', values: ['04450900759028499335', '04450900759028499335'] },
{ name: 'spanID', values: ['1', '2'] },
@ -140,7 +140,7 @@ const missingSpanResponse = new MutableDataFrame({
],
});
const totalsPromMetric = new MutableDataFrame({
const totalsPromMetric = createDataFrame({
refId: 'traces_service_graph_request_total',
fields: [
{ name: 'Time', values: [1628169788000, 1628169788000] },
@ -153,7 +153,7 @@ const totalsPromMetric = new MutableDataFrame({
],
});
const secondsPromMetric = new MutableDataFrame({
const secondsPromMetric = createDataFrame({
refId: 'traces_service_graph_request_server_seconds_sum',
fields: [
{ name: 'Time', values: [1628169788000, 1628169788000] },
@ -166,7 +166,7 @@ const secondsPromMetric = new MutableDataFrame({
],
});
const failedPromMetric = new MutableDataFrame({
const failedPromMetric = createDataFrame({
refId: 'traces_service_graph_request_failed_total',
fields: [
{ name: 'Time', values: [1628169788000, 1628169788000] },
@ -179,7 +179,7 @@ const failedPromMetric = new MutableDataFrame({
],
});
const invalidFailedPromMetric = new MutableDataFrame({
const invalidFailedPromMetric = createDataFrame({
refId: 'traces_service_graph_request_failed_total',
fields: [
{ name: 'Time', values: [1628169788000, 1628169788000] },

View File

@ -2,7 +2,7 @@ import { collectorTypes } from '@opentelemetry/exporter-collector';
import {
FieldType,
MutableDataFrame,
createDataFrame,
PluginType,
DataSourceInstanceSettings,
dateTime,
@ -45,7 +45,7 @@ const defaultSettings: DataSourceInstanceSettings = {
};
describe('transformTraceList()', () => {
const lokiDataFrame = new MutableDataFrame({
const lokiDataFrame = createDataFrame({
fields: [
{
name: 'ts',

View File

@ -1,4 +1,11 @@
import { FieldColorModeId, FieldDTO, FieldType, MutableDataFrame, NodeGraphDataFrameFieldNames } from '@grafana/data';
import {
FieldColorModeId,
FieldDTO,
FieldType,
MutableDataFrame,
NodeGraphDataFrameFieldNames,
DataFrame,
} from '@grafana/data';
import { nodes, edges } from './testData/serviceMapResponse';
@ -105,16 +112,17 @@ export function generateRandomNodes(count = 10) {
meta: { preferredVisualisationType: 'nodeGraph' },
});
const edgesFrame = new MutableDataFrame({
const edgesFrame: DataFrame = {
name: 'edges',
fields: [
{ name: NodeGraphDataFrameFieldNames.id, values: [], type: FieldType.string },
{ name: NodeGraphDataFrameFieldNames.source, values: [], type: FieldType.string },
{ name: NodeGraphDataFrameFieldNames.target, values: [], type: FieldType.string },
{ name: NodeGraphDataFrameFieldNames.mainStat, values: [], type: FieldType.number },
{ name: NodeGraphDataFrameFieldNames.id, values: [], type: FieldType.string, config: {} },
{ name: NodeGraphDataFrameFieldNames.source, values: [], type: FieldType.string, config: {} },
{ name: NodeGraphDataFrameFieldNames.target, values: [], type: FieldType.string, config: {} },
{ name: NodeGraphDataFrameFieldNames.mainStat, values: [], type: FieldType.number, config: {} },
],
meta: { preferredVisualisationType: 'nodeGraph' },
});
length: 0,
};
const edgesSet = new Set();
for (const node of nodes) {
@ -140,6 +148,7 @@ export function generateRandomNodes(count = 10) {
edgesFrame.fields[3].values.push(Math.random() * 100);
}
}
edgesFrame.length = edgesFrame.fields[0].values.length;
return [nodeFrame, edgesFrame];
}

View File

@ -8,7 +8,7 @@ import {
DataSourceInstanceSettings,
DataSourceJsonData,
FieldType,
MutableDataFrame,
createDataFrame,
ScopedVars,
} from '@grafana/data';
import { BackendSrvRequest, FetchResponse, getBackendSrv, getTemplateSrv, TemplateSrv } from '@grafana/runtime';
@ -127,7 +127,7 @@ function responseToDataQueryResponse(response: { data: ZipkinSpan[] }, nodeGraph
const emptyDataQueryResponse = {
data: [
new MutableDataFrame({
createDataFrame({
fields: [
{
name: 'trace',

View File

@ -1,7 +1,7 @@
import { fireEvent, render, screen } from '@testing-library/react';
import React, { useState } from 'react';
import { CoreApp, MutableDataFrame } from '@grafana/data';
import { CoreApp, createDataFrame } from '@grafana/data';
import { SelectedView } from '../types';
@ -27,7 +27,7 @@ describe('FlameGraph', () => {
const [search] = useState('');
const [selectedView, _] = useState(SelectedView.Both);
const flameGraphData = new MutableDataFrame(data);
const flameGraphData = createDataFrame(data);
const container = new FlameGraphDataContainer(flameGraphData);
const levels = nestedSetToLevels(container);

View File

@ -1,10 +1,10 @@
import { MutableDataFrame } from '@grafana/data';
import { createDataFrame } from '@grafana/data';
import { getMetadata } from './FlameGraphMetadata';
import { FlameGraphDataContainer } from './dataTransform';
function makeDataFrame(fields: Record<string, Array<number | string>>, unit?: string) {
return new MutableDataFrame({
return createDataFrame({
fields: Object.keys(fields).map((key) => ({
name: key,
values: fields[key],

View File

@ -1,10 +1,10 @@
import { Field, FieldType, MutableDataFrame } from '@grafana/data';
import { Field, FieldType, createDataFrame } from '@grafana/data';
import { getTooltipData } from './FlameGraphTooltip';
import { FlameGraphDataContainer } from './dataTransform';
function setupData(unit?: string) {
const flameGraphData = new MutableDataFrame({
const flameGraphData = createDataFrame({
fields: [
{ name: 'level', values: [0] },
unit ? makeField('value', unit, [8_624_078_250]) : { name: 'value', values: [8_624_078_250] },

View File

@ -1,10 +1,10 @@
import { MutableDataFrame } from '@grafana/data';
import { createDataFrame } from '@grafana/data';
import { FlameGraphDataContainer, nestedSetToLevels } from './dataTransform';
describe('nestedSetToLevels', () => {
it('converts nested set data frame to levels', () => {
const frame = new MutableDataFrame({
const frame = createDataFrame({
fields: [
{ name: 'level', values: [0, 1, 2, 3, 2, 1, 2, 3, 4] },
{ name: 'value', values: [10, 5, 3, 1, 1, 4, 3, 2, 1] },
@ -33,7 +33,7 @@ describe('nestedSetToLevels', () => {
});
it('converts nested set data if multiple same level items', () => {
const frame = new MutableDataFrame({
const frame = createDataFrame({
fields: [
{ name: 'level', values: [0, 1, 1, 1] },
{ name: 'value', values: [10, 5, 3, 1] },

View File

@ -1,10 +1,10 @@
import { MutableDataFrame } from '@grafana/data';
import { createDataFrame } from '@grafana/data';
import { FlameGraphDataContainer, LevelItem } from './dataTransform';
import { getRectDimensionsForLevel } from './rendering';
function makeDataFrame(fields: Record<string, Array<number | string>>) {
return new MutableDataFrame({
return createDataFrame({
fields: Object.keys(fields).map((key) => ({
name: key,
values: fields[key],

View File

@ -2,7 +2,7 @@ import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React from 'react';
import { CoreApp, MutableDataFrame } from '@grafana/data';
import { CoreApp, createDataFrame } from '@grafana/data';
import { MIN_WIDTH_TO_SHOW_BOTH_TOPTABLE_AND_FLAMEGRAPH } from '../constants';
@ -23,7 +23,7 @@ describe('FlameGraphContainer', () => {
Object.defineProperty(HTMLElement.prototype, 'clientWidth', { value: 500 });
const FlameGraphContainerWithProps = () => {
const flameGraphData = new MutableDataFrame(data);
const flameGraphData = createDataFrame(data);
flameGraphData.meta = {
custom: {
ProfileTypeID: 'cpu:foo:bar',

View File

@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react';
import React, { useState } from 'react';
import { CoreApp, MutableDataFrame } from '@grafana/data';
import { CoreApp, createDataFrame } from '@grafana/data';
import { FlameGraphDataContainer, nestedSetToLevels } from '../FlameGraph/dataTransform';
import { data } from '../FlameGraph/testData/dataNestedSet';
@ -14,7 +14,7 @@ describe('FlameGraphTopTableContainer', () => {
const [search, setSearch] = useState('');
const [selectedView, _] = useState(SelectedView.Both);
const flameGraphData = new MutableDataFrame(data);
const flameGraphData = createDataFrame(data);
const container = new FlameGraphDataContainer(flameGraphData);
const levels = nestedSetToLevels(container);

View File

@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react';
import React, { ComponentProps } from 'react';
import { LoadingState, MutableDataFrame, FieldType, LogsSortOrder } from '@grafana/data';
import { LoadingState, createDataFrame, FieldType, LogsSortOrder } from '@grafana/data';
import { LogsPanel } from './LogsPanel';
@ -10,7 +10,7 @@ type LogsPanelProps = ComponentProps<typeof LogsPanel>;
describe('LogsPanel', () => {
describe('when returned series include common labels', () => {
const seriesWithCommonLabels = [
new MutableDataFrame({
createDataFrame({
fields: [
{
name: 'time',
@ -66,7 +66,7 @@ describe('LogsPanel', () => {
});
describe('when returned series does not include common labels', () => {
const seriesWithoutCommonLabels = [
new MutableDataFrame({
createDataFrame({
fields: [
{
name: 'time',

View File

@ -1,4 +1,4 @@
import { DataFrame, FieldType, MutableDataFrame } from '@grafana/data';
import { DataFrame, FieldType, createDataFrame } from '@grafana/data';
import { NodeDatum, NodeGraphOptions } from './types';
import {
@ -81,27 +81,27 @@ describe('processNodes', () => {
it('detects dataframes correctly', () => {
const validFrames = [
new MutableDataFrame({
createDataFrame({
refId: 'hasPreferredVisualisationType',
fields: [],
meta: {
preferredVisualisationType: 'nodeGraph',
},
}),
new MutableDataFrame({
createDataFrame({
refId: 'hasName',
fields: [],
name: 'nodes',
}),
new MutableDataFrame({
createDataFrame({
refId: 'nodes', // hasRefId
fields: [],
}),
new MutableDataFrame({
createDataFrame({
refId: 'hasValidNodesShape',
fields: [{ name: 'id', type: FieldType.string }],
}),
new MutableDataFrame({
createDataFrame({
refId: 'hasValidEdgesShape',
fields: [
{ name: 'id', type: FieldType.string },
@ -111,7 +111,7 @@ describe('processNodes', () => {
}),
];
const invalidFrames = [
new MutableDataFrame({
createDataFrame({
refId: 'invalidData',
fields: [],
}),
@ -124,7 +124,7 @@ describe('processNodes', () => {
});
it('getting fields is case insensitive', () => {
const nodeFrame = new MutableDataFrame({
const nodeFrame = createDataFrame({
refId: 'nodes',
fields: [
{ name: 'id', type: FieldType.string, values: ['id'] },
@ -142,7 +142,7 @@ describe('processNodes', () => {
expect(nodeFields.mainStat).toBeDefined();
expect(nodeFields.secondaryStat).toBeDefined();
const edgeFrame = new MutableDataFrame({
const edgeFrame = createDataFrame({
refId: 'nodes',
fields: [
{ name: 'id', type: FieldType.string, values: ['id'] },
@ -162,7 +162,7 @@ describe('processNodes', () => {
it('interpolates panel options correctly', () => {
const frames = [
new MutableDataFrame({
createDataFrame({
refId: 'nodes',
fields: [
{ name: 'id', type: FieldType.string },
@ -173,7 +173,7 @@ describe('processNodes', () => {
{ name: 'arc__tertiary', type: FieldType.string },
],
}),
new MutableDataFrame({
createDataFrame({
refId: 'edges',
fields: [
{ name: 'id', type: FieldType.string },

View File

@ -1,16 +1,15 @@
import { MutableDataFrame, Field } from '@grafana/data/src';
import { UPlotConfigBuilder } from '@grafana/ui/src';
import { createDataFrame } from '@grafana/data';
import { UPlotConfigBuilder } from '@grafana/ui';
import { getVisibleLabels, VisibleExemplarLabels } from './ExemplarsPlugin';
describe('getVisibleLabels()', () => {
const dataFrameSeries1 = new MutableDataFrame({
const dataFrameSeries1 = createDataFrame({
name: 'tns/app',
fields: [
{
name: 'Time',
values: [1670418750000, 1670418765000, 1670418780000, 1670418795000],
entities: {},
},
{
name: 'Value',
@ -19,16 +18,14 @@ describe('getVisibleLabels()', () => {
},
values: [0.018963114754098367, 0.019140624999999974, 0.019718309859154928, 0.020064189189189167],
},
] as unknown as Field[],
length: 4,
],
});
const dataFrameSeries2 = new MutableDataFrame({
const dataFrameSeries2 = createDataFrame({
name: 'tns/db',
fields: [
{
name: 'Time',
values: [1670418750000, 1670418765000, 1670418780000, 1670418795000],
entities: {},
},
{
name: 'Value',
@ -37,16 +34,14 @@ describe('getVisibleLabels()', () => {
},
values: [0.028963114754098367, 0.029140624999999974, 0.029718309859154928, 0.030064189189189167],
},
] as unknown as Field[],
length: 4,
],
});
const dataFrameSeries3 = new MutableDataFrame({
const dataFrameSeries3 = createDataFrame({
name: 'tns/loadgen',
fields: [
{
name: 'Time',
values: [1670418750000, 1670418765000, 1670418780000, 1670418795000],
entities: {},
},
{
name: 'Value',
@ -55,8 +50,7 @@ describe('getVisibleLabels()', () => {
},
values: [0.028963114754098367, 0.029140624999999974, 0.029718309859154928, 0.030064189189189167],
},
] as unknown as Field[],
length: 4,
],
});
const frames = [dataFrameSeries1, dataFrameSeries2, dataFrameSeries3];
const config: UPlotConfigBuilder = {

View File

@ -1,4 +1,4 @@
import { createTheme, FieldType, MutableDataFrame, toDataFrame } from '@grafana/data';
import { createTheme, FieldType, createDataFrame, toDataFrame } from '@grafana/data';
import { prepareGraphableFields } from './utils';
@ -76,7 +76,7 @@ describe('prepare timeseries graph', () => {
});
it('will convert NaN and Infinty to nulls', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
fields: [
{ name: 'time', type: FieldType.time, values: [995, 9996, 9997, 9998, 9999] },
{ name: 'a', values: [-10, NaN, 10, -Infinity, +Infinity] },
@ -97,7 +97,7 @@ describe('prepare timeseries graph', () => {
});
it('will insert nulls given an interval value', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
fields: [
{ name: 'time', type: FieldType.time, config: { interval: 1 }, values: [1, 3, 6] },
{ name: 'a', values: [1, 2, 3] },
@ -121,7 +121,7 @@ describe('prepare timeseries graph', () => {
});
it('will insert and convert nulls to a configure "no value" value', () => {
const df = new MutableDataFrame({
const df = createDataFrame({
fields: [
{ name: 'time', type: FieldType.time, config: { interval: 1 }, values: [1, 3, 6] },
{ name: 'a', config: { noValue: '20' }, values: [1, 2, 3] },