Chore: swap [value,time] order when converting to DataFrame (#23206)

This commit is contained in:
Ryan McKinley
2020-04-03 11:11:28 -07:00
committed by GitHub
parent e257536e88
commit 6366e43a44
9 changed files with 77 additions and 68 deletions
@@ -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,