Skip to content

Commit 8201d4f

Browse files
authored
[ML] Transforms: Fixes chart histograms for runtime fields. (#93028)
Fixes chart histograms for runtime fields. The runtime field configurations were not passed on to the endpoint to fetch the charts data, so charts ended up being empty with a 0 documents legend.
1 parent c0535ab commit 8201d4f

File tree

22 files changed

+250
-119
lines changed

22 files changed

+250
-119
lines changed

x-pack/plugins/ml/common/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
export { HitsTotalRelation, SearchResponse7, HITS_TOTAL_RELATION } from './types/es_client';
9+
export { ChartData } from './types/field_histograms';
910
export { ANOMALY_SEVERITY, ANOMALY_THRESHOLD, SEVERITY_COLORS } from './constants/anomalies';
1011
export { getSeverityColor, getSeverityType } from './util/anomaly_utils';
1112
export { composeValidators, patternValidator } from './util/validators';
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0; you may not use this file except in compliance with the Elastic License
5+
* 2.0.
6+
*/
7+
8+
export interface NumericDataItem {
9+
key: number;
10+
key_as_string?: string | number;
11+
doc_count: number;
12+
}
13+
14+
export interface NumericChartData {
15+
data: NumericDataItem[];
16+
id: string;
17+
interval: number;
18+
stats: [number, number];
19+
type: 'numeric';
20+
}
21+
22+
export const isNumericChartData = (arg: any): arg is NumericChartData => {
23+
return (
24+
typeof arg === 'object' &&
25+
arg.hasOwnProperty('data') &&
26+
arg.hasOwnProperty('id') &&
27+
arg.hasOwnProperty('interval') &&
28+
arg.hasOwnProperty('stats') &&
29+
arg.hasOwnProperty('type') &&
30+
arg.type === 'numeric'
31+
);
32+
};
33+
34+
export interface OrdinalDataItem {
35+
key: string;
36+
key_as_string?: string;
37+
doc_count: number;
38+
}
39+
40+
export interface OrdinalChartData {
41+
cardinality: number;
42+
data: OrdinalDataItem[];
43+
id: string;
44+
type: 'ordinal' | 'boolean';
45+
}
46+
47+
export const isOrdinalChartData = (arg: any): arg is OrdinalChartData => {
48+
return (
49+
typeof arg === 'object' &&
50+
arg.hasOwnProperty('data') &&
51+
arg.hasOwnProperty('cardinality') &&
52+
arg.hasOwnProperty('id') &&
53+
arg.hasOwnProperty('type') &&
54+
(arg.type === 'ordinal' || arg.type === 'boolean')
55+
);
56+
};
57+
58+
export interface UnsupportedChartData {
59+
id: string;
60+
type: 'unsupported';
61+
}
62+
63+
export const isUnsupportedChartData = (arg: any): arg is UnsupportedChartData => {
64+
return typeof arg === 'object' && arg.hasOwnProperty('type') && arg.type === 'unsupported';
65+
};
66+
67+
export type ChartDataItem = NumericDataItem | OrdinalDataItem;
68+
export type ChartData = NumericChartData | OrdinalChartData | UnsupportedChartData;

x-pack/plugins/ml/public/application/components/data_grid/column_chart.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ import { EuiDataGridColumn } from '@elastic/eui';
1313

1414
import './column_chart.scss';
1515

16-
import { isUnsupportedChartData, useColumnChart, ChartData } from './use_column_chart';
16+
import { isUnsupportedChartData, ChartData } from '../../../../common/types/field_histograms';
17+
18+
import { useColumnChart } from './use_column_chart';
1719

1820
interface Props {
1921
chartData: ChartData;

x-pack/plugins/ml/public/application/components/data_grid/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export {
1616
useRenderCellValue,
1717
getProcessedFields,
1818
} from './common';
19-
export { getFieldType, ChartData } from './use_column_chart';
19+
export { getFieldType } from './use_column_chart';
2020
export { useDataGrid } from './use_data_grid';
2121
export { DataGrid } from './data_grid';
2222
export {

x-pack/plugins/ml/public/application/components/data_grid/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import { EuiDataGridPaginationProps, EuiDataGridSorting, EuiDataGridColumn } fro
1111

1212
import { Dictionary } from '../../../../common/types/common';
1313
import { HitsTotalRelation } from '../../../../common/types/es_client';
14+
import { ChartData } from '../../../../common/types/field_histograms';
1415

1516
import { INDEX_STATUS } from '../../data_frame_analytics/common/analytics';
1617

17-
import { ChartData } from './use_column_chart';
1818
import { FeatureImportanceBaseline } from '../../../../common/types/feature_importance';
1919

2020
export type ColumnId = string;

x-pack/plugins/ml/public/application/components/data_grid/use_column_chart.test.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,15 @@ import '@testing-library/jest-dom/extend-expect';
1313
import { KBN_FIELD_TYPES } from '../../../../../../../src/plugins/data/public';
1414

1515
import {
16-
getFieldType,
17-
getLegendText,
18-
getXScaleType,
1916
isNumericChartData,
2017
isOrdinalChartData,
2118
isUnsupportedChartData,
22-
useColumnChart,
2319
NumericChartData,
2420
OrdinalChartData,
2521
UnsupportedChartData,
26-
} from './use_column_chart';
22+
} from '../../../../common/types/field_histograms';
23+
24+
import { getFieldType, getLegendText, getXScaleType, useColumnChart } from './use_column_chart';
2725

2826
describe('getFieldType()', () => {
2927
it('should return the Kibana field type for a given EUI data grid schema', () => {

x-pack/plugins/ml/public/application/components/data_grid/use_column_chart.tsx

Lines changed: 9 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ import { i18n } from '@kbn/i18n';
1717

1818
import { KBN_FIELD_TYPES } from '../../../../../../../src/plugins/data/public';
1919

20+
import {
21+
isNumericChartData,
22+
isOrdinalChartData,
23+
ChartData,
24+
ChartDataItem,
25+
NumericDataItem,
26+
OrdinalDataItem,
27+
} from '../../../../common/types/field_histograms';
28+
2029
import { NON_AGGREGATABLE } from './common';
2130

2231
export const hoveredRow$ = new BehaviorSubject<any | null>(null);
@@ -66,68 +75,6 @@ export const getFieldType = (schema: EuiDataGridColumn['schema']): KBN_FIELD_TYP
6675
return fieldType;
6776
};
6877

69-
interface NumericDataItem {
70-
key: number;
71-
key_as_string?: string | number;
72-
doc_count: number;
73-
}
74-
75-
export interface NumericChartData {
76-
data: NumericDataItem[];
77-
id: string;
78-
interval: number;
79-
stats: [number, number];
80-
type: 'numeric';
81-
}
82-
83-
export const isNumericChartData = (arg: any): arg is NumericChartData => {
84-
return (
85-
typeof arg === 'object' &&
86-
arg.hasOwnProperty('data') &&
87-
arg.hasOwnProperty('id') &&
88-
arg.hasOwnProperty('interval') &&
89-
arg.hasOwnProperty('stats') &&
90-
arg.hasOwnProperty('type') &&
91-
arg.type === 'numeric'
92-
);
93-
};
94-
95-
export interface OrdinalDataItem {
96-
key: string;
97-
key_as_string?: string;
98-
doc_count: number;
99-
}
100-
101-
export interface OrdinalChartData {
102-
cardinality: number;
103-
data: OrdinalDataItem[];
104-
id: string;
105-
type: 'ordinal' | 'boolean';
106-
}
107-
108-
export const isOrdinalChartData = (arg: any): arg is OrdinalChartData => {
109-
return (
110-
typeof arg === 'object' &&
111-
arg.hasOwnProperty('data') &&
112-
arg.hasOwnProperty('cardinality') &&
113-
arg.hasOwnProperty('id') &&
114-
arg.hasOwnProperty('type') &&
115-
(arg.type === 'ordinal' || arg.type === 'boolean')
116-
);
117-
};
118-
119-
export interface UnsupportedChartData {
120-
id: string;
121-
type: 'unsupported';
122-
}
123-
124-
export const isUnsupportedChartData = (arg: any): arg is UnsupportedChartData => {
125-
return typeof arg === 'object' && arg.hasOwnProperty('type') && arg.type === 'unsupported';
126-
};
127-
128-
export type ChartDataItem = NumericDataItem | OrdinalDataItem;
129-
export type ChartData = NumericChartData | OrdinalChartData | UnsupportedChartData;
130-
13178
type LegendText = string | JSX.Element;
13279
export const getLegendText = (
13380
chartData: ChartData,

x-pack/plugins/ml/public/application/components/data_grid/use_data_grid.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
1010
import { EuiDataGridSorting, EuiDataGridColumn } from '@elastic/eui';
1111

1212
import { HITS_TOTAL_RELATION } from '../../../../common/types/es_client';
13+
import { ChartData } from '../../../../common/types/field_histograms';
1314

1415
import { INDEX_STATUS } from '../../data_frame_analytics/common';
1516

@@ -26,7 +27,6 @@ import {
2627
RowCountRelation,
2728
UseDataGridReturnType,
2829
} from './types';
29-
import { ChartData } from './use_column_chart';
3030

3131
export const useDataGrid = (
3232
columns: EuiDataGridColumn[],

x-pack/plugins/ml/public/application/datavisualizer/stats_table/components/field_data_row/boolean_content_preview.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77

88
import React, { FC, useMemo } from 'react';
99
import { EuiDataGridColumn } from '@elastic/eui';
10+
import { OrdinalChartData } from '../../../../../../common/types/field_histograms';
11+
import { ColumnChart } from '../../../../components/data_grid/column_chart';
1012
import { FieldDataRowProps } from '../../types';
1113
import { getTFPercentage } from '../../utils';
12-
import { ColumnChart } from '../../../../components/data_grid/column_chart';
13-
import { OrdinalChartData } from '../../../../components/data_grid/use_column_chart';
1414

1515
export const BooleanContentPreview: FC<FieldDataRowProps> = ({ config }) => {
1616
const chartData = useMemo(() => {

x-pack/plugins/ml/public/application/datavisualizer/stats_table/components/field_data_row/top_values_preview.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77

88
import React, { FC } from 'react';
99
import { EuiDataGridColumn } from '@elastic/eui';
10-
import type { FieldDataRowProps } from '../../types/field_data_row';
10+
import { ChartData, OrdinalDataItem } from '../../../../../../common/types/field_histograms';
1111
import { ColumnChart } from '../../../../components/data_grid/column_chart';
12-
import { ChartData } from '../../../../components/data_grid';
13-
import { OrdinalDataItem } from '../../../../components/data_grid/use_column_chart';
12+
import type { FieldDataRowProps } from '../../types/field_data_row';
1413

1514
export const TopValuesPreview: FC<FieldDataRowProps> = ({ config }) => {
1615
const { stats } = config;

0 commit comments

Comments
 (0)