Chore: swap [value,time] order when converting to DataFrame (#23206)
This commit is contained in:
@@ -21,16 +21,17 @@ describe('toDataFrame', () => {
|
||||
],
|
||||
};
|
||||
let series = toDataFrame(input1);
|
||||
expect(series.fields[0].name).toBe(input1.target);
|
||||
expect(series.fields[1].name).toBe(input1.target);
|
||||
|
||||
const v0 = series.fields[0].values;
|
||||
const v1 = series.fields[1].values;
|
||||
expect(v0.length).toEqual(2);
|
||||
expect(v0.get(0)).toEqual(1);
|
||||
expect(v0.get(1)).toEqual(2);
|
||||
|
||||
expect(v1.length).toEqual(2);
|
||||
expect(v0.get(0)).toEqual(100);
|
||||
expect(v0.get(1)).toEqual(200);
|
||||
expect(v1.get(0)).toEqual(1);
|
||||
expect(v1.get(1)).toEqual(2);
|
||||
expect(v1.get(0)).toEqual(100);
|
||||
expect(v1.get(1)).toEqual(200);
|
||||
|
||||
// Should fill a default name if target is empty
|
||||
const input2 = {
|
||||
@@ -42,7 +43,7 @@ describe('toDataFrame', () => {
|
||||
],
|
||||
};
|
||||
series = toDataFrame(input2);
|
||||
expect(series.fields[0].name).toEqual('Value');
|
||||
expect(series.fields[1].name).toEqual('Value');
|
||||
});
|
||||
|
||||
it('assumes TimeSeries values are numbers', () => {
|
||||
@@ -54,7 +55,8 @@ describe('toDataFrame', () => {
|
||||
],
|
||||
};
|
||||
const data = toDataFrame(input1);
|
||||
expect(data.fields[0].type).toBe(FieldType.number);
|
||||
expect(data.fields[0].type).toBe(FieldType.time);
|
||||
expect(data.fields[1].type).toBe(FieldType.number);
|
||||
});
|
||||
|
||||
it('keeps dataFrame unchanged', () => {
|
||||
|
||||
@@ -66,6 +66,12 @@ function convertTimeSeriesToDataFrame(timeSeries: TimeSeries): DataFrame {
|
||||
}
|
||||
|
||||
const fields = [
|
||||
{
|
||||
name: 'Time',
|
||||
type: FieldType.time,
|
||||
config: {},
|
||||
values: new ArrayVector<number>(times),
|
||||
},
|
||||
{
|
||||
name: timeSeries.target || 'Value',
|
||||
type: FieldType.number,
|
||||
@@ -75,12 +81,6 @@ function convertTimeSeriesToDataFrame(timeSeries: TimeSeries): DataFrame {
|
||||
values: new ArrayVector<TimeSeriesValue>(values),
|
||||
labels: timeSeries.tags,
|
||||
},
|
||||
{
|
||||
name: 'Time',
|
||||
type: FieldType.time,
|
||||
config: {},
|
||||
values: new ArrayVector<number>(times),
|
||||
},
|
||||
];
|
||||
|
||||
return {
|
||||
@@ -285,23 +285,22 @@ export const toLegacyResponseData = (frame: DataFrame): TimeSeries | TableData =
|
||||
const rowCount = frame.length;
|
||||
const rows: any[][] = [];
|
||||
|
||||
for (let i = 0; i < rowCount; i++) {
|
||||
const row: any[] = [];
|
||||
for (let j = 0; j < fields.length; j++) {
|
||||
row.push(fields[j].values.get(i));
|
||||
}
|
||||
rows.push(row);
|
||||
}
|
||||
|
||||
if (fields.length === 2) {
|
||||
let type = fields[1].type;
|
||||
if (!type) {
|
||||
type = guessFieldTypeForField(fields[1]) || FieldType.other;
|
||||
}
|
||||
if (type === FieldType.time) {
|
||||
const { timeField, timeIndex } = getTimeField(frame);
|
||||
if (timeField) {
|
||||
const valueIndex = timeIndex === 0 ? 1 : 0;
|
||||
|
||||
// Make sure it is [value,time]
|
||||
for (let i = 0; i < rowCount; i++) {
|
||||
rows.push([
|
||||
fields[valueIndex].values.get(i), // value
|
||||
fields[timeIndex!].values.get(i), // time
|
||||
]);
|
||||
}
|
||||
|
||||
return {
|
||||
alias: fields[0].name || frame.name,
|
||||
target: fields[0].name || frame.name,
|
||||
alias: fields[valueIndex].name || frame.name,
|
||||
target: fields[valueIndex].name || frame.name,
|
||||
datapoints: rows,
|
||||
unit: fields[0].config ? fields[0].config.unit : undefined,
|
||||
refId: frame.refId,
|
||||
@@ -310,6 +309,14 @@ export const toLegacyResponseData = (frame: DataFrame): TimeSeries | TableData =
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 0; i < rowCount; i++) {
|
||||
const row: any[] = [];
|
||||
for (let j = 0; j < fields.length; j++) {
|
||||
row.push(fields[j].values.get(i));
|
||||
}
|
||||
rows.push(row);
|
||||
}
|
||||
|
||||
if (frame.meta && frame.meta.json) {
|
||||
return {
|
||||
alias: fields[0].name || frame.name,
|
||||
|
||||
Reference in New Issue
Block a user