Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TSVB] Support custom field format #101245

Merged
merged 87 commits into from
Sep 13, 2021
Merged
Show file tree
Hide file tree
Changes from 85 commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
5a3025c
[TSVB] Support custom field format
DianaDerevyankina May 27, 2021
f8e27db
Merge branch 'master' into issues/97213
DianaDerevyankina Jun 3, 2021
3eee90a
Add ignore_field_formatting for series to support value formatting fo…
DianaDerevyankina Jun 3, 2021
2c7e8e2
Fix type issue for visData and rename getCustomFieldFormatter to crea…
DianaDerevyankina Jun 3, 2021
cc1999e
Update vis.test to cover custom field formats logic and add a migrati…
DianaDerevyankina Jun 4, 2021
71494d1
Merge branch 'master' into issues/97213
DianaDerevyankina Jun 4, 2021
84fddd2
Move createCustomFieldFormatter to a separate file, make formatting r…
DianaDerevyankina Jun 4, 2021
9ec68ae
Merge branch 'master' into issues/97213
DianaDerevyankina Jun 8, 2021
85d3a92
Remove services, add getFieldFormatsService to use it in format_labe…
DianaDerevyankina Jun 8, 2021
e7107be
Update plugin.ts
DianaDerevyankina Jun 8, 2021
23da97b
Update start for plugin.ts
DianaDerevyankina Jun 8, 2021
9d42fef
Add formatting for annotations and markdown values
DianaDerevyankina Jun 8, 2021
e800a9e
Refactor some code
DianaDerevyankina Jun 9, 2021
8edfb3c
Merge branch 'master' into issues/97213
DianaDerevyankina Jun 9, 2021
5317e01
Merge branch 'master' into issues/97213
DianaDerevyankina Jun 10, 2021
5046d27
Update some naming and conditions
DianaDerevyankina Jun 11, 2021
17918cf
Fix formatting of data type labels
DianaDerevyankina Jun 11, 2021
60b6f2e
Merge branch 'master' into issues/97213
DianaDerevyankina Jun 11, 2021
b984653
In process_bucket fix case for no getFieldFormatByName
DianaDerevyankina Jun 14, 2021
56fdcb1
Merge branch 'master' into issues/97213
kibanamachine Jun 14, 2021
995adca
Merge branch 'master' into issues/97213
DianaDerevyankina Jun 14, 2021
4ab0509
Add field formatting functional tests for all panel types
DianaDerevyankina Jun 14, 2021
0ab3ef6
Merge branch 'master' into issues/97213
DianaDerevyankina Jun 15, 2021
75ceb1a
Update tests to make them run correctly for firefox
DianaDerevyankina Jun 15, 2021
2019733
Update _tsvb_markdown test setup
DianaDerevyankina Jun 15, 2021
f7e47d5
Merge branch 'master' into issues/97213
DianaDerevyankina Jul 21, 2021
8b30c29
Move series ignoreFieldFormatting check to a separate file, change co…
DianaDerevyankina Jul 22, 2021
71e5d45
Merge branch 'master' into issues/97213
DianaDerevyankina Jul 26, 2021
07c87c0
Fix type check for timeseries_visualization.tsx
DianaDerevyankina Jul 26, 2021
df703aa
Update migrations.js test expected version to 7.15
DianaDerevyankina Jul 26, 2021
1bb7a66
Fix tests in _tsvb_chart.ts
DianaDerevyankina Jul 26, 2021
1f95dae
Merge branch 'master' into issues/97213
DianaDerevyankina Jul 27, 2021
74b11d1
Merge branch 'master' into issues/97213
kibanamachine Jul 27, 2021
a91fc4c
Merge branch 'master' into issues/97213
DianaDerevyankina Jul 27, 2021
78acd8d
Fix merge conflict remove process_bucket.js
DianaDerevyankina Jul 27, 2021
7c163ce
Update process_bucket.test.ts
DianaDerevyankina Jul 27, 2021
9322014
Fix markdown labels formatting
DianaDerevyankina Jul 28, 2021
08de656
Merge branch 'master' into issues/97213
kibanamachine Aug 2, 2021
354beb3
Merge branch 'master' into issues/97213
kibanamachine Aug 2, 2021
cbd994f
Merge branch 'master' into issues/97213
DianaDerevyankina Aug 3, 2021
6df961d
Add ignore_field_formatting for annotations, enhanced migration scrip…
DianaDerevyankina Aug 3, 2021
708f804
Merge branch 'master' into issues/97213
kibanamachine Aug 4, 2021
f689107
Fix migration script and add disabling for ignore component when stri…
DianaDerevyankina Aug 4, 2021
f72db10
Add supporting URL and color formatters in tsvb table
VladLasitsa Aug 5, 2021
25e3e2d
Fix eslint
VladLasitsa Aug 5, 2021
c7c5558
Merge remote-tracking branch 'origin/issues/97213' into issues/97213
DianaDerevyankina Aug 5, 2021
6524fe6
Merge branch 'master' into issues/97213
DianaDerevyankina Aug 5, 2021
8dd6e4e
Merge branch 'master' into issues/97213
DianaDerevyankina Aug 9, 2021
3c8c8e3
Remove ignore formatting component, add field formatting option to TS…
DianaDerevyankina Aug 9, 2021
c21a616
Fix failing tests, refactor create_field_formatter and add test to it…
DianaDerevyankina Aug 12, 2021
1a84515
Fix series formatting for top hit when it has not numeric result
DianaDerevyankina Aug 12, 2021
b30cbe7
Merge branch 'master' into issues/97213
kibanamachine Aug 12, 2021
f2e48ca
Handle no fieldFormatMap case for table/vis.js
DianaDerevyankina Aug 12, 2021
f77cca3
Merge branch 'master' into issues/97213
kibanamachine Aug 13, 2021
ef74d40
Merge branch 'master' into issues/97213
kibanamachine Aug 16, 2021
04d2f04
Remove "Default" option form DataFormatPicker when index pattern is s…
DianaDerevyankina Aug 17, 2021
3871bcf
Chore(TSVB): Replace aggregations lookup with map
DianaDerevyankina Aug 20, 2021
b489122
Fix types, update test expected data and remove unused translations
DianaDerevyankina Aug 20, 2021
4b4053a
Merge branch 'master' into TSVB-aggregations-map
kibanamachine Aug 20, 2021
9a4e014
Merge branch 'master' into issues/97213
DianaDerevyankina Aug 23, 2021
37d75e9
Fix i18 check and useEffect in agg.tsx
DianaDerevyankina Aug 23, 2021
df2b044
Merge branch 'TSVB-aggregations-map' into issues/97213
DianaDerevyankina Aug 23, 2021
78dcc21
Handle aggregations field formatting case
DianaDerevyankina Aug 23, 2021
7d8a70f
Fix agg_utils, vis and check_if_numeric_metric tests
DianaDerevyankina Aug 24, 2021
a9bc63b
Correct typo and refactor condition in std_metric
DianaDerevyankina Aug 24, 2021
1c90bba
Fix type check
DianaDerevyankina Aug 24, 2021
a80388a
Merge branch 'master' into issues/97213
DianaDerevyankina Aug 25, 2021
8a54007
Get rid of IFieldType
DianaDerevyankina Aug 26, 2021
ed5220e
Merge branch 'master' into issues/97213
DianaDerevyankina Sep 3, 2021
9b1380d
Merge branch 'master' into issues/97213
kibanamachine Sep 6, 2021
9512316
Add URL and color formatting for topN and metric tabs, fix setting in…
DianaDerevyankina Sep 8, 2021
8941deb
Merge branch 'master' into issues/97213
kibanamachine Sep 8, 2021
490f26c
Update tsvb.asciidoc
DianaDerevyankina Sep 8, 2021
ddfa286
Merge branch 'master' into issues/97213
DianaDerevyankina Sep 8, 2021
8cf3324
Remove link icon from Date format field help text, update click logic…
DianaDerevyankina Sep 8, 2021
47ec5d5
Remove unused import
DianaDerevyankina Sep 9, 2021
f6e09b9
Merge branch 'master' into issues/97213
DianaDerevyankina Sep 9, 2021
114ea94
Revert top N bar extra logic for click
DianaDerevyankina Sep 9, 2021
09394d3
Merge branch 'master' into issues/97213
kibanamachine Sep 9, 2021
77c3b0f
Refactor some code in agg.tsx
DianaDerevyankina Sep 9, 2021
0c1d7bf
Add URL and color formatting to Gauge
DianaDerevyankina Sep 9, 2021
aba4a19
Merge branch 'master' into issues/97213
DianaDerevyankina Sep 9, 2021
287ec81
Fix bug with terms formatting, refactor some code, update create_fiel…
DianaDerevyankina Sep 10, 2021
38b7bc4
Add comments to _gauge.scss
DianaDerevyankina Sep 10, 2021
870a54b
Merge branch 'master' into issues/97213
kibanamachine Sep 10, 2021
16c9938
Remove unnecessary await
DianaDerevyankina Sep 10, 2021
d3483e1
Merge branch 'master' into issues/97213
kibanamachine Sep 13, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/user/dashboard/tsvb.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ The index pattern mode unlocks many new features, such as:

* Interactive filters for time series visualizations

* Custom field formats

* Better performance

[float]
Expand Down
2 changes: 2 additions & 0 deletions src/plugins/vis_type_timeseries/common/agg_utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ describe('agg utils', () => {
isFieldRequired: true,
isFilterRatioSupported: false,
isHistogramSupported: false,
isFieldFormattingDisabled: false,
hasExtendedStats: true,
};
const expected = [
Expand Down Expand Up @@ -95,6 +96,7 @@ describe('agg utils', () => {
isFieldRequired: false,
isFilterRatioSupported: false,
isHistogramSupported: false,
isFieldFormattingDisabled: false,
hasExtendedStats: false,
};
const expected = [
Expand Down
4 changes: 4 additions & 0 deletions src/plugins/vis_type_timeseries/common/agg_utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export interface Agg {
isFieldRequired: boolean;
isFilterRatioSupported: boolean;
isHistogramSupported: boolean;
isFieldFormattingDisabled: boolean;
hasExtendedStats: boolean;
};
}
Expand All @@ -37,6 +38,7 @@ const aggDefaultMeta = {
isFieldRequired: true,
isFilterRatioSupported: false,
isHistogramSupported: false,
isFieldFormattingDisabled: false,
hasExtendedStats: false,
};

Expand Down Expand Up @@ -201,6 +203,7 @@ export const aggs: Agg[] = [
id: TSVB_METRIC_TYPES.CALCULATION,
meta: {
...aggDefaultMeta,
isFieldFormattingDisabled: true,
type: AGG_TYPE.PARENT_PIPELINE,
label: i18n.translate('visTypeTimeseries.aggUtils.bucketScriptLabel', {
defaultMessage: 'Bucket Script',
Expand Down Expand Up @@ -342,6 +345,7 @@ export const aggs: Agg[] = [
id: TSVB_METRIC_TYPES.MATH,
meta: {
...aggDefaultMeta,
isFieldFormattingDisabled: true,
type: AGG_TYPE.SPECIAL,
label: i18n.translate('visTypeTimeseries.aggUtils.mathLabel', { defaultMessage: 'Math' }),
},
Expand Down
2 changes: 1 addition & 1 deletion src/plugins/vis_type_timeseries/common/calculate_label.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export const calculateLabel = (

if (includes(paths, metric.type)) {
const targetMetric = metrics.find((m) => startsWith(metric.field!, m.id));
const targetLabel = calculateLabel(targetMetric!, metrics, fields);
const targetLabel = calculateLabel(targetMetric!, metrics, fields, isThrowErrorOnFieldNotFound);

// For percentiles we need to parse the field id to extract the percentile
// the user configured in the percentile aggregation and specified in the
Expand Down
9 changes: 9 additions & 0 deletions src/plugins/vis_type_timeseries/common/enums/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,12 @@ export enum TOOLTIP_MODES {
SHOW_ALL = 'show_all',
SHOW_FOCUSED = 'show_focused',
}

export enum DATA_FORMATTERS {
BYTES = 'bytes',
CUSTOM = 'custom',
DEFAULT = 'default',
DURATION = 'duration',
NUMBER = 'number',
PERCENT = 'percent',
}
1 change: 1 addition & 0 deletions src/plugins/vis_type_timeseries/common/types/vis_data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export interface PanelSeries {
export interface PanelData {
id: string;
label: string;
labelFormatted?: string;
data: PanelDataArray[];
seriesId: string;
splitByLabel: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,39 @@
* Side Public License, v 1.
*/

import React, { HTMLAttributes } from 'react';
import React, { useMemo, useEffect, HTMLAttributes } from 'react';
// @ts-ignore
import { aggToComponent } from '../lib/agg_to_component';
// @ts-ignore
import { isMetricEnabled } from '../../lib/check_ui_restrictions';
// @ts-expect-error not typed yet
import { seriesChangeHandler } from '../lib/series_change_handler';
import { checkIfNumericMetric } from '../lib/check_if_numeric_metric';
import { getFormatterType } from '../lib/get_formatter_type';
import { UnsupportedAgg } from './unsupported_agg';
import { TemporaryUnsupportedAgg } from './temporary_unsupported_agg';
import { DATA_FORMATTERS } from '../../../../common/enums';
import type { Metric, Panel, Series, SanitizedFieldType } from '../../../../common/types';
import { DragHandleProps } from '../../../types';
import { TimeseriesUIRestrictions } from '../../../../common/ui_restrictions';
import type { DragHandleProps } from '../../../types';
import type { TimeseriesUIRestrictions } from '../../../../common/ui_restrictions';

interface AggProps extends HTMLAttributes<HTMLElement> {
disableDelete: boolean;
fields: Record<string, SanitizedFieldType[]>;
name: string;
model: Metric;
panel: Panel;
series: Series;
siblings: Metric[];
uiRestrictions: TimeseriesUIRestrictions;
dragHandleProps: DragHandleProps;
onChange: (part: Partial<Series>) => void;
onAdd: () => void;
onChange: () => void;
onDelete: () => void;
}

export function Agg(props: AggProps) {
const { model, uiRestrictions } = props;
const { model, uiRestrictions, series, name, onChange, fields, siblings } = props;

let Component = aggToComponent[model.type];

Expand All @@ -50,6 +56,34 @@ export function Agg(props: AggProps) {
const indexPattern = props.series.override_index_pattern
? props.series.series_index_pattern
: props.panel.index_pattern;
const isKibanaIndexPattern = props.panel.use_kibana_indexes || indexPattern === '';

const onAggChange = useMemo(
() => seriesChangeHandler({ name, model: series, onChange }, siblings),
[name, onChange, siblings, series]
);

useEffect(() => {
// formatter is based on the last agg, i.e. active or resulting one as pipeline
if (siblings[siblings.length - 1]?.id === model.id) {
const formatterType = getFormatterType(series.formatter);
const isNumericMetric = checkIfNumericMetric(model, fields, indexPattern);
const isNumberFormatter = ![DATA_FORMATTERS.DEFAULT, DATA_FORMATTERS.CUSTOM].includes(
formatterType
);

if (isNumberFormatter && !isNumericMetric) {
onChange({ formatter: DATA_FORMATTERS.DEFAULT });
}
// in case of string index pattern mode, change default formatter depending on metric type
// "number" formatter for numeric metric and "" as custom formatter for any other type
if (formatterType === DATA_FORMATTERS.DEFAULT && !isKibanaIndexPattern) {
onChange({
formatter: isNumericMetric ? DATA_FORMATTERS.NUMBER : '',
});
}
}
}, [indexPattern, model, onChange, fields, series.formatter, isKibanaIndexPattern, siblings]);

return (
<div className={props.className} style={style}>
Expand All @@ -58,7 +92,7 @@ export function Agg(props: AggProps) {
disableDelete={props.disableDelete}
model={props.model}
onAdd={props.onAdd}
onChange={props.onChange}
onChange={onAggChange}
onDelete={props.onDelete}
panel={props.panel}
series={props.series}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import { EuiDraggable, EuiDroppable } from '@elastic/eui';

import { Agg } from './agg';
// @ts-ignore
import { seriesChangeHandler } from '../lib/series_change_handler';
import { handleAdd, handleDelete } from '../lib/collection_actions';
import { newMetricAggFn } from '../lib/new_metric_agg_fn';
import type { Panel, Series, SanitizedFieldType } from '../../../../common/types';
Expand All @@ -26,16 +25,14 @@ export interface AggsProps {
model: Series;
fields: Record<string, SanitizedFieldType[]>;
uiRestrictions: TimeseriesUIRestrictions;
onChange(): void;
onChange(part: Partial<Series>): void;
}

export class Aggs extends PureComponent<AggsProps> {
render() {
const { panel, model, fields, uiRestrictions } = this.props;
const { panel, model, fields, name, uiRestrictions, onChange } = this.props;
const list = model.metrics;

const onChange = seriesChangeHandler(this.props, list);

return (
<EuiDroppable droppableId={`${DROPPABLE_ID}:${model.id}`} type="MICRO" spacing="s">
{list.map((row, idx) => (
Expand All @@ -51,6 +48,7 @@ export class Aggs extends PureComponent<AggsProps> {
key={row.id}
disableDelete={list.length < 2}
fields={fields}
name={name}
model={row}
onAdd={() => handleAdd(this.props, newMetricAggFn)}
onChange={onChange}
Expand Down
Loading