From d8280b895df79585ec209ff288ea2eef20471664 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 14 May 2019 22:20:27 -0700 Subject: [PATCH] InputDataSource: better empty value support (#17075) --- .../datasource/input/InputDatasource.test.ts | 16 ++++++++- .../datasource/input/InputDatasource.ts | 35 ++++++++++--------- .../datasource/input/InputQueryEditor.tsx | 6 ++-- 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/public/app/plugins/datasource/input/InputDatasource.test.ts b/public/app/plugins/datasource/input/InputDatasource.test.ts index 2a8412dca88..e4c23bf47d0 100644 --- a/public/app/plugins/datasource/input/InputDatasource.test.ts +++ b/public/app/plugins/datasource/input/InputDatasource.test.ts @@ -1,4 +1,4 @@ -import InputDatasource from './InputDatasource'; +import InputDatasource, { describeSeriesData } from './InputDatasource'; import { InputQuery, InputOptions } from './types'; import { readCSV, DataSourceInstanceSettings, PluginMeta } from '@grafana/ui'; import { getQueryOptions } from 'test/helpers/getQueryOptions'; @@ -31,4 +31,18 @@ describe('InputDatasource', () => { }); }); }); + + test('SeriesData descriptions', () => { + expect(describeSeriesData([])).toEqual(''); + expect(describeSeriesData(null)).toEqual(''); + expect( + describeSeriesData([ + { + name: 'x', + fields: [{ name: 'a' }], + rows: [], + }, + ]) + ).toEqual('1 Fields, 0 Rows'); + }); }); diff --git a/public/app/plugins/datasource/input/InputDatasource.ts b/public/app/plugins/datasource/input/InputDatasource.ts index f208260aa2a..246ebeb7a05 100644 --- a/public/app/plugins/datasource/input/InputDatasource.ts +++ b/public/app/plugins/datasource/input/InputDatasource.ts @@ -17,28 +17,14 @@ export class InputDatasource extends DataSourceApi { this.data = instanceSettings.jsonData.data ? instanceSettings.jsonData.data : []; } - getDescription(data: SeriesData[]): string { - if (!data) { - return ''; - } - if (data.length > 1) { - const count = data.reduce((acc, series) => { - return acc + series.rows.length; - }, 0); - return `${data.length} Series, ${count} Rows`; - } - const series = data[0]; - return `${series.fields.length} Fields, ${series.rows.length} Rows`; - } - /** * Convert a query to a simple text string */ getQueryDisplayText(query: InputQuery): string { if (query.data) { - return 'Panel Data: ' + this.getDescription(query.data); + return 'Panel Data: ' + describeSeriesData(query.data); } - return `Shared Data From: ${this.name} (${this.getDescription(this.data)})`; + return `Shared Data From: ${this.name} (${describeSeriesData(this.data)})`; } metricFindQuery(query: string, options?: any) { @@ -96,4 +82,21 @@ export class InputDatasource extends DataSourceApi { } } +export function describeSeriesData(data: SeriesData[]): string { + if (!data || !data.length) { + return ''; + } + if (data.length > 1) { + const count = data.reduce((acc, series) => { + return acc + series.rows.length; + }, 0); + return `${data.length} Series, ${count} Rows`; + } + const series = data[0]; + if (!series.fields) { + return 'Missing Fields'; + } + return `${series.fields.length} Fields, ${series.rows.length} Rows`; +} + export default InputDatasource; diff --git a/public/app/plugins/datasource/input/InputQueryEditor.tsx b/public/app/plugins/datasource/input/InputQueryEditor.tsx index 68e1cb5516e..2e9a473f5d9 100644 --- a/public/app/plugins/datasource/input/InputQueryEditor.tsx +++ b/public/app/plugins/datasource/input/InputQueryEditor.tsx @@ -2,7 +2,7 @@ import React, { PureComponent } from 'react'; // Types -import { InputDatasource } from './InputDatasource'; +import { InputDatasource, describeSeriesData } from './InputDatasource'; import { InputQuery, InputOptions } from './types'; import { FormLabel, Select, QueryEditorProps, SelectOptionItem, SeriesData, TableInputCSV, toCSV } from '@grafana/ui'; @@ -80,10 +80,10 @@ export class InputQueryEditor extends PureComponent {
{query.data ? ( - datasource.getDescription(query.data) + describeSeriesData(query.data) ) : ( - {name}: {datasource.getDescription(datasource.data)}    + {name}: {describeSeriesData(datasource.data)}    )}