DataFrame: move labels to field (#19926)

This commit is contained in:
Ryan McKinley
2019-11-07 07:50:45 -08:00
committed by GitHub
parent e487c68156
commit 818aa8eefa
22 changed files with 243 additions and 135 deletions
@@ -1,5 +1,5 @@
import { Field, DataFrame, DataFrameDTO, FieldDTO, FieldType } from '../types/dataFrame';
import { KeyValue, QueryResultMeta, Labels } from '../types/data';
import { KeyValue, QueryResultMeta } from '../types/data';
import { guessFieldTypeFromValue, guessFieldTypeForField, toDataFrameDTO } from './processDataFrame';
import isArray from 'lodash/isArray';
import isString from 'lodash/isString';
@@ -16,7 +16,6 @@ export const MISSING_VALUE: any = null;
export class MutableDataFrame<T = any> implements DataFrame, MutableVector<T> {
name?: string;
labels?: Labels;
refId?: string;
meta?: QueryResultMeta;
@@ -36,13 +35,10 @@ export class MutableDataFrame<T = any> implements DataFrame, MutableVector<T> {
// Copy values from
if (source) {
const { name, labels, refId, meta, fields } = source;
const { name, refId, meta, fields } = source;
if (name) {
this.name = name;
}
if (labels) {
this.labels = labels;
}
if (refId) {
this.refId = refId;
}
@@ -116,6 +112,7 @@ export class MutableDataFrame<T = any> implements DataFrame, MutableVector<T> {
type,
config: f.config || {},
values: this.creator(buffer),
labels: f.labels,
};
if (type === FieldType.other) {
@@ -57,6 +57,13 @@ function convertTableToDataFrame(table: TableData): DataFrame {
}
function convertTimeSeriesToDataFrame(timeSeries: TimeSeries): DataFrame {
const times: number[] = [];
const values: TimeSeriesValue[] = [];
for (const point of timeSeries.datapoints) {
values.push(point[0]);
times.push(point[1] as number);
}
const fields = [
{
name: timeSeries.target || 'Value',
@@ -64,30 +71,23 @@ function convertTimeSeriesToDataFrame(timeSeries: TimeSeries): DataFrame {
config: {
unit: timeSeries.unit,
},
values: new ArrayVector<TimeSeriesValue>(),
values: new ArrayVector<TimeSeriesValue>(values),
labels: timeSeries.tags,
},
{
name: 'Time',
type: FieldType.time,
config: {
unit: 'dateTimeAsIso',
},
values: new ArrayVector<number>(),
config: {},
values: new ArrayVector<number>(times),
},
];
for (const point of timeSeries.datapoints) {
fields[0].values.buffer.push(point[0]);
fields[1].values.buffer.push(point[1] as number);
}
return {
name: timeSeries.target,
labels: timeSeries.tags,
refId: timeSeries.refId,
meta: timeSeries.meta,
fields,
length: timeSeries.datapoints.length,
length: values.length,
};
}
@@ -132,6 +132,7 @@ function convertJSONDocumentDataToDataFrame(timeSeries: TimeSeries): DataFrame {
{
name: timeSeries.target,
type: FieldType.other,
labels: timeSeries.tags,
config: {
unit: timeSeries.unit,
filterable: (timeSeries as any).filterable,
@@ -146,7 +147,6 @@ function convertJSONDocumentDataToDataFrame(timeSeries: TimeSeries): DataFrame {
return {
name: timeSeries.target,
labels: timeSeries.tags,
refId: timeSeries.target,
meta: { json: true },
fields,
@@ -445,6 +445,7 @@ export function toDataFrameDTO(data: DataFrame): DataFrameDTO {
type: f.type,
config: f.config,
values: f.values.toArray(),
labels: f.labels,
};
});
@@ -453,6 +454,5 @@ export function toDataFrameDTO(data: DataFrame): DataFrameDTO {
refId: data.refId,
meta: data.meta,
name: data.name,
labels: data.labels,
};
}
@@ -5,6 +5,7 @@ Object {
"fields": Array [
Object {
"config": Object {},
"labels": undefined,
"name": "Field",
"type": "string",
"values": Array [
@@ -16,6 +17,7 @@ Object {
"config": Object {
"title": "First",
},
"labels": undefined,
"name": "first",
"type": "number",
"values": Array [
@@ -27,6 +29,7 @@ Object {
"config": Object {
"title": "Min",
},
"labels": undefined,
"name": "min",
"type": "number",
"values": Array [
@@ -38,6 +41,7 @@ Object {
"config": Object {
"title": "Max",
},
"labels": undefined,
"name": "max",
"type": "number",
"values": Array [
@@ -49,6 +53,7 @@ Object {
"config": Object {
"title": "Delta",
},
"labels": undefined,
"name": "delta",
"type": "number",
"values": Array [
@@ -57,7 +62,6 @@ Object {
],
},
],
"labels": undefined,
"meta": Object {
"transformations": Array [
"reduce",
+3 -2
View File
@@ -56,6 +56,8 @@ export interface Field<T = any, V = Vector<T>> {
type: FieldType;
config: FieldConfig;
values: V; // The raw field values
labels?: Labels;
/**
* Cache of reduced values
*/
@@ -75,7 +77,6 @@ export interface Field<T = any, V = Vector<T>> {
export interface DataFrame extends QueryResultBase {
name?: string;
fields: Field[]; // All fields of equal length
labels?: Labels;
// The number of rows
length: number;
@@ -89,6 +90,7 @@ export interface FieldDTO<T = any> {
type?: FieldType;
config?: FieldConfig;
values?: Vector<T> | T[]; // toJSON will always be T[], input could be either
labels?: Labels;
}
/**
@@ -96,6 +98,5 @@ export interface FieldDTO<T = any> {
*/
export interface DataFrameDTO extends QueryResultBase {
name?: string;
labels?: Labels;
fields: Array<FieldDTO | Field>;
}
@@ -5,6 +5,7 @@ Object {
"fields": Array [
Object {
"config": Object {},
"labels": undefined,
"name": "Field 1",
"type": "string",
"values": Array [
@@ -16,6 +17,7 @@ Object {
},
Object {
"config": Object {},
"labels": undefined,
"name": "Field 2",
"type": "number",
"values": Array [
@@ -27,6 +29,7 @@ Object {
},
Object {
"config": Object {},
"labels": undefined,
"name": "Field 3",
"type": "number",
"values": Array [
@@ -38,6 +41,7 @@ Object {
},
Object {
"config": Object {},
"labels": undefined,
"name": "Field 4",
"type": "number",
"values": Array [
@@ -48,7 +52,6 @@ Object {
],
},
],
"labels": undefined,
"meta": undefined,
"name": undefined,
"refId": undefined,
@@ -60,6 +63,7 @@ Object {
"fields": Array [
Object {
"config": Object {},
"labels": undefined,
"name": "a",
"type": "number",
"values": Array [
@@ -69,6 +73,7 @@ Object {
},
Object {
"config": Object {},
"labels": undefined,
"name": "b",
"type": "number",
"values": Array [
@@ -78,6 +83,7 @@ Object {
},
Object {
"config": Object {},
"labels": undefined,
"name": "c",
"type": "number",
"values": Array [
@@ -86,7 +92,6 @@ Object {
],
},
],
"labels": undefined,
"meta": undefined,
"name": undefined,
"refId": undefined,
@@ -100,6 +105,7 @@ Object {
"config": Object {
"unit": "ms",
},
"labels": undefined,
"name": "a",
"type": "number",
"values": Array [
@@ -113,6 +119,7 @@ Object {
"config": Object {
"unit": "lengthm",
},
"labels": undefined,
"name": "b",
"type": "number",
"values": Array [
@@ -126,6 +133,7 @@ Object {
"config": Object {
"unit": "s",
},
"labels": undefined,
"name": "c",
"type": "boolean",
"values": Array [
@@ -136,7 +144,6 @@ Object {
],
},
],
"labels": undefined,
"meta": undefined,
"name": undefined,
"refId": undefined,
@@ -6,18 +6,16 @@ describe('getRowContexts', () => {
it('then the result should be in correct format', async () => {
const firstResult = new MutableDataFrame({
refId: 'B',
labels: {},
fields: [
{ name: 'ts', type: FieldType.time, values: [3, 2, 1] },
{ name: 'line', type: FieldType.string, values: ['3', '2', '1'] },
{ name: 'line', type: FieldType.string, values: ['3', '2', '1'], labels: {} },
],
});
const secondResult = new MutableDataFrame({
refId: 'B',
labels: {},
fields: [
{ name: 'ts', type: FieldType.time, values: [6, 5, 4] },
{ name: 'line', type: FieldType.string, values: ['6', '5', '4'] },
{ name: 'line', type: FieldType.string, values: ['6', '5', '4'], labels: {} },
],
});
const row: LogRowModel = {