diff --git a/x-pack/solutions/observability/plugins/infra/common/color_palette.test.ts b/x-pack/solutions/observability/plugins/infra/common/color_palette.test.ts index e23051d6825a7..7b86caf6e6c36 100644 --- a/x-pack/solutions/observability/plugins/infra/common/color_palette.test.ts +++ b/x-pack/solutions/observability/plugins/infra/common/color_palette.test.ts @@ -33,7 +33,7 @@ describe('Color Palette', () => { }); describe('colorTransformer()', () => { it('should just work', () => { - expect(colorTransformer(Color.color0)).toBe('#6092C0'); + expect(colorTransformer(Color.color0)).toBe('#54B399'); }); }); }); diff --git a/x-pack/solutions/observability/plugins/infra/common/color_palette.ts b/x-pack/solutions/observability/plugins/infra/common/color_palette.ts index d0b340765a788..16bcb68034f4f 100644 --- a/x-pack/solutions/observability/plugins/infra/common/color_palette.ts +++ b/x-pack/solutions/observability/plugins/infra/common/color_palette.ts @@ -28,16 +28,19 @@ export type Palette = { const euiPalette = euiPaletteColorBlind(); export const defaultPalette: Palette = { - [Color.color0]: euiPalette[1], // (blue) - [Color.color1]: euiPalette[2], // (pink) - [Color.color2]: euiPalette[0], // (green-ish) - [Color.color3]: euiPalette[3], // (purple) - [Color.color4]: euiPalette[4], // (light pink) - [Color.color5]: euiPalette[5], // (yellow) - [Color.color6]: euiPalette[6], // (tan) - [Color.color7]: euiPalette[7], // (orange) - [Color.color8]: euiPalette[8], // (brown) - [Color.color9]: euiPalette[9], // (red) + // TODO: Waiting for the designer input on the colors mapping + // As a temp solution, in the old palette, colors 0..3 are the dark colors, 4..6 are the light colors and 7..9 dark again + // I followed the same pattern here for the new palette + [Color.color0]: euiPalette[0], + [Color.color1]: euiPalette[2], + [Color.color2]: euiPalette[4], + [Color.color3]: euiPalette[6], + [Color.color4]: euiPalette[1], + [Color.color5]: euiPalette[3], + [Color.color6]: euiPalette[5], + [Color.color7]: euiPalette[8], + [Color.color8]: euiPalette[9], + [Color.color9]: euiPalette[7], }; export const createPaletteTransformer = (palette: Palette) => (color: Color) => palette[color]; diff --git a/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/components/expression_chart.test.tsx b/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/components/expression_chart.test.tsx deleted file mode 100644 index c2217fb0ec513..0000000000000 --- a/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/components/expression_chart.test.tsx +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { ReactElement } from 'react'; -import React from 'react'; -import { act } from 'react-dom/test-utils'; -import type { LineAnnotation, RectAnnotation } from '@elastic/charts'; -import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; -// We are using this inside a `jest.mock` call. Jest requires dynamic dependencies to be prefixed with `mock` -import { coreMock as mockCoreMock } from '@kbn/core/public/mocks'; -import { Aggregators } from '../../../../common/alerting/metrics'; -import { COMPARATORS } from '@kbn/alerting-comparators'; -import type { MetricExpression } from '../types'; -import type { DataView } from '@kbn/data-views-plugin/common'; -import { ExpressionChart } from './expression_chart'; -import { TIMESTAMP_FIELD } from '../../../../common/constants'; -import type { ResolvedDataView } from '../../../utils/data_view'; - -const mockDataView = { - id: 'mock-id', - title: 'mock-title', - timeFieldName: TIMESTAMP_FIELD, - isPersisted: () => false, - getName: () => 'mock-data-view', - toSpec: () => ({}), -} as jest.Mocked; - -const mockStartServices = mockCoreMock.createStart(); -jest.mock('../../../hooks/use_kibana', () => ({ - useKibanaContextForPlugin: () => ({ - services: { - ...mockStartServices, - charts: { - activeCursor: jest.fn(), - theme: { - useChartsBaseTheme: jest.fn(() => ({})), - }, - }, - }, - }), -})); - -jest.mock('../../../containers/metrics_source', () => ({ - withSourceProvider: () => jest.fn, - useSourceContext: () => ({ - source: { id: 'default' }, - }), - useMetricsDataViewContext: () => ({ - metricsView: { - indices: 'metricbeat-*', - timeFieldName: mockDataView.timeFieldName, - fields: mockDataView.fields, - dataViewReference: mockDataView, - } as ResolvedDataView, - loading: false, - error: undefined, - }), -})); - -const mockResponse = { - pageInfo: { - afterKey: null, - total: 0, - }, - series: [{ id: 'Everything', rows: [], columns: [] }], -}; - -jest.mock('../hooks/use_metrics_explorer_chart_data', () => ({ - useMetricsExplorerChartData: () => ({ loading: false, data: { pages: [mockResponse] } }), -})); - -describe('ExpressionChart', () => { - async function setup( - expression: MetricExpression, - filterQuery?: string, - groupBy?: string, - annotations?: Array> - ) { - const wrapper = mountWithIntl( - - ); - - const update = async () => - await act(async () => { - await nextTick(); - wrapper.update(); - }); - - await update(); - - return { wrapper, update }; - } - - it('should display no data message', async () => { - const expression: MetricExpression = { - aggType: Aggregators.AVERAGE, - timeSize: 1, - timeUnit: 'm', - sourceId: 'default', - threshold: [1], - comparator: COMPARATORS.GREATER_THAN_OR_EQUALS, - }; - const { wrapper } = await setup(expression); - expect(wrapper.find('[data-test-subj~="noChartData"]').exists()).toBeTruthy(); - }); -}); diff --git a/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/components/expression_chart.tsx b/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/components/expression_chart.tsx deleted file mode 100644 index de3f020f3cb6a..0000000000000 --- a/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/components/expression_chart.tsx +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import type { ReactElement } from 'react'; -import React, { useRef } from 'react'; -import type { LineAnnotation, RectAnnotation } from '@elastic/charts'; -import { Axis, Chart, niceTimeFormatter, Position, Settings, Tooltip } from '@elastic/charts'; -import { EuiText } from '@elastic/eui'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { useActiveCursor } from '@kbn/charts-plugin/public'; -import { first, last } from 'lodash'; - -import { i18n } from '@kbn/i18n'; -import { convertToBuiltInComparators } from '@kbn/observability-plugin/common'; -import { useTimelineChartTheme } from '../../../hooks/use_timeline_chart_theme'; -import { Color } from '../../../../common/color_palette'; -import type { MetricsExplorerRow, MetricsExplorerAggregation } from '../../../../common/http_api'; -import { MetricExplorerSeriesChart } from '../../../pages/metrics/metrics_explorer/components/series_chart'; -import type { MetricExpression, TimeRange } from '../types'; -import type { MetricsExplorerOptionsMetric } from '../../../pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options'; -import { MetricsExplorerChartType } from '../../../pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options'; -import { createFormatterForMetric } from '../../../pages/metrics/metrics_explorer/components/helpers/create_formatter_for_metric'; -import { calculateDomain } from '../../../pages/metrics/metrics_explorer/components/helpers/calculate_domain'; -import { useMetricsExplorerChartData } from '../hooks/use_metrics_explorer_chart_data'; -import { getMetricId } from '../../../pages/metrics/metrics_explorer/components/helpers/get_metric_id'; -import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; -import { - ChartContainer, - LoadingState, - NoDataState, - TIME_LABELS, - tooltipProps, -} from '../../common/criterion_preview_chart/criterion_preview_chart'; -import { ThresholdAnnotations } from '../../common/criterion_preview_chart/threshold_annotations'; -import { CUSTOM_EQUATION } from '../i18n_strings'; - -interface Props { - expression: MetricExpression; - annotations?: Array>; - chartType?: MetricsExplorerChartType; - filterQuery?: string; - groupBy?: string | string[]; - groupInstance?: string | string[]; - hideTitle?: boolean; - timeRange?: TimeRange; -} - -export const ExpressionChart: React.FC = ({ - expression, - annotations, - chartType = MetricsExplorerChartType.bar, - filterQuery, - groupBy, - groupInstance, - hideTitle = false, - timeRange, -}) => { - const { charts } = useKibanaContextForPlugin().services; - const chartTheme = useTimelineChartTheme(); - - const { isLoading, data } = useMetricsExplorerChartData({ - expression, - filterQuery, - groupBy, - groupInstance, - timeRange, - }); - - const chartRef = useRef(null); - const handleCursorUpdate = useActiveCursor(charts.activeCursor, chartRef, { - isDateHistogram: true, - }); - - if (isLoading) { - return ; - } - - if (!data) { - return ; - } - - const firstSeries = first(first(data.pages)!.series); - // Creating a custom series where the ID is changed to 0 - // so that we can get a proper domain - if (!firstSeries || !firstSeries.rows || firstSeries.rows.length === 0) { - return ; - } - - const firstTimestamp = first(firstSeries.rows)!.timestamp; - const lastTimestamp = last(firstSeries.rows)!.timestamp; - const metric: MetricsExplorerOptionsMetric = { - field: expression.metric, - aggregation: expression.aggType as MetricsExplorerAggregation, - color: Color.color0, - }; - - if (metric.aggregation === 'custom') { - metric.label = expression.label || CUSTOM_EQUATION; - } - - const dateFormatter = - firstTimestamp == null || lastTimestamp == null - ? (value: number) => `${value}` - : niceTimeFormatter([firstTimestamp, lastTimestamp]); - - const criticalThresholds = expression.threshold.slice().sort(); - const warningThresholds = expression.warningThreshold?.slice().sort() ?? []; - const thresholds = [...criticalThresholds, ...warningThresholds].sort(); - - const series = { - ...firstSeries, - rows: firstSeries.rows.map((row) => { - const newRow: MetricsExplorerRow = { ...row }; - thresholds.forEach((thresholdValue, index) => { - newRow[getMetricId(metric, `threshold_${index}`)] = thresholdValue; - }); - return newRow; - }), - }; - - const dataDomain = calculateDomain(series, [metric], false); - const domain = { - max: Math.max(dataDomain.max, last(thresholds) || dataDomain.max) * 1.1, // add 10% headroom. - min: Math.min(dataDomain.min, first(thresholds) || dataDomain.min) * 0.9, // add 10% floor, - }; - - if (domain.min === first(expression.threshold)) { - domain.min = domain.min * 0.9; - } - - const { timeSize, timeUnit } = expression; - const timeLabel = TIME_LABELS[timeUnit as keyof typeof TIME_LABELS]; - - return ( - <> - - - - - {expression.warningComparator && expression.warningThreshold && ( - - )} - {annotations} - - - - - - - {!hideTitle && ( -
- {series.id !== 'ALL' ? ( - - - - ) : ( - - - - )} -
- )} - - ); -}; diff --git a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts index da3305313e3cc..55628d208873d 100644 --- a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts +++ b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts @@ -27,7 +27,7 @@ describe('createTSVBLink()', () => { app: 'visualize', hash: '/create', search: { - _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#6092C0,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", + _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#54B399,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", _g: '(refreshInterval:(pause:!t,value:0),time:(from:now-1h,to:now))', type: 'metrics', }, @@ -44,7 +44,7 @@ describe('createTSVBLink()', () => { app: 'visualize', hash: '/create', search: { - _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#6092C0,fill:0,formatter:bytes,id:test-id,label:'rate(host.network.egress.bytes)',line_width:2,metrics:!((field:host.network.egress.bytes,id:test-id,type:max),(field:test-id,id:test-id,type:derivative,unit:'1s'),(field:test-id,id:test-id,type:positive_only)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}}/s)),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", + _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#54B399,fill:0,formatter:bytes,id:test-id,label:'rate(host.network.egress.bytes)',line_width:2,metrics:!((field:host.network.egress.bytes,id:test-id,type:max),(field:test-id,id:test-id,type:derivative,unit:'1s'),(field:test-id,id:test-id,type:positive_only)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}}/s)),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", _g: '(refreshInterval:(pause:!t,value:0),time:(from:now-1h,to:now))', type: 'metrics', }, @@ -57,7 +57,7 @@ describe('createTSVBLink()', () => { app: 'visualize', hash: '/create', search: { - _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#6092C0,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", + _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#54B399,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", _g: '(refreshInterval:(pause:!t,value:0),time:(from:now-10m,to:now))', type: 'metrics', }, @@ -71,7 +71,7 @@ describe('createTSVBLink()', () => { app: 'visualize', hash: '/create', search: { - _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'my-beats-*',filter:(language:kuery,query:'system.network.name:lo* and host.name : \"example-01\"'),id:test-id,index_pattern:'my-beats-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#6092C0,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", + _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'my-beats-*',filter:(language:kuery,query:'system.network.name:lo* and host.name : \"example-01\"'),id:test-id,index_pattern:'my-beats-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#54B399,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", _g: '(refreshInterval:(pause:!t,value:0),time:(from:now-1h,to:now))', type: 'metrics', }, @@ -85,7 +85,7 @@ describe('createTSVBLink()', () => { app: 'visualize', hash: '/create', search: { - _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#6092C0,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", + _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#54B399,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", _g: '(refreshInterval:(pause:!t,value:0),time:(from:now-1h,to:now))', type: 'metrics', }, @@ -99,7 +99,7 @@ describe('createTSVBLink()', () => { app: 'visualize', hash: '/create', search: { - _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#6092C0,fill:0.5,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", + _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#54B399,fill:0.5,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", _g: '(refreshInterval:(pause:!t,value:0),time:(from:now-1h,to:now))', type: 'metrics', }, @@ -117,7 +117,7 @@ describe('createTSVBLink()', () => { app: 'visualize', hash: '/create', search: { - _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#6092C0,fill:0.5,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:stacked,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", + _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metricbeat-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metricbeat-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#54B399,fill:0.5,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:stacked,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", _g: '(refreshInterval:(pause:!t,value:0),time:(from:now-1h,to:now))', type: 'metrics', }, @@ -130,7 +130,7 @@ describe('createTSVBLink()', () => { app: 'visualize', hash: '/create', search: { - _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metric*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metric*',interval:auto,series:!((axis_position:right,chart_type:line,color:#6092C0,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", + _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'metric*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'metric*',interval:auto,series:!((axis_position:right,chart_type:line,color:#54B399,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", _g: '(refreshInterval:(pause:!t,value:0),time:(from:now-1h,to:now))', type: 'metrics', },