From b5570ecdc420cd4649ec63fe2a95f841481b487e Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Tue, 27 Aug 2024 12:31:32 +0200 Subject: [PATCH 01/74] [Lens] fix flaky test with deleting filters (#191316) ## Summary Fixes https://github.com/elastic/kibana/issues/191009 (also fixes https://github.com/elastic/kibana/issues/189569 https://github.com/elastic/kibana/issues/178270 https://github.com/elastic/kibana/issues/139040 which are already closed as one time occurances but could happen again) https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6809 --- test/functional/services/filter_bar.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/functional/services/filter_bar.ts b/test/functional/services/filter_bar.ts index be4abf4e0daf2..c508410739db0 100644 --- a/test/functional/services/filter_bar.ts +++ b/test/functional/services/filter_bar.ts @@ -133,10 +133,11 @@ export class FilterBarService extends FtrService { * @param key field name */ public async removeFilter(key: string): Promise { - await this.retry.try(async () => { + await this.retry.waitFor('filter pill context menu is open', async () => { await this.testSubjects.click(`~filter & ~filter-key-${key}`); - await this.testSubjects.click(`deleteFilter`); + return await this.testSubjects.exists('deleteFilter'); }); + await this.testSubjects.click(`deleteFilter`); await this.header.awaitGlobalLoadingIndicatorHidden(); } From 1e428adc21c50fcb78a754d91eaee7ef5c1320ec Mon Sep 17 00:00:00 2001 From: Irene Blanco Date: Tue, 27 Aug 2024 13:44:54 +0200 Subject: [PATCH 02/74] [Infra][Hosts] Display N/A badge for APM hosts without system metrics (#191181) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Closes https://github.com/elastic/kibana/issues/190516 This PR introduces an "N/A" badge for hosts that are returned by the `metrics/infra/host` API with `hasSystemMetrics` set to `false`. This enhancement will help users quickly identify and address issues with APM hosts that are not monitored by the system integration. The badge will provide an explanation of the problem and suggest troubleshooting steps. ![Screen Recording 2024-08-23 at 11 58 29](https://github.com/user-attachments/assets/e4e72ac5-5244-4863-915d-51b14ebf078a) **Automated tests** Upon reviewing the code, I noticed that this screen is covered by functional tests. My initial idea was to add some functional tests to verify the badge display as well as the button and link redirections. However, I found that this is quite complex, as it involves modifying the data used in the tests, and I’m still not very familiar with that process. Given the deadline for this epic, I’ve decided not to include tests in this issue. If we believe they are really necessary, I would need to spend some time understanding how data is managed in our functional testing layer. Any feedback on this would be greatly appreciated. --- .../add_data_troubleshooting_popover.tsx | 111 ++++++++++++++++++ .../hosts/hooks/use_hosts_table.test.ts | 4 +- .../metrics/hosts/hooks/use_hosts_table.tsx | 58 +++++++-- 3 files changed, 158 insertions(+), 15 deletions(-) create mode 100644 x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/table/add_data_troubleshooting_popover.tsx diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/table/add_data_troubleshooting_popover.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/table/add_data_troubleshooting_popover.tsx new file mode 100644 index 0000000000000..419f78a892352 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/table/add_data_troubleshooting_popover.tsx @@ -0,0 +1,111 @@ +/* + * 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 React from 'react'; +import { + EuiBadge, + EuiButton, + EuiFlexGroup, + EuiFlexItem, + EuiLink, + EuiPopover, + EuiPopoverFooter, + EuiPopoverTitle, + EuiText, +} from '@elastic/eui'; + +import { + ObservabilityOnboardingLocatorParams, + OBSERVABILITY_ONBOARDING_LOCATOR, +} from '@kbn/deeplinks-observability'; +import { i18n } from '@kbn/i18n'; +import { useBoolean } from '@kbn/react-hooks'; + +import { useKibanaContextForPlugin } from '../../../../../hooks/use_kibana'; +import { APM_HOST_TROUBLESHOOTING_LINK } from '../../../../../components/asset_details/constants'; + +const popoverContent = { + title: i18n.translate('xpack.infra.addDataPopover.wantToSeeMorePopoverTitleLabel', { + defaultMessage: 'Want to see more?', + }), + content: i18n.translate('xpack.infra.addDataPopover.understandHostPerformanceByTextLabel', { + defaultMessage: 'Understand host performance by collecting more metrics.', + }), + button: i18n.translate('xpack.infra.addDataPopover.understandHostPerformanceByTextLabel', { + defaultMessage: 'Add data', + }), + link: i18n.translate('xpack.infra.addDataPopover.troubleshootingLinkLabel', { + defaultMessage: 'Troubleshooting', + }), +}; + +const badgeContent = i18n.translate('xpack.infra.addDataPopover.naBadgeLabel', { + defaultMessage: 'N/A', +}); + +export const AddDataTroubleshootingPopover = () => { + const [isPopoverOpen, { off: closePopover, toggle: togglePopover }] = useBoolean(false); + + const { + services: { share }, + } = useKibanaContextForPlugin(); + const addDataLinkHref = share.url.locators + .get(OBSERVABILITY_ONBOARDING_LOCATOR) + ?.getRedirectUrl({ category: 'logs' }); + + const onButtonClick = () => togglePopover(); + + return ( + + {badgeContent} + + } + isOpen={isPopoverOpen} + closePopover={closePopover} + > + {popoverContent.title} + + {popoverContent.content} + + + + + + {popoverContent.button} + + + + + + {popoverContent.link} + + + + + + + ); +}; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts index 965f6acd24c93..a0ebb20184912 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { useHostsTable } from './use_hosts_table'; +import { type HostNodeRow, useHostsTable } from './use_hosts_table'; import { renderHook } from '@testing-library/react-hooks'; import { InfraAssetMetricsItem } from '../../../../../common/http_api'; import * as useUnifiedSearchHooks from './use_unified_search'; @@ -158,7 +158,7 @@ describe('useHostTable hook', () => { } as unknown as ReturnType); }); it('it should map the nodes returned from the snapshot api to a format matching eui table items', () => { - const expected = [ + const expected: Array> = [ { name: 'host-0', os: '-', diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx index 4bdb72e625a89..e881950df570c 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx @@ -40,6 +40,7 @@ import { ColumnHeader } from '../components/table/column_header'; import { TABLE_COLUMN_LABEL, TABLE_CONTENT_LABEL } from '../translations'; import { METRICS_TOOLTIP } from '../../../../common/visualizations'; import { buildCombinedAssetFilter } from '../../../../utils/filters/build'; +import { AddDataTroubleshootingPopover } from '../components/table/add_data_troubleshooting_popover'; /** * Columns and items types @@ -64,10 +65,31 @@ export type HostNodeRow = HostMetadata & * Helper functions */ const formatMetric = (type: InfraAssetMetricType, value: number | undefined | null) => { - return value || value === 0 ? createInventoryMetricFormatter({ type })(value) : 'N/A'; + const defaultValue = value ?? 0; + return createInventoryMetricFormatter({ type })(defaultValue); +}; + +const buildMetricCell = ( + value: number | null, + formatType: InfraAssetMetricType, + hasSystemMetrics?: boolean +) => { + if (!hasSystemMetrics && value === null) { + return ; + } + + return formatMetric(formatType, value); }; const buildItemsList = (nodes: InfraAssetMetricsItem[]): HostNodeRow[] => { + nodes.map((node) => { + if (node.name === 'instance') { + node.metrics[0].value = 0; + node.hasSystemMetrics = true; + } + return node; + }); + return nodes.map(({ metrics, metadata, name, alertsCount, hasSystemMetrics }) => { const metadataKeyValue = metadata.reduce( (acc, curr) => ({ @@ -89,7 +111,7 @@ const buildItemsList = (nodes: InfraAssetMetricsItem[]): HostNodeRow[] => { ...metrics.reduce( (acc, curr) => ({ ...acc, - [curr.name]: curr.value ?? 0, + [curr.name]: curr.value, }), {} as HostMetrics ), @@ -104,12 +126,15 @@ const isTitleColumn = (cell: HostNodeRow[keyof HostNodeRow]): cell is HostNodeRo }; const sortValues = (aValue: any, bValue: any, { direction }: Sorting) => { - if (typeof aValue === 'string' && typeof bValue === 'string') { - return direction === 'desc' ? bValue.localeCompare(aValue) : aValue.localeCompare(bValue); + const a = aValue ?? -1; + const b = bValue ?? -1; + + if (typeof a === 'string' && typeof b === 'string') { + return direction === 'desc' ? b.localeCompare(a) : a.localeCompare(b); } - if (isNumber(aValue) && isNumber(bValue)) { - return direction === 'desc' ? bValue - aValue : aValue - bValue; + if (isNumber(a) && isNumber(b)) { + return direction === 'desc' ? b - a : a - b; } return 1; @@ -358,7 +383,8 @@ export const useHostsTable = () => { field: 'cpuV2', sortable: true, 'data-test-subj': 'hostsView-tableRow-cpuUsage', - render: (avg: number) => formatMetric('cpuV2', avg), + render: (avg: number, { hasSystemMetrics }: HostNodeRow) => + buildMetricCell(avg, 'cpuV2', hasSystemMetrics), align: 'right', }, { @@ -373,7 +399,8 @@ export const useHostsTable = () => { field: 'normalizedLoad1m', sortable: true, 'data-test-subj': 'hostsView-tableRow-normalizedLoad1m', - render: (avg: number) => formatMetric('normalizedLoad1m', avg), + render: (avg: number, { hasSystemMetrics }: HostNodeRow) => + buildMetricCell(avg, 'normalizedLoad1m', hasSystemMetrics), align: 'right', }, { @@ -388,7 +415,8 @@ export const useHostsTable = () => { field: 'memory', sortable: true, 'data-test-subj': 'hostsView-tableRow-memoryUsage', - render: (avg: number) => formatMetric('memory', avg), + render: (avg: number, { hasSystemMetrics }: HostNodeRow) => + buildMetricCell(avg, 'memory', hasSystemMetrics), align: 'right', }, { @@ -403,7 +431,8 @@ export const useHostsTable = () => { field: 'memoryFree', sortable: true, 'data-test-subj': 'hostsView-tableRow-memoryFree', - render: (avg: number) => formatMetric('memoryFree', avg), + render: (avg: number, { hasSystemMetrics }: HostNodeRow) => + buildMetricCell(avg, 'memoryFree', hasSystemMetrics), align: 'right', }, { @@ -418,7 +447,8 @@ export const useHostsTable = () => { field: 'diskSpaceUsage', sortable: true, 'data-test-subj': 'hostsView-tableRow-diskSpaceUsage', - render: (max: number) => formatMetric('diskSpaceUsage', max), + render: (max: number, { hasSystemMetrics }: HostNodeRow) => + buildMetricCell(max, 'diskSpaceUsage', hasSystemMetrics), align: 'right', }, { @@ -433,7 +463,8 @@ export const useHostsTable = () => { field: 'rxV2', sortable: true, 'data-test-subj': 'hostsView-tableRow-rx', - render: (avg: number) => formatMetric('rx', avg), + render: (avg: number, { hasSystemMetrics }: HostNodeRow) => + buildMetricCell(avg, 'rx', hasSystemMetrics), align: 'right', }, { @@ -448,7 +479,8 @@ export const useHostsTable = () => { field: 'txV2', sortable: true, 'data-test-subj': 'hostsView-tableRow-tx', - render: (avg: number) => formatMetric('tx', avg), + render: (avg: number, { hasSystemMetrics }: HostNodeRow) => + buildMetricCell(avg, 'tx', hasSystemMetrics), align: 'right', }, ], From ffd4076538cdd41c41651a09e11fb3eef8144b85 Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Tue, 27 Aug 2024 14:10:48 +0200 Subject: [PATCH 03/74] [Tines connector] Improve error handling and fallback (#191263) ## Summary From: https://github.com/elastic/kibana/issues/188115 Improvements of the Tines connector: - Original Axios error passed back from `getResponseErrorMessage` to the sub-actions framework, instead of returning `Unknown API error` string. The error appears in the error toast so the user has more information about the problem: Before: before After: after - Fallback input (direct webhook URL) now appears when there's some error. Before this change, the fallback input only appeared when the Tines API response was incomplete. Proper callout message added: Error fallback Co-authored-by: Elastic Machine --- .../tines/tines_params.test.tsx | 44 +++++++++++++++++++ .../connector_types/tines/tines_params.tsx | 21 ++++++++- .../connector_types/tines/translations.ts | 14 ++++++ .../connector_types/tines/tines.test.ts | 24 +++++++++- .../server/connector_types/tines/tines.ts | 9 ++-- 5 files changed, 103 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.test.tsx index 495a15c6a569c..72bc2e3ae891f 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.test.tsx @@ -467,6 +467,50 @@ describe('TinesParamsFields renders', () => { webhookUrl ); }); + + it('should render webhook url fallback when stories request has error', () => { + const errorMessage = 'something broke'; + mockUseSubActionStories.mockReturnValueOnce({ + isLoading: false, + response: { stories: [story] }, + error: new Error(errorMessage), + }); + + const wrapper = mountWithIntl( + + ); + + expect(wrapper.find('[data-test-subj="tines-fallbackCallout"]').exists()).toBe(true); + expect(wrapper.find('[data-test-subj="tines-webhookUrlInput"]').exists()).toBe(true); + }); + + it('should render webhook url fallback when webhooks request has error', () => { + const errorMessage = 'something broke'; + mockUseSubActionWebhooks.mockReturnValueOnce({ + isLoading: false, + response: { webhooks: [webhook] }, + error: new Error(errorMessage), + }); + + const wrapper = mountWithIntl( + + ); + + expect(wrapper.find('[data-test-subj="tines-fallbackCallout"]').exists()).toBe(true); + expect(wrapper.find('[data-test-subj="tines-webhookUrlInput"]').exists()).toBe(true); + }); }); describe('subActions error', () => { diff --git a/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.tsx index 11249f9c8db3c..2726e0e3ec8a5 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/tines/tines_params.tsx @@ -137,7 +137,10 @@ const TinesParamsFields: React.FunctionComponent(() => { + const showFallbackFrom = useMemo<'Story' | 'Webhook' | 'any' | 'error' | null>(() => { + if (storiesError || webhooksError) { + return 'error'; + } if (incompleteStories && !selectedStoryOption) { return 'Story'; } @@ -150,7 +153,9 @@ const TinesParamsFields: React.FunctionComponent - {showFallbackFrom !== 'any' && ( + {showFallbackFrom === 'error' && ( + <> + + {i18n.WEBHOOK_URL_ERROR_FALLBACK} + + + + )} + {(showFallbackFrom === 'Story' || showFallbackFrom === 'Webhook') && ( <> values: { entity, limit: API_MAX_RESULTS }, defaultMessage: `Not possible to retrieve more than {limit} results from the Tines {entity} API. If your {entity} does not appear in the list, please fill the Webhook URL below`, }); + +export const WEBHOOK_URL_ERROR_FALLBACK_TITLE = i18n.translate( + 'xpack.stackConnectors.security.tines.params.webhookUrlErrorFallbackTitle', + { + defaultMessage: 'Error using Tines API', + } +); +export const WEBHOOK_URL_ERROR_FALLBACK = i18n.translate( + 'xpack.stackConnectors.security.tines.params.webhookUrlErrorFallback', + { + defaultMessage: + 'There seems to be an issue retrieving Stories or Webhooks using the Tines API. Alternatively, you can set the Tines Webhook URL in the input below', + } +); export const WEBHOOK_URL_HELP = i18n.translate( 'xpack.stackConnectors.security.tines.params.webhookUrlHelp', { diff --git a/x-pack/plugins/stack_connectors/server/connector_types/tines/tines.test.ts b/x-pack/plugins/stack_connectors/server/connector_types/tines/tines.test.ts index 6bbaad9b86a0c..299ac1c55bfc5 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/tines/tines.test.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/tines/tines.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import axios, { AxiosInstance } from 'axios'; +import axios, { AxiosError, AxiosInstance, AxiosResponse } from 'axios'; import { actionsConfigMock } from '@kbn/actions-plugin/server/actions_config.mock'; import { actionsMock } from '@kbn/actions-plugin/server/mocks'; import { loggingSystemMock } from '@kbn/core-logging-server-mocks'; @@ -150,6 +150,28 @@ describe('TinesConnector', () => { }); }); + describe('Error handling', () => { + let error: AxiosError; + + beforeEach(() => { + error = new AxiosError(); + }); + + it('should return status text api error', () => { + error.response = { status: 401, statusText: 'Unauthorized' } as AxiosResponse; + // @ts-expect-error protected method + const errorMessage = connector.getResponseErrorMessage(error); + expect(errorMessage).toEqual('API Error: Unauthorized'); + }); + + it('should return original error', () => { + error.toString = () => 'Network Error'; + // @ts-expect-error protected method + const errorMessage = connector.getResponseErrorMessage(error); + expect(errorMessage).toEqual('Network Error'); + }); + }); + describe('getWebhooks', () => { beforeAll(() => { mockRequest.mockReturnValue({ data: { agents: [webhookAgent], meta: { pages: 1 } } }); diff --git a/x-pack/plugins/stack_connectors/server/connector_types/tines/tines.ts b/x-pack/plugins/stack_connectors/server/connector_types/tines/tines.ts index ed98ec382af86..f7e3f4bea1444 100644 --- a/x-pack/plugins/stack_connectors/server/connector_types/tines/tines.ts +++ b/x-pack/plugins/stack_connectors/server/connector_types/tines/tines.ts @@ -126,13 +126,10 @@ export class TinesConnector extends SubActionConnector Date: Tue, 27 Aug 2024 08:50:48 -0400 Subject: [PATCH 04/74] [Rules and Alerting][Stack Monitoring] Quote cluster uuid in global state link sent via alerting rules (#190341) ## Summary Closes https://github.com/elastic/kibana/issues/191250 This PR fixes the URL contained in the Shard size alerting rule when the email body contains the `{{ context.internalFullMessage}}` action variable. The generated URL which triggers a `rison decoder error` `https:///app/monitoring#/elasticsearch/indices/?_g=(cluster_uuid:foobar))` is fixed by adding a pair of single quotes around the cluster UUID `https:///app/monitoring#/elasticsearch/indices/?_g=(cluster_uuid:'foobar'))` Worth noting that this issue doesn't only impact the Shard size rule, but many other rule types, namely: * CPU usage * Disk usage * Memory usage * CCR read exception * ES version mismatch * Kibana version mismatch * Logstash version mismatch * Missing monitoring data * Thread pool search rejections * Thread pool write rejections --------- Co-authored-by: Valentin Crettaz Co-authored-by: Valentin Crettaz --- x-pack/plugins/monitoring/server/rules/base_rule.ts | 2 +- .../server/rules/ccr_read_exceptions_rule.test.ts | 8 ++++---- .../monitoring/server/rules/cpu_usage_rule.test.ts | 8 ++++---- .../monitoring/server/rules/disk_usage_rule.test.ts | 8 ++++---- .../rules/elasticsearch_version_mismatch_rule.test.ts | 4 ++-- .../server/rules/kibana_version_mismatch_rule.test.ts | 4 ++-- .../monitoring/server/rules/large_shard_size_rule.test.ts | 8 ++++---- .../server/rules/logstash_version_mismatch_rule.test.ts | 4 ++-- .../monitoring/server/rules/memory_usage_rule.test.ts | 8 ++++---- .../server/rules/missing_monitoring_data_rule.test.ts | 8 ++++---- .../rules/thread_pool_search_rejections_rule.test.ts | 8 ++++---- .../rules/thread_pool_write_rejections_rule.test.ts | 8 ++++---- 12 files changed, 39 insertions(+), 39 deletions(-) diff --git a/x-pack/plugins/monitoring/server/rules/base_rule.ts b/x-pack/plugins/monitoring/server/rules/base_rule.ts index f04ca15be27dd..cb8bfcf400d45 100644 --- a/x-pack/plugins/monitoring/server/rules/base_rule.ts +++ b/x-pack/plugins/monitoring/server/rules/base_rule.ts @@ -405,7 +405,7 @@ export class BaseRule { } protected createGlobalStateLink(link: string, clusterUuid: string, ccs?: string) { - const globalState = [`cluster_uuid:${clusterUuid}`]; + const globalState = [`cluster_uuid:'${clusterUuid}'`]; if (ccs) { globalState.push(`ccs:${ccs}`); } diff --git a/x-pack/plugins/monitoring/server/rules/ccr_read_exceptions_rule.test.ts b/x-pack/plugins/monitoring/server/rules/ccr_read_exceptions_rule.test.ts index 806c382cb3707..34f9c24b6d49b 100644 --- a/x-pack/plugins/monitoring/server/rules/ccr_read_exceptions_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/ccr_read_exceptions_rule.test.ts @@ -279,9 +279,9 @@ describe('CCRReadExceptionsRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'BcK-0pmsQniyPQfZuauuXw_remote_cluster_1:.follower_index_1', context: { - internalFullMessage: `CCR read exceptions alert is firing for the following remote cluster: ${remoteCluster}. Current 'follower_index' index affected: ${followerIndex}. [View CCR stats](http://localhost:5601/app/monitoring#/elasticsearch/ccr?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `CCR read exceptions alert is firing for the following remote cluster: ${remoteCluster}. Current 'follower_index' index affected: ${followerIndex}. [View CCR stats](http://localhost:5601/app/monitoring#/elasticsearch/ccr?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: `CCR read exceptions alert is firing for the following remote cluster: ${remoteCluster}. Verify follower and leader index relationships on the affected remote cluster.`, - action: `[View CCR stats](http://localhost:5601/app/monitoring#/elasticsearch/ccr?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View CCR stats](http://localhost:5601/app/monitoring#/elasticsearch/ccr?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: 'Verify follower and leader index relationships on the affected remote cluster.', clusterName, @@ -452,9 +452,9 @@ describe('CCRReadExceptionsRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'BcK-0pmsQniyPQfZuauuXw_remote_cluster_1:.follower_index_1', context: { - internalFullMessage: `CCR read exceptions alert is firing for the following remote cluster: ${remoteCluster}. Current 'follower_index' index affected: ${followerIndex}. [View CCR stats](http://localhost:5601/app/monitoring#/elasticsearch/ccr?_g=(cluster_uuid:${clusterUuid},ccs:testCluster))`, + internalFullMessage: `CCR read exceptions alert is firing for the following remote cluster: ${remoteCluster}. Current 'follower_index' index affected: ${followerIndex}. [View CCR stats](http://localhost:5601/app/monitoring#/elasticsearch/ccr?_g=(cluster_uuid:'${clusterUuid}',ccs:testCluster))`, internalShortMessage: `CCR read exceptions alert is firing for the following remote cluster: ${remoteCluster}. Verify follower and leader index relationships on the affected remote cluster.`, - action: `[View CCR stats](http://localhost:5601/app/monitoring#/elasticsearch/ccr?_g=(cluster_uuid:${clusterUuid},ccs:testCluster))`, + action: `[View CCR stats](http://localhost:5601/app/monitoring#/elasticsearch/ccr?_g=(cluster_uuid:'${clusterUuid}',ccs:testCluster))`, actionPlain: 'Verify follower and leader index relationships on the affected remote cluster.', clusterName, diff --git a/x-pack/plugins/monitoring/server/rules/cpu_usage_rule.test.ts b/x-pack/plugins/monitoring/server/rules/cpu_usage_rule.test.ts index 1b107d4031981..0558c2cdf6d33 100644 --- a/x-pack/plugins/monitoring/server/rules/cpu_usage_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/cpu_usage_rule.test.ts @@ -185,9 +185,9 @@ describe('CpuUsageRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'myNodeId', context: { - internalFullMessage: `CPU usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `CPU usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: `CPU usage alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify CPU level of node.`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: 'Verify CPU level of node.', clusterName, count, @@ -315,9 +315,9 @@ describe('CpuUsageRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'myNodeId', context: { - internalFullMessage: `CPU usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid},ccs:${ccs}))`, + internalFullMessage: `CPU usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}',ccs:${ccs}))`, internalShortMessage: `CPU usage alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify CPU level of node.`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid},ccs:testCluster))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}',ccs:testCluster))`, actionPlain: 'Verify CPU level of node.', clusterName, count, diff --git a/x-pack/plugins/monitoring/server/rules/disk_usage_rule.test.ts b/x-pack/plugins/monitoring/server/rules/disk_usage_rule.test.ts index 5e1c30dce78f6..6e7f66b219e26 100644 --- a/x-pack/plugins/monitoring/server/rules/disk_usage_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/disk_usage_rule.test.ts @@ -232,9 +232,9 @@ describe('DiskUsageRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'myNodeId', context: { - internalFullMessage: `Disk usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `Disk usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: `Disk usage alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify disk usage level of node.`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: 'Verify disk usage level of node.', clusterName, count, @@ -381,9 +381,9 @@ describe('DiskUsageRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'myNodeId', context: { - internalFullMessage: `Disk usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid},ccs:${ccs}))`, + internalFullMessage: `Disk usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}',ccs:${ccs}))`, internalShortMessage: `Disk usage alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify disk usage level of node.`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/myNodeId?_g=(cluster_uuid:abc123,ccs:testCluster))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/myNodeId?_g=(cluster_uuid:'${clusterUuid}',ccs:testCluster))`, actionPlain: 'Verify disk usage level of node.', clusterName, count, diff --git a/x-pack/plugins/monitoring/server/rules/elasticsearch_version_mismatch_rule.test.ts b/x-pack/plugins/monitoring/server/rules/elasticsearch_version_mismatch_rule.test.ts index eafb51136fc73..4269c0d6b5a5e 100644 --- a/x-pack/plugins/monitoring/server/rules/elasticsearch_version_mismatch_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/elasticsearch_version_mismatch_rule.test.ts @@ -140,9 +140,9 @@ describe('ElasticsearchVersionMismatchAlert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'abc123', context: { - action: `[View nodes](UNIT_TEST_URL/app/monitoring#/elasticsearch/nodes?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View nodes](UNIT_TEST_URL/app/monitoring#/elasticsearch/nodes?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: 'Verify you have the same version across all nodes.', - internalFullMessage: `Elasticsearch version mismatch alert is firing for testCluster. Elasticsearch is running 8.0.0, 7.2.1. [View nodes](UNIT_TEST_URL/app/monitoring#/elasticsearch/nodes?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `Elasticsearch version mismatch alert is firing for testCluster. Elasticsearch is running 8.0.0, 7.2.1. [View nodes](UNIT_TEST_URL/app/monitoring#/elasticsearch/nodes?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: 'Elasticsearch version mismatch alert is firing for testCluster. Verify you have the same version across all nodes.', versionList: ['8.0.0', '7.2.1'], diff --git a/x-pack/plugins/monitoring/server/rules/kibana_version_mismatch_rule.test.ts b/x-pack/plugins/monitoring/server/rules/kibana_version_mismatch_rule.test.ts index 46b777dbee4a2..7a3370c4092a6 100644 --- a/x-pack/plugins/monitoring/server/rules/kibana_version_mismatch_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/kibana_version_mismatch_rule.test.ts @@ -143,9 +143,9 @@ describe('KibanaVersionMismatchRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'abc123', context: { - action: `[View instances](UNIT_TEST_URL/app/monitoring#/kibana/instances?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View instances](UNIT_TEST_URL/app/monitoring#/kibana/instances?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: 'Verify you have the same version across all instances.', - internalFullMessage: `Kibana version mismatch alert is firing for testCluster. Kibana is running 8.0.0, 7.2.1. [View instances](UNIT_TEST_URL/app/monitoring#/kibana/instances?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `Kibana version mismatch alert is firing for testCluster. Kibana is running 8.0.0, 7.2.1. [View instances](UNIT_TEST_URL/app/monitoring#/kibana/instances?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: 'Kibana version mismatch alert is firing for testCluster. Verify you have the same version across all instances.', versionList: ['8.0.0', '7.2.1'], diff --git a/x-pack/plugins/monitoring/server/rules/large_shard_size_rule.test.ts b/x-pack/plugins/monitoring/server/rules/large_shard_size_rule.test.ts index 0ad6c7687c203..00272030ec4ab 100644 --- a/x-pack/plugins/monitoring/server/rules/large_shard_size_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/large_shard_size_rule.test.ts @@ -206,9 +206,9 @@ describe('LargeShardSizeRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'abc123:apm-8.0.0-onboarding-2021.06.30', context: { - internalFullMessage: `Large shard size alert is firing for the following index: ${shardIndex}. [View index shard size stats](http://localhost:5601/app/monitoring#/elasticsearch/indices/${shardIndex}?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `Large shard size alert is firing for the following index: ${shardIndex}. [View index shard size stats](http://localhost:5601/app/monitoring#/elasticsearch/indices/${shardIndex}?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: `Large shard size alert is firing for the following index: ${shardIndex}. Investigate indices with large shard sizes.`, - action: `[View index shard size stats](http://localhost:5601/app/monitoring#/elasticsearch/indices/${shardIndex}?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View index shard size stats](http://localhost:5601/app/monitoring#/elasticsearch/indices/${shardIndex}?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: 'Investigate indices with large shard sizes.', clusterName, state: 'firing', @@ -327,9 +327,9 @@ describe('LargeShardSizeRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'abc123:apm-8.0.0-onboarding-2021.06.30', context: { - internalFullMessage: `Large shard size alert is firing for the following index: ${shardIndex}. [View index shard size stats](http://localhost:5601/app/monitoring#/elasticsearch/indices/${shardIndex}?_g=(cluster_uuid:${clusterUuid},ccs:testCluster))`, + internalFullMessage: `Large shard size alert is firing for the following index: ${shardIndex}. [View index shard size stats](http://localhost:5601/app/monitoring#/elasticsearch/indices/${shardIndex}?_g=(cluster_uuid:'${clusterUuid}',ccs:testCluster))`, internalShortMessage: `Large shard size alert is firing for the following index: ${shardIndex}. Investigate indices with large shard sizes.`, - action: `[View index shard size stats](http://localhost:5601/app/monitoring#/elasticsearch/indices/${shardIndex}?_g=(cluster_uuid:${clusterUuid},ccs:testCluster))`, + action: `[View index shard size stats](http://localhost:5601/app/monitoring#/elasticsearch/indices/${shardIndex}?_g=(cluster_uuid:'${clusterUuid}',ccs:testCluster))`, actionPlain: 'Investigate indices with large shard sizes.', clusterName, state: 'firing', diff --git a/x-pack/plugins/monitoring/server/rules/logstash_version_mismatch_rule.test.ts b/x-pack/plugins/monitoring/server/rules/logstash_version_mismatch_rule.test.ts index 97cbbd2c619a6..7944bd129f2f1 100644 --- a/x-pack/plugins/monitoring/server/rules/logstash_version_mismatch_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/logstash_version_mismatch_rule.test.ts @@ -141,9 +141,9 @@ describe('LogstashVersionMismatchRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'abc123', context: { - action: `[View nodes](UNIT_TEST_URL/app/monitoring#/logstash/nodes?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View nodes](UNIT_TEST_URL/app/monitoring#/logstash/nodes?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: 'Verify you have the same version across all nodes.', - internalFullMessage: `Logstash version mismatch alert is firing for testCluster. Logstash is running 8.0.0, 7.2.1. [View nodes](UNIT_TEST_URL/app/monitoring#/logstash/nodes?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `Logstash version mismatch alert is firing for testCluster. Logstash is running 8.0.0, 7.2.1. [View nodes](UNIT_TEST_URL/app/monitoring#/logstash/nodes?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: 'Logstash version mismatch alert is firing for testCluster. Verify you have the same version across all nodes.', versionList: ['8.0.0', '7.2.1'], diff --git a/x-pack/plugins/monitoring/server/rules/memory_usage_rule.test.ts b/x-pack/plugins/monitoring/server/rules/memory_usage_rule.test.ts index c1a8836e293c1..6da0fb751c038 100644 --- a/x-pack/plugins/monitoring/server/rules/memory_usage_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/memory_usage_rule.test.ts @@ -216,9 +216,9 @@ describe('MemoryUsageRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'myNodeId', context: { - internalFullMessage: `Memory usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `Memory usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: `Memory usage alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify memory usage level of node.`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: 'Verify memory usage level of node.', clusterName, count, @@ -380,9 +380,9 @@ describe('MemoryUsageRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'myNodeId', context: { - internalFullMessage: `Memory usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid},ccs:${ccs}))`, + internalFullMessage: `Memory usage alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}',ccs:${ccs}))`, internalShortMessage: `Memory usage alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify memory usage level of node.`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid},ccs:testCluster))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}',ccs:testCluster))`, actionPlain: 'Verify memory usage level of node.', clusterName, count, diff --git a/x-pack/plugins/monitoring/server/rules/missing_monitoring_data_rule.test.ts b/x-pack/plugins/monitoring/server/rules/missing_monitoring_data_rule.test.ts index 8bf66a839d6dd..4dd7515e7e33e 100644 --- a/x-pack/plugins/monitoring/server/rules/missing_monitoring_data_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/missing_monitoring_data_rule.test.ts @@ -171,11 +171,11 @@ describe('MissingMonitoringDataRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'esNode1', context: { - internalFullMessage: `We have not detected any monitoring data for node ${nodeName} in cluster: ${clusterName}. [View what monitoring data we do have for this node.](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `We have not detected any monitoring data for node ${nodeName} in cluster: ${clusterName}. [View what monitoring data we do have for this node.](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: `We have not detected any monitoring data for node ${nodeName} in cluster: ${clusterName}. Verify the node is up and running, then double check the monitoring settings.`, nodes: `node: ${nodeName}`, node: `node: ${nodeName}`, - action: `[View what monitoring data we do have for this node.](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View what monitoring data we do have for this node.](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: 'Verify the node is up and running, then double check the monitoring settings.', clusterName, @@ -287,11 +287,11 @@ describe('MissingMonitoringDataRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'esNode1', context: { - internalFullMessage: `We have not detected any monitoring data for node ${nodeName} in cluster: ${clusterName}. [View what monitoring data we do have for this node.](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid},ccs:${ccs}))`, + internalFullMessage: `We have not detected any monitoring data for node ${nodeName} in cluster: ${clusterName}. [View what monitoring data we do have for this node.](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}',ccs:${ccs}))`, internalShortMessage: `We have not detected any monitoring data for node ${nodeName} in cluster: ${clusterName}. Verify the node is up and running, then double check the monitoring settings.`, nodes: `node: ${nodeName}`, node: `node: ${nodeName}`, - action: `[View what monitoring data we do have for this node.](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid},ccs:${ccs}))`, + action: `[View what monitoring data we do have for this node.](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}',ccs:${ccs}))`, actionPlain: 'Verify the node is up and running, then double check the monitoring settings.', clusterName, diff --git a/x-pack/plugins/monitoring/server/rules/thread_pool_search_rejections_rule.test.ts b/x-pack/plugins/monitoring/server/rules/thread_pool_search_rejections_rule.test.ts index c6602f536a83c..7f93f3cfe6f94 100644 --- a/x-pack/plugins/monitoring/server/rules/thread_pool_search_rejections_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/thread_pool_search_rejections_rule.test.ts @@ -223,10 +223,10 @@ describe('ThreadpoolSearchRejectionsRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'esNode1', context: { - internalFullMessage: `Thread pool search rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `Thread pool search rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: `Thread pool search rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify thread pool ${threadPoolType} rejections for the affected node.`, node: `${nodeName}`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: `Verify thread pool ${threadPoolType} rejections for the affected node.`, clusterName, count: 1, @@ -387,10 +387,10 @@ describe('ThreadpoolSearchRejectionsRule', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'esNode1', context: { - internalFullMessage: `Thread pool search rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid},ccs:${ccs}))`, + internalFullMessage: `Thread pool search rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}',ccs:${ccs}))`, internalShortMessage: `Thread pool search rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify thread pool ${threadPoolType} rejections for the affected node.`, node: `${nodeName}`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/esNode1?_g=(cluster_uuid:abc123,ccs:testCluster))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/esNode1?_g=(cluster_uuid:'${clusterUuid}',ccs:testCluster))`, actionPlain: `Verify thread pool ${threadPoolType} rejections for the affected node.`, clusterName, count, diff --git a/x-pack/plugins/monitoring/server/rules/thread_pool_write_rejections_rule.test.ts b/x-pack/plugins/monitoring/server/rules/thread_pool_write_rejections_rule.test.ts index 163dc2b1a677b..71565b9e75c38 100644 --- a/x-pack/plugins/monitoring/server/rules/thread_pool_write_rejections_rule.test.ts +++ b/x-pack/plugins/monitoring/server/rules/thread_pool_write_rejections_rule.test.ts @@ -223,10 +223,10 @@ describe('ThreadpoolWriteRejectionsAlert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'esNode1', context: { - internalFullMessage: `Thread pool ${threadPoolType} rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `Thread pool ${threadPoolType} rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, internalShortMessage: `Thread pool ${threadPoolType} rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify thread pool ${threadPoolType} rejections for the affected node.`, node: `${nodeName}`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}'))`, actionPlain: `Verify thread pool ${threadPoolType} rejections for the affected node.`, clusterName, count: 1, @@ -387,10 +387,10 @@ describe('ThreadpoolWriteRejectionsAlert', () => { expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ id: 'esNode1', context: { - internalFullMessage: `Thread pool ${threadPoolType} rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:${clusterUuid},ccs:${ccs}))`, + internalFullMessage: `Thread pool ${threadPoolType} rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. [View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/${nodeId}?_g=(cluster_uuid:'${clusterUuid}',ccs:${ccs}))`, internalShortMessage: `Thread pool ${threadPoolType} rejections alert is firing for node ${nodeName} in cluster: ${clusterName}. Verify thread pool ${threadPoolType} rejections for the affected node.`, node: `${nodeName}`, - action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/esNode1?_g=(cluster_uuid:abc123,ccs:testCluster))`, + action: `[View node](http://localhost:5601/app/monitoring#/elasticsearch/nodes/esNode1?_g=(cluster_uuid:'${clusterUuid}',ccs:testCluster))`, actionPlain: `Verify thread pool ${threadPoolType} rejections for the affected node.`, clusterName, count, From 260df9d41298109e2d6f34df4020722ba6ca03dd Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 27 Aug 2024 13:59:30 +0100 Subject: [PATCH 05/74] Revert "Update renovate config (#191304)" (#191495) Reverts elastic/kibana#191304 --- renovate.json | 843 +++++++++++--------------------------------------- 1 file changed, 189 insertions(+), 654 deletions(-) diff --git a/renovate.json b/renovate.json index 233505d4012de..774dce52e3515 100644 --- a/renovate.json +++ b/renovate.json @@ -1,24 +1,9 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:recommended", - "helpers:pinGitHubActionDigests", - "helpers:pinGitHubActionDigestsToSemver" - ], - "ignorePaths": [ - "**/__fixtures__/**", - "**/fixtures/**" - ], - "enabledManagers": [ - "npm", - "github-actions", - "custom.regex", - "devcontainer" - ], - "baseBranches": [ - "main", - "7.17" - ], + "extends": ["config:recommended", "helpers:pinGitHubActionDigests", "helpers:pinGitHubActionDigestsToSemver"], + "ignorePaths": ["**/__fixtures__/**", "**/fixtures/**"], + "enabledManagers": ["npm", "github-actions", "custom.regex", "devcontainer"], + "baseBranches": ["main", "7.17"], "prConcurrentLimit": 0, "prHourlyLimit": 0, "separateMajorMinor": false, @@ -32,51 +17,28 @@ }, "packageRules": [ { - "enabled": false, - "matchDepNames": [ - "/.*/" - ] + "matchDepPatterns": [".*"], + "enabled": false }, { "groupName": "devcontainer", - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip", - "backport:current-major" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip", "backport:current-major"], "enabled": true, - "matchManagers": [ - "devcontainer" - ] + "matchManagers": ["devcontainer"] }, { "groupName": "chainguard", - "matchPackageNames": [ - "docker.elastic.co/wolfi/chainguard-base" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchPackageNames": ["docker.elastic.co/wolfi/chainguard-base"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "enabled": true }, { "groupName": "operations actions", - "matchManagers": [ - "github-actions" - ], + "matchManagers": ["github-actions"], "matchPackageNames": [ "actions/checkout", "elastic/github-actions/project-assigner", @@ -85,367 +47,168 @@ "sergeysova/jq-action", "sourenlouv/backport" ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "backport:all-open", - "release_note:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "backport:all-open", "release_note:skip"], "enabled": true }, { "groupName": "@elastic/charts", - "matchDepNames": [ - "@elastic/charts" - ], - "reviewers": [ - "team:visualizations", - "markov00", - "nickofthyme" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "Team:Visualizations" - ], + "matchDepNames": ["@elastic/charts"], + "reviewers": ["team:visualizations", "markov00", "nickofthyme"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "Team:Visualizations"], "enabled": true }, { "groupName": "@elastic/elasticsearch", - "matchDepNames": [ - "@elastic/elasticsearch" - ], - "reviewers": [ - "team:kibana-operations", - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "Team:Operations", - "Team:Core" - ], + "matchDepNames": ["@elastic/elasticsearch"], + "reviewers": ["team:kibana-operations", "team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "Team:Operations", "Team:Core"], "enabled": true }, { "groupName": "@elastic/elasticsearch", - "matchDepNames": [ - "@elastic/elasticsearch" - ], - "reviewers": [ - "team:kibana-operations", - "team:kibana-core" - ], - "matchBaseBranches": [ - "7.17" - ], - "labels": [ - "release_note:skip", - "Team:Operations", - "Team:Core", - "backport:skip" - ], + "matchDepNames": ["@elastic/elasticsearch"], + "reviewers": ["team:kibana-operations", "team:kibana-core"], + "matchBaseBranches": ["7.17"], + "labels": ["release_note:skip", "Team:Operations", "Team:Core", "backport:skip"], "enabled": true }, { "groupName": "LaunchDarkly", - "matchDepNames": [ - "launchdarkly-js-client-sdk", - "@launchdarkly/node-server-sdk", - "launchdarkly/find-code-references" - ], - "reviewers": [ - "team:kibana-security", - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "Team:Security", - "Team:Core", - "backport:prev-minor" - ], + "matchDepNames": ["launchdarkly-js-client-sdk", "@launchdarkly/node-server-sdk", "launchdarkly/find-code-references"], + "reviewers": ["team:kibana-security", "team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "Team:Security", "Team:Core", "backport:prev-minor"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "APM", - "matchDepNames": [ - "elastic-apm-node", - "@elastic/apm-rum", - "@elastic/apm-rum-react" - ], - "reviewers": [ - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "Team:Core", - "backport:skip" - ], + "matchDepNames": ["elastic-apm-node", "@elastic/apm-rum", "@elastic/apm-rum-react"], + "reviewers": ["team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "Team:Core", "backport:skip"], "enabled": true }, { "groupName": "@elastic/ebt", - "matchDepNames": [ - "@elastic/ebt" - ], - "reviewers": [ - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "Team:Core", - "backport:skip" - ], + "matchDepNames": ["@elastic/ebt"], + "reviewers": ["team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "Team:Core", "backport:skip"], "enabled": true }, { "groupName": "ansi-regex", - "matchDepNames": [ - "ansi-regex" - ], - "reviewers": [ - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "Team:Core", - "backport:skip" - ], + "matchDepNames": ["ansi-regex"], + "reviewers": ["team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "Team:Core", "backport:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "OpenAPI Spec", - "matchDepNames": [ - "@redocly/cli" - ], - "reviewers": [ - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "Team:Core", - "backport:skip" - ], + "matchDepNames": ["@redocly/cli"], + "reviewers": ["team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "Team:Core", "backport:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "babel", - "matchDepNames": [ - "@types/babel__core", - "/^@babel/", - "/^babel-plugin/" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchDepNames": ["@types/babel__core"], + "matchDepPatterns": ["^@babel", "^babel-plugin"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "typescript", - "matchDepNames": [ - "typescript", - "@types/jsdom" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchDepNames": ["typescript", "@types/jsdom"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "prettier", - "matchDepNames": [ - "prettier", - "eslint-plugin-prettier", - "eslint-config-prettier" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchDepNames": ["prettier", "eslint-plugin-prettier", "eslint-config-prettier"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", "allowedVersions": "<3.0", "enabled": true }, { "groupName": "typescript-eslint", - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchDepPatterns": ["^@typescript-eslint"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", - "enabled": true, - "matchDepNames": [ - "/^@typescript-eslint/" - ] + "enabled": true }, { "groupName": "eslint-plugin-depend", - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchDepPatterns": ["eslint-plugin-depend"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", - "enabled": true, - "matchDepNames": [ - "/eslint-plugin-depend/" - ] + "enabled": true }, { "groupName": "polyfills", - "matchDepNames": [ - "core-js", - "/polyfill/" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchDepNames": ["core-js"], + "matchDepPatterns": ["polyfill"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "CLI tooling", - "matchDepNames": [ - "listr2" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "backport:all-open", - "release_note:skip" - ], + "matchDepNames": ["listr2"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "backport:all-open", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "vega related modules", - "matchDepNames": [ - "vega", - "vega-lite", - "vega-schema-url-parser", - "vega-tooltip" - ], - "reviewers": [ - "team:kibana-visualizations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Feature:Vega", - "Team:Visualizations" - ], + "matchDepNames": ["vega", "vega-lite", "vega-schema-url-parser", "vega-tooltip"], + "reviewers": ["team:kibana-visualizations"], + "matchBaseBranches": ["main"], + "labels": ["Feature:Vega", "Team:Visualizations"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "cypress", - "reviewers": [ - "Team:apm", - "Team: SecuritySolution" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "buildkite-ci", - "ci:all-cypress-suites" - ], + "matchDepPatterns": ["cypress"], + "reviewers": ["Team:apm", "Team: SecuritySolution"], + "matchBaseBranches": ["main"], + "labels": ["buildkite-ci", "ci:all-cypress-suites"], "minimumReleaseAge": "7 days", - "enabled": true, - "matchDepNames": [ - "/cypress/" - ] + "enabled": true }, { "groupName": "security solution modules", - "matchDepNames": [ - "zod", - "langchain" - ], - "reviewers": [ - "Team: SecuritySolution" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team: SecuritySolution" - ], + "matchDepNames": ["zod", "langchain"], + "reviewers": ["Team: SecuritySolution"], + "matchBaseBranches": ["main"], + "labels": ["Team: SecuritySolution"], "minimumReleaseAge": "7 days", "enabled": true }, @@ -463,17 +226,9 @@ "@types/xml-crypto", "@kayahr/text-encoding" ], - "reviewers": [ - "team:kibana-security" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Security", - "release_note:skip", - "backport:all-open" - ], + "reviewers": ["team:kibana-security"], + "matchBaseBranches": ["main"], + "labels": ["Team:Security", "release_note:skip", "backport:all-open"], "minimumReleaseAge": "7 days", "enabled": true }, @@ -483,17 +238,9 @@ "github/codeql-action/analyze", "github/codeql-action/init" ], - "reviewers": [ - "team:kibana-security" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Security", - "release_note:skip", - "backport:all-open" - ], + "reviewers": ["team:kibana-security"], + "matchBaseBranches": ["main"], + "labels": ["Team:Security", "release_note:skip", "backport:all-open"], "minimumReleaseAge": "7 days", "enabled": true }, @@ -507,54 +254,27 @@ "ms-chromium-edge-driver", "selenium-webdriver" ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "scss", - "matchDepNames": [ - "sass-embedded" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip", - "backport:all-open" - ], + "matchDepNames": ["sass-embedded"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip", "backport:all-open"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "minify", - "matchDepNames": [ - "gulp-terser", - "terser" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchDepNames": ["gulp-terser", "terser"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, @@ -568,16 +288,9 @@ "@testing-library/user-event", "@types/testing-library__jest-dom" ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, @@ -599,68 +312,36 @@ "jest-runtime", "jest-snapshot" ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "@storybook", - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip", - "ci:build-storybooks", - "backport:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "matchDepPatterns": ["^@storybook"], + "excludeDepNames": ["@storybook/testing-react"], + "labels": ["Team:Operations", "release_note:skip", "ci:build-storybooks", "backport:skip"], "minimumReleaseAge": "7 days", "allowedVersions": "<7.0", - "enabled": true, - "matchDepNames": [ - "/^@storybook/", - "!@storybook/testing-react" - ] + "enabled": true }, { "groupName": "@storybook/testing-react", - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "matchDepNames": [ - "@storybook/testing-react" - ], - "labels": [ - "Team:Operations", - "release_note:skip", - "ci:build-storybooks", - "backport:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "matchDepNames": ["@storybook/testing-react"], + "labels": ["Team:Operations", "release_note:skip", "ci:build-storybooks", "backport:skip"], "minimumReleaseAge": "7 days", "allowedVersions": "<2.0", "enabled": true }, { "groupName": "react-query", - "matchDepNames": [ - "@tanstack/react-query", - "@tanstack/react-query-devtools" - ], + "matchDepNames": ["@tanstack/react-query", "@tanstack/react-query-devtools"], "reviewers": [ "team:response-ops", "team:kibana-cloud-security-posture", @@ -669,43 +350,23 @@ "team:awp-platform", "team:security-onboarding-and-lifecycle-mgt" ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "ci:all-cypress-suites" - ], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "ci:all-cypress-suites"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "react-hook-form", - "matchDepNames": [ - "react-hook-form" - ], - "reviewers": [ - "team:security-asset-management", - "team:uptime" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "ci:all-cypress-suites" - ], + "matchDepNames": ["react-hook-form"], + "reviewers": ["team:security-asset-management", "team:uptime"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "ci:all-cypress-suites"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "redux", - "matchDepNames": [ - "redux", - "react-redux" - ], + "matchDepNames": ["redux", "react-redux"], "reviewers": [ "team:search-kibana", "team:kibana-presentation", @@ -714,241 +375,115 @@ "team:kibana-gis", "team:security-solution" ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "ci:all-cypress-suites" - ], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "ci:all-cypress-suites"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "Profiling", - "matchDepNames": [ - "peggy", - "@types/dagre" - ], - "reviewers": [ - "team:obs-ux-infra_services-team" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip" - ], + "matchDepNames": ["peggy", "@types/dagre"], + "reviewers": ["team:obs-ux-infra_services-team"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "TTY Output", - "matchDepNames": [ - "xterm", - "byte-size", - "@types/byte-size" - ], - "reviewers": [ - "team:sec-cloudnative-integrations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team: AWP: Visualization", - "release_note:skip", - "backport:skip" - ], + "matchDepNames": ["xterm", "byte-size", "@types/byte-size"], + "reviewers": ["team:sec-cloudnative-integrations"], + "matchBaseBranches": ["main"], + "labels": ["Team: AWP: Visualization", "release_note:skip", "backport:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "Cloud Defend", - "matchDepNames": [ - "monaco-yaml" - ], - "reviewers": [ - "team:sec-cloudnative-integrations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team: Cloud Native Integrations", - "release_note:skip", - "backport:skip" - ], + "matchDepNames": ["monaco-yaml"], + "reviewers": ["team:sec-cloudnative-integrations"], + "matchBaseBranches": ["main"], + "labels": ["Team: Cloud Native Integrations", "release_note:skip", "backport:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "JSON Web Token", - "matchDepNames": [ - "jsonwebtoken" - ], - "reviewers": [ - "team:response-ops", - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:all-open" - ], + "matchDepNames": ["jsonwebtoken"], + "reviewers": ["team:response-ops", "team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:all-open"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "XState", - "matchDepNames": [ - "xstate", - "@xstate/{/,}**" - ], - "reviewers": [ - "team:obs-ux-logs-team" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Obs UX Logs", - "release_note:skip" - ], + "matchDepNames": ["xstate"], + "matchDepPrefixes": ["@xstate/"], + "reviewers": ["team:obs-ux-logs-team"], + "matchBaseBranches": ["main"], + "labels": ["Team:Obs UX Logs", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "OpenTelemetry modules", - "reviewers": [ - "team:stack-monitoring" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Monitoring" - ], + "matchDepPrefixes": ["@opentelemetry/"], + "reviewers": ["team:stack-monitoring"], + "matchBaseBranches": ["main"], + "labels": ["Team:Monitoring"], "minimumReleaseAge": "7 days", - "enabled": true, - "matchDepNames": [ - "@opentelemetry/{/,}**" - ] + "enabled": true }, { "groupName": "csp", - "matchDepNames": [ - "content-security-policy-parser" - ], - "reviewers": [ - "team:kibana-security", - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "ci:serverless-test-all" - ], + "matchDepNames": ["content-security-policy-parser"], + "reviewers": ["team:kibana-security", "team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "ci:serverless-test-all"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "AlertingEmails", - "matchDepNames": [ - "nodemailer" - ], - "reviewers": [ - "team:response-ops" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:prev-minor" - ], + "matchDepNames": ["nodemailer"], + "reviewers": ["team:response-ops"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:prev-minor"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "Kibana ES|QL Team", - "matchDepNames": [ - "recast" - ], - "reviewers": [ - "team:kibana-esql" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:ESQL", - "release_note:skip" - ], + "matchDepNames": ["recast"], + "reviewers": ["team:kibana-esql"], + "matchBaseBranches": ["main"], + "labels": ["Team:ESQL", "release_note:skip"], "minimumReleaseAge": "7 days", "enabled": true }, { "groupName": "MSW", - "matchPackageNames": [ - "msw" - ], - "reviewers": [ - "team:kibana-cloud-security-posture" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team: Cloud Security", - "release_note:skip", - "backport:skip" - ], + "matchPackageNames": ["msw"], + "reviewers": ["team:kibana-cloud-security-posture"], + "matchBaseBranches": ["main"], + "labels": ["Team: Cloud Security", "release_note:skip", "backport:skip"], "enabled": true }, { "groupName": "re2js", - "matchDepNames": [ - "re2js" - ], - "reviewers": [ - "team:visualizations", - "dej611" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:all-open", - "Team:Visualizations" - ], + "matchDepNames": ["re2js"], + "reviewers": ["team:visualizations", "dej611"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:all-open", "Team:Visualizations"], "enabled": true }, { "groupName": "Serve swagger docs", - "matchDepNames": [ - "express", - "swagger-jsdoc", - "swagger-ui-express" - ], - "reviewers": [ - "team:obs-entities" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "team:obs-entities" - ], + "matchDepNames": ["express", "swagger-jsdoc", "swagger-ui-express"], + "reviewers": ["team:obs-entities"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "team:obs-entities"], "enabled": true } ], @@ -977,4 +512,4 @@ "datasourceTemplate": "docker" } ] -} \ No newline at end of file +} From 90f2eb3a0858c390c713be418464e0c63ed2b2d6 Mon Sep 17 00:00:00 2001 From: "Eyo O. Eyo" <7893459+eokoneyo@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:56:04 +0200 Subject: [PATCH 06/74] Expose privilege API client to spaces (#189819) ## Summary Expose privilege API client to be injected into the spaces app, to facilitate new spaces UX --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../security/plugin_types_public/index.ts | 2 ++ .../authorization/authorization_service.ts | 6 ++++++ .../src/privileges/index.ts | 9 ++++++++ .../src/privileges/privileges_api_client.ts | 21 +++++++++++++++++++ .../plugin_types_public/tsconfig.json | 1 + .../public/authentication/index.mock.ts | 6 ++++++ .../authorization/authorization_service.ts | 6 +++++- .../security/public/management/index.ts | 2 +- .../security/public/management/roles/index.ts | 1 + .../management/roles/privileges_api_client.ts | 11 +++++----- .../plugins/security/public/plugin.test.tsx | 9 +++++++- .../management/management_service.test.ts | 3 +++ .../public/management/management_service.tsx | 8 ++++++- .../management/spaces_management_app.test.tsx | 2 ++ .../management/spaces_management_app.tsx | 6 +++++- x-pack/plugins/spaces/public/plugin.tsx | 13 ++++++++++++ 16 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 x-pack/packages/security/plugin_types_public/src/privileges/index.ts create mode 100644 x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts diff --git a/x-pack/packages/security/plugin_types_public/index.ts b/x-pack/packages/security/plugin_types_public/index.ts index 0b326ce2ee664..a2a6f4ea6a3ee 100644 --- a/x-pack/packages/security/plugin_types_public/index.ts +++ b/x-pack/packages/security/plugin_types_public/index.ts @@ -17,3 +17,5 @@ export type { UserProfileAPIClient, } from './src/user_profile'; export type { RolePutPayload, RolesAPIClient } from './src/roles'; +export { PrivilegesAPIClientPublicContract } from './src/privileges'; +export type { PrivilegesAPIClientGetAllArgs } from './src/privileges'; diff --git a/x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts b/x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts index 5ad462f8c2aa1..f04acf8020b24 100644 --- a/x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts +++ b/x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts @@ -6,6 +6,7 @@ */ import type { RolesAPIClient } from '../roles'; +import type { PrivilegesAPIClientPublicContract } from '../privileges'; export interface AuthorizationServiceSetup { /** @@ -17,6 +18,11 @@ export interface AuthorizationServiceSetup { * A set of methods to work with Kibana user roles. */ roles: RolesAPIClient; + + /** + * A set of methods to work with Kibana role privileges + */ + privileges: PrivilegesAPIClientPublicContract; } /** diff --git a/x-pack/packages/security/plugin_types_public/src/privileges/index.ts b/x-pack/packages/security/plugin_types_public/src/privileges/index.ts new file mode 100644 index 0000000000000..b8d111a0c79fe --- /dev/null +++ b/x-pack/packages/security/plugin_types_public/src/privileges/index.ts @@ -0,0 +1,9 @@ +/* + * 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. + */ + +export { PrivilegesAPIClientPublicContract } from './privileges_api_client'; +export type { PrivilegesAPIClientGetAllArgs } from './privileges_api_client'; diff --git a/x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts b/x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts new file mode 100644 index 0000000000000..e3a97398db7a3 --- /dev/null +++ b/x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts @@ -0,0 +1,21 @@ +/* + * 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 { RawKibanaPrivileges } from '@kbn/security-authorization-core'; + +export interface PrivilegesAPIClientGetAllArgs { + includeActions: boolean; + /* + * respectLicenseLevel is an internal optional parameter solely for getting all sub-feature + * privileges to use in the UI. It is not meant for any other use. + */ + respectLicenseLevel: boolean; +} +// TODO: Eyo include the proper return types for contract +export abstract class PrivilegesAPIClientPublicContract { + abstract getAll(args: PrivilegesAPIClientGetAllArgs): Promise; +} diff --git a/x-pack/packages/security/plugin_types_public/tsconfig.json b/x-pack/packages/security/plugin_types_public/tsconfig.json index 6779851e86367..5c97e25656ecf 100644 --- a/x-pack/packages/security/plugin_types_public/tsconfig.json +++ b/x-pack/packages/security/plugin_types_public/tsconfig.json @@ -14,5 +14,6 @@ "@kbn/core-user-profile-common", "@kbn/security-plugin-types-common", "@kbn/core-security-common", + "@kbn/security-authorization-core" ] } diff --git a/x-pack/plugins/security/public/authentication/index.mock.ts b/x-pack/plugins/security/public/authentication/index.mock.ts index 491b5b82e946a..166583b1274cb 100644 --- a/x-pack/plugins/security/public/authentication/index.mock.ts +++ b/x-pack/plugins/security/public/authentication/index.mock.ts @@ -32,6 +32,9 @@ export const authorizationMock = { deleteRole: jest.fn(), saveRole: jest.fn(), }, + privileges: { + getAll: jest.fn(), + }, }), createStart: (): jest.Mocked => ({ isRoleManagementEnabled: jest.fn(), @@ -41,5 +44,8 @@ export const authorizationMock = { deleteRole: jest.fn(), saveRole: jest.fn(), }, + privileges: { + getAll: jest.fn(), + }, }), }; diff --git a/x-pack/plugins/security/public/authorization/authorization_service.ts b/x-pack/plugins/security/public/authorization/authorization_service.ts index 6e0af055a6cda..c650d381be1af 100644 --- a/x-pack/plugins/security/public/authorization/authorization_service.ts +++ b/x-pack/plugins/security/public/authorization/authorization_service.ts @@ -9,7 +9,7 @@ import type { HttpStart } from '@kbn/core/public'; import type { AuthorizationServiceSetup } from '@kbn/security-plugin-types-public'; import type { ConfigType } from '../config'; -import { RolesAPIClient } from '../management'; +import { PrivilegesAPIClient, RolesAPIClient } from '../management'; interface SetupParams { config: ConfigType; @@ -20,6 +20,7 @@ export class AuthorizationService { public setup({ config, http }: SetupParams): AuthorizationServiceSetup { const isRoleManagementEnabled = () => config.roleManagementEnabled; const rolesAPIClient = new RolesAPIClient(http); + const privilegesAPIClient = new PrivilegesAPIClient(http); return { isRoleManagementEnabled, @@ -29,6 +30,9 @@ export class AuthorizationService { deleteRole: rolesAPIClient.deleteRole, saveRole: rolesAPIClient.saveRole, }, + privileges: { + getAll: privilegesAPIClient.getAll.bind(privilegesAPIClient), + }, }; } } diff --git a/x-pack/plugins/security/public/management/index.ts b/x-pack/plugins/security/public/management/index.ts index a47475485896d..2c1708f1c9bb0 100644 --- a/x-pack/plugins/security/public/management/index.ts +++ b/x-pack/plugins/security/public/management/index.ts @@ -7,4 +7,4 @@ export { ManagementService } from './management_service'; export { UserAPIClient } from './users/user_api_client'; -export { RolesAPIClient } from './roles'; +export { RolesAPIClient, PrivilegesAPIClient } from './roles'; diff --git a/x-pack/plugins/security/public/management/roles/index.ts b/x-pack/plugins/security/public/management/roles/index.ts index 86d5990761d4d..258fd1ee558be 100644 --- a/x-pack/plugins/security/public/management/roles/index.ts +++ b/x-pack/plugins/security/public/management/roles/index.ts @@ -7,3 +7,4 @@ export { rolesManagementApp } from './roles_management_app'; export { RolesAPIClient } from './roles_api_client'; +export { PrivilegesAPIClient } from './privileges_api_client'; diff --git a/x-pack/plugins/security/public/management/roles/privileges_api_client.ts b/x-pack/plugins/security/public/management/roles/privileges_api_client.ts index 54c8992698978..5032871c41fa6 100644 --- a/x-pack/plugins/security/public/management/roles/privileges_api_client.ts +++ b/x-pack/plugins/security/public/management/roles/privileges_api_client.ts @@ -7,16 +7,15 @@ import type { HttpStart } from '@kbn/core/public'; import type { RawKibanaPrivileges } from '@kbn/security-authorization-core'; +import { PrivilegesAPIClientPublicContract } from '@kbn/security-plugin-types-public'; import type { BuiltinESPrivileges } from '../../../common/model'; -export class PrivilegesAPIClient { - constructor(private readonly http: HttpStart) {} +export class PrivilegesAPIClient extends PrivilegesAPIClientPublicContract { + constructor(private readonly http: HttpStart) { + super(); + } - /* - * respectLicenseLevel is an internal optional parameter soley for getting all sub-feature - * privilieges to use in the UI. It is not meant for any other use. - */ async getAll({ includeActions, respectLicenseLevel = true, diff --git a/x-pack/plugins/security/public/plugin.test.tsx b/x-pack/plugins/security/public/plugin.test.tsx index 433e1981e9ce9..336a42a1fd324 100644 --- a/x-pack/plugins/security/public/plugin.test.tsx +++ b/x-pack/plugins/security/public/plugin.test.tsx @@ -40,7 +40,11 @@ describe('Security Plugin', () => { }) ).toEqual({ authc: { getCurrentUser: expect.any(Function), areAPIKeysEnabled: expect.any(Function) }, - authz: { isRoleManagementEnabled: expect.any(Function), roles: expect.any(Object) }, + authz: { + isRoleManagementEnabled: expect.any(Function), + roles: expect.any(Object), + privileges: expect.any(Object), + }, license: { isLicenseAvailable: expect.any(Function), getLicenseType: expect.any(Function), @@ -129,6 +133,9 @@ describe('Security Plugin', () => { }, "authz": Object { "isRoleManagementEnabled": [Function], + "privileges": Object { + "getAll": [Function], + }, "roles": Object { "deleteRole": [Function], "getRole": [Function], diff --git a/x-pack/plugins/spaces/public/management/management_service.test.ts b/x-pack/plugins/spaces/public/management/management_service.test.ts index e01ddd8db9ae2..5f97515171518 100644 --- a/x-pack/plugins/spaces/public/management/management_service.test.ts +++ b/x-pack/plugins/spaces/public/management/management_service.test.ts @@ -42,6 +42,7 @@ describe('ManagementService', () => { spacesManager: spacesManagerMock.create(), config, getRolesAPIClient: getRolesAPIClientMock, + getPrivilegesAPIClient: jest.fn(), eventTracker, }); @@ -63,6 +64,7 @@ describe('ManagementService', () => { spacesManager: spacesManagerMock.create(), config, getRolesAPIClient: getRolesAPIClientMock, + getPrivilegesAPIClient: jest.fn(), eventTracker, }); }); @@ -85,6 +87,7 @@ describe('ManagementService', () => { spacesManager: spacesManagerMock.create(), config, getRolesAPIClient: jest.fn(), + getPrivilegesAPIClient: jest.fn(), eventTracker, }); diff --git a/x-pack/plugins/spaces/public/management/management_service.tsx b/x-pack/plugins/spaces/public/management/management_service.tsx index 9bc94e70b83f5..b186135d88e05 100644 --- a/x-pack/plugins/spaces/public/management/management_service.tsx +++ b/x-pack/plugins/spaces/public/management/management_service.tsx @@ -7,7 +7,10 @@ import type { StartServicesAccessor } from '@kbn/core/public'; import type { ManagementApp, ManagementSetup } from '@kbn/management-plugin/public'; -import type { RolesAPIClient } from '@kbn/security-plugin-types-public'; +import type { + PrivilegesAPIClientPublicContract, + RolesAPIClient, +} from '@kbn/security-plugin-types-public'; import { spacesManagementApp } from './spaces_management_app'; import type { EventTracker } from '../analytics'; @@ -22,6 +25,7 @@ interface SetupDeps { config: ConfigType; getRolesAPIClient: () => Promise; eventTracker: EventTracker; + getPrivilegesAPIClient: () => Promise; } export class ManagementService { @@ -34,6 +38,7 @@ export class ManagementService { config, getRolesAPIClient, eventTracker, + getPrivilegesAPIClient, }: SetupDeps) { this.registeredSpacesManagementApp = management.sections.section.kibana.registerApp( spacesManagementApp.create({ @@ -42,6 +47,7 @@ export class ManagementService { config, getRolesAPIClient, eventTracker, + getPrivilegesAPIClient, }) ); } diff --git a/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx b/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx index 2415d603086e9..61619c499181c 100644 --- a/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx +++ b/x-pack/plugins/spaces/public/management/spaces_management_app.test.tsx @@ -57,6 +57,7 @@ async function mountApp(basePath: string, pathname: string, spaceId?: string) { getStartServices: async () => [coreStart, pluginsStart as PluginsStart, {}], config, getRolesAPIClient: jest.fn(), + getPrivilegesAPIClient: jest.fn(), eventTracker, }) .mount({ @@ -79,6 +80,7 @@ describe('spacesManagementApp', () => { getStartServices: coreMock.createSetup().getStartServices as any, config, getRolesAPIClient: jest.fn(), + getPrivilegesAPIClient: jest.fn(), eventTracker, }) ).toMatchInlineSnapshot(` diff --git a/x-pack/plugins/spaces/public/management/spaces_management_app.tsx b/x-pack/plugins/spaces/public/management/spaces_management_app.tsx index 9883286122653..40532a7259521 100644 --- a/x-pack/plugins/spaces/public/management/spaces_management_app.tsx +++ b/x-pack/plugins/spaces/public/management/spaces_management_app.tsx @@ -14,7 +14,10 @@ import { i18n } from '@kbn/i18n'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import type { RegisterManagementAppArgs } from '@kbn/management-plugin/public'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; -import type { RolesAPIClient } from '@kbn/security-plugin-types-public'; +import type { + PrivilegesAPIClientPublicContract, + RolesAPIClient, +} from '@kbn/security-plugin-types-public'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import { Route, Router, Routes } from '@kbn/shared-ux-router'; @@ -30,6 +33,7 @@ interface CreateParams { config: ConfigType; getRolesAPIClient: () => Promise; eventTracker: EventTracker; + getPrivilegesAPIClient: () => Promise; } export const spacesManagementApp = Object.freeze({ diff --git a/x-pack/plugins/spaces/public/plugin.tsx b/x-pack/plugins/spaces/public/plugin.tsx index b07595618c3cc..31ba324b926f3 100644 --- a/x-pack/plugins/spaces/public/plugin.tsx +++ b/x-pack/plugins/spaces/public/plugin.tsx @@ -95,6 +95,18 @@ export class SpacesPlugin implements Plugin { + const { security } = await core.plugins.onSetup<{ security: SecurityPluginStart }>( + 'security' + ); + + if (!security.found) { + throw new Error('Security plugin is not available as runtime dependency.'); + } + + return security.contract.authz.privileges; + }; + if (plugins.home) { plugins.home.featureCatalogue.register(createSpacesFeatureCatalogueEntry()); } @@ -108,6 +120,7 @@ export class SpacesPlugin implements Plugin Date: Tue, 27 Aug 2024 15:07:00 +0100 Subject: [PATCH 07/74] [ObsUX][Infra] Fix redirect to other apps from node details (#191294) Closes https://github.com/elastic/kibana/issues/190510 The return button in the asset details failed to return to another app ##### How to test From apm service details, navigate to Infrastructure tab, click in one of the nodes that would navigate to the node details page, when clicking the Return button it should redirect back to APM/Services/{serviceName}/Infrastructure https://github.com/user-attachments/assets/07555fa6-246b-43c3-81bf-592b550713a0 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../components/metrics_node_details_link.tsx | 19 ++--- .../public/hooks/use_kibana.tsx | 4 +- .../link_to/use_node_details_redirect.ts | 80 +++++++++++++------ .../metrics_data_access/tsconfig.json | 3 +- 4 files changed, 70 insertions(+), 36 deletions(-) diff --git a/x-pack/plugins/observability_solution/metrics_data_access/public/components/infrastructure_node_metrics_tables/shared/components/metrics_node_details_link.tsx b/x-pack/plugins/observability_solution/metrics_data_access/public/components/infrastructure_node_metrics_tables/shared/components/metrics_node_details_link.tsx index 10ecf3dc42626..e683d1708907b 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/public/components/infrastructure_node_metrics_tables/shared/components/metrics_node_details_link.tsx +++ b/x-pack/plugins/observability_solution/metrics_data_access/public/components/infrastructure_node_metrics_tables/shared/components/metrics_node_details_link.tsx @@ -8,7 +8,6 @@ import { parse } from '@kbn/datemath'; import { EuiLink } from '@elastic/eui'; import React from 'react'; -import { useLinkProps } from '@kbn/observability-shared-plugin/public'; import type { InventoryItemType } from '../../../../../common/inventory_models/types'; import { useNodeDetailsRedirect } from '../../../../pages/link_to/use_node_details_redirect'; @@ -28,16 +27,14 @@ export const MetricsNodeDetailsLink = ({ timerange, }: MetricsNodeDetailsLinkProps) => { const { getNodeDetailUrl } = useNodeDetailsRedirect(); - const linkProps = useLinkProps( - getNodeDetailUrl({ - nodeType, - nodeId: id, - search: { - from: parse(timerange.from)?.valueOf(), - to: parse(timerange.to)?.valueOf(), - }, - }) - ); + const linkProps = getNodeDetailUrl({ + nodeType, + nodeId: id, + search: { + from: parse(timerange.from)?.valueOf(), + to: parse(timerange.to)?.valueOf(), + }, + }); return ( diff --git a/x-pack/plugins/observability_solution/metrics_data_access/public/hooks/use_kibana.tsx b/x-pack/plugins/observability_solution/metrics_data_access/public/hooks/use_kibana.tsx index c99caa3f4c266..423460b383549 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/public/hooks/use_kibana.tsx +++ b/x-pack/plugins/observability_solution/metrics_data_access/public/hooks/use_kibana.tsx @@ -12,12 +12,14 @@ import { KibanaReactContextValue, useKibana, } from '@kbn/kibana-react-plugin/public'; +import type { SharePluginStart } from '@kbn/share-plugin/public'; -export type PluginKibanaContextValue = CoreStart; +export type PluginKibanaContextValue = CoreStart & { share?: SharePluginStart }; export const createKibanaContextForPlugin = (core: CoreStart) => createKibanaReactContext({ ...core, + share: {} as SharePluginStart, }); export const useKibanaContextForPlugin = diff --git a/x-pack/plugins/observability_solution/metrics_data_access/public/pages/link_to/use_node_details_redirect.ts b/x-pack/plugins/observability_solution/metrics_data_access/public/pages/link_to/use_node_details_redirect.ts index 7d9c813f97479..aea3042d79ae2 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/public/pages/link_to/use_node_details_redirect.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/public/pages/link_to/use_node_details_redirect.ts @@ -7,8 +7,13 @@ import { useCallback } from 'react'; import { useLocation } from 'react-router-dom'; -import type { LinkDescriptor } from '@kbn/observability-shared-plugin/public'; import useObservable from 'react-use/lib/useObservable'; +import { RouterLinkProps, getRouterLinkProps } from '@kbn/router-utils/src/get_router_link_props'; +import { Search } from 'history'; +import { + type AssetDetailsLocatorParams, + ASSET_DETAILS_LOCATOR_ID, +} from '@kbn/observability-shared-plugin/common'; import type { InventoryItemType } from '../../../common/inventory_models/types'; import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; @@ -18,15 +23,24 @@ interface QueryParams { assetName?: string; } +export interface RouteState { + originAppId: string; + originPathname: string; + originSearch?: Search; +} + export const useNodeDetailsRedirect = () => { const location = useLocation(); const { services: { application: { currentAppId$ }, + share, }, } = useKibanaContextForPlugin(); const appId = useObservable(currentAppId$); + const locator = share?.url.locators.get(ASSET_DETAILS_LOCATOR_ID); + const getNodeDetailUrl = useCallback( ({ nodeType, @@ -36,34 +50,54 @@ export const useNodeDetailsRedirect = () => { nodeType: InventoryItemType; nodeId: string; search: QueryParams; - }): LinkDescriptor => { + }): RouterLinkProps => { const { to, from, ...rest } = search; - - return { - app: 'metrics', - pathname: `link-to/${nodeType}-detail/${nodeId}`, - search: { - ...rest, - ...(to && from - ? { - to: `${to}`, - from: `${from}`, - } - : undefined), - // While we don't have a shared state between all page in infra, this makes it possible to restore a page state when returning to the previous route - ...(location.search || location.pathname + const queryParams = { + nodeDetails: + Object.keys(rest).length > 0 ? { - state: JSON.stringify({ - originAppId: appId, - originSearch: location.search, - originPathname: location.pathname, - }), + ...rest, + dateRange: { + from: from ? new Date(from).toISOString() : undefined, + to: to ? new Date(to).toISOString() : undefined, + }, } - : undefined), + : {}, + _a: { + time: { + ...(from ? { from: new Date(from).toISOString() } : undefined), + ...(to ? { to: new Date(to).toISOString() } : undefined), + interval: '>=1m', + }, }, }; + + const nodeDetailsLocatorParams = { + ...queryParams, + assetType: nodeType, + assetId: nodeId, + state: { + ...(location.state ?? {}), + ...(location.key + ? ({ + originAppId: appId, + originSearch: location.search, + originPathname: location.pathname, + } as RouteState) + : {}), + }, + }; + + const nodeDetailsLinkProps = getRouterLinkProps({ + href: locator?.getRedirectUrl(nodeDetailsLocatorParams), + onClick: () => { + locator?.navigate(nodeDetailsLocatorParams, { replace: false }); + }, + }); + + return nodeDetailsLinkProps; }, - [location.pathname, appId, location.search] + [appId, location.key, location.pathname, location.search, location.state, locator] ); return { getNodeDetailUrl }; diff --git a/x-pack/plugins/observability_solution/metrics_data_access/tsconfig.json b/x-pack/plugins/observability_solution/metrics_data_access/tsconfig.json index 39ca16361f6cd..0c2c471a6bf77 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/tsconfig.json +++ b/x-pack/plugins/observability_solution/metrics_data_access/tsconfig.json @@ -35,6 +35,7 @@ "@kbn/core-http-request-handler-context-server", "@kbn/lens-embeddable-utils", "@kbn/react-kibana-context-render", - "@kbn/react-kibana-context-theme" + "@kbn/react-kibana-context-theme", + "@kbn/router-utils" ] } From fd312e30dbdac779ebda11af1a8dd9a84b63a092 Mon Sep 17 00:00:00 2001 From: "Eyo O. Eyo" <7893459+eokoneyo@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:17:08 +0200 Subject: [PATCH 08/74] Extract Kibana Privilege Feature table into package (#189871) ## Summary This PR extracts the kibana privilege component into a package, to support the work that's been done to integrate role privilege selection within the newly improved spaces administration app, and is the last in the series of PR to make this possible. Without this undertaken we would be creating cyclic dependency between the security and spaces plugin, the image below provides a visual representation on how this PR resolves the aforementioned issue; ![image](https://github.com/user-attachments/assets/3de515a4-3f8b-4708-99af-d175d5bab282)[^legend] [^legend]: item marked in blue is the package created in this PR. This particular component, alongside the components that it's composed of will now be housed in `@kbn/security-ui-components` (P.S. I'm not too entirely sure about the naming, suggestions welcome). --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + package.json | 1 + tsconfig.base.json | 2 ++ .../packages/security/ui_components/README.md | 3 +++ .../packages/security/ui_components/index.ts | 13 ++++++++++ .../security/ui_components/jest.config.js | 15 +++++++++++ .../security/ui_components/kibana.jsonc | 5 ++++ .../security/ui_components/package.json | 6 +++++ .../security/ui_components/src}/constants.ts | 0 .../__fixtures__/index.ts | 0 .../change_all_privileges.scss | 0 .../change_all_privileges.tsx | 0 .../components}/feature_table_cell.scss | 0 .../components}/feature_table_cell.test.tsx | 0 .../components}/feature_table_cell.tsx | 0 .../components}/index.ts | 0 .../feature_table.scss | 0 .../feature_table.test.tsx | 2 +- .../kibana_privilege_table}/feature_table.tsx | 2 +- .../feature_table_expanded_row.test.tsx | 2 +- .../feature_table_expanded_row.tsx | 0 .../src/kibana_privilege_table}/index.ts | 1 + .../sub_feature_form.test.tsx | 0 .../sub_feature_form.tsx | 0 .../src}/privilege_form_calculator/index.ts | 0 .../privilege_form_calculator.test.ts | 2 +- .../privilege_form_calculator.ts | 0 .../security/ui_components/tsconfig.json | 18 +++++++++++++ .../roles/edit_role/edit_role_page.tsx | 4 ++- .../privilege_summary/__fixtures__/index.ts | 2 +- .../privilege_summary_table.tsx | 2 +- .../privilege_selector.tsx | 6 ++--- .../simple_privilege_section.tsx | 26 ++++++++++--------- .../privilege_display.tsx | 5 ++-- .../privilege_space_form.test.tsx | 4 +-- .../privilege_space_form.tsx | 17 +++++++----- .../privilege_space_table.test.tsx | 2 +- .../privilege_space_table.tsx | 7 +++-- .../space_aware_privilege_section.tsx | 2 +- x-pack/plugins/security/tsconfig.json | 1 + yarn.lock | 4 +++ 41 files changed, 116 insertions(+), 39 deletions(-) create mode 100644 x-pack/packages/security/ui_components/README.md create mode 100644 x-pack/packages/security/ui_components/index.ts create mode 100644 x-pack/packages/security/ui_components/jest.config.js create mode 100644 x-pack/packages/security/ui_components/kibana.jsonc create mode 100644 x-pack/packages/security/ui_components/package.json rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana => packages/security/ui_components/src}/constants.ts (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/__fixtures__/index.ts (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/change_all_privileges.scss (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/change_all_privileges.tsx (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell => packages/security/ui_components/src/kibana_privilege_table/components}/feature_table_cell.scss (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell => packages/security/ui_components/src/kibana_privilege_table/components}/feature_table_cell.test.tsx (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell => packages/security/ui_components/src/kibana_privilege_table/components}/feature_table_cell.tsx (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell => packages/security/ui_components/src/kibana_privilege_table/components}/index.ts (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/feature_table.scss (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/feature_table.test.tsx (99%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/feature_table.tsx (99%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/feature_table_expanded_row.test.tsx (99%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/feature_table_expanded_row.tsx (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/index.ts (86%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/sub_feature_form.test.tsx (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table => packages/security/ui_components/src/kibana_privilege_table}/sub_feature_form.tsx (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana => packages/security/ui_components/src}/privilege_form_calculator/index.ts (100%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana => packages/security/ui_components/src}/privilege_form_calculator/privilege_form_calculator.test.ts (99%) rename x-pack/{plugins/security/public/management/roles/edit_role/privileges/kibana => packages/security/ui_components/src}/privilege_form_calculator/privilege_form_calculator.ts (100%) create mode 100644 x-pack/packages/security/ui_components/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b74db49fc30ea..79a8000fe2f68 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -774,6 +774,7 @@ x-pack/packages/security-solution/side_nav @elastic/security-threat-hunting-expl x-pack/packages/security-solution/storybook/config @elastic/security-threat-hunting-explore x-pack/packages/security-solution/upselling @elastic/security-threat-hunting-explore x-pack/test/security_functional/plugins/test_endpoints @elastic/kibana-security +x-pack/packages/security/ui_components @elastic/kibana-security packages/kbn-securitysolution-autocomplete @elastic/security-detection-engine x-pack/packages/security-solution/data_table @elastic/security-threat-hunting-investigations packages/kbn-securitysolution-ecs @elastic/security-threat-hunting-explore diff --git a/package.json b/package.json index 78d2e97408fa0..95ad8e437e9d3 100644 --- a/package.json +++ b/package.json @@ -790,6 +790,7 @@ "@kbn/security-solution-storybook-config": "link:x-pack/packages/security-solution/storybook/config", "@kbn/security-solution-upselling": "link:x-pack/packages/security-solution/upselling", "@kbn/security-test-endpoints-plugin": "link:x-pack/test/security_functional/plugins/test_endpoints", + "@kbn/security-ui-components": "link:x-pack/packages/security/ui_components", "@kbn/securitysolution-autocomplete": "link:packages/kbn-securitysolution-autocomplete", "@kbn/securitysolution-data-table": "link:x-pack/packages/security-solution/data_table", "@kbn/securitysolution-ecs": "link:packages/kbn-securitysolution-ecs", diff --git a/tsconfig.base.json b/tsconfig.base.json index d6b0733743929..860e8dae3d523 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1542,6 +1542,8 @@ "@kbn/security-solution-upselling/*": ["x-pack/packages/security-solution/upselling/*"], "@kbn/security-test-endpoints-plugin": ["x-pack/test/security_functional/plugins/test_endpoints"], "@kbn/security-test-endpoints-plugin/*": ["x-pack/test/security_functional/plugins/test_endpoints/*"], + "@kbn/security-ui-components": ["x-pack/packages/security/ui_components"], + "@kbn/security-ui-components/*": ["x-pack/packages/security/ui_components/*"], "@kbn/securitysolution-autocomplete": ["packages/kbn-securitysolution-autocomplete"], "@kbn/securitysolution-autocomplete/*": ["packages/kbn-securitysolution-autocomplete/*"], "@kbn/securitysolution-data-table": ["x-pack/packages/security-solution/data_table"], diff --git a/x-pack/packages/security/ui_components/README.md b/x-pack/packages/security/ui_components/README.md new file mode 100644 index 0000000000000..dd5ee7d160285 --- /dev/null +++ b/x-pack/packages/security/ui_components/README.md @@ -0,0 +1,3 @@ +# @kbn/security-ui-components + +Contains stateless components for RBAC administration within Kibana. diff --git a/x-pack/packages/security/ui_components/index.ts b/x-pack/packages/security/ui_components/index.ts new file mode 100644 index 0000000000000..3730109d9c0f8 --- /dev/null +++ b/x-pack/packages/security/ui_components/index.ts @@ -0,0 +1,13 @@ +/* + * 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. + */ + +export { + FeatureTable as KibanaPrivilegeTable, + FeatureTableCell, +} from './src/kibana_privilege_table'; +export { PrivilegeFormCalculator } from './src/privilege_form_calculator'; +export * as constants from './src/constants'; diff --git a/x-pack/packages/security/ui_components/jest.config.js b/x-pack/packages/security/ui_components/jest.config.js new file mode 100644 index 0000000000000..12c8dfc44691b --- /dev/null +++ b/x-pack/packages/security/ui_components/jest.config.js @@ -0,0 +1,15 @@ +/* + * 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. + */ + +module.exports = { + coverageDirectory: '/target/kibana-coverage/jest/x-pack/packages/security/ui_components', + coverageReporters: ['text', 'html'], + collectCoverageFrom: ['/x-pack/packages/security/ui_components/**/*.{ts,tsx}'], + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/packages/security/ui_components'], +}; diff --git a/x-pack/packages/security/ui_components/kibana.jsonc b/x-pack/packages/security/ui_components/kibana.jsonc new file mode 100644 index 0000000000000..1aad2d80ed7f7 --- /dev/null +++ b/x-pack/packages/security/ui_components/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/security-ui-components", + "owner": "@elastic/kibana-security" +} diff --git a/x-pack/packages/security/ui_components/package.json b/x-pack/packages/security/ui_components/package.json new file mode 100644 index 0000000000000..59bf7383b958e --- /dev/null +++ b/x-pack/packages/security/ui_components/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/security-ui-components", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/constants.ts b/x-pack/packages/security/ui_components/src/constants.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/constants.ts rename to x-pack/packages/security/ui_components/src/constants.ts diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/__fixtures__/index.ts b/x-pack/packages/security/ui_components/src/kibana_privilege_table/__fixtures__/index.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/__fixtures__/index.ts rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/__fixtures__/index.ts diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/change_all_privileges.scss b/x-pack/packages/security/ui_components/src/kibana_privilege_table/change_all_privileges.scss similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/change_all_privileges.scss rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/change_all_privileges.scss diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/change_all_privileges.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/change_all_privileges.tsx similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/change_all_privileges.tsx rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/change_all_privileges.tsx diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.scss b/x-pack/packages/security/ui_components/src/kibana_privilege_table/components/feature_table_cell.scss similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.scss rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/components/feature_table_cell.scss diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.test.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/components/feature_table_cell.test.tsx similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.test.tsx rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/components/feature_table_cell.test.tsx diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/components/feature_table_cell.tsx similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/feature_table_cell.tsx rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/components/feature_table_cell.tsx diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/index.ts b/x-pack/packages/security/ui_components/src/kibana_privilege_table/components/index.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table_cell/index.ts rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/components/index.ts diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.scss b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.scss similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.scss rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.scss diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.test.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.test.tsx similarity index 99% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.test.tsx rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.test.tsx index 5a43e7931d474..83a0da2e26815 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.test.tsx +++ b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.test.tsx @@ -18,7 +18,7 @@ import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { getDisplayedFeaturePrivileges } from './__fixtures__'; import { FeatureTable } from './feature_table'; -import type { Role } from '../../../../../../../common'; +import type { Role } from '@kbn/security-plugin-types-common'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; const createRole = (kibana: Role['kibana'] = []): Role => { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx similarity index 99% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.tsx rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx index 6b4e7af240eb5..4b0d520dee661 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table.tsx +++ b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx @@ -35,7 +35,7 @@ import type { KibanaPrivileges, SecuredFeature } from '@kbn/security-role-manage import { ChangeAllPrivilegesControl } from './change_all_privileges'; import { FeatureTableExpandedRow } from './feature_table_expanded_row'; import { NO_PRIVILEGE_VALUE } from '../constants'; -import { FeatureTableCell } from '../feature_table_cell'; +import { FeatureTableCell } from './components/feature_table_cell'; import type { PrivilegeFormCalculator } from '../privilege_form_calculator'; interface Props { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.test.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table_expanded_row.test.tsx similarity index 99% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.test.tsx rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table_expanded_row.test.tsx index 92a33136c7678..3b787f01cdf92 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.test.tsx +++ b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table_expanded_row.test.tsx @@ -15,7 +15,7 @@ import { import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { FeatureTableExpandedRow } from './feature_table_expanded_row'; -import type { Role } from '../../../../../../../common'; +import type { Role } from '@kbn/security-plugin-types-common'; import { PrivilegeFormCalculator } from '../privilege_form_calculator'; const createRole = (kibana: Role['kibana'] = []): Role => { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table_expanded_row.tsx similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/feature_table_expanded_row.tsx rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table_expanded_row.tsx diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/index.ts b/x-pack/packages/security/ui_components/src/kibana_privilege_table/index.ts similarity index 86% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/index.ts rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/index.ts index 75d8daef05a3e..ad439d6aad3fa 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/index.ts +++ b/x-pack/packages/security/ui_components/src/kibana_privilege_table/index.ts @@ -6,3 +6,4 @@ */ export { FeatureTable } from './feature_table'; +export { FeatureTableCell } from './components'; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.test.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/sub_feature_form.test.tsx similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.test.tsx rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/sub_feature_form.test.tsx diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.tsx b/x-pack/packages/security/ui_components/src/kibana_privilege_table/sub_feature_form.tsx similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/feature_table/sub_feature_form.tsx rename to x-pack/packages/security/ui_components/src/kibana_privilege_table/sub_feature_form.tsx diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/index.ts b/x-pack/packages/security/ui_components/src/privilege_form_calculator/index.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/index.ts rename to x-pack/packages/security/ui_components/src/privilege_form_calculator/index.ts diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.test.ts b/x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.test.ts similarity index 99% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.test.ts rename to x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.test.ts index b47501e08f376..0281605f00f34 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.test.ts +++ b/x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.test.ts @@ -11,7 +11,7 @@ import { } from '@kbn/security-role-management-model/src/__fixtures__'; import { PrivilegeFormCalculator } from './privilege_form_calculator'; -import type { Role } from '../../../../../../../common'; +import type { Role } from '@kbn/security-plugin-types-common'; const createRole = (kibana: Role['kibana'] = []): Role => { return { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.ts b/x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts similarity index 100% rename from x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_form_calculator/privilege_form_calculator.ts rename to x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts diff --git a/x-pack/packages/security/ui_components/tsconfig.json b/x-pack/packages/security/ui_components/tsconfig.json new file mode 100644 index 0000000000000..736612a488852 --- /dev/null +++ b/x-pack/packages/security/ui_components/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": ["jest", "node", "react"] + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["target/**/*"], + "kbn_references": [ + "@kbn/core", + "@kbn/i18n", + "@kbn/i18n-react", + "@kbn/security-plugin-types-common", + "@kbn/test-jest-helpers", + "@kbn/security-role-management-model", + "@kbn/features-plugin", + ] +} diff --git a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx index b724acc58f507..e867bf0c418cc 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx @@ -775,7 +775,9 @@ export const EditRolePage: FunctionComponent = ({ - Manage Members + {i18n.translate('xpack.security.management.roles.manageRoleUsers', { + defaultMessage: 'Manage Members', + })} diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/__fixtures__/index.ts b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/__fixtures__/index.ts index 6d9cb86ace188..01f924aaa555e 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/__fixtures__/index.ts +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/__fixtures__/index.ts @@ -8,10 +8,10 @@ import { EuiTableRow } from '@elastic/eui'; import type { ReactWrapper } from 'enzyme'; +import { FeatureTableCell } from '@kbn/security-ui-components'; import { findTestSubject } from '@kbn/test-jest-helpers'; import type { Role, RoleKibanaPrivilege } from '../../../../../../../../common'; -import { FeatureTableCell } from '../../feature_table_cell'; import { PrivilegeSummaryExpandedRow } from '../privilege_summary_expanded_row'; interface DisplayedFeaturePrivileges { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.tsx index af15cf82b9be6..5dc856e5af5d9 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.tsx @@ -27,6 +27,7 @@ import { type PrimaryFeaturePrivilege, type SecuredFeature, } from '@kbn/security-role-management-model'; +import { FeatureTableCell } from '@kbn/security-ui-components'; import type { Space, SpacesApiUi } from '@kbn/spaces-plugin/public'; import type { EffectiveFeaturePrivileges } from './privilege_summary_calculator'; @@ -34,7 +35,6 @@ import { PrivilegeSummaryCalculator } from './privilege_summary_calculator'; import { PrivilegeSummaryExpandedRow } from './privilege_summary_expanded_row'; import { SpaceColumnHeader } from './space_column_header'; import { ALL_SPACES_ID } from '../../../../../../../common/constants'; -import { FeatureTableCell } from '../feature_table_cell'; export interface PrivilegeSummaryTableProps { role: Role; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/privilege_selector.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/privilege_selector.tsx index 72061958ecc35..403a9026923f2 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/privilege_selector.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/privilege_selector.tsx @@ -9,7 +9,7 @@ import { EuiSelect } from '@elastic/eui'; import type { ChangeEvent } from 'react'; import React, { Component } from 'react'; -import { NO_PRIVILEGE_VALUE } from '../constants'; +import { constants } from '@kbn/security-ui-components'; interface Props { ['data-test-subj']: string; @@ -27,10 +27,10 @@ export class PrivilegeSelector extends Component { public render() { const { availablePrivileges, value, disabled, allowNone, compressed } = this.props; - const options = []; + const options: Array<{ value: string; text: string }> = []; if (allowNone) { - options.push({ value: NO_PRIVILEGE_VALUE, text: 'none' }); + options.push({ value: constants.NO_PRIVILEGE_VALUE, text: 'none' }); } options.push( diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.tsx index b5b57921705e5..ad6415a1f4fec 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/simple_privilege_section/simple_privilege_section.tsx @@ -16,17 +16,19 @@ import { import React, { Component, Fragment } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { Role, RoleKibanaPrivilege } from '@kbn/security-plugin-types-common'; import { isGlobalPrivilegeDefinition, type KibanaPrivileges, } from '@kbn/security-role-management-model'; +import { + constants, + KibanaPrivilegeTable, + PrivilegeFormCalculator, +} from '@kbn/security-ui-components'; import { UnsupportedSpacePrivilegesWarning } from './unsupported_space_privileges_warning'; -import type { Role, RoleKibanaPrivilege } from '../../../../../../../common'; import { copyRole } from '../../../../../../../common/model'; -import { CUSTOM_PRIVILEGE_VALUE, NO_PRIVILEGE_VALUE } from '../constants'; -import { FeatureTable } from '../feature_table'; -import { PrivilegeFormCalculator } from '../privilege_form_calculator'; interface Props { role: Role; @@ -98,7 +100,7 @@ export class SimplePrivilegeSection extends Component { onChange={this.onKibanaPrivilegeChange} options={[ { - value: NO_PRIVILEGE_VALUE, + value: constants.NO_PRIVILEGE_VALUE, inputDisplay: ( { ), }, { - value: CUSTOM_PRIVILEGE_VALUE, + value: constants.CUSTOM_PRIVILEGE_VALUE, inputDisplay: ( { {this.state.isCustomizingGlobalPrivilege && ( - { public getDisplayedBasePrivilege = () => { if (this.state.isCustomizingGlobalPrivilege) { - return CUSTOM_PRIVILEGE_VALUE; + return constants.CUSTOM_PRIVILEGE_VALUE; } const { role } = this.props; const form = this.locateGlobalPrivilege(role); - return form && form.base.length > 0 ? form.base[0] : NO_PRIVILEGE_VALUE; + return form && form.base.length > 0 ? form.base[0] : constants.NO_PRIVILEGE_VALUE; }; public onKibanaPrivilegeChange = (privilege: string) => { @@ -254,10 +256,10 @@ export class SimplePrivilegeSection extends Component { const form = this.locateGlobalPrivilege(role) || this.createGlobalPrivilegeEntry(role); - if (privilege === NO_PRIVILEGE_VALUE) { + if (privilege === constants.NO_PRIVILEGE_VALUE) { // Remove global entry if no privilege value role.kibana = role.kibana.filter((entry) => !isGlobalPrivilegeDefinition(entry)); - } else if (privilege === CUSTOM_PRIVILEGE_VALUE) { + } else if (privilege === constants.CUSTOM_PRIVILEGE_VALUE) { // Remove base privilege if customizing feature privileges form.base = []; } else { @@ -267,7 +269,7 @@ export class SimplePrivilegeSection extends Component { this.props.onChange(role); this.setState({ - isCustomizingGlobalPrivilege: privilege === CUSTOM_PRIVILEGE_VALUE, + isCustomizingGlobalPrivilege: privilege === constants.CUSTOM_PRIVILEGE_VALUE, globalPrivsIndex: role.kibana.indexOf(form), }); }; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_display.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_display.tsx index 52e61c6e92603..40d0da4fbb0c2 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_display.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_display.tsx @@ -11,7 +11,7 @@ import _ from 'lodash'; import type { FC, ReactNode } from 'react'; import React from 'react'; -import { NO_PRIVILEGE_VALUE } from '../constants'; +import { constants } from '@kbn/security-ui-components'; interface Props extends PropsOf { privilege: string | string[] | undefined; @@ -40,7 +40,8 @@ function getDisplayValue(privilege: string | string[] | undefined) { let displayValue: string | ReactNode; const isPrivilegeMissing = - privileges.length === 0 || (privileges.length === 1 && privileges.includes(NO_PRIVILEGE_VALUE)); + privileges.length === 0 || + (privileges.length === 1 && privileges.includes(constants.NO_PRIVILEGE_VALUE)); if (isPrivilegeMissing) { displayValue = ; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.test.tsx index 7d9d6d015c03e..406e102b4529d 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.test.tsx @@ -13,14 +13,14 @@ import { createKibanaPrivileges, kibanaFeatures, } from '@kbn/security-role-management-model/src/__fixtures__'; +import { KibanaPrivilegeTable as FeatureTable } from '@kbn/security-ui-components'; +import { getDisplayedFeaturePrivileges } from '@kbn/security-ui-components/src/kibana_privilege_table/__fixtures__'; import type { Space } from '@kbn/spaces-plugin/public'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { PrivilegeSpaceForm } from './privilege_space_form'; import { SpaceSelector } from './space_selector'; import type { Role } from '../../../../../../../common'; -import { FeatureTable } from '../feature_table'; -import { getDisplayedFeaturePrivileges } from '../feature_table/__fixtures__'; const createRole = (kibana: Role['kibana'] = []): Role => { return { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx index fbcc43a3b4b1a..a37fd799a035e 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_form.tsx @@ -30,15 +30,17 @@ import React, { Component, Fragment } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { KibanaPrivileges } from '@kbn/security-role-management-model'; +import { + KibanaPrivilegeTable, + PrivilegeFormCalculator, + constants as UI_CONSTANTS, +} from '@kbn/security-ui-components'; import type { Space } from '@kbn/spaces-plugin/public'; import { SpaceSelector } from './space_selector'; import type { FeaturesPrivileges, Role } from '../../../../../../../common'; import { ALL_SPACES_ID } from '../../../../../../../common/constants'; import { copyRole } from '../../../../../../../common/model'; -import { CUSTOM_PRIVILEGE_VALUE } from '../constants'; -import { FeatureTable } from '../feature_table'; -import { PrivilegeFormCalculator } from '../privilege_form_calculator'; interface Props { role: Role; @@ -254,7 +256,7 @@ export class PrivilegeSpaceForm extends Component { - { let isCustomizingFeaturePrivileges = false; - if (privilegeName === CUSTOM_PRIVILEGE_VALUE) { + if (privilegeName === UI_CONSTANTS.CUSTOM_PRIVILEGE_VALUE) { form.base = []; isCustomizingFeaturePrivileges = true; } else { @@ -456,7 +458,8 @@ export class PrivilegeSpaceForm extends Component { } this.setState({ - selectedBasePrivilege: privilegeName === CUSTOM_PRIVILEGE_VALUE ? [] : [privilegeName], + selectedBasePrivilege: + privilegeName === UI_CONSTANTS.CUSTOM_PRIVILEGE_VALUE ? [] : [privilegeName], role, isCustomizingFeaturePrivileges, privilegeCalculator: new PrivilegeFormCalculator(this.props.kibanaPrivileges, role), @@ -507,7 +510,7 @@ export class PrivilegeSpaceForm extends Component { return `basePrivilege_${basePrivilege.id}`; } - return `basePrivilege_${CUSTOM_PRIVILEGE_VALUE}`; + return `basePrivilege_${UI_CONSTANTS.CUSTOM_PRIVILEGE_VALUE}`; }; private onFeaturePrivilegesChange = (featureId: string, privileges: string[]) => { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.test.tsx index 316419f479426..e0478394852bc 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.test.tsx @@ -12,11 +12,11 @@ import React from 'react'; import { KibanaFeature } from '@kbn/features-plugin/public'; import type { Role, RoleKibanaPrivilege } from '@kbn/security-plugin-types-common'; import { createKibanaPrivileges } from '@kbn/security-role-management-model/src/__fixtures__'; +import { PrivilegeFormCalculator } from '@kbn/security-ui-components'; import { findTestSubject, mountWithIntl } from '@kbn/test-jest-helpers'; import { PrivilegeDisplay } from './privilege_display'; import { PrivilegeSpaceTable } from './privilege_space_table'; -import { PrivilegeFormCalculator } from '../privilege_form_calculator'; interface TableRow { spaces: string[]; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.tsx index 28e1d50d7f71e..61a31f5575800 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/privilege_space_table.tsx @@ -24,13 +24,12 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { FeaturesPrivileges, Role } from '@kbn/security-plugin-types-common'; import { isGlobalPrivilegeDefinition } from '@kbn/security-role-management-model'; +import { constants, type PrivilegeFormCalculator } from '@kbn/security-ui-components'; import type { Space } from '@kbn/spaces-plugin/public'; import { getSpaceColor } from '@kbn/spaces-plugin/public'; import { PrivilegeDisplay } from './privilege_display'; import { copyRole } from '../../../../../../../common/model'; -import { CUSTOM_PRIVILEGE_VALUE } from '../constants'; -import type { PrivilegeFormCalculator } from '../privilege_form_calculator'; const SPACES_DISPLAY_COUNT = 4; @@ -120,7 +119,7 @@ export class PrivilegeSpaceTable extends Component { const isExpanded = this.state.expandedSpacesGroups.includes(record.privilegeIndex); const displayedSpaces = isExpanded ? spaces : spaces.slice(0, SPACES_DISPLAY_COUNT); - let button = null; + let button: React.ReactElement | null = null; if (spaces.length > displayedSpaces.length) { button = ( { const basePrivilege = privilegeCalculator.getBasePrivilege(record.privilegeIndex)?.id ?? - CUSTOM_PRIVILEGE_VALUE; + constants.CUSTOM_PRIVILEGE_VALUE; const privilege = privilegeCalculator.isWildcardBasePrivilege(record.privilegeIndex) ? '*' diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx index 404bd39ec9b67..e5a4cb1494d77 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/space_aware_privilege_section/space_aware_privilege_section.tsx @@ -22,13 +22,13 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { Role } from '@kbn/security-plugin-types-common'; import type { KibanaPrivileges } from '@kbn/security-role-management-model'; +import { PrivilegeFormCalculator } from '@kbn/security-ui-components'; import type { Space, SpacesApiUi } from '@kbn/spaces-plugin/public'; import { PrivilegeSpaceForm } from './privilege_space_form'; import { PrivilegeSpaceTable } from './privilege_space_table'; import { isRoleReserved, isRoleWithWildcardBasePrivilege } from '../../../../../../../common'; import type { RoleValidator } from '../../../validate_role'; -import { PrivilegeFormCalculator } from '../privilege_form_calculator'; import { PrivilegeSummary } from '../privilege_summary'; interface Props { diff --git a/x-pack/plugins/security/tsconfig.json b/x-pack/plugins/security/tsconfig.json index 8e3f38833248d..c3df5dda29481 100644 --- a/x-pack/plugins/security/tsconfig.json +++ b/x-pack/plugins/security/tsconfig.json @@ -86,6 +86,7 @@ "@kbn/core-security-server-mocks", "@kbn/security-authorization-core", "@kbn/security-role-management-model", + "@kbn/security-ui-components", ], "exclude": [ "target/**/*", diff --git a/yarn.lock b/yarn.lock index 15ae0b8e5fcee..4ee86f1601adb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6339,6 +6339,10 @@ version "0.0.0" uid "" +"@kbn/security-ui-components@link:x-pack/packages/security/ui_components": + version "0.0.0" + uid "" + "@kbn/securitysolution-autocomplete@link:packages/kbn-securitysolution-autocomplete": version "0.0.0" uid "" From 51e76d8ad67ff7c75875e834999b40422c578bc0 Mon Sep 17 00:00:00 2001 From: Alexi Doak <109488926+doakalexi@users.noreply.github.com> Date: Tue, 27 Aug 2024 07:18:04 -0700 Subject: [PATCH 09/74] Onboard Synthetics TLS rule type with FAAD (#191127) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves: https://github.com/elastic/kibana/issues/169867 This is the second attempt PR 🙂 to onboard the Synthetics TLS rule type with FAAD. **To verify** 1. Create an oblt cluster with `/create-ccs-cluster` on slack. Choose `dev-oblt`. 2. Add the configuration values from the oblt command to your kibana.yml. You may have to add: ``` elasticsearch.ignoreVersionMismatch: true ``` and start Kibana 4. Navigate to `app/synthetics/settings/alerting` and add a default connector. 5. Go to `/app/synthetics/monitors/getting-started` and create a HTTP Ping monitor with whatever url you want ( I used https://github.com/) and select a location. 6. Go back to `app/synthetics` and click the Alerts & Rules link. Click TLS certificate rule. Edit the older than param to something low, such as 1 day. 7. The TLS rule should create an active alert, verify that the action message is populated. 8. Repeat step 5 update the older than param to be higher than the age of the cert. You can check your cert here `app/synthetics/certificates` 9. The TLS rule should recover, and verify that the recovery action message is populated. 10. You can also check the AAD docs in dev tools using the following command: ``` GET .internal.alerts-observability.uptime.alerts*/_search ``` --- .../synthetics/server/alert_rules/common.ts | 3 +- .../status_rule/monitor_status_rule.ts | 14 +- .../tls_rule/message_utils.test.ts | 167 ++++++++++++++++++ .../alert_rules/tls_rule/message_utils.ts | 41 +++-- .../server/alert_rules/tls_rule/tls_rule.ts | 106 ++++++----- .../synthetics/server/server.ts | 14 +- 6 files changed, 259 insertions(+), 86 deletions(-) create mode 100644 x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.test.ts diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts index 549bbcff4cdfe..20c84109b0be1 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/common.ts @@ -359,8 +359,9 @@ export const syntheticsRuleTypeFieldMap = { ...legacyExperimentalFieldMap, }; -export const SyntheticsRuleTypeAlertDefinition: IRuleTypeAlerts = { +export const SyntheticsRuleTypeAlertDefinition: IRuleTypeAlerts = { context: SYNTHETICS_RULE_TYPES_ALERT_CONTEXT, mappings: { fieldMap: syntheticsRuleTypeFieldMap }, useLegacyAlerts: true, + shouldWrite: true, }; diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts index d042e8d323302..c823abe7d083f 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/status_rule/monitor_status_rule.ts @@ -8,13 +8,11 @@ import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { isEmpty } from 'lodash'; import { ActionGroupIdsOf } from '@kbn/alerting-plugin/common'; -import { PluginSetupContract } from '@kbn/alerting-plugin/server'; import { GetViewInAppRelativeUrlFnOpts, AlertInstanceContext as AlertContext, RuleExecutorOptions, AlertsClientError, - IRuleTypeAlerts, } from '@kbn/alerting-plugin/server'; import { observabilityPaths } from '@kbn/observability-plugin/common'; import { ObservabilityUptimeAlert } from '@kbn/alerts-as-data-utils'; @@ -55,16 +53,15 @@ type MonitorStatusAlert = ObservabilityUptimeAlert; export const registerSyntheticsStatusCheckRule = ( server: SyntheticsServerSetup, plugins: SyntheticsPluginsSetupDependencies, - syntheticsMonitorClient: SyntheticsMonitorClient, - alerting: PluginSetupContract + syntheticsMonitorClient: SyntheticsMonitorClient ) => { - if (!alerting) { + if (!plugins.alerting) { throw new Error( 'Cannot register the synthetics monitor status rule type. The alerting plugin needs to be enabled.' ); } - alerting.registerType({ + plugins.alerting.registerType({ id: SYNTHETICS_ALERT_RULE_TYPES.MONITOR_STATUS, category: DEFAULT_APP_CATEGORIES.observability.id, producer: 'uptime', @@ -172,10 +169,7 @@ export const registerSyntheticsStatusCheckRule = ( state: updateState(ruleState, !isEmpty(downConfigs), { downConfigs }), }; }, - alerts: { - ...SyntheticsRuleTypeAlertDefinition, - shouldWrite: true, - } as IRuleTypeAlerts, + alerts: SyntheticsRuleTypeAlertDefinition, fieldsForAAD: Object.keys(syntheticsRuleFieldMap), getViewInAppRelativeUrl: ({ rule }: GetViewInAppRelativeUrlFnOpts<{}>) => observabilityPaths.ruleDetails(rule.id), diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.test.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.test.ts new file mode 100644 index 0000000000000..e07ba00c1de6c --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.test.ts @@ -0,0 +1,167 @@ +/* + * 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 { IBasePath } from '@kbn/core/server'; +import { AlertsLocatorParams } from '@kbn/observability-plugin/common'; +import { LocatorPublic } from '@kbn/share-plugin/common'; +import { setTLSRecoveredAlertsContext } from './message_utils'; +import { TLSLatestPing } from './tls_rule_executor'; + +describe('setTLSRecoveredAlertsContext', () => { + const timestamp = new Date().toISOString(); + const alertUuid = 'alert-id'; + const configId = '12345'; + const basePath = { + publicBaseUrl: 'https://localhost:5601', + } as IBasePath; + const alertsLocatorMock = { + getLocation: jest.fn().mockImplementation(() => ({ + path: 'https://localhost:5601/app/observability/alerts/alert-id', + })), + } as any as LocatorPublic; + const alertState = { + summary: 'test-summary', + status: 'has expired', + sha256: 'cert-1-sha256', + commonName: 'cert-1', + issuer: 'test-issuer', + monitorName: 'test-monitor', + monitorType: 'test-monitor-type', + locationName: 'test-location-name', + monitorUrl: 'test-monitor-url', + configId, + }; + + it('sets context correctly when monitor cert has been updated', async () => { + const alertsClientMock = { + report: jest.fn(), + getAlertLimitValue: jest.fn().mockReturnValue(10), + setAlertLimitReached: jest.fn(), + getRecoveredAlerts: jest.fn().mockReturnValue([ + { + alert: { + getId: () => alertUuid, + getState: () => alertState, + setContext: jest.fn(), + getUuid: () => alertUuid, + getStart: () => new Date().toISOString(), + }, + }, + ]), + setAlertData: jest.fn(), + isTrackedAlert: jest.fn(), + }; + await setTLSRecoveredAlertsContext({ + alertsClient: alertsClientMock, + basePath, + defaultStartedAt: timestamp, + spaceId: 'default', + alertsLocator: alertsLocatorMock, + latestPings: [ + { + config_id: configId, + '@timestamp': timestamp, + tls: { + server: { + hash: { + sha256: 'cert-2-sha256', + }, + x509: { + subject: { + common_name: 'cert-2', + }, + not_after: timestamp, + }, + }, + }, + } as TLSLatestPing, + ], + }); + expect(alertsClientMock.setAlertData).toBeCalledWith({ + context: { + alertDetailsUrl: 'https://localhost:5601/app/observability/alerts/alert-id', + commonName: 'cert-1', + configId: '12345', + issuer: 'test-issuer', + locationName: 'test-location-name', + monitorName: 'test-monitor', + monitorType: 'test-monitor-type', + monitorUrl: 'test-monitor-url', + newStatus: expect.stringContaining('Certificate cert-2 Expired on'), + previousStatus: 'Certificate cert-1 test-summary', + sha256: 'cert-1-sha256', + status: 'has expired', + summary: 'Monitor certificate has been updated.', + }, + id: 'alert-id', + }); + }); + + it('sets context correctly when monitor cert expiry/age threshold has been updated', async () => { + const alertsClientMock = { + report: jest.fn(), + getAlertLimitValue: jest.fn().mockReturnValue(10), + setAlertLimitReached: jest.fn(), + getRecoveredAlerts: jest.fn().mockReturnValue([ + { + alert: { + getId: () => alertUuid, + getState: () => alertState, + setContext: jest.fn(), + getUuid: () => alertUuid, + getStart: () => new Date().toISOString(), + }, + }, + ]), + setAlertData: jest.fn(), + isTrackedAlert: jest.fn(), + }; + await setTLSRecoveredAlertsContext({ + alertsClient: alertsClientMock, + basePath, + defaultStartedAt: timestamp, + spaceId: 'default', + alertsLocator: alertsLocatorMock, + latestPings: [ + { + config_id: configId, + '@timestamp': timestamp, + tls: { + server: { + hash: { + sha256: 'cert-1-sha256', + }, + x509: { + subject: { + common_name: 'cert-1', + }, + not_after: timestamp, + }, + }, + }, + } as TLSLatestPing, + ], + }); + expect(alertsClientMock.setAlertData).toBeCalledWith({ + context: { + alertDetailsUrl: 'https://localhost:5601/app/observability/alerts/alert-id', + commonName: 'cert-1', + configId: '12345', + issuer: 'test-issuer', + locationName: 'test-location-name', + monitorName: 'test-monitor', + monitorType: 'test-monitor-type', + monitorUrl: 'test-monitor-url', + newStatus: 'Certificate cert-1 test-summary', + previousStatus: 'Certificate cert-1 test-summary', + sha256: 'cert-1-sha256', + status: 'has expired', + summary: 'Expiry/Age threshold has been updated.', + }, + id: 'alert-id', + }); + }); +}); diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts index 78e073d9233a9..5fc23a370caea 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts @@ -9,12 +9,19 @@ import moment from 'moment/moment'; import { IBasePath } from '@kbn/core-http-server'; import { LocatorPublic } from '@kbn/share-plugin/common'; import { AlertsLocatorParams, getAlertUrl } from '@kbn/observability-plugin/common'; -import { RuleExecutorServices } from '@kbn/alerting-plugin/server'; +import { + AlertInstanceContext as AlertContext, + AlertInstanceState as AlertState, + ActionGroupIdsOf, +} from '@kbn/alerting-plugin/server'; import { i18n } from '@kbn/i18n'; +import { PublicAlertsClient } from '@kbn/alerting-plugin/server/alerts_client/types'; +import { ObservabilityUptimeAlert } from '@kbn/alerts-as-data-utils'; import { TLSLatestPing } from './tls_rule_executor'; import { ALERT_DETAILS_URL } from '../action_variables'; import { Cert } from '../../../common/runtime_types'; import { tlsTranslations } from '../translations'; +import { MonitorStatusActionGroup } from '../../../common/constants/synthetics_alerts'; interface TLSContent { summary: string; status?: string; @@ -75,35 +82,34 @@ export const getCertSummary = (cert: Cert, expirationThreshold: number, ageThres }; }; -type CertSummary = ReturnType; - export const setTLSRecoveredAlertsContext = async ({ - alertFactory, + alertsClient, basePath, defaultStartedAt, - getAlertStartedDate, spaceId, alertsLocator, - getAlertUuid, latestPings, }: { - alertFactory: RuleExecutorServices['alertFactory']; + alertsClient: PublicAlertsClient< + ObservabilityUptimeAlert, + AlertState, + AlertContext, + ActionGroupIdsOf + >; defaultStartedAt: string; - getAlertStartedDate: (alertInstanceId: string) => string | null; basePath: IBasePath; spaceId: string; alertsLocator?: LocatorPublic; - getAlertUuid?: (alertId: string) => string | null; latestPings: TLSLatestPing[]; }) => { - const { getRecoveredAlerts } = alertFactory.done(); + const recoveredAlerts = alertsClient.getRecoveredAlerts() ?? []; - for await (const alert of getRecoveredAlerts()) { - const recoveredAlertId = alert.getId(); - const alertUuid = getAlertUuid?.(recoveredAlertId) || null; - const indexedStartedAt = getAlertStartedDate(recoveredAlertId) ?? defaultStartedAt; + for (const recoveredAlert of recoveredAlerts) { + const recoveredAlertId = recoveredAlert.alert.getId(); + const alertUuid = recoveredAlert.alert.getUuid(); + const indexedStartedAt = recoveredAlert.alert.getStart() ?? defaultStartedAt; - const state = alert.getState() as CertSummary; + const state = recoveredAlert.alert.getState(); const alertUrl = await getAlertUrl( alertUuid, spaceId, @@ -144,12 +150,13 @@ export const setTLSRecoveredAlertsContext = async ({ newStatus = previousStatus; } - alert.setContext({ + const context = { ...state, newStatus, previousStatus, summary: newSummary, [ALERT_DETAILS_URL]: alertUrl, - }); + }; + alertsClient.setAlertData({ id: recoveredAlertId, context }); } }; diff --git a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts index b251e950a5d4a..3aaafcaf17468 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts @@ -7,8 +7,12 @@ import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { ActionGroupIdsOf } from '@kbn/alerting-plugin/common'; -import { GetViewInAppRelativeUrlFnOpts } from '@kbn/alerting-plugin/server'; -import { createLifecycleRuleTypeFactory, IRuleDataClient } from '@kbn/rule-registry-plugin/server'; +import { + GetViewInAppRelativeUrlFnOpts, + AlertInstanceContext as AlertContext, + RuleExecutorOptions, + AlertsClientError, +} from '@kbn/alerting-plugin/server'; import { asyncForEach } from '@kbn/std'; import { ALERT_REASON, ALERT_UUID } from '@kbn/rule-data-utils'; import { @@ -19,6 +23,7 @@ import { } from '@kbn/observability-plugin/common'; import { LocatorPublic } from '@kbn/share-plugin/common'; import { schema } from '@kbn/config-schema'; +import { ObservabilityUptimeAlert } from '@kbn/alerts-as-data-utils'; import { syntheticsRuleFieldMap } from '../../../common/rules/synthetics_rule_field_map'; import { SyntheticsPluginsSetupDependencies, SyntheticsServerSetup } from '../../types'; import { TlsTranslations } from '../../../common/rules/synthetics/translations'; @@ -39,21 +44,27 @@ import { import { generateAlertMessage, SyntheticsRuleTypeAlertDefinition, updateState } from '../common'; import { ALERT_DETAILS_URL, getActionVariables } from '../action_variables'; import { SyntheticsMonitorClient } from '../../synthetics_service/synthetics_monitor/synthetics_monitor_client'; +import { TLSParams } from '../../../common/runtime_types/alerts/tls'; -export type ActionGroupIds = ActionGroupIdsOf; +type TLSRuleTypeParams = TLSParams; +type TLSActionGroups = ActionGroupIdsOf; +type TLSRuleTypeState = SyntheticsCommonState; +type TLSAlertState = ReturnType; +type TLSAlertContext = AlertContext; +type TLSAlert = ObservabilityUptimeAlert; export const registerSyntheticsTLSCheckRule = ( server: SyntheticsServerSetup, plugins: SyntheticsPluginsSetupDependencies, - syntheticsMonitorClient: SyntheticsMonitorClient, - ruleDataClient: IRuleDataClient + syntheticsMonitorClient: SyntheticsMonitorClient ) => { - const createLifecycleRuleType = createLifecycleRuleTypeFactory({ - ruleDataClient, - logger: server.logger, - }); + if (!plugins.alerting) { + throw new Error( + 'Cannot register the synthetics TLS check rule type. The alerting plugin needs to be enabled.' + ); + } - return createLifecycleRuleType({ + plugins.alerting.registerType({ id: SYNTHETICS_ALERT_RULE_TYPES.TLS, category: DEFAULT_APP_CATEGORIES.observability.id, producer: 'uptime', @@ -71,22 +82,25 @@ export const registerSyntheticsTLSCheckRule = ( isExportable: true, minimumLicenseRequired: 'basic', doesSetRecoveryContext: true, - async executor({ state, params, services, spaceId, previousStartedAt, startedAt }) { - const ruleState = state as SyntheticsCommonState; - + executor: async ( + options: RuleExecutorOptions< + TLSRuleTypeParams, + TLSRuleTypeState, + TLSAlertState, + TLSAlertContext, + TLSActionGroups, + TLSAlert + > + ) => { + const { state: ruleState, params, services, spaceId, previousStartedAt, startedAt } = options; + const { alertsClient, savedObjectsClient, scopedClusterClient } = services; + if (!alertsClient) { + throw new AlertsClientError(); + } const { basePath, share } = server; const alertsLocator: LocatorPublic | undefined = share.url.locators.get(alertsLocatorID); - const { - alertFactory, - getAlertUuid, - savedObjectsClient, - scopedClusterClient, - alertWithLifecycle, - getAlertStartedDate, - } = services; - const tlsRule = new TLSRuleExecutor( previousStartedAt, params, @@ -107,45 +121,45 @@ export const registerSyntheticsTLSCheckRule = ( } const alertId = cert.sha256; - const alertUuid = getAlertUuid(alertId); - const indexedStartedAt = getAlertStartedDate(alertId) ?? startedAt.toISOString(); - - const alertInstance = alertWithLifecycle({ + const { uuid, start } = alertsClient.report({ id: alertId, - fields: { - [CERT_COMMON_NAME]: cert.common_name, - [CERT_ISSUER_NAME]: cert.issuer, - [CERT_VALID_NOT_AFTER]: cert.not_after, - [CERT_VALID_NOT_BEFORE]: cert.not_before, - [CERT_HASH_SHA256]: cert.sha256, - [ALERT_UUID]: alertUuid, - [ALERT_REASON]: generateAlertMessage(TlsTranslations.defaultActionMessage, summary), - }, + actionGroup: TLS_CERTIFICATE.id, + state: { ...updateState(ruleState, foundCerts), ...summary }, }); - - alertInstance.replaceState({ - ...updateState(ruleState, foundCerts), - ...summary, - }); - - alertInstance.scheduleActions(TLS_CERTIFICATE.id, { + const indexedStartedAt = start ?? startedAt.toISOString(); + + const payload = { + [CERT_COMMON_NAME]: cert.common_name, + [CERT_ISSUER_NAME]: cert.issuer, + [CERT_VALID_NOT_AFTER]: cert.not_after, + [CERT_VALID_NOT_BEFORE]: cert.not_before, + [CERT_HASH_SHA256]: cert.sha256, + [ALERT_UUID]: uuid, + [ALERT_REASON]: generateAlertMessage(TlsTranslations.defaultActionMessage, summary), + }; + + const context = { [ALERT_DETAILS_URL]: await getAlertUrl( - alertUuid, + uuid, spaceId, indexedStartedAt, alertsLocator, basePath.publicBaseUrl ), ...summary, + }; + + alertsClient.setAlertData({ + id: alertId, + payload, + context, }); }); await setTLSRecoveredAlertsContext({ - alertFactory, + alertsClient, basePath, defaultStartedAt: startedAt.toISOString(), - getAlertStartedDate, - getAlertUuid, spaceId, alertsLocator, latestPings, diff --git a/x-pack/plugins/observability_solution/synthetics/server/server.ts b/x-pack/plugins/observability_solution/synthetics/server/server.ts index b394e4ffc6883..77937c57590e7 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/server.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/server.ts @@ -138,16 +138,6 @@ export const initSyntheticsServer = ( } }); - const { alerting } = plugins; - - registerSyntheticsStatusCheckRule(server, plugins, syntheticsMonitorClient, alerting); - - const tlsRule = registerSyntheticsTLSCheckRule( - server, - plugins, - syntheticsMonitorClient, - ruleDataClient - ); - - alerting.registerType(tlsRule); + registerSyntheticsStatusCheckRule(server, plugins, syntheticsMonitorClient); + registerSyntheticsTLSCheckRule(server, plugins, syntheticsMonitorClient); }; From 8e9b82718151c0ae4754d1e25727e8c698b35a13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C5=91=20=C3=81brah=C3=A1m?= Date: Tue, 27 Aug 2024 16:50:39 +0200 Subject: [PATCH 10/74] [Defend Workflows] Fix artifact entries list FTR (#189961) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary **tl;wr;** - instead of selecting from dropdown, values are entered for Event Filters - artifacts for update/delete test cases are created via API call instead of UI interaction > [!note] > FTRs needs to be re-enabled before merge, revert this e0858a516caa6fe6a41b4782c25deafe96c06ca6 - done ✅ --- This PR attempts to decrease flakiness in `artifact_entries_list` FTR. Looks like the reason for flakiness was the dropdown for the field to be filtered. After spending a bit of a time looking at the code, couldn't find any quick solution why it can be flaky, so instead just tried to improve the tests. For that, added a 'special' (aka hack) test case to just try to set event filter 100 times, and also a failing test case just to receive logs (77455d73e8743fd543e54271e56ab9b408d012ba) - that's why all flaky runners are red, you need to see the logs. It didn't work to add some waits to let React re-render and let the API call for suggestions be finished, didn't work to select from dropdown by text instead of test id, didn't work to add even more wait in between multiple user actions. See logs here and search for `results are in` inside the logs: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6744#019145e0-445d-4978-89c8-701908e14e3f image In the end, looks like the solution is simply `input` the values instead of selecting them from the dropdown. In the last hacky-flaky run, it passed all 100 times: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6756 image And a last flaky run without the hack, with the official flaky runner: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6772 100/100 ✅ Also, entries for the update/delete test cases are created via API call instead of UI interaction, so those cases overlap less with the create test case. --------- Co-authored-by: Elastic Machine --- .../integrations/artifact_entries_list.ts | 23 +++--- .../apps/integrations/mocks.ts | 76 +++++++++++++++++-- .../services/endpoint_artifacts.ts | 27 ++++++- 3 files changed, 106 insertions(+), 20 deletions(-) diff --git a/x-pack/test/security_solution_endpoint/apps/integrations/artifact_entries_list.ts b/x-pack/test/security_solution_endpoint/apps/integrations/artifact_entries_list.ts index 9cb093b6edae8..1f5d406617ae2 100644 --- a/x-pack/test/security_solution_endpoint/apps/integrations/artifact_entries_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/integrations/artifact_entries_list.ts @@ -35,7 +35,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const retry = getService('retry'); const esClient = getService('es'); const supertest = getService('supertest'); - const find = getService('find'); const toasts = getService('toasts'); const policyTestResources = getService('policyTestResources'); const unzipPromisify = promisify(unzip); @@ -52,12 +51,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { .set('kbn-xsrf', 'true'); }; - // Failing: See https://github.com/elastic/kibana/issues/187314 - // Failing: See https://github.com/elastic/kibana/issues/187383 - // Failing: See https://github.com/elastic/kibana/issues/188131 - // Failing: See https://github.com/elastic/kibana/issues/188125 - describe.skip('For each artifact list under management', function () { - targetTags(this, ['@ess', '@skipInServerless']); + describe('For each artifact list under management', function () { + targetTags(this, ['@ess', '@serverless']); this.timeout(60_000 * 5); let indexedData: IndexedHostsAndAlertsResponse; @@ -154,9 +149,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { suffix?: string ) => { for (const formAction of actions) { - if (formAction.type === 'customClick') { - await find.clickByCssSelector(formAction.selector, testSubjects.FIND_TIME); - } else if (formAction.type === 'click') { + if (formAction.type === 'click') { await testSubjects.click(formAction.selector); } else if (formAction.type === 'input') { const newValue = (formAction.value || '') + (suffix ? suffix : ''); @@ -265,7 +258,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); it(`should be able to update an existing ${testData.title} entry`, async () => { - await createArtifact(testData); + await endpointArtifactsTestResources.createArtifact(testData.listId, testData.createBody); + await browser.refresh(); + await updateArtifact(testData, { policyId: policyInfo.packagePolicy.id }); // Check edited artifact is in the list with new values (wait for list to be updated) @@ -299,7 +294,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); it(`should be able to delete the existing ${testData.title} entry`, async () => { - await createArtifact(testData); + await endpointArtifactsTestResources.createArtifact(testData.listId, testData.createBody); + await browser.refresh(); + await deleteArtifact(testData); // We only expect one artifact to have been visible await testSubjects.missingOrFail(testData.delete.card); @@ -336,7 +333,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); const testData = getCreateMultipleData(); - it(`should get correct atifact when multiple entries are created`, async () => { + it(`should get correct artifact when multiple entries are created`, async () => { // Create first trusted app await createArtifact(testData, { policyId: firstPolicy.packagePolicy.id, diff --git a/x-pack/test/security_solution_endpoint/apps/integrations/mocks.ts b/x-pack/test/security_solution_endpoint/apps/integrations/mocks.ts index 47523694b4349..de88f99048c6c 100644 --- a/x-pack/test/security_solution_endpoint/apps/integrations/mocks.ts +++ b/x-pack/test/security_solution_endpoint/apps/integrations/mocks.ts @@ -7,8 +7,11 @@ import { FullAgentPolicy } from '@kbn/fleet-plugin/common/types'; import { ArtifactElasticsearchProperties } from '@kbn/fleet-plugin/server/services/artifacts/types'; +import { GLOBAL_ARTIFACT_TAG } from '@kbn/security-solution-plugin/common/endpoint/service/artifacts'; import { InternalUnifiedManifestBaseSchema } from '@kbn/security-solution-plugin/server/endpoint/schemas/artifacts'; import { TranslatedExceptionListItem } from '@kbn/security-solution-plugin/server/endpoint/schemas/artifacts/lists'; +import { CreateExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; +import { ENDPOINT_ARTIFACT_LISTS } from '@kbn/securitysolution-list-constants'; export interface AgentPolicyResponseType { _index: string; @@ -119,6 +122,19 @@ export const getArtifactsListTestsData = () => [ confirmSelector: 'trustedAppsListPage-deleteModal-submitButton', card: 'trustedAppsListPage-card', }, + listId: ENDPOINT_ARTIFACT_LISTS.trustedApps.id, + createBody: { + entries: [ + { + type: 'match', + field: 'process.hash.sha256', + value: 'a4370c0cf81686c0b696fa6261c9d3e0d810ae704ab8301839dffd5d5112f476', + operator: 'included', + }, + ], + tags: [GLOBAL_ARTIFACT_TAG], + os_types: ['windows'], + } as Partial, urlPath: 'trusted_apps', pageObject: 'trustedApps', fleetArtifact: { @@ -206,8 +222,9 @@ export const getArtifactsListTestsData = () => [ selector: 'fieldAutocompleteComboBox', }, { - type: 'customClick', - selector: 'button[title="agent.ephemeral_id"]', + type: 'input', + selector: 'fieldAutocompleteComboBox', + value: 'agent.ephemeral_id', }, { type: 'click', @@ -247,10 +264,6 @@ export const getArtifactsListTestsData = () => [ selector: 'fieldAutocompleteComboBox', value: 'agent.id', }, - { - type: 'customClick', - selector: 'button[title="agent.id"]', - }, { type: 'input', selector: 'valuesAutocompleteMatch', @@ -281,6 +294,19 @@ export const getArtifactsListTestsData = () => [ confirmSelector: 'EventFiltersListPage-deleteModal-submitButton', card: 'EventFiltersListPage-card', }, + listId: ENDPOINT_ARTIFACT_LISTS.eventFilters.id, + createBody: { + entries: [ + { + field: 'agent.ephemeral_id', + value: 'endpoint', + type: 'match', + operator: 'included', + }, + ], + tags: [GLOBAL_ARTIFACT_TAG], + os_types: ['windows'], + } as Partial, urlPath: 'event_filters', pageObject: 'eventFilters', fleetArtifact: { @@ -456,6 +482,31 @@ export const getArtifactsListTestsData = () => [ card: 'blocklistCard', }, pageObject: 'blocklist', + listId: ENDPOINT_ARTIFACT_LISTS.blocklists.id, + createBody: { + entries: [ + { + type: 'match_any', + field: 'file.hash.md5', + value: ['741462ab431a22233c787baab9b653c7'], + operator: 'included', + }, + { + type: 'match_any', + field: 'file.hash.sha1', + value: ['aedb279e378bed6c2db3c9dc9e12ba635e0b391c'], + operator: 'included', + }, + { + type: 'match_any', + field: 'file.hash.sha256', + value: ['a4370c0cf81686c0b696fa6261c9d3e0d810ae704ab8301839dffd5d5112f476'], + operator: 'included', + }, + ], + tags: [GLOBAL_ARTIFACT_TAG], + os_types: ['windows'], + } as Partial, urlPath: 'blocklist', fleetArtifact: { identifier: 'endpoint-blocklist-windows-v1', @@ -610,6 +661,19 @@ export const getArtifactsListTestsData = () => [ confirmSelector: 'hostIsolationExceptionsDeletionConfirm', card: 'hostIsolationExceptionsCard', }, + listId: ENDPOINT_ARTIFACT_LISTS.hostIsolationExceptions.id, + createBody: { + entries: [ + { + type: 'match', + field: 'destination.ip', + value: '1.1.1.1', + operator: 'included', + }, + ], + tags: [GLOBAL_ARTIFACT_TAG], + os_types: ['windows', 'linux', 'macos'], + } as Partial, pageObject: 'hostIsolationExceptions', urlPath: 'host_isolation_exceptions', fleetArtifact: { diff --git a/x-pack/test/security_solution_endpoint/services/endpoint_artifacts.ts b/x-pack/test/security_solution_endpoint/services/endpoint_artifacts.ts index 6f24f543c89ef..ce0d5ce6cda41 100644 --- a/x-pack/test/security_solution_endpoint/services/endpoint_artifacts.ts +++ b/x-pack/test/security_solution_endpoint/services/endpoint_artifacts.ts @@ -10,7 +10,12 @@ import type { CreateExceptionListSchema, ExceptionListItemSchema, } from '@kbn/securitysolution-io-ts-list-types'; -import { EXCEPTION_LIST_ITEM_URL, EXCEPTION_LIST_URL } from '@kbn/securitysolution-list-constants'; +import { + ENDPOINT_ARTIFACT_LISTS, + ENDPOINT_ARTIFACT_LIST_IDS, + EXCEPTION_LIST_ITEM_URL, + EXCEPTION_LIST_URL, +} from '@kbn/securitysolution-list-constants'; import { Response } from 'superagent'; import { ExceptionsListItemGenerator } from '@kbn/security-solution-plugin/common/endpoint/data_generators/exceptions_list_item_generator'; import { TRUSTED_APPS_EXCEPTION_LIST_DEFINITION } from '@kbn/security-solution-plugin/public/management/pages/trusted_apps/constants'; @@ -122,6 +127,26 @@ export class EndpointArtifactsTestResources extends FtrService { return this.createExceptionItem(blocklist); } + async createArtifact( + listId: (typeof ENDPOINT_ARTIFACT_LIST_IDS)[number], + overrides: Partial = {} + ): Promise { + switch (listId) { + case ENDPOINT_ARTIFACT_LISTS.trustedApps.id: { + return this.createTrustedApp(overrides); + } + case ENDPOINT_ARTIFACT_LISTS.eventFilters.id: { + return this.createEventFilter(overrides); + } + case ENDPOINT_ARTIFACT_LISTS.blocklists.id: { + return this.createBlocklist(overrides); + } + case ENDPOINT_ARTIFACT_LISTS.hostIsolationExceptions.id: { + return this.createHostIsolationException(overrides); + } + } + } + async getArtifactsFromUnifiedManifestSO(): Promise< Array< InternalUnifiedManifestSchemaResponseType['_source']['endpoint:unified-user-artifact-manifest'] From 2441e9ac8f38a561c5572a08162d0822f24074d8 Mon Sep 17 00:00:00 2001 From: Yngrid Coello Date: Tue, 27 Aug 2024 17:28:53 +0200 Subject: [PATCH 11/74] [Dataset quality] Enable page for metrics and traces (#190043) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes https://github.com/elastic/observability-dev/issues/3454. This PR enables Dataset quality for being used for `traces` and `metrics`. ### Changes - Added `KNOWN_TYPES` array containing the types that we allow in dataset quality page. - `datasets`, `degradedDocs` and `nonAggregatableDatasets` are now wrapped in an state. This allow us to retrigger the calls whenever we need to do it (e.g. when changing timeframe), more importantly now whenever we select a new type of dataset. - The `invoke` `degradedDocs` is created dynamically depending on the types present in `KNOWN_TYPES`. - `GET /internal/dataset_quality/data_streams/stats` and `GET /internal/dataset_quality/data_streams/non_aggregatable` now accept an array of `DataStreamType`. This allow us to query the information for multiple types of dataStreams at the same time. - degradedDocs are stored now locally as a nested structure. This nested structure allow us to update just the needed portion instead of updating all datasets whenever a change occurs (e.g. a type is deselected). - redirectLink now takes into account the datastream type, it only redirects to logs explorer if it's enabled and the type of the datastream is logs. ### 🎥 Demo https://github.com/user-attachments/assets/082bd4e9-a8f8-4af9-a425-267adc3b30df --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../dataset_quality_url_schema_v1.ts | 1 + x-pack/plugins/data_quality/server/plugin.ts | 14 + .../dataset_quality/common/constants.ts | 6 +- .../common/data_stream_details/types.ts | 3 - .../common/data_streams_stats/types.ts | 3 - .../dataset_quality/filters/filters.tsx | 31 ++ .../dataset_quality/filters/selector.tsx | 102 ++++++ .../components/dataset_quality/header.tsx | 13 +- .../dataset_quality/table/columns.tsx | 13 + .../document_trends/degraded_docs/index.tsx | 6 +- .../hooks/use_dataset_quality_filters.ts | 28 +- .../hooks/use_dataset_quality_table.tsx | 11 +- .../hooks/use_dataset_quality_warnings.ts | 7 +- .../public/hooks/use_empty_state.ts | 4 +- .../public/hooks/use_redirect_link.ts | 7 +- .../public/hooks/use_summary_panel.ts | 13 +- .../data_stream_details_client.ts | 6 +- .../data_streams_stats_client.ts | 23 +- .../services/data_streams_stats/types.ts | 3 +- .../src/defaults.ts | 11 +- .../src/state_machine.ts | 305 ++++++++++-------- .../dataset_quality_controller/src/types.ts | 36 ++- .../state_machine.ts | 4 +- .../public/utils/flatten_stats.ts | 16 + .../public/utils/generate_datasets.test.ts | 108 ++++--- .../public/utils/generate_datasets.ts | 12 +- .../get_data_streams/get_data_streams.test.ts | 14 +- .../data_streams/get_data_streams/index.ts | 22 +- .../get_non_aggregatable_data_streams.ts | 9 +- .../server/routes/data_streams/routes.ts | 33 +- .../routes/integrations/get_integrations.ts | 18 +- .../server/routes/integrations/routes.ts | 8 +- .../server/types/default_api_types.ts | 16 +- .../dataset_quality/tsconfig.json | 3 +- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - .../tests/data_streams/stats.spec.ts | 3 +- .../tests/integrations/integrations.spec.ts | 8 +- 39 files changed, 610 insertions(+), 313 deletions(-) create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/selector.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/utils/flatten_stats.ts diff --git a/x-pack/plugins/data_quality/common/url_schema/dataset_quality_url_schema_v1.ts b/x-pack/plugins/data_quality/common/url_schema/dataset_quality_url_schema_v1.ts index 08313ddc4860b..5121f1b7f64d7 100644 --- a/x-pack/plugins/data_quality/common/url_schema/dataset_quality_url_schema_v1.ts +++ b/x-pack/plugins/data_quality/common/url_schema/dataset_quality_url_schema_v1.ts @@ -13,6 +13,7 @@ export const filtersRT = rt.exact( inactive: rt.boolean, fullNames: rt.boolean, timeRange: timeRangeRT, + types: rt.array(rt.string), integrations: rt.array(rt.string), namespaces: rt.array(rt.string), qualities: rt.array(rt.union([rt.literal('poor'), rt.literal('degraded'), rt.literal('good')])), diff --git a/x-pack/plugins/data_quality/server/plugin.ts b/x-pack/plugins/data_quality/server/plugin.ts index 4977e6f09a5c1..088905b8975d4 100644 --- a/x-pack/plugins/data_quality/server/plugin.ts +++ b/x-pack/plugins/data_quality/server/plugin.ts @@ -25,6 +25,20 @@ export class DataQualityPlugin implements Plugin { ['logs-*-*']: ['read'], }, }, + { + ui: [], + requiredClusterPrivileges: [], + requiredIndexPrivileges: { + ['traces-*-*']: ['read'], + }, + }, + { + ui: [], + requiredClusterPrivileges: [], + requiredIndexPrivileges: { + ['metrics-*-*']: ['read'], + }, + }, ], }); } diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/constants.ts b/x-pack/plugins/observability_solution/dataset_quality/common/constants.ts index a6c6754befb8e..895381703742e 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/constants.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/constants.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { QualityIndicators } from './types'; +import { DataStreamType, QualityIndicators } from './types'; export const DATASET_QUALITY_APP_ID = 'dataset_quality'; -export const DEFAULT_DATASET_TYPE = 'logs'; +export const DEFAULT_DATASET_TYPE: DataStreamType = 'logs'; export const DEFAULT_LOGS_DATA_VIEW = 'logs-*-*'; export const POOR_QUALITY_MINIMUM_PERCENTAGE = 3; @@ -41,3 +41,5 @@ export const MAX_DEGRADED_FIELDS = 1000; export const MASKED_FIELD_PLACEHOLDER = ''; export const UNKOWN_FIELD_PLACEHOLDER = ''; + +export const KNOWN_TYPES: DataStreamType[] = ['logs', 'metrics', 'traces']; diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/types.ts b/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/types.ts index 74f0653396447..82d6d2651be56 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/types.ts @@ -5,9 +5,6 @@ * 2.0. */ -import { DataStreamType } from '../types'; - export interface GetDataStreamIntegrationParams { - type: DataStreamType; integrationName: string; } diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/types.ts b/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/types.ts index 1963c73d263e7..79fdbfbd7dd96 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/types.ts @@ -15,9 +15,6 @@ export type GetDataStreamsStatsResponse = export type DataStreamStatType = GetDataStreamsStatsResponse['dataStreamsStats'][0]; export type DataStreamStatServiceResponse = GetDataStreamsStatsResponse; -export type GetIntegrationsParams = - APIClientRequestParamsOf<`GET /internal/dataset_quality/integrations`>['params']; - export type GetDataStreamsDegradedDocsStatsParams = APIClientRequestParamsOf<`GET /internal/dataset_quality/data_streams/degraded_docs`>['params']; export type GetDataStreamsDegradedDocsStatsQuery = GetDataStreamsDegradedDocsStatsParams['query']; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/filters.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/filters.tsx index 8c247104415cd..4c63b8480d3b7 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/filters.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/filters.tsx @@ -10,12 +10,33 @@ import { EuiSuperDatePicker } from '@elastic/eui'; import { UI_SETTINGS } from '@kbn/data-service'; import { TimePickerQuickRange } from '@kbn/observability-shared-plugin/public/hooks/use_quick_time_ranges'; import React, { useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; import { useDatasetQualityFilters } from '../../../hooks/use_dataset_quality_filters'; import { useKibanaContextForPlugin } from '../../../utils/use_kibana'; import { FilterBar } from './filter_bar'; import { IntegrationsSelector } from './integrations_selector'; import { NamespacesSelector } from './namespaces_selector'; import { QualitiesSelector } from './qualities_selector'; +import { Selector } from './selector'; + +const typesLabel = i18n.translate('xpack.datasetQuality.types.label', { + defaultMessage: 'Types', +}); + +const typesSearchPlaceholder = i18n.translate( + 'xpack.datasetQuality.selector.types.search.placeholder', + { + defaultMessage: 'Filter types', + } +); + +const typesNoneMatching = i18n.translate('xpack.datasetQuality.selector.types.noneMatching', { + defaultMessage: 'No types found', +}); + +const typesNoneAvailable = i18n.translate('xpack.datasetQuality.selector.types.noneAvailable', { + defaultMessage: 'No types available', +}); // Allow for lazy loading // eslint-disable-next-line import/no-default-export @@ -29,9 +50,11 @@ export default function Filters() { integrations, namespaces, qualities, + types, onIntegrationsChange, onNamespacesChange, onQualitiesChange, + onTypesChange, selectedQuery, onQueryChange, } = useDatasetQualityFilters(); @@ -65,6 +88,14 @@ export default function Filters() { integrations={integrations} onIntegrationsChange={onIntegrationsChange} /> + void; +} + +export interface Item { + label: string; + checked?: EuiSelectableOptionCheckedType; +} + +export function Selector({ + isLoading, + options, + loadingMessage, + label, + searchPlaceholder, + noneAvailableMessage, + noneMatchingMessage, + onOptionsChange, +}: SelectorProps) { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + + const onButtonClick = () => { + setIsPopoverOpen(!isPopoverOpen); + }; + + const closePopover = () => { + setIsPopoverOpen(false); + }; + + const renderOption = (option: Item) => {option.label}; + + const button = ( + item.checked === 'on')} + numActiveFilters={options.filter((item) => item.checked === 'on').length} + > + {label} + + ); + + return ( + + renderOption(option)} + > + {(list, search) => ( +
+ {search} + {list} +
+ )} +
+
+ ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/header.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/header.tsx index 4ec200b1b98c8..66e2cba5ed870 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/header.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/header.tsx @@ -10,7 +10,7 @@ import { EuiBetaBadge, EuiLink, EuiPageHeader, EuiCode } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { DEFAULT_LOGS_DATA_VIEW } from '../../../common/constants'; +import { KNOWN_TYPES } from '../../../common/constants'; import { datasetQualityAppTitle } from '../../../common/translations'; // Allow for lazy loading @@ -33,9 +33,16 @@ export default function Header() { description={ {DEFAULT_LOGS_DATA_VIEW}, + types: KNOWN_TYPES.map((type, index) => { + return ( + <> + {index > 0 && ', '} + {type} + + ); + }), dsNamingSchemeLink: ( ( + {dataStreamStat.type} + ), + width: '160px', + }, ...(isSizeStatsAvailable && canUserMonitorDataset && canUserMonitorAnyDataStream ? [ { diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx index 7c3aea15a6cf1..a0875f1367705 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx @@ -6,6 +6,7 @@ */ import React, { useCallback, useEffect, useState } from 'react'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiAccordion, @@ -133,7 +134,10 @@ export default function DegradedDocs({ lastReloadTime }: { lastReloadTime: numbe { const { service } = useDatasetQualityContext(); @@ -22,13 +24,14 @@ export const useDatasetQualityFilters = () => { service, (state) => state.matches('integrations.fetching') && - (state.matches('datasets.fetching') || state.matches('degradedDocs.fetching')) + (state.matches('stats.datasets.fetching') || state.matches('stats.degradedDocs.fetching')) ); const { timeRange, integrations: selectedIntegrations, namespaces: selectedNamespaces, + types: selectedTypes, qualities: selectedQualities, query: selectedQuery, } = useSelector(service, (state) => state.context.filters); @@ -169,6 +172,25 @@ export const useDatasetQualityFilters = () => { [service] ); + const typeItems: Item[] = useMemo(() => { + return KNOWN_TYPES.map((type) => ({ + label: type, + checked: selectedTypes.includes(type) ? 'on' : undefined, + })); + }, [selectedTypes]); + + const onTypesChange = useCallback( + (newTypeItems: Item[]) => { + service.send({ + type: 'UPDATE_TYPES', + types: newTypeItems + .filter((quality) => quality.checked === 'on') + .map((type) => type.label as DataStreamType), + }); + }, + [service] + ); + const onQueryChange = useCallback( (query: string) => { service.send({ @@ -187,9 +209,11 @@ export const useDatasetQualityFilters = () => { integrations: integrationItems, namespaces: namespaceItems, qualities: qualityItems, + types: typeItems, onIntegrationsChange, onNamespacesChange, onQualitiesChange, + onTypesChange, isLoading, selectedQuery, onQueryChange, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_table.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_table.tsx index 3a3475eabeeda..77764acae1e1b 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_table.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_table.tsx @@ -48,8 +48,7 @@ export const useDatasetQualityTable = () => { service, (state) => !state.context.dataStreamStats || - !state.context.dataStreamStats.length || - state.context.dataStreamStats.some((s) => s.userPrivileges.canMonitor) + state.context.datasets.some((s) => s.userPrivileges?.canMonitor) ); const { @@ -66,15 +65,15 @@ export const useDatasetQualityTable = () => { const loading = useSelector( service, (state) => - state.matches('datasets.fetching') || + state.matches('stats.datasets.fetching') || state.matches('integrations.fetching') || - state.matches('degradedDocs.fetching') + state.matches('stats.degradedDocs.fetching') ); const loadingDataStreamStats = useSelector(service, (state) => - state.matches('datasets.fetching') + state.matches('stats.datasets.fetching') ); const loadingDegradedStats = useSelector(service, (state) => - state.matches('degradedDocs.fetching') + state.matches('stats.degradedDocs.fetching') ); const datasets = useSelector(service, (state) => state.context.datasets); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_warnings.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_warnings.ts index ddb116dc48306..f5ba4d01f8983 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_warnings.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_warnings.ts @@ -16,8 +16,11 @@ export function useDatasetQualityWarnings() { ); const isNonAggregatableDatasetsLoading = useSelector(service, (state) => - state.matches('nonAggregatableDatasets.fetching') + state.matches('stats.nonAggregatableDatasets.fetching') ); - return { loading: isNonAggregatableDatasetsLoading, nonAggregatableDatasets }; + return { + loading: isNonAggregatableDatasetsLoading, + nonAggregatableDatasets, + }; } diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_empty_state.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_empty_state.ts index a7de315a35895..f60a7914275be 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_empty_state.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_empty_state.ts @@ -18,9 +18,9 @@ export function useEmptyState() { const isDatasetEmpty = useSelector( service, (state) => - !state.matches('datasets.fetching') && + !state.matches('stats.datasets.fetching') && !state.matches('integrations.fetching') && - !state.matches('degradedDocs.fetching') && + !state.matches('stats.degradedDocs.fetching') && (state.context.datasets?.length ?? 0) === 0 ); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_redirect_link.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_redirect_link.ts index d83ad8299e263..b015d2335d625 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_redirect_link.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_redirect_link.ts @@ -47,7 +47,8 @@ export const useRedirectLink = ({ navigate: () => void; isLogsExplorerAvailable: boolean; }>(() => { - const config = logsExplorerLocator + const isLogsExplorerAvailable = !!logsExplorerLocator && dataStreamStat.type === 'logs'; + const config = isLogsExplorerAvailable ? buildLogsExplorerConfig({ locator: logsExplorerLocator, dataStreamStat, @@ -83,7 +84,7 @@ export const useRedirectLink = ({ onClick: onClickWithTelemetry, }, navigate: navigateWithTelemetry, - isLogsExplorerAvailable: !!logsExplorerLocator, + isLogsExplorerAvailable, }; }, [ breakdownField, @@ -181,7 +182,7 @@ const buildDiscoverConfig = ({ dataViewId, dataViewSpec: { id: dataViewId, - title: dataViewTitle, + title: dataViewId, }, query, breakdownField, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_summary_panel.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_summary_panel.ts index 622f495fc4774..ce8acd58b7507 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_summary_panel.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_summary_panel.ts @@ -19,6 +19,7 @@ const useSummaryPanel = () => { isSizeStatsAvailable, canUserMonitorDataset, canUserMonitorAnyDataStream, + loading, } = useDatasetQualityTable(); const { timeRange } = useSelector(service, (state) => state.context.filters); @@ -32,7 +33,7 @@ const useSummaryPanel = () => { }; const isDatasetsQualityLoading = useSelector(service, (state) => - state.matches('degradedDocs.fetching') + state.matches('stats.degradedDocs.fetching') ); /* @@ -42,8 +43,9 @@ const useSummaryPanel = () => { (item) => item.userPrivileges?.canMonitor ?? true ); - const isUserAuthorizedForDataset = - canUserMonitorDataset && canUserMonitorAnyDataStream && canUserMonitorAllFilteredDataStreams; + const isUserAuthorizedForDataset = !loading + ? canUserMonitorDataset && canUserMonitorAnyDataStream && canUserMonitorAllFilteredDataStreams + : true; /* Datasets Activity @@ -57,7 +59,7 @@ const useSummaryPanel = () => { }; const isDatasetsActivityLoading = useSelector(service, (state) => - state.matches('datasets.fetching') + state.matches('stats.datasets.fetching') ); /* @@ -70,7 +72,8 @@ const useSummaryPanel = () => { const isEstimatedDataLoading = useSelector( service, - (state) => state.matches('datasets.fetching') || state.matches('degradedDocs.fetching') + (state) => + state.matches('stats.datasets.fetching') || state.matches('stats.degradedDocs.fetching') ); return { diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts index 55d21286d7f60..5f944bd3fcde7 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts @@ -123,11 +123,9 @@ export class DataStreamDetailsClient implements IDataStreamDetailsClient { public async getDataStreamIntegration( params: GetDataStreamIntegrationParams ): Promise { - const { type, integrationName } = params; + const { integrationName } = params; const response = await this.http - .get('/internal/dataset_quality/integrations', { - query: { type }, - }) + .get('/internal/dataset_quality/integrations') .catch((error) => { throw new DatasetQualityError(`Failed to fetch integrations: ${error}`, error); }); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts index 35cd67a1724f9..1e75088853d33 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts @@ -7,6 +7,8 @@ import { HttpStart } from '@kbn/core/public'; import { decodeOrThrow } from '@kbn/io-ts-utils'; +import rison from '@kbn/rison'; +import { KNOWN_TYPES } from '../../../common/constants'; import { getDataStreamsDegradedDocsStatsResponseRt, getDataStreamsStatsResponseRt, @@ -15,14 +17,12 @@ import { IntegrationResponse, NonAggregatableDatasets, } from '../../../common/api_types'; -import { DEFAULT_DATASET_TYPE } from '../../../common/constants'; import { DataStreamStatServiceResponse, GetDataStreamsDegradedDocsStatsQuery, GetDataStreamsDegradedDocsStatsResponse, GetDataStreamsStatsQuery, GetDataStreamsStatsResponse, - GetIntegrationsParams, GetNonAggregatableDataStreamsParams, } from '../../../common/data_streams_stats'; import { Integration } from '../../../common/data_streams_stats/integration'; @@ -33,11 +33,15 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { constructor(private readonly http: HttpStart) {} public async getDataStreamsStats( - params: GetDataStreamsStatsQuery = { type: DEFAULT_DATASET_TYPE } + params: GetDataStreamsStatsQuery ): Promise { + const types = params.types.length === 0 ? KNOWN_TYPES : params.types; const response = await this.http .get('/internal/dataset_quality/data_streams/stats', { - query: params, + query: { + ...params, + types: rison.encodeArray(types), + }, }) .catch((error) => { throw new DatasetQualityError(`Failed to fetch data streams stats: ${error}`, error); @@ -59,7 +63,6 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { { query: { ...params, - type: DEFAULT_DATASET_TYPE, }, } ) @@ -86,7 +89,7 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { .get('/internal/dataset_quality/data_streams/non_aggregatable', { query: { ...params, - type: DEFAULT_DATASET_TYPE, + types: rison.encodeArray(params.types), }, }) .catch((error) => { @@ -102,13 +105,9 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { return nonAggregatableDatasets; } - public async getIntegrations( - params: GetIntegrationsParams['query'] = { type: DEFAULT_DATASET_TYPE } - ): Promise { + public async getIntegrations(): Promise { const response = await this.http - .get('/internal/dataset_quality/integrations', { - query: params, - }) + .get('/internal/dataset_quality/integrations') .catch((error) => { throw new DatasetQualityError(`Failed to fetch integrations: ${error}`, error); }); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/types.ts b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/types.ts index 785cdb4a88ccc..ae1c72c23df0e 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/types.ts @@ -11,7 +11,6 @@ import { DataStreamStatServiceResponse, GetDataStreamsDegradedDocsStatsQuery, GetDataStreamsStatsQuery, - GetIntegrationsParams, GetNonAggregatableDataStreamsParams, } from '../../../common/data_streams_stats'; import { Integration } from '../../../common/data_streams_stats/integration'; @@ -32,7 +31,7 @@ export interface IDataStreamsStatsClient { getDataStreamsDegradedStats( params?: GetDataStreamsDegradedDocsStatsQuery ): Promise; - getIntegrations(params: GetIntegrationsParams['query']): Promise; + getIntegrations(): Promise; getNonAggregatableDatasets( params: GetNonAggregatableDataStreamsParams ): Promise; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/defaults.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/defaults.ts index 87a6a398df8f0..d0b2b9978080a 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/defaults.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/defaults.ts @@ -14,8 +14,15 @@ import { DefaultDatasetQualityControllerState } from './types'; const ONE_MINUTE_IN_MS = 60000; +export const DEFAULT_DICTIONARY_TYPE = { + logs: [], + metrics: [], + traces: [], + synthetics: [], + profiling: [], +}; + export const DEFAULT_CONTEXT: DefaultDatasetQualityControllerState = { - type: DEFAULT_DATASET_TYPE, table: { page: 0, rowsPerPage: 10, @@ -30,6 +37,7 @@ export const DEFAULT_CONTEXT: DefaultDatasetQualityControllerState = { canViewIntegrations: true, }, dataStreamStats: [], + degradedDocStats: DEFAULT_DICTIONARY_TYPE, filters: { inactive: true, fullNames: false, @@ -44,6 +52,7 @@ export const DEFAULT_CONTEXT: DefaultDatasetQualityControllerState = { integrations: [], namespaces: [], qualities: [], + types: [DEFAULT_DATASET_TYPE], }, datasets: [], isSizeStatsAvailable: true, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts index 7ce3c5b5d8f60..127e56a755c86 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts @@ -9,34 +9,43 @@ import { IToasts } from '@kbn/core/public'; import { getDateISORange } from '@kbn/timerange'; import { assign, createMachine, DoneInvokeEvent, InterpreterFrom } from 'xstate'; import { DataStreamStat, NonAggregatableDatasets } from '../../../../common/api_types'; -import { Integration } from '../../../../common/data_streams_stats/integration'; +import { KNOWN_TYPES } from '../../../../common/constants'; import { - GetDataStreamsStatsQuery, - GetIntegrationsParams, - GetNonAggregatableDataStreamsParams, + DataStreamDegradedDocsStatServiceResponse, DataStreamStatServiceResponse, } from '../../../../common/data_streams_stats'; -import { DegradedDocsStat } from '../../../../common/data_streams_stats/malformed_docs_stat'; +import { Integration } from '../../../../common/data_streams_stats/integration'; +import { DataStreamType } from '../../../../common/types'; import { IDataStreamsStatsClient } from '../../../services/data_streams_stats'; import { generateDatasets } from '../../../utils'; +import { fetchNonAggregatableDatasetsFailedNotifier } from '../../common/notifications'; import { DEFAULT_CONTEXT } from './defaults'; import { fetchDatasetStatsFailedNotifier, fetchDegradedStatsFailedNotifier, fetchIntegrationsFailedNotifier, } from './notifications'; -import { fetchNonAggregatableDatasetsFailedNotifier } from '../../common/notifications'; import { DatasetQualityControllerContext, DatasetQualityControllerEvent, DatasetQualityControllerTypeState, - DefaultDatasetQualityControllerState, } from './types'; +const generateInvokePerType = ({ src }: { src: string }) => ({ + invoke: KNOWN_TYPES.map((type) => ({ + id: `${type}`, + src, + data: { type }, + })), +}); + +const isTypeSelected = (type: DataStreamType, context: DatasetQualityControllerContext) => + context.filters.types.length === 0 || context.filters.types.includes(type); + export const createPureDatasetQualityControllerStateMachine = ( initialContext: DatasetQualityControllerContext ) => - /** @xstate-layout N4IgpgJg5mDOIC5QBECGAXVszoIoFdUAbAS3QE8BhAewDt0AnaoosBgOggyx1gGIAqgAVkAQQAqAUQD64gJIBZGQCVRAOQDikgNoAGALqJQAB2qwyJOkZAAPRAFZ77AEwAWAGwAOXfc+f39u7uAIwBADQg5IieAMwAnOwA7PbOujHucTHpzs72AL55EWiY2HiEpBQ09EwsbJzcpfzKkgBizQDKABLSYuKieoZIIKbm6Ja01nYIzu4xLv4ZMcGJwZ7OiXERUQieronsurtxibquufYrMQVFDTgExGRUdIzMrBxcJbzsAGY4AMYACxItCgfAgdDA7GBADdqABrSHFHhlB6VZ41N71T7oWA-f5AkEIGHUP4YcYDAbWEYWKxDKbpJwxNJZHIxHK6DKJLaIYI+fauTzBeyuOLOOKuGKxK6FEBI0r3CpPaqvOofZG437oQHA0FsJgcYxEDDfagMAC27Dld3KjyqL1q71uOLxWoJUCJtFhpLGdApBipZhpEzpiD2nhccVWx2CwVch1W9m5Owy7HciT89klIr2rnyMqtKMVdoxqrAUAYqAgkGQJP4wl6MnkSmkqk0On9Q2pPuDoCm3nc7F26aynLOIqTsQSyVS6Uy2Tc11lToVtvRKveZYrVYgNb+TVaHW6vX6HZMge7kx5umWB3WYaynkSMWFE-czlTrj2s2C6yf9mCi4FiuaLKg6nCbpW1a1i62ogmCEJQp68KIsuNogfamJVuWkE7tBmqwe6xLeuSBiUp257jJeCAxiE7AeOmJzPokzF7EmvIXHRgrCqK4qSlkgGoaiSoYaW2HbruGr4jqfB6qa7CGsapoWkBaHCSWG5iVBe4wW6HpemSvqkaewwUbSvY8ss+zXnEsShB49iRlykSIHEhzzMxKQ-s4ni+HmNzYsBanroh6AQd2dYiBIjaKCo6haGRZ6jJRIYIMKqarMsbIhB5QqJs5CCfq4g4xs+nkhDEEruAJAWqcWwXAqF2HhXwzRtJIXQ9BIJ6DIlQZUTkRWZisiQij5qzuBySbOEK7AXCNwTHLxqQpNVyKBXVYENWF4wRQ20hyGoUgaKo8gAPJqO0CUmUlZm2A4HGxJ+Sz+CsDl5dsoRON4mRxvYPgcuKq3yrVa6bfQ210LtUXSGoohKO0QiiJQ7VXV2yXmalngJEyMTDXEKQCksU1pi4cZY2moRzq4QPWkJG2YltTU7YIkVSNIuACJIygAJqo6ZPZ3dRqxFRkszJFluPLGxGzsDZv7pCscbrH5S41XToMM+DTOQzp0ngrQkLEgilqCUWGt1IzFbhbrhJEQZtB+j1119Slua6IOzE+VmPhvm4Sa44yey6AxyzTb4NOFquoGa41Vs7TbuoMPq8lGugJrmibatm9HFta3HOv4bpdvdo7AY3QL9K8rNcTuAK3ixgKyRJoE7t7AHkZxKKDlVfmptRyJHCW-buJENQOEs3tfQAEIADIyJQyhyFIi-dWXLsY2m4a8Y+-7LJvSYTYNWQ1xkFyPjMEfrebg958P7Cj+P4inRoGhz-tsOUPIABqMjHu0kjiEusZNGt0+wzHYBlUUWNj4XFcEmCU+w2Q-lnP4T8mRL4gxzjfWOd8H7bj4E-F+b8WgCBnjPTqfR-7iBhnDFGwD+ZUUFPsea14BS6EyFGf26ROKhw5FjDwAoVYqXVlgn4RByDUHwOgPg-856fxhpIAA6hQ0QVC+blyoimdhvgTiZmcFkBBbEKpFSfN5ZIwQ2S42pr3LO-d1JiIkVIvglAZ6nX-tIFoM9uanQEOIdR69Bb-icJ+RwARYysifEY0IsssZ+A2KcCqmYMEiIHg4yR6BEIWAeAALz1ghWAmBQqZzWpg1J3xxHpMyWMHJOp-EXhSryGacZEj6O8p3XGxw2L4zmMkGywpprDXWMk7OZSKlSKqSQGpIIsSoHaIwMAqAzTIBwKgEgRBJKujyQbRCsJjbCJGfY8pjiMnAiyaQXJ0y1RzIYAspZKy1kbIInpEk9tS7kQ0a7fRqYVhYwWv+XMViuluHYLjYx6xBTsk8MMuxwUjmVNOdU85OoZnXNucszADyE4ySTnJBSaclLFOBikw5YyTm0DOSQC5UAUXzMWei1Z6yE7POIoZfQdT0aCzOMEJI2jryxiCaKJyH10xTl4r4fwPhhSJGhehElxyJlTOpUPbsaBYAAgAEZjwYBAR5bp4LbKNihWxsrYWkoVUi6Zyrxiqo1VqnVTLi4kTZfQj5GM0EuCWN5NY1k1h+3yjkRwEDQ4BAmiOR8MqgpgTheMhFkyLVKtviqrAtrUDat1dJWSBpU7p2Un3E1UazWxsVSFCGtAbWatTfawuOpmWvKMk7EBFdQwig9T+PwqQFq+rgf60I74rEXF0OsTIpwI30zqNGjJeDIDONce4zx3jfHstAYgEaCQT6jWWjmZwbE9hODFKHY4iwghQpsSU4lpr5VTogBPaGB12hyA0J0QBsgYotjiu2BtDCGmdoOEybR4TDjMTYrA1MQRUjBxrrkLwo7r5pPGX8Ue2Br2nSEJINQHivE+L8S6gJUxwUQIqsxNMMxEi13SDumuBx-D40fKcE4J6ZS0GoFWeAQx9kwodGvepGMAC0rhuWSlWCRyUA1djvUQDxre00cwZE-LoYO-gYOiLVI0LjHKpj7DcF4HwfgQ0hHCPlacIKFhiiyJKR81j-JnoOcFFTXxq0gjU8uoW4Z5O7DSIKSUswBRJnFAOLIvhPwzElhkJTqS7POivU5ptqVwFCksSJiU-Hgi+Z8rNGYf0mR-XWOkML9isJbi0qx3q3HBbJHDEOKUo43CbEMykYzYG5zmZGnl2zEFxJ4Sko595uHoiRlmvxxwrkuInBS-lY4744n+FCN4Ea6ZWtgQKzhCS98x7bmi1RCxaW1h6Nco4CqaQ2LXjmMRxw15DhsmFAtmOpbivO1K1MAcIQmFZUskE8TCB0x0QlJkMUPgDFLGu7nHB1sHNQA2w08USRYi128Bmc+7gppQ8Ysgi434fJCLzZGm72taAjzW5ACHG8zgQN8KESUwdgtCocDkA4AQRTsLo14OIQOOATqJ2Vun9FZwnDTHNtiOQEhvk-N4JkHheTOFZ3BslFKqUc6mIGjk3POQcg8mxEITgOQVUFIzrMlnVbWY45iCd5rKXIqubSu5GL1ny6vHMJYsxIyEfxtNRH+VliDrol63TrkYz4ylybot8aaU3LpfcxlYPbfUX-CC8nTu9gu9CGxXYRVTiOVmFxbykvT1EpswW+VQezeXO4KisP1vcT6zAFH0+ECctCkjOcIIyeHLfN5LsGM00KrZ6s7no347C3ksRUXhNIPrXJorWmqPvI5hK7TDz1XTd-XB01+w1YLT4isIDwP2XyKrV0HLXa9N3WSvqZ5DH2fT4Vd84+wMkxPFO4zjTD3HvtM8-G+30PqlJbccH8rRXiEUepG7sYGmYFiwoSCMQU0C0rcsYrkiwZwawW+l6BOEAU+wc3KHCjEaOYoQG7ugQCQ-gHawW-GsQ3eBuve+a7+8qCGZghOPWD290A44oLSg66+2YkB7uEo742iTIywvgg6K0BQeQQAA */ + /** @xstate-layout N4IgpgJg5mDOIC5QBECGAXVszoIoFdUAbAS3QE8BhAewDt0AnaoosBgOlk3VnYgyw5YAYgDKAQQBqAUQD6ycQBVxoxQCVp4gLKzVS0QG0ADAF1EoAA7VYZEnXMgAHogCMANgDMAdnYAONwBMbgAsAKxh3kYAnL4ANCDkiMHBHsHsRgG+vh4xIb6hLgC+hfFomNh4hKQUNPRMLGyc3Lz85ULCAHIA8ooAkgBiAJrySirqmjp6iqKy-eK9ADLSyMZmSCBWNuh2tA7OCO7efoEh4aGRMfGJCCkevunBLsmBOQEeHsWlAhUExGRUdEYzFYHC4GBa33aAFUAAoKRRyPpaORqcQdADi0lWDk2tns632hx8-iCYQiXmicQSSQCwQC6XCRlCQRcHjcLlCnxAZUElT+NUB9RBTXBfEhPGEGn6GlEAAkRspsetcdt8aBCZ5iScyecKZdqTcXFEXOwvC5zXcjMEvMFfEUStzxb9qgC6sDGmCeHwwFAGKgIJBkNQAMYiCQyeTSdGo5DLeRdSgzKaGUw46x43YE1ya46ks4XKnXYJRUJRdieKJ0sJRY0FLk8n5Vf61IENUHNb2+-2BkMibp9IaR6PiWPIeOJ3TKaazeZLFap5Xp1WZ9XZo4k07kylXJJuPfsKJeLLsm1eUJW+tOpsCt1tkVegNdgMQIOhzo9AbDWPD0fjpNTmY5kWZYDBcNZLCXHY9jXLU8y3fUi38Dxy2ZIwPGiLwPHOD4HQbHBnWbQV3XbUVHz9Z9XxEWF4URXpkVkVEMSxBcIK2KCswOHMNx1AsdxuLw3B8Pdgk1VIvFrS82j5F0WyFD0OzI7sX17SVpGlaQ5QVcQlVYjNoM49dtXzPVCySM0fA8AIXC8AIAiPay7Uk3kCJvVthU9XhaDocQoF9H0BAAI1YPCJXDORug6WRxHRaMo1GAAhJYtNEaRph0jZILVJwYNzTddW3A0cn8dgglCUJskPDIjScxt+VdNz5NFLzaB8vyoEC4LxT7D9BwiqKYo0dEEqS+EVFSwDZxAliMrYrKNUMuD8oQxBvByErizcNDfCiTbMhq-Dr3quSSK9ZrWoYfzMCCsAQu6gdhj66LYqG5RErkUaUunIC51A8CZr0jiiVyniTL4u4oiMEr7Ih1IRKMIwvH26TCNvdyOzO3yLvaq7Oqkqi4SUWj6MYzF0pVdjVwM2C8t4wqKoPLDvErHaUn8JGXKO4j7087zMcu1Brtu1T1M00aycyldsqp4HjIK65vG29hS1pEIonQ9DOVwq86tkrmSHoH0-WXfGaNkJEUTRUnpvJubEEPPiRJs9gIjso1fAyNwonZw7dbvfX0ENjAdhEKUZXlMXrYl-T7YNETbPYc00NCG0nlZNxvZ1oi-YNrtjeEajCdkXoOgRYc+i6DoUz+m3Jf2GOiyNE0Nb3EI2RtAIM5krPhX9wO84LhFZA6bQNJhcRKA08XZtru2vAdzIfACNWjE2le3nTrWpI532e5zo3g-zgnB9wKFxAWXo+knyPp+jufY7uZDMitc43F8cTxM7lGGo4Xvc4PgfESDBhFfauUdAYuDtM7ZIh5X7WXcA7SyyFHi0m2mhJeWRP6uWOuwX++86Am0LifaQahBhTwBpTKI8dKzRAyDtSyKcHYZFCMcKqm0vA2gKB3Tezkfbd0aLgoO+D2AADMcDBgABb6ygMICAdAwA4NoAAN2oAAa3kSFbefCf570EbQXgoj0ASKkQgfWyjgy6NWGQ5c+lQivz8FkCB8MV55DvkWZkbhTQp3POeBGGDuG1S7qjfhOjjYiLEZI2g0i2BMA4BYIgGBhHUAYAAW3YBo3hQTtEBz-kIgxRjIkmKUSGCxpgrEUylrY+4WQ7Tu3hsJN+DsQgeOSC4IwRoFbMi9v4g6mdMkKOyXgvR7AiDUCUofU2r0kqUDUBfYhvRtLX3IVLfwZZbRGF8LaM0ENHhRAduVNIZU1ZL09hkFImDObZwGbo3gIyxmKC6DFJKxdx59AjB9caZTbYIHyCacIFJrSVjPN4FwDsRImm2lhcS1pU6ay+FvDJ39+l92DsM0Zz5hD3MeXIfoUIFgLGSqlIeI8q5phvhxDZyFWnMzXm-CBrikhsmYRDdk+QNnJ0POcnejRhFEHINQfA6AxDSCWJQRQQ9pAAHUCWKE+TPBANkwYligTWVkNY7R2Q3nCnhvTEU8r5QK4QlAFhdBSrMBYgwuhQhlYs6xHEFUGlpMhN+ORwiPAVncWFjp4U6uwXq-l6AFG2D+AALykTIuR951Ha0Cbq3l-rA3bBDVI2V+lWS0gPBA4IGRLLlTcOVPitI0KmnXiWV+JZHLdORlgrmfqBUJpIEmyJ7AMZtQ6jdcUYTDEROkbI2g8jTGqKjd6mNvq411v1kG0goam0tqxm2kKnb8lQEKWYkpJgU0cQ2ukM0WQSwFCwpkPiTxKwlVsUedeAkbI4S1QEr+o79UBonYmqdUjm281bTjdtUlF3duENEpJ7A4kJKSak9JPqa1jsfbQSdJBp1QDfS1Pm2MBa415D+4xA7zHLksTa8p+wt0IwgdtMqrJmSmQOOVReYQjR0nEoeIInKtEiMg-Wxt8HZ380Fh23tYBxmF2LqIXo6JZTTnNgxS2zFQFkspsyZhZ5X6+CXmmtW9LOLuxKu8Ta7JKF2XeIxvptaoMwbgwh86nHUMVD4HIoVIqxXvOtVJpZ+xPBpCtBDCkR4UiljcEeoqJVPZ0prGeSs9ob09JHRBh9rGX1NtaKgUQjAwCoGSaIHA2xIn6PCWGnjCjlFqLSdGu9kX41PobTF+DcWEsXWS6l9A6WoCZa7RhopWGdg4cc7aymdJ7gcmqW07wbDggFreCaMIngl42jQp5-TsaoulbY2KTAVWkspbS1IxrS6-0MBiYB+J6BEkpIK8Oord5DPRdg6+yriWatrYy+hgpmG10bq65kBO5Usj9YEgjIbDrLJpGSNaR4eaggf0rZogzLH5vlcW-F67q26vrfO8GsAvQQkooEcuZAOBUAkCIBt39OWB35bAxF07kPoPPou7FgQy2bsI7u1D2DKO0dCIxzsLHmBcf4+a6u7DpTcNfLIweEITi0KCSyKEAttL2DvBsoJR4GzFczfvSVinZWqcVZp3D2r9XeCM+R6jq5oS2d0A5zjvH92onbYA0B-bIGjvatJ8KM7+vLta+q-D3XSPmdG-Ryz2gZuueW5XcUvn66BdyqFyzUXbcJcFvYfcVIEuyor0zcr4r461cLaux7nXiP9c++Raz-3aBYDiICqMhgEBueRPDX23Lg6He3urWTubWfoc55W3nhn7emeG6L0Mk3AesDl8r9X4Pj2w-PYqVmhOGzX6e2LLkVTHh3AePYW8MqyCKQr3T631Xxm3dLe17dhr3v+85MHyXkfFfUBV5r1bnbtuDugcKy3535PD-U+P7n0-eve8G7+7-6+6m435j4P4h6tZ0DtakpOaICMhz4iQrJL7+Ar4BClimibQHoRDmiIxg4Ioq6Z5f6a4-5d5-7n5AFIqX6l6j537j55K-r-qxJ7Yv5N7hYnYf5t7EEw606e754AGF6X7AED40G3734T4tZPZgSwGdYz6QyZoL7MzL5gwIzIRHg5BebwxZoIx76cEH6U4mad7JaB4W4MHZYRpE5DqO4cHcqf4GFH6w4e4mEQGT5tb84dZ4YMppBsgQzZABArwryVgeBHpGjMKKZLxvAtKKbRC6G2FcH2Hf6OErbOGW5bZP4sH24k42EcAu4AEOG8EpFmEPaSFT4R76QpDeEnJ+EBGL7BEGiJz0jZDUYchLyoShZerWHv5xH6Hq6GHu7JHY5B48Z8aDwCZCYiYzBiYkySYyGeE3CpAy5VGWQ1FBFHp1J+DQrWQwwQxcJhZVoXJ6FEEJEkFJHGGDEW7DHxQaDiAADSyAXQEqkU-QvQwqY4lAsoEm0++wJISs9G9C7Ir85wIRRa2QnCKQvhiCsRORdhvR+RcOWOT4kA-QJAYARA9BWWtehORSxOb+Bx3RRxsJiRBRgcz4yJqJ6JTWxRvObh4eHhgu0QwupY1CWQ7CLg6BR6MQJoLcea0QVkIQZy+B4G++BJ2e-RZxiJEAZJaJD+aRNuGRh2WRXR0J8RhJJxxJEpUpFJS6kBT2ZRHE54ZYO0TJWaLJZo7JDq32KEIkAKgQqeUJzGKpoppB4p5ESJKJ0pVmfaIxcgYxwmomdEFsTEXx8B7wCcERbSdIh4O0qmRGzCgkEMtiJGiZeBex4Os2PRTppxySCJrpkp7p4+wxACQ4MYcYzxrxkx4gb0sg0ysyMyCydJcq2QkMX2rSym6ynsHJDJ7CycqhlYSB16HRzeeJypGZ0OWA2ADA6A8U1WKisiAA7rQJqb0LANIKGKkViXllYUOVyiOSKWObABOVOTOfOYufmcuauS4SUTScGTcIJP5naJhGVJkAUGeGDH4X4DulaO4AUHWIKU7viUZscewOOWwEeUlrOdQAuUuSuWuUUY-nKcBgqbiTuQ6aORrsBQeaBdOeBSedBReRIdSdAe4bMV8o7PedZFhGRi+ZLoVJhGWFkO8DplRe0YqcOahXWrcuikaiatiuapag5iRXKpQnxDZP9qtAjC8BwimYOewUqexQGsGCMtgBAMIF0MAk8XxVajeT4QePDGaSDqgjRdcOgSaKWlZDuucBAqkMUA6F5AGPAOsKxTuYJfpAALS2J8R2IljsLeC2Tz7hC+D2keQuWAzhDgpGTwTkZYSeBKyEY7TOoAmepOVMYeQw4VAOW6SyGEjlT0URVLTkaPBWinoTbBblSMpBUKRdSW4hWUxGhHglSKaJnuzWi0hGVJBGhlh3DQr0auosXIUpWVV4yopKQ1VSx1X3CZDoF5rNWiVtXzF2K6gg7PBqxhAVWkQkk9ihijXZWKzcSyzLQ3DJz3CL6ljwzZCvxrUPgbXKSwUYlQDbWIC2RtKmhvzxUcjwzGiqbWjZDlgnDuBZriS7EyX7EoWpWKQUS9jDXPgPUIBPUmhHjiSwI+KfUOwxD3AwLlShHJzsiXUtDXWUTsD4C0CoACriJJJM4QAw1w0vWI12jI3WSNL7gtFNIPmMy42mZIbzpdQw29a5WLS0zyw8mMnoFsgIxLzs0cbIZcZDVwVU3oGGmHLeJHjnABBvmhnmitKCTuCslJX9V9KpWS1c1DWcWQBy0YF7olhMjK2WSMIZD+bRXqwZCRES3vpzqfq3SE3E2k3k3I6U2LjSZSy2Tm2K1W35A220V3DOyRFPBMgQrWj2lD4ZX-RZVJC7KxytJOrWibSVToSewJ2UGy3+1wEICy7lgli2RL6eCr4-ZFh5o+BPAbSZDbQ1hA3JV9KJ1Q2m1F0p0IDUJKzlTnDwxnAQqNL5BKyOxvCr65ocj2mGYw2uXkYcjNK80CTuwNGt163pl7ka4w1Zp8TZCmWr5aEpB5oBWz0wkLaG3u3igw01i+atJ+AWiMxhV8nn2OnQ5X0oZfpoaF2ZVzFPAxl0iUpXraYxBGlv1oUmaf3S1oY8Yw3ZCJ5vw2SULuw2TsJHrMhNwvxZpNIFB7gQPb19HOl8EZbwPkZWQpAHgxDWh6gnKarA1pmEGAWqk8En705n6-3J3-3WjDaUM7QAm+XeCbIEPMOZm8Hd5n4F4X6DJJ01yppsgFpYHOz0J3CezoQljBAiNI5wm-7sP-7GaCEyNUGDLOE80bKKMQx+DGjwyZCBBmgz1-nZHyXaNElsNe5SOUFD6FF3VU3h3GXiSQysqKYJ5tKKZaOu6uO6PuMCHSPXLGO6IpFwPd1zGKbIRWiFr0ab5S4rxKwWhPCK2sgDlt1b2iMd5ikkOSMxOePX5l5iHV5mM12PW5Ay5TXiTvC+IiThN5GRNkF6MUEgFX4DOiHgHVXJNfJvCq2FTRBIJPBvxWgCTgOONyW5HcFGEVP6MGGGNxNeNgF0EtByI81nUy5hBWSZAljoS0hgytkHjWlMKLUlhdOrPlMSMbO9FbPG41O0HiFE0k3oBk0MAU2HPrLHOYNnOD2XOFToE+AVFNItzoSYSPNAVrMvOelgA82BBgwKxR1o2YSnhmiIssNrOmNjNCVp3XDGidWoLsjWRO1hNLNsUrNIvlPeOUn3Ukupo8P1EezFpnia3JArwbIEtiPwnnH7N9ow2YQeI1g1i2KMUpAM31Fsk+DrL+GWS7pbSaP0soWMuEvMvXWamyNgIUJkuuDiQTX+GA13A0YcpatMY6vCtOH6v5kP482cvXBGhMj93eXWg9lGj0PFNMMuNqkisanOuou32QLGgpDvx03z4FptLNlV1tICRkjSUBsZ6lPoUgWTnYWoAQVQVnkwWGsB2EhGhgzA5R2cLux+FYRCv7mHm5v5unnknnm3Wsvosr5nj0g5CWRBDry2R9XHbLMX31tYXHmQXNtomttitovst2ohCmizPUuoRRWr0fnRmshMKr5pub2Bsm1+1-1fJPBrR0jYSK6UI5CqZvCHjpDCQjatKYSDudEMssaKXWBd2Htyp9vljWmNzIOWQliKP13+EkjGhuz8M2WFBAA */ createMachine< DatasetQualityControllerContext, DatasetQualityControllerEvent, @@ -48,66 +57,105 @@ export const createPureDatasetQualityControllerStateMachine = ( id: 'DatasetQualityController', type: 'parallel', states: { - datasets: { - initial: 'fetching', + stats: { + type: 'parallel', states: { - fetching: { - invoke: { - src: 'loadDataStreamStats', - onDone: { - target: 'loaded', - actions: ['storeDataStreamStats', 'storeDatasets'], + datasets: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'loadDataStreamStats', + onDone: { + target: 'loaded', + actions: ['storeDataStreamStats', 'storeDatasets'], + }, + onError: { + target: 'loaded', + actions: ['notifyFetchDatasetStatsFailed'], + }, + }, }, - onError: { - target: 'loaded', - actions: ['notifyFetchDatasetStatsFailed'], + loaded: {}, + }, + on: { + UPDATE_TIME_RANGE: { + target: 'datasets.fetching', + actions: ['storeTimeRange'], + }, + REFRESH_DATA: { + target: 'datasets.fetching', }, }, }, - loaded: {}, - }, - on: { - UPDATE_TIME_RANGE: { - target: 'datasets.fetching', - actions: ['storeTimeRange'], - }, - REFRESH_DATA: { - target: 'datasets.fetching', - }, - }, - }, - degradedDocs: { - initial: 'fetching', - states: { - fetching: { - invoke: { - src: 'loadDegradedDocs', - onDone: { - target: 'loaded', + degradedDocs: { + initial: 'fetching', + states: { + fetching: { + ...generateInvokePerType({ + src: 'loadDegradedDocs', + }), + }, + loaded: {}, + unauthorized: { type: 'final' }, + }, + on: { + SAVE_DEGRADED_DOCS_STATS: { + target: 'degradedDocs.loaded', actions: ['storeDegradedDocStats', 'storeDatasets'], }, - onError: [ + NOTIFY_DEGRADED_DOCS_STATS_FAILED: [ { - target: 'unauthorized', + target: 'degradedDocs.unauthorized', cond: 'checkIfActionForbidden', }, { - target: 'loaded', + target: 'degradedDocs.loaded', actions: ['notifyFetchDegradedStatsFailed'], }, ], + UPDATE_TIME_RANGE: { + target: 'degradedDocs.fetching', + actions: ['storeTimeRange'], + }, + REFRESH_DATA: { + target: 'degradedDocs.fetching', + }, }, }, - loaded: {}, - unauthorized: { type: 'final' }, - }, - on: { - UPDATE_TIME_RANGE: { - target: 'degradedDocs.fetching', - actions: ['storeTimeRange'], - }, - REFRESH_DATA: { - target: 'degradedDocs.fetching', + nonAggregatableDatasets: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'loadNonAggregatableDatasets', + onDone: { + target: 'loaded', + actions: ['storeNonAggregatableDatasets'], + }, + onError: [ + { + target: 'unauthorized', + cond: 'checkIfActionForbidden', + }, + { + target: 'loaded', + actions: ['notifyFetchNonAggregatableDatasetsFailed'], + }, + ], + }, + }, + loaded: {}, + unauthorized: { type: 'final' }, + }, + on: { + UPDATE_TIME_RANGE: { + target: 'nonAggregatableDatasets.fetching', + }, + REFRESH_DATA: { + target: 'nonAggregatableDatasets.fetching', + }, + }, }, }, }, @@ -168,45 +216,15 @@ export const createPureDatasetQualityControllerStateMachine = ( target: 'integrations.loaded', actions: ['storeQualities'], }, + UPDATE_TYPES: { + target: '#DatasetQualityController.stats', + actions: ['storeTypes'], + }, UPDATE_QUERY: { actions: ['storeQuery'], }, }, }, - nonAggregatableDatasets: { - initial: 'fetching', - states: { - fetching: { - invoke: { - src: 'loadNonAggregatableDatasets', - onDone: { - target: 'loaded', - actions: ['storeNonAggregatableDatasets'], - }, - onError: [ - { - target: 'unauthorized', - cond: 'checkIfActionForbidden', - }, - { - target: 'loaded', - actions: ['notifyFetchNonAggregatableDatasetsFailed'], - }, - ], - }, - }, - loaded: {}, - unauthorized: { type: 'final' }, - }, - on: { - UPDATE_TIME_RANGE: { - target: 'nonAggregatableDatasets.fetching', - }, - REFRESH_DATA: { - target: 'nonAggregatableDatasets.fetching', - }, - }, - }, }, }, { @@ -280,6 +298,16 @@ export const createPureDatasetQualityControllerStateMachine = ( } : {}; }), + storeTypes: assign((context, event) => { + return 'types' in event + ? { + filters: { + ...context.filters, + types: event.types, + }, + } + : {}; + }), storeQuery: assign((context, event) => { return 'query' in event ? { @@ -292,42 +320,37 @@ export const createPureDatasetQualityControllerStateMachine = ( }), storeDataStreamStats: assign( (_context, event: DoneInvokeEvent) => { - if ('data' in event && 'dataStreamsStats' in event.data) { - const dataStreamStats = event.data.dataStreamsStats as DataStreamStat[]; - const datasetUserPrivileges = event.data.datasetUserPrivileges; + const dataStreamStats = event.data.dataStreamsStats as DataStreamStat[]; + const datasetUserPrivileges = event.data.datasetUserPrivileges; - // Check if any DataStreamStat has null; to check for serverless - const isSizeStatsAvailable = - !dataStreamStats.length || dataStreamStats.some((stat) => stat.totalDocs !== null); + // Check if any DataStreamStat has null; to check for serverless + const isSizeStatsAvailable = + !dataStreamStats.length || dataStreamStats.some((stat) => stat.totalDocs !== null); - return { - dataStreamStats, - isSizeStatsAvailable, - datasetUserPrivileges, - }; - } - return {}; + return { + dataStreamStats, + isSizeStatsAvailable, + datasetUserPrivileges, + }; } ), - storeDegradedDocStats: assign((_context, event) => { - return 'data' in event - ? { - degradedDocStats: event.data as DegradedDocsStat[], - } - : {}; - }), - storeNonAggregatableDatasets: assign( - ( - _context: DefaultDatasetQualityControllerState, - event: DoneInvokeEvent - ) => { - return 'data' in event - ? { - nonAggregatableDatasets: event.data.datasets, - } - : {}; + storeDegradedDocStats: assign( + (context, event: DoneInvokeEvent, meta) => { + const type = meta._event.origin as DataStreamType; + + return { + degradedDocStats: { + ...context.degradedDocStats, + [type]: event.data, + }, + }; } ), + storeNonAggregatableDatasets: assign( + (_context, event: DoneInvokeEvent) => ({ + nonAggregatableDatasets: event.data.datasets, + }) + ), storeIntegrations: assign((_context, event) => { return 'data' in event ? { @@ -341,7 +364,7 @@ export const createPureDatasetQualityControllerStateMachine = ( }; }), storeDatasets: assign((context, _event) => { - return context.integrations && (context.dataStreamStats || context.degradedDocStats) + return context.integrations ? { datasets: generateDatasets( context.dataStreamStats, @@ -388,35 +411,49 @@ export const createDatasetQualityControllerStateMachine = ({ fetchIntegrationsFailedNotifier(toasts, event.data), }, services: { - loadDataStreamStats: (context) => + loadDataStreamStats: (context, _event) => dataStreamStatsClient.getDataStreamsStats({ - type: context.type as GetDataStreamsStatsQuery['type'], + types: context.filters.types as DataStreamType[], datasetQuery: context.filters.query, }), - loadDegradedDocs: (context) => { - const { startDate: start, endDate: end } = getDateISORange(context.filters.timeRange); + loadDegradedDocs: + (context, _event, { data: { type } }) => + async (send) => { + try { + const { startDate: start, endDate: end } = getDateISORange(context.filters.timeRange); - return dataStreamStatsClient.getDataStreamsDegradedStats({ - type: context.type as GetDataStreamsStatsQuery['type'], - datasetQuery: context.filters.query, - start, - end, - }); - }, - loadIntegrations: (context) => { - return dataStreamStatsClient.getIntegrations({ - type: context.type as GetIntegrationsParams['query']['type'], - }); - }, + const degradedDocsStats = await (isTypeSelected(type, context) + ? dataStreamStatsClient.getDataStreamsDegradedStats({ + type, + datasetQuery: context.filters.query, + start, + end, + }) + : Promise.resolve([])); + + send({ + type: 'SAVE_DEGRADED_DOCS_STATS', + data: degradedDocsStats, + }); + } catch (e) { + send({ + type: 'NOTIFY_DEGRADED_DOCS_STATS_FAILED', + data: e, + }); + } + }, loadNonAggregatableDatasets: (context) => { const { startDate: start, endDate: end } = getDateISORange(context.filters.timeRange); return dataStreamStatsClient.getNonAggregatableDatasets({ - type: context.type as GetNonAggregatableDataStreamsParams['type'], + types: context.filters.types as DataStreamType[], start, end, }); }, + loadIntegrations: () => { + return dataStreamStatsClient.getIntegrations(); + }, }, }); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts index a03bddcc9e93e..624fef066afcb 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts @@ -6,18 +6,23 @@ */ import { DoneInvokeEvent } from 'xstate'; -import { QualityIndicators, TableCriteria, TimeRangeConfig } from '../../../../common/types'; import { DatasetUserPrivileges, NonAggregatableDatasets } from '../../../../common/api_types'; -import { Integration } from '../../../../common/data_streams_stats/integration'; -import { DatasetTableSortField } from '../../../hooks'; -import { DegradedDocsStat } from '../../../../common/data_streams_stats/malformed_docs_stat'; import { DataStreamDegradedDocsStatServiceResponse, DataStreamDetails, - DataStreamStatServiceResponse, DataStreamStat, + DataStreamStatServiceResponse, DataStreamStatType, } from '../../../../common/data_streams_stats'; +import { Integration } from '../../../../common/data_streams_stats/integration'; +import { DegradedDocsStat } from '../../../../common/data_streams_stats/malformed_docs_stat'; +import { + DataStreamType, + QualityIndicators, + TableCriteria, + TimeRangeConfig, +} from '../../../../common/types'; +import { DatasetTableSortField } from '../../../hooks'; interface FiltersCriteria { inactive: boolean; @@ -26,6 +31,7 @@ interface FiltersCriteria { integrations: string[]; namespaces: string[]; qualities: QualityIndicators[]; + types: string[]; query?: string; } @@ -37,13 +43,15 @@ export interface WithFilters { filters: FiltersCriteria; } +export type DictionaryType = Record; + export interface WithDataStreamStats { datasetUserPrivileges: DatasetUserPrivileges; dataStreamStats: DataStreamStatType[]; } export interface WithDegradedDocs { - degradedDocStats: DegradedDocsStat[]; + degradedDocStats: DictionaryType; } export interface WithNonAggregatableDatasets { @@ -59,9 +67,9 @@ export interface WithIntegrations { integrations: Integration[]; } -export type DefaultDatasetQualityControllerState = { type: string } & WithTableOptions & +export type DefaultDatasetQualityControllerState = WithTableOptions & WithDataStreamStats & - Partial & + WithDegradedDocs & WithDatasets & WithFilters & WithNonAggregatableDatasets & @@ -71,19 +79,19 @@ type DefaultDatasetQualityStateContext = DefaultDatasetQualityControllerState; export type DatasetQualityControllerTypeState = | { - value: 'datasets.fetching'; + value: 'stats.datasets.fetching'; context: DefaultDatasetQualityStateContext; } | { - value: 'datasets.loaded'; + value: 'stats.datasets.loaded'; context: DefaultDatasetQualityStateContext; } | { - value: 'datasets.loaded.idle'; + value: 'stats.degradedDocs.fetching'; context: DefaultDatasetQualityStateContext; } | { - value: 'degradedDocs.fetching'; + value: 'stats.nonAggregatableDatasets.fetching'; context: DefaultDatasetQualityStateContext; } | { @@ -135,6 +143,10 @@ export type DatasetQualityControllerEvent = type: 'UPDATE_QUERY'; query: string; } + | { + type: 'UPDATE_TYPES'; + types: DataStreamType[]; + } | DoneInvokeEvent | DoneInvokeEvent | DoneInvokeEvent diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts index 74dca94990190..c18f3d479ee95 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts @@ -427,7 +427,7 @@ export const createDatasetQualityDetailsControllerStateMachine = ({ const { startDate: start, endDate: end } = getDateISORange(context.timeRange); return dataStreamStatsClient.getNonAggregatableDatasets({ - type, + types: [type], start, end, dataStream: context.dataStream, @@ -479,9 +479,7 @@ export const createDatasetQualityDetailsControllerStateMachine = ({ }, loadDataStreamIntegration: (context) => { if ('dataStreamSettings' in context && context.dataStreamSettings?.integration) { - const { type } = indexNameToDataStreamParts(context.dataStream); return dataStreamDetailsClient.getDataStreamIntegration({ - type, integrationName: context.dataStreamSettings.integration, }); } diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/utils/flatten_stats.ts b/x-pack/plugins/observability_solution/dataset_quality/public/utils/flatten_stats.ts new file mode 100644 index 0000000000000..70a861191ba9f --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/utils/flatten_stats.ts @@ -0,0 +1,16 @@ +/* + * 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 { DataStreamType } from '../../common/types'; + +export function flattenStats( + stats: Record +): Array { + return Object.entries(stats).flatMap(([type, dataStreams]) => + dataStreams.map((dataStream) => ({ ...dataStream, type: type as DataStreamType })) + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/utils/generate_datasets.test.ts b/x-pack/plugins/observability_solution/dataset_quality/public/utils/generate_datasets.test.ts index b6ce00628dd51..6f2e46baacf8c 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/utils/generate_datasets.test.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/utils/generate_datasets.test.ts @@ -8,7 +8,8 @@ import { indexNameToDataStreamParts } from '../../common/utils'; import { Integration } from '../../common/data_streams_stats/integration'; import { generateDatasets } from './generate_datasets'; -import { DataStreamStatType } from '../../common/data_streams_stats/types'; +import { DataStreamStatType } from '../../common/data_streams_stats'; +import { DEFAULT_DICTIONARY_TYPE } from '../state_machines/dataset_quality_controller'; describe('generateDatasets', () => { const integrations: Integration[] = [ @@ -56,25 +57,28 @@ describe('generateDatasets', () => { }, ]; - const degradedDocs = [ - { - dataset: 'logs-system.application-default', - percentage: 0, - count: 0, - docsCount: 0, - quality: 'good' as const, - }, - { - dataset: 'logs-synth-default', - percentage: 11.320754716981131, - count: 6, - docsCount: 0, - quality: 'poor' as const, - }, - ]; + const degradedDocs = { + ...DEFAULT_DICTIONARY_TYPE, + logs: [ + { + dataset: 'logs-system.application-default', + percentage: 0, + count: 0, + docsCount: 0, + quality: 'good' as const, + }, + { + dataset: 'logs-synth-default', + percentage: 11.320754716981131, + count: 6, + docsCount: 0, + quality: 'poor' as const, + }, + ], + }; it('merges integrations information with dataStreamStats', () => { - const datasets = generateDatasets(dataStreamStats, undefined, integrations); + const datasets = generateDatasets(dataStreamStats, DEFAULT_DICTIONARY_TYPE, integrations); expect(datasets).toEqual([ { @@ -87,10 +91,10 @@ describe('generateDatasets', () => { rawName: dataStreamStats[0].name, integration: integrations[0], degradedDocs: { - percentage: degradedDocs[0].percentage, - count: degradedDocs[0].count, - docsCount: degradedDocs[0].docsCount, - quality: degradedDocs[0].quality, + percentage: degradedDocs.logs[0].percentage, + count: degradedDocs.logs[0].count, + docsCount: degradedDocs.logs[0].docsCount, + quality: degradedDocs.logs[0].quality, }, }, { @@ -115,40 +119,42 @@ describe('generateDatasets', () => { expect(datasets).toEqual([ { - rawName: degradedDocs[0].dataset, - name: indexNameToDataStreamParts(degradedDocs[0].dataset).dataset, - type: indexNameToDataStreamParts(degradedDocs[0].dataset).type, + rawName: degradedDocs.logs[0].dataset, + name: indexNameToDataStreamParts(degradedDocs.logs[0].dataset).dataset, + type: indexNameToDataStreamParts(degradedDocs.logs[0].dataset).type, lastActivity: undefined, size: undefined, sizeBytes: undefined, userPrivileges: undefined, - namespace: indexNameToDataStreamParts(degradedDocs[0].dataset).namespace, + namespace: indexNameToDataStreamParts(degradedDocs.logs[0].dataset).namespace, title: - integrations[0].datasets[indexNameToDataStreamParts(degradedDocs[0].dataset).dataset], + integrations[0].datasets[ + indexNameToDataStreamParts(degradedDocs.logs[0].dataset).dataset + ], integration: integrations[0], degradedDocs: { - percentage: degradedDocs[0].percentage, - count: degradedDocs[0].count, - docsCount: degradedDocs[0].docsCount, - quality: degradedDocs[0].quality, + percentage: degradedDocs.logs[0].percentage, + count: degradedDocs.logs[0].count, + docsCount: degradedDocs.logs[0].docsCount, + quality: degradedDocs.logs[0].quality, }, }, { - rawName: degradedDocs[1].dataset, - name: indexNameToDataStreamParts(degradedDocs[1].dataset).dataset, - type: indexNameToDataStreamParts(degradedDocs[1].dataset).type, + rawName: degradedDocs.logs[1].dataset, + name: indexNameToDataStreamParts(degradedDocs.logs[1].dataset).dataset, + type: indexNameToDataStreamParts(degradedDocs.logs[1].dataset).type, lastActivity: undefined, size: undefined, sizeBytes: undefined, userPrivileges: undefined, - namespace: indexNameToDataStreamParts(degradedDocs[1].dataset).namespace, - title: indexNameToDataStreamParts(degradedDocs[1].dataset).dataset, + namespace: indexNameToDataStreamParts(degradedDocs.logs[1].dataset).namespace, + title: indexNameToDataStreamParts(degradedDocs.logs[1].dataset).dataset, integration: undefined, degradedDocs: { - percentage: degradedDocs[1].percentage, - count: degradedDocs[1].count, - docsCount: degradedDocs[1].docsCount, - quality: degradedDocs[1].quality, + percentage: degradedDocs.logs[1].percentage, + count: degradedDocs.logs[1].count, + docsCount: degradedDocs.logs[1].docsCount, + quality: degradedDocs.logs[1].quality, }, }, ]); @@ -168,10 +174,10 @@ describe('generateDatasets', () => { rawName: dataStreamStats[0].name, integration: integrations[0], degradedDocs: { - percentage: degradedDocs[0].percentage, - count: degradedDocs[0].count, - docsCount: degradedDocs[0].docsCount, - quality: degradedDocs[0].quality, + percentage: degradedDocs.logs[0].percentage, + count: degradedDocs.logs[0].count, + docsCount: degradedDocs.logs[0].docsCount, + quality: degradedDocs.logs[0].quality, }, }, { @@ -182,10 +188,10 @@ describe('generateDatasets', () => { type: indexNameToDataStreamParts(dataStreamStats[1].name).type, rawName: dataStreamStats[1].name, degradedDocs: { - percentage: degradedDocs[1].percentage, - count: degradedDocs[1].count, - docsCount: degradedDocs[1].docsCount, - quality: degradedDocs[1].quality, + percentage: degradedDocs.logs[1].percentage, + count: degradedDocs.logs[1].count, + docsCount: degradedDocs.logs[1].docsCount, + quality: degradedDocs.logs[1].quality, }, }, ]); @@ -205,7 +211,7 @@ describe('generateDatasets', () => { }, }; - const datasets = generateDatasets([nonDefaultDataset], undefined, integrations); + const datasets = generateDatasets([nonDefaultDataset], DEFAULT_DICTIONARY_TYPE, integrations); expect(datasets).toEqual([ { @@ -225,8 +231,4 @@ describe('generateDatasets', () => { }, ]); }); - - it('returns an empty array if no valid object is provided', () => { - expect(generateDatasets(undefined, undefined, integrations)).toEqual([]); - }); }); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/utils/generate_datasets.ts b/x-pack/plugins/observability_solution/dataset_quality/public/utils/generate_datasets.ts index ca6dc793d35e5..fb479198bbac3 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/utils/generate_datasets.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/utils/generate_datasets.ts @@ -10,10 +10,12 @@ import { mapPercentageToQuality } from '../../common/utils'; import { Integration } from '../../common/data_streams_stats/integration'; import { DataStreamStat } from '../../common/data_streams_stats/data_stream_stat'; import { DegradedDocsStat } from '../../common/data_streams_stats/malformed_docs_stat'; +import { DictionaryType } from '../state_machines/dataset_quality_controller/src/types'; +import { flattenStats } from './flatten_stats'; export function generateDatasets( dataStreamStats: DataStreamStatType[] = [], - degradedDocStats: DegradedDocsStat[] = [], + degradedDocStats: DictionaryType, integrations: Integration[] ): DataStreamStat[] { if (!dataStreamStats.length && !integrations.length) { @@ -48,8 +50,10 @@ export function generateDatasets( { datasetIntegrationMap: {}, integrationsMap: {} } ); + const degradedDocs = flattenStats(degradedDocStats); + if (!dataStreamStats.length) { - return degradedDocStats.map((degradedDocStat) => + return degradedDocs.map((degradedDocStat) => DataStreamStat.fromDegradedDocStat({ degradedDocStat, datasetIntegrationMap }) ); } @@ -62,8 +66,8 @@ export function generateDatasets( docsCount: DegradedDocsStat['docsCount']; quality: DegradedDocsStat['quality']; } - > = degradedDocStats.reduce( - (degradedMapAcc, { dataset, percentage, count, docsCount, quality }) => + > = degradedDocs.reduce( + (degradedMapAcc, { dataset, percentage, count, docsCount }) => Object.assign(degradedMapAcc, { [dataset]: { percentage, diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_streams/get_data_streams.test.ts b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_streams/get_data_streams.test.ts index ae28384e7a160..907c0c0fdc05c 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_streams/get_data_streams.test.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_streams/get_data_streams.test.ts @@ -40,13 +40,13 @@ describe('getDataStreams', () => { const esClientMock = elasticsearchServiceMock.createElasticsearchClient(); const result = await getDataStreams({ esClient: esClientMock, - type: 'logs', - datasetQuery: 'nginx', + types: ['logs'], + datasetQuery: 'nginx-*', uncategorisedOnly: true, }); expect(dataStreamService.getMatchingDataStreams).toHaveBeenCalledWith( expect.anything(), - 'logs-*nginx*' + 'logs-nginx-*' ); expect(result.datasetUserPrivileges.canMonitor).toBe(true); @@ -57,8 +57,8 @@ describe('getDataStreams', () => { const esClientMock = elasticsearchServiceMock.createElasticsearchClient(); const results = await getDataStreams({ esClient: esClientMock, - type: 'logs', - datasetQuery: 'nginx', + types: ['logs'], + datasetQuery: 'nginx-*', uncategorisedOnly: true, }); expect(results.items.length).toBe(1); @@ -67,8 +67,8 @@ describe('getDataStreams', () => { const esClientMock = elasticsearchServiceMock.createElasticsearchClient(); const results = await getDataStreams({ esClient: esClientMock, - type: 'logs', - datasetQuery: 'nginx', + types: ['logs'], + datasetQuery: 'nginx-*', uncategorisedOnly: false, }); expect(results.items.length).toBe(5); diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_streams/index.ts b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_streams/index.ts index 346946d8bed5c..853a0cf208b42 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_streams/index.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_streams/index.ts @@ -6,27 +6,28 @@ */ import type { ElasticsearchClient } from '@kbn/core/server'; -import { DEFAULT_DATASET_TYPE } from '../../../../common/constants'; import { streamPartsToIndexPattern } from '../../../../common/utils'; import { DataStreamType } from '../../../../common/types'; import { dataStreamService, datasetQualityPrivileges } from '../../../services'; export async function getDataStreams(options: { esClient: ElasticsearchClient; - type?: DataStreamType; + types: DataStreamType[]; datasetQuery?: string; uncategorisedOnly: boolean; }) { - const { esClient, type = DEFAULT_DATASET_TYPE, datasetQuery, uncategorisedOnly } = options; + const { esClient, types, datasetQuery, uncategorisedOnly } = options; - const datasetName = streamPartsToIndexPattern({ - typePattern: type, - datasetPattern: datasetQuery ? `*${datasetQuery}*` : '*-*', - }); + const datasetNames = types.map((type) => + streamPartsToIndexPattern({ + typePattern: type, + datasetPattern: datasetQuery ? `${datasetQuery}` : '*-*', + }) + ); const datasetUserPrivileges = await datasetQualityPrivileges.getDatasetPrivileges( esClient, - datasetName + datasetNames.join(',') ); if (!datasetUserPrivileges.canMonitor) { @@ -36,7 +37,10 @@ export async function getDataStreams(options: { }; } - const allDataStreams = await dataStreamService.getMatchingDataStreams(esClient, datasetName); + const allDataStreams = await dataStreamService.getMatchingDataStreams( + esClient, + datasetNames.join(',') + ); const filteredDataStreams = uncategorisedOnly ? allDataStreams.filter((stream) => { diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_non_aggregatable_data_streams.ts b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_non_aggregatable_data_streams.ts index b59999d0c3c2e..6137bc5426f86 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_non_aggregatable_data_streams.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_non_aggregatable_data_streams.ts @@ -8,28 +8,29 @@ import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { rangeQuery } from '@kbn/observability-plugin/server/utils/queries'; import { extractIndexNameFromBackingIndex } from '../../../common/utils'; -import { DEFAULT_DATASET_TYPE } from '../../../common/constants'; import { _IGNORED } from '../../../common/es_fields'; import { DataStreamType } from '../../../common/types'; import { createDatasetQualityESClient } from '../../utils'; export async function getNonAggregatableDataStreams({ esClient, - type = DEFAULT_DATASET_TYPE, + types, start, end, dataStream, }: { esClient: ElasticsearchClient; - type?: DataStreamType; + types: DataStreamType[]; start: number; end: number; dataStream?: string; }) { const datasetQualityESClient = createDatasetQualityESClient(esClient); + const dataStreamTypes = types.map((type) => `${type}-*-*`).join(','); + const response = await datasetQualityESClient.fieldCaps({ - index: dataStream ?? `${type}-*-*`, + index: dataStream ?? dataStreamTypes, fields: [_IGNORED], index_filter: { ...rangeQuery(start, end)[0], diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/routes.ts b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/routes.ts index 9862b11cf16e0..54a229cb790e7 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/routes.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/routes.ts @@ -16,7 +16,7 @@ import { DegradedFieldResponse, DatasetUserPrivileges, } from '../../../common/api_types'; -import { rangeRt, typeRt } from '../../types/default_api_types'; +import { rangeRt, typeRt, typesRt } from '../../types/default_api_types'; import { createDatasetQualityServerRoute } from '../create_datasets_quality_server_route'; import { datasetQualityPrivileges } from '../../services'; import { getDataStreamDetails, getDataStreamSettings } from './get_data_stream_details'; @@ -30,7 +30,7 @@ const statsRoute = createDatasetQualityServerRoute({ endpoint: 'GET /internal/dataset_quality/data_streams/stats', params: t.type({ query: t.intersection([ - typeRt, + t.type({ types: typesRt }), t.partial({ datasetQuery: t.string, }), @@ -59,6 +59,7 @@ const statsRoute = createDatasetQualityServerRoute({ const privilegedDataStreams = items.filter((stream) => { return stream.userPrivileges.canMonitor; }); + const dataStreamsStats = await getDataStreamsStats({ esClient, dataStreams: privilegedDataStreams.map((stream) => stream.name), @@ -116,7 +117,7 @@ const nonAggregatableDatasetsRoute = createDatasetQualityServerRoute({ params: t.type({ query: t.intersection([ rangeRt, - typeRt, + t.type({ types: typesRt }), t.partial({ dataStream: t.string, }), @@ -131,11 +132,36 @@ const nonAggregatableDatasetsRoute = createDatasetQualityServerRoute({ const esClient = coreContext.elasticsearch.client.asCurrentUser; + return await getNonAggregatableDataStreams({ + esClient, + ...params.query, + }); + }, +}); + +const nonAggregatableDatasetRoute = createDatasetQualityServerRoute({ + endpoint: 'GET /internal/dataset_quality/data_streams/{dataStream}/non_aggregatable', + params: t.type({ + path: t.type({ + dataStream: t.string, + }), + query: t.intersection([rangeRt, typeRt]), + }), + options: { + tags: [], + }, + async handler(resources): Promise { + const { context, params } = resources; + const coreContext = await context.core; + + const esClient = coreContext.elasticsearch.client.asCurrentUser; + await datasetQualityPrivileges.throwIfCannotReadDataset(esClient, params.query.type); return await getNonAggregatableDataStreams({ esClient, ...params.query, + types: [params.query.type], }); }, }); @@ -230,6 +256,7 @@ export const dataStreamsRouteRepository = { ...statsRoute, ...degradedDocsRoute, ...nonAggregatableDatasetsRoute, + ...nonAggregatableDatasetRoute, ...degradedFieldsRoute, ...dataStreamDetailsRoute, ...dataStreamSettingsRoute, diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/routes/integrations/get_integrations.ts b/x-pack/plugins/observability_solution/dataset_quality/server/routes/integrations/get_integrations.ts index 208ed7e70ab32..10e89db800a20 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/routes/integrations/get_integrations.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/routes/integrations/get_integrations.ts @@ -9,16 +9,13 @@ import { Logger } from '@kbn/core/server'; import { PackageClient } from '@kbn/fleet-plugin/server'; import { PackageNotFoundError } from '@kbn/fleet-plugin/server/errors'; import { PackageListItem, RegistryDataStream } from '@kbn/fleet-plugin/common'; -import { DEFAULT_DATASET_TYPE } from '../../../common/constants'; -import { DataStreamType } from '../../../common/types'; import { IntegrationType } from '../../../common/api_types'; export async function getIntegrations(options: { packageClient: PackageClient; logger: Logger; - type?: DataStreamType; }): Promise { - const { packageClient, logger, type = DEFAULT_DATASET_TYPE } = options; + const { packageClient, logger } = options; const packages = await packageClient.getPackages(); const installedPackages = packages.filter((p) => p.status === 'installed'); @@ -29,7 +26,7 @@ export async function getIntegrations(options: { title: p.title, version: p.version, icons: p.icons, - datasets: await getDatasets({ packageClient, logger, pkg: p, type }), + datasets: await getDatasets({ packageClient, logger, pkg: p }), })) ); @@ -40,9 +37,8 @@ const getDatasets = async (options: { packageClient: PackageClient; logger: Logger; pkg: PackageListItem; - type: DataStreamType; }) => { - const { packageClient, logger, pkg, type } = options; + const { packageClient, logger, pkg } = options; return ( (await fetchDatasets({ @@ -50,7 +46,6 @@ const getDatasets = async (options: { logger, name: pkg.name, version: pkg.version, - type, })) ?? getDatasetsReadableName(pkg.data_streams ?? []) ); }; @@ -60,16 +55,13 @@ const fetchDatasets = async (options: { logger: Logger; name: string; version: string; - type: DataStreamType; }) => { try { - const { packageClient, name, version, type } = options; + const { packageClient, name, version } = options; const pkg = await packageClient.getPackage(name, version); - return getDatasetsReadableName( - (pkg.packageInfo.data_streams ?? []).filter((ds) => ds.type === type) - ); + return getDatasetsReadableName(pkg.packageInfo.data_streams ?? []); } catch (error) { // Custom integration if (error instanceof PackageNotFoundError) { diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/routes/integrations/routes.ts b/x-pack/plugins/observability_solution/dataset_quality/server/routes/integrations/routes.ts index 1a21d7e1a14c4..dfeb2f3329bae 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/routes/integrations/routes.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/routes/integrations/routes.ts @@ -7,28 +7,24 @@ import * as t from 'io-ts'; import { IntegrationType, IntegrationDashboardsResponse } from '../../../common/api_types'; -import { typeRt } from '../../types/default_api_types'; import { createDatasetQualityServerRoute } from '../create_datasets_quality_server_route'; import { getIntegrations } from './get_integrations'; import { getIntegrationDashboards } from './get_integration_dashboards'; const integrationsRoute = createDatasetQualityServerRoute({ endpoint: 'GET /internal/dataset_quality/integrations', - params: t.type({ - query: typeRt, - }), options: { tags: [], }, async handler(resources): Promise<{ integrations: IntegrationType[]; }> { - const { params, plugins, logger } = resources; + const { plugins, logger } = resources; const fleetPluginStart = await plugins.fleet.start(); const packageClient = fleetPluginStart.packageService.asInternalUser; - const integrations = await getIntegrations({ packageClient, logger, ...params.query }); + const integrations = await getIntegrations({ packageClient, logger }); return { integrations }; }, diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/types/default_api_types.ts b/x-pack/plugins/observability_solution/dataset_quality/server/types/default_api_types.ts index 91eb8698dfcac..c2b746e655280 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/types/default_api_types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/types/default_api_types.ts @@ -7,12 +7,24 @@ import { isoToEpochRt } from '@kbn/io-ts-utils'; import * as t from 'io-ts'; -import { dataStreamTypesRt } from '../../common/types'; +import { DataStreamType, dataStreamTypesRt } from '../../common/types'; -export const typeRt = t.partial({ +export const typeRt = t.type({ type: dataStreamTypesRt, }); +export const typesRt = new t.Type( + 'typesRt', + (input: unknown): input is DataStreamType[] => + (typeof input === 'string' && input.split(',').every((value) => dataStreamTypesRt.is(value))) || + (Array.isArray(input) && input.every((value) => dataStreamTypesRt.is(value))), + (input, context) => + typeof input === 'string' && input.split(',').every((value) => dataStreamTypesRt.is(value)) + ? t.success(input.split(',') as DataStreamType[]) + : t.failure(input, context), + t.identity +); + export const rangeRt = t.type({ start: isoToEpochRt, end: isoToEpochRt, diff --git a/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json b/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json index 04d5362bb9861..8bec2d8cb1a63 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json +++ b/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json @@ -55,7 +55,8 @@ "@kbn/server-route-repository-utils", "@kbn/core-analytics-browser", "@kbn/core-lifecycle-browser", - "@kbn/core-notifications-browser" + "@kbn/core-notifications-browser", + "@kbn/rison" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 86e3e5702baad..f0ef033d63236 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -14608,7 +14608,6 @@ "xpack.dataQuality.Initializing": "Page Initialisation de la qualité de l'ensemble de données", "xpack.dataQuality.name": "Qualité de l’ensemble de données", "xpack.datasetQuality.actionsColumnName": "Actions", - "xpack.datasetQuality.appDescription": "Surveillez la qualité du jeu de données pour les flux de données {logsPattern} suivant le {dsNamingSchemeLink}.", "xpack.datasetQuality.appDescription.dsNamingSchemeLinkText": "Schéma de dénomination du flux de données", "xpack.datasetQuality.appTitle": "Qualité de l’ensemble de données", "xpack.datasetQuality.betaBadgeDescription": "Cette fonctionnalité est actuellement en version bêta. Nous aimerions beaucoup savoir si vous avez des commentaires ou si vous rencontrez des bugs. Veuillez ouvrir un dossier d'assistance et/ou consulter notre forum de discussion.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 0ab34991b457d..b3be85aaa7bd1 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -14597,7 +14597,6 @@ "xpack.dataQuality.Initializing": "データセット品質ページを初期化中", "xpack.dataQuality.name": "データセット品質", "xpack.datasetQuality.actionsColumnName": "アクション", - "xpack.datasetQuality.appDescription": "{dsNamingSchemeLink}に従う{logsPattern}データストリームのデータセット品質を監視します。", "xpack.datasetQuality.appDescription.dsNamingSchemeLinkText": "データストリーム命名スキーム", "xpack.datasetQuality.appTitle": "データセット品質", "xpack.datasetQuality.betaBadgeDescription": "現在、この機能はベータです。バグが発生した場合やフィードバックがある場合は、お問い合わせください。サポート問題をオープンするか、ディスカッションフォーラムをご覧ください。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 9698931c132f7..6ffabdf583e73 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -14620,7 +14620,6 @@ "xpack.dataQuality.Initializing": "正在初始化“数据集质量”页面", "xpack.dataQuality.name": "数据集质量", "xpack.datasetQuality.actionsColumnName": "操作", - "xpack.datasetQuality.appDescription": "监测跟随 {dsNamingSchemeLink} 的 {logsPattern} 数据流的数据集质量。", "xpack.datasetQuality.appDescription.dsNamingSchemeLinkText": "数据流命名方案", "xpack.datasetQuality.appTitle": "数据集质量", "xpack.datasetQuality.betaBadgeDescription": "此功能当前为公测版。如果遇到任何错误或有任何反馈,我们乐于倾听您的意见。请报告支持问题和/或访问我们的讨论论坛。", diff --git a/x-pack/test/dataset_quality_api_integration/tests/data_streams/stats.spec.ts b/x-pack/test/dataset_quality_api_integration/tests/data_streams/stats.spec.ts index b01dc1f2375aa..25a7f419f2746 100644 --- a/x-pack/test/dataset_quality_api_integration/tests/data_streams/stats.spec.ts +++ b/x-pack/test/dataset_quality_api_integration/tests/data_streams/stats.spec.ts @@ -22,8 +22,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { endpoint: 'GET /internal/dataset_quality/data_streams/stats', params: { query: { - type: 'logs', - datasetQuery: '-', + types: ['logs'], }, }, }); diff --git a/x-pack/test/dataset_quality_api_integration/tests/integrations/integrations.spec.ts b/x-pack/test/dataset_quality_api_integration/tests/integrations/integrations.spec.ts index 13011410a0317..2176dbd1fa95d 100644 --- a/x-pack/test/dataset_quality_api_integration/tests/integrations/integrations.spec.ts +++ b/x-pack/test/dataset_quality_api_integration/tests/integrations/integrations.spec.ts @@ -39,11 +39,6 @@ export default function ApiTest({ getService }: FtrProviderContext) { return await datasetQualityApiClient[user]({ endpoint: 'GET /internal/dataset_quality/integrations', - params: { - query: { - type: 'logs', - }, - }, }); } @@ -53,12 +48,13 @@ export default function ApiTest({ getService }: FtrProviderContext) { await Promise.all(integrationPackages.map((pkg) => installPackage({ supertest, pkg }))); }); - it('returns only log based integrations and its datasets map', async () => { + it('returns all installed integrations and its datasets map', async () => { const resp = await callApiAs(); expect(resp.body.integrations.map((integration) => integration.name)).to.eql([ 'apm', 'endpoint', + 'synthetics', 'system', ]); From 0a8d6a0afc8b9cf8994a216f0e913310c0bba5ce Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Tue, 27 Aug 2024 08:43:47 -0700 Subject: [PATCH 12/74] [UII] Add retries to starting Kibana for jest preconfiguration integration tests (#191318) ## Summary Resolves #172759 Resolves #172760 Resolves #172761 Add retries to starting Kibana for this test suite to hopefully mitigate future flakiness. ### Checklist - ~~[Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed~~ Doesn't seem like I can run Jest integration tests here. --- .../cloud_preconfiguration.test.ts | 104 ++++++++++-------- 1 file changed, 61 insertions(+), 43 deletions(-) diff --git a/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts b/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts index 5ffe6b643f77d..97bd1145fa5ca 100644 --- a/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts +++ b/x-pack/plugins/fleet/server/integration_tests/cloud_preconfiguration.test.ts @@ -49,56 +49,74 @@ describe('Fleet cloud preconfiguration', () => { esServer = await startES(); const startOrRestartKibana = async (kbnConfig: any = defaultKbnConfig) => { - if (kbnServer) { - await kbnServer.stop(); - } - - const root = createRootWithCorePlugins( - { - xpack: { - ...kbnConfig.xpack, - fleet: { - ...kbnConfig.xpack.fleet, - registryUrl, + const maxTries = 3; + let currentTry = 0; + + const startOrRestart = async () => { + if (kbnServer) { + await kbnServer.stop(); + } + + const root = createRootWithCorePlugins( + { + xpack: { + ...kbnConfig.xpack, + fleet: { + ...kbnConfig.xpack.fleet, + registryUrl, + }, }, - }, - logging: { - appenders: { - file: { - type: 'file', - fileName: logFilePath, - layout: { - type: 'json', + logging: { + appenders: { + file: { + type: 'file', + fileName: logFilePath, + layout: { + type: 'json', + }, }, }, + loggers: [ + { + name: 'root', + appenders: ['file'], + }, + { + name: 'plugins.fleet', + level: 'all', + }, + ], }, - loggers: [ - { - name: 'root', - appenders: ['file'], - }, - { - name: 'plugins.fleet', - level: 'all', - }, - ], }, - }, - { oss: false } - ); - - await root.preboot(); - const coreSetup = await root.setup(); - const coreStart = await root.start(); - - kbnServer = { - root, - coreSetup, - coreStart, - stop: async () => await root.shutdown(), + { oss: false } + ); + + await root.preboot(); + const coreSetup = await root.setup(); + const coreStart = await root.start(); + + kbnServer = { + root, + coreSetup, + coreStart, + stop: async () => await root.shutdown(), + }; + + await waitForFleetSetup(kbnServer.root); }; - await waitForFleetSetup(kbnServer.root); + + try { + currentTry++; + await startOrRestart(); + } catch (e) { + if (currentTry < maxTries) { + await startOrRestart(); + } else { + throw e; + } + } }; + await startOrRestartKibana(); return { From fb84360e2e8dd7ef6d8b72687abcead44329c839 Mon Sep 17 00:00:00 2001 From: Marius Iversen Date: Tue, 27 Aug 2024 17:52:00 +0200 Subject: [PATCH 13/74] [Automatic Import] resolve a bug in ECS missing fields detection (#191502) ## Summary Resolves a bug when comparing LLM ECS mapping output with combined samples, and the mapping is right under the data_stream object, providing false positive results. --- .../server/graphs/ecs/validate.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts index 6c3fe06699aa3..0a22ef4bc0fda 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts @@ -6,8 +6,8 @@ */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { ECS_FULL } from '../../../common/ecs'; -import type { EcsBaseNodeParams } from './types'; import { ECS_RESERVED } from './constants'; +import type { EcsBaseNodeParams } from './types'; const valueFieldKeys = new Set(['target', 'confidence', 'date_formats', 'type']); type AnyObject = Record; @@ -22,15 +22,10 @@ function extractKeys(data: AnyObject, prefix: string = ''): Set { // Directly add the key for arrays without iterating over elements keys.add(fullKey); } else if (typeof value === 'object' && value !== null) { - const valueKeys = new Set(Object.keys(value)); - - if ([...valueFieldKeys].every((k) => valueKeys.has(k))) { - keys.add(fullKey); - } else { - // Recursively extract keys if the current value is a nested object - for (const nestedKey of extractKeys(value, fullKey)) { - keys.add(nestedKey); - } + keys.add(fullKey); + // Recursively extract keys if the current value is a nested object + for (const nestedKey of extractKeys(value, fullKey)) { + keys.add(nestedKey); } } else { // Add the key if the value is not an object or is null From 9d967e0a66032e076a0eba845fcdac135fae87df Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Tue, 27 Aug 2024 09:57:58 -0600 Subject: [PATCH 14/74] [ES|QL] Open the suggestion menu when the editor is focused and empty (#191142) ## Summary Opens the suggestions menu whenever the editor is focused and empty. https://github.com/user-attachments/assets/abe46418-bde7-4f31-b2f5-e63910f8673d --------- Co-authored-by: Elastic Machine Co-authored-by: Stratoula Kalafateli --- .../src/text_based_languages_editor.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx index 326dc471a86c1..4fd0f994520d6 100644 --- a/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx +++ b/packages/kbn-text-based-editor/src/text_based_languages_editor.tsx @@ -192,6 +192,14 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ setIsHistoryOpen(status); }, []); + const showSuggestionsIfEmptyQuery = useCallback(() => { + if (editorModel.current?.getValueLength() === 0) { + setImmediate(() => { + editor1.current?.trigger(undefined, 'editor.action.triggerSuggest', {}); + }); + } + }, []); + const openTimePickerPopover = useCallback(() => { const currentCursorPosition = editor1.current?.getPosition(); const editorCoords = editor1.current?.getDomNode()!.getBoundingClientRect(); @@ -275,7 +283,8 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ const onEditorFocus = useCallback(() => { setIsCodeEditorExpandedFocused(true); - }, []); + showSuggestionsIfEmptyQuery(); + }, [showSuggestionsIfEmptyQuery]); const { cache: esqlFieldsCache, memoizedFieldsFromESQL } = useMemo(() => { // need to store the timing of the first request so we can atomically clear the cache per query @@ -682,6 +691,8 @@ export const TextBasedLanguagesEditor = memo(function TextBasedLanguagesEditor({ editor.onDidLayoutChange((layoutInfoEvent) => { onLayoutChangeRef.current(layoutInfoEvent); }); + + editor.onDidChangeModelContent(showSuggestionsIfEmptyQuery); }} /> From 9f01f735729b1cb21ebb419dbbe9a201a90918f6 Mon Sep 17 00:00:00 2001 From: Bharat Pasupula <123897612+bhapas@users.noreply.github.com> Date: Tue, 27 Aug 2024 18:14:27 +0200 Subject: [PATCH 15/74] [ AutoImport] Introduce automatic log type detection graph (#190407) ## Summary This PR introduces a new graph in `Auto Import` called - `LogTypeDetection` Currently, only JSON/NDJSON formats are supported to be uploaded for building custom integrations. With this feature the capabilities to upload different log types is allowed. Although parsing of the new log types will be handled separately with a separate [issue.](https://github.com/elastic/security-team/issues/9845) - The logs are initially parsed for JSON/NDJSON types in the UI side. - If it is not JSON/NDJSON format , then a new API `AnalyzeLogs` is triggered. - UI allows any type of logs to be uploaded. - Currently there is a server level content length restriction of `1MB` which needs to be extended. - For any log types other than JSON/NDJSON the handling graphs are not yet implemented , hence a `501 Not implemented` message appears. - The idea is to support `structured` , `csv` , `unstructured` syslog handling graphs. ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Elastic Machine Co-authored-by: Hanna Tamoudi Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../__jest__/fixtures/log_type_detection.ts | 20 ++++ .../analyze_logs_route.schema.yaml | 36 ++++++ .../api/analyze_logs/analyze_logs_route.ts | 31 +++++ .../api/model/common_attributes.schema.yaml | 10 ++ .../common/api/model/common_attributes.ts | 15 ++- .../api/model/response_schemas.schema.yaml | 17 +++ .../common/api/model/response_schemas.ts | 10 +- .../integration_assistant/common/constants.ts | 1 + .../integration_assistant/common/index.ts | 2 + .../public/common/lib/api.ts | 14 ++- .../mocks/state.ts | 8 +- .../create_integration_assistant/state.ts | 3 +- .../generation_modal.test.tsx | 34 +++++- .../data_stream_step/generation_modal.tsx | 42 ++++++- .../steps/data_stream_step/is_step_ready.ts | 2 +- .../sample_logs_input.test.tsx | 26 ++--- .../data_stream_step/sample_logs_input.tsx | 51 ++++---- .../steps/data_stream_step/translations.ts | 6 + .../steps/deploy_step/deploy_step.test.tsx | 4 +- .../deploy_step/use_deploy_integration.ts | 14 +-- .../steps/review_step/review_step.test.tsx | 2 +- .../steps/review_step/use_check_pipeline.ts | 2 +- .../create_integration_assistant/types.ts | 2 +- .../create_integration/telemetry.tsx | 2 +- .../graphs/log_type_detection/constants.ts | 10 ++ .../log_type_detection/detection.test.ts | 29 +++++ .../graphs/log_type_detection/detection.ts | 36 ++++++ .../graphs/log_type_detection/graph.test.ts | 31 +++++ .../server/graphs/log_type_detection/graph.ts | 110 ++++++++++++++++++ .../graphs/log_type_detection/prompts.ts | 41 +++++++ .../server/routes/analyze_logs_routes.ts | 95 +++++++++++++++ .../server/routes/register_routes.ts | 2 + .../integration_assistant/server/types.ts | 11 ++ 33 files changed, 640 insertions(+), 79 deletions(-) create mode 100644 x-pack/plugins/integration_assistant/__jest__/fixtures/log_type_detection.ts create mode 100644 x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.schema.yaml create mode 100644 x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts create mode 100644 x-pack/plugins/integration_assistant/server/graphs/log_type_detection/constants.ts create mode 100644 x-pack/plugins/integration_assistant/server/graphs/log_type_detection/detection.test.ts create mode 100644 x-pack/plugins/integration_assistant/server/graphs/log_type_detection/detection.ts create mode 100644 x-pack/plugins/integration_assistant/server/graphs/log_type_detection/graph.test.ts create mode 100644 x-pack/plugins/integration_assistant/server/graphs/log_type_detection/graph.ts create mode 100644 x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts create mode 100644 x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts diff --git a/x-pack/plugins/integration_assistant/__jest__/fixtures/log_type_detection.ts b/x-pack/plugins/integration_assistant/__jest__/fixtures/log_type_detection.ts new file mode 100644 index 0000000000000..db570a6c181b5 --- /dev/null +++ b/x-pack/plugins/integration_assistant/__jest__/fixtures/log_type_detection.ts @@ -0,0 +1,20 @@ +/* + * 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 { SamplesFormatName } from '../../common/api/model/common_attributes'; + +export const logFormatDetectionTestState = { + lastExecutedChain: 'testchain', + logSamples: ['{"test1": "test1"}'], + exAnswer: 'testanswer', + packageName: 'testPackage', + dataStreamName: 'testDatastream', + finalized: false, + samplesFormat: { name: SamplesFormatName.Values.json }, + ecsVersion: 'testVersion', + results: { test1: 'test1' }, +}; diff --git a/x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.schema.yaml b/x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.schema.yaml new file mode 100644 index 0000000000000..944828e63f764 --- /dev/null +++ b/x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.schema.yaml @@ -0,0 +1,36 @@ +openapi: 3.0.3 +info: + title: Auto Import Analyze Logs API endpoint + version: "1" +paths: + /api/integration_assistant/analyzelogs: + post: + summary: Analyzes log samples and processes them. + operationId: AnalyzeLogs + x-codegen-enabled: false + description: Analyzes log samples and processes them + tags: + - Analyze Logs API + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - logSamples + - connectorId + properties: + logSamples: + $ref: "../model/common_attributes.schema.yaml#/components/schemas/LogSamples" + connectorId: + $ref: "../model/common_attributes.schema.yaml#/components/schemas/Connector" + langSmithOptions: + $ref: "../model/common_attributes.schema.yaml#/components/schemas/LangSmithOptions" + responses: + 200: + description: Indicates a successful call. + content: + application/json: + schema: + $ref: "../model/response_schemas.schema.yaml#/components/schemas/AnalyzeLogsAPIResponse" diff --git a/x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts b/x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts new file mode 100644 index 0000000000000..d2f15525177d1 --- /dev/null +++ b/x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts @@ -0,0 +1,31 @@ +/* + * 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. + */ + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Auto Import Analyze Logs API endpoint + * version: 1 + */ + +import { z } from '@kbn/zod'; + +import { LogSamples, Connector, LangSmithOptions } from '../model/common_attributes'; +import { AnalyzeLogsAPIResponse } from '../model/response_schemas'; + +export type AnalyzeLogsRequestBody = z.infer; +export const AnalyzeLogsRequestBody = z.object({ + logSamples: LogSamples, + connectorId: Connector, + langSmithOptions: LangSmithOptions.optional(), +}); +export type AnalyzeLogsRequestBodyInput = z.input; + +export type AnalyzeLogsResponse = z.infer; +export const AnalyzeLogsResponse = AnalyzeLogsAPIResponse; diff --git a/x-pack/plugins/integration_assistant/common/api/model/common_attributes.schema.yaml b/x-pack/plugins/integration_assistant/common/api/model/common_attributes.schema.yaml index 7839a2dd3eaf7..eafd318b40c33 100644 --- a/x-pack/plugins/integration_assistant/common/api/model/common_attributes.schema.yaml +++ b/x-pack/plugins/integration_assistant/common/api/model/common_attributes.schema.yaml @@ -16,6 +16,12 @@ components: minLength: 1 description: DataStream name for the integration to be built. + LogSamples: + type: array + items: + type: string + description: String form of the input logsamples. + RawSamples: type: array items: @@ -42,6 +48,10 @@ components: enum: - ndjson - json + - csv + - structured + - unstructured + - unsupported SamplesFormat: type: object diff --git a/x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts b/x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts index 07d5323dc0969..4a82a3fd97534 100644 --- a/x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts +++ b/x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts @@ -21,6 +21,12 @@ export const PackageName = z.string().min(1); export type DataStreamName = z.infer; export const DataStreamName = z.string().min(1); +/** + * String form of the input logsamples. + */ +export type LogSamples = z.infer; +export const LogSamples = z.array(z.string()); + /** * String array containing the json raw samples that are used for ecs mapping. */ @@ -49,7 +55,14 @@ export const Docs = z.array(z.object({}).passthrough()); * The name of the log samples format. */ export type SamplesFormatName = z.infer; -export const SamplesFormatName = z.enum(['ndjson', 'json']); +export const SamplesFormatName = z.enum([ + 'ndjson', + 'json', + 'csv', + 'structured', + 'unstructured', + 'unsupported', +]); export type SamplesFormatNameEnum = typeof SamplesFormatName.enum; export const SamplesFormatNameEnum = SamplesFormatName.enum; diff --git a/x-pack/plugins/integration_assistant/common/api/model/response_schemas.schema.yaml b/x-pack/plugins/integration_assistant/common/api/model/response_schemas.schema.yaml index 8afbab533a6d3..039945fb7ba0b 100644 --- a/x-pack/plugins/integration_assistant/common/api/model/response_schemas.schema.yaml +++ b/x-pack/plugins/integration_assistant/common/api/model/response_schemas.schema.yaml @@ -66,3 +66,20 @@ components: properties: docs: $ref: "./common_attributes.schema.yaml#/components/schemas/Docs" + + AnalyzeLogsAPIResponse: + type: object + required: + - results + properties: + results: + type: object + required: + - parsedSamples + properties: + samplesFormat: + $ref: "./common_attributes.schema.yaml#/components/schemas/SamplesFormat" + parsedSamples: + type: array + items: + type: string diff --git a/x-pack/plugins/integration_assistant/common/api/model/response_schemas.ts b/x-pack/plugins/integration_assistant/common/api/model/response_schemas.ts index 7341d7aa0c287..de1b23ae5e8e3 100644 --- a/x-pack/plugins/integration_assistant/common/api/model/response_schemas.ts +++ b/x-pack/plugins/integration_assistant/common/api/model/response_schemas.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { Docs, Mapping, Pipeline } from './common_attributes'; +import { Docs, Mapping, Pipeline, SamplesFormat } from './common_attributes'; export type EcsMappingAPIResponse = z.infer; export const EcsMappingAPIResponse = z.object({ @@ -48,3 +48,11 @@ export const CheckPipelineAPIResponse = z.object({ docs: Docs, }), }); + +export type AnalyzeLogsAPIResponse = z.infer; +export const AnalyzeLogsAPIResponse = z.object({ + results: z.object({ + samplesFormat: SamplesFormat, + parsedSamples: z.array(z.string()), + }), +}); diff --git a/x-pack/plugins/integration_assistant/common/constants.ts b/x-pack/plugins/integration_assistant/common/constants.ts index 69b383d882869..296e38c01e71c 100644 --- a/x-pack/plugins/integration_assistant/common/constants.ts +++ b/x-pack/plugins/integration_assistant/common/constants.ts @@ -18,6 +18,7 @@ export const INTEGRATION_ASSISTANT_BASE_PATH = '/api/integration_assistant'; export const ECS_GRAPH_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/ecs`; export const CATEGORIZATION_GRAPH_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/categorization`; +export const ANALYZE_LOGS_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/analyzelogs`; export const RELATED_GRAPH_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/related`; export const CHECK_PIPELINE_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/pipeline`; export const INTEGRATION_BUILDER_PATH = `${INTEGRATION_ASSISTANT_BASE_PATH}/build`; diff --git a/x-pack/plugins/integration_assistant/common/index.ts b/x-pack/plugins/integration_assistant/common/index.ts index 6a473d976fa88..5310fa67c8cac 100644 --- a/x-pack/plugins/integration_assistant/common/index.ts +++ b/x-pack/plugins/integration_assistant/common/index.ts @@ -15,6 +15,7 @@ export { } from './api/check_pipeline/check_pipeline'; export { EcsMappingRequestBody, EcsMappingResponse } from './api/ecs/ecs_route'; export { RelatedRequestBody, RelatedResponse } from './api/related/related_route'; +export { AnalyzeLogsRequestBody, AnalyzeLogsResponse } from './api/analyze_logs/analyze_logs_route'; export type { DataStream, @@ -35,4 +36,5 @@ export { PLUGIN_ID, RELATED_GRAPH_PATH, CHECK_PIPELINE_PATH, + ANALYZE_LOGS_PATH, } from './constants'; diff --git a/x-pack/plugins/integration_assistant/public/common/lib/api.ts b/x-pack/plugins/integration_assistant/public/common/lib/api.ts index 68c93f4f51a33..ea9fba83dc094 100644 --- a/x-pack/plugins/integration_assistant/public/common/lib/api.ts +++ b/x-pack/plugins/integration_assistant/public/common/lib/api.ts @@ -16,6 +16,8 @@ import type { CheckPipelineRequestBody, CheckPipelineResponse, BuildIntegrationRequestBody, + AnalyzeLogsRequestBody, + AnalyzeLogsResponse, } from '../../../common'; import { INTEGRATION_BUILDER_PATH, @@ -24,7 +26,7 @@ import { RELATED_GRAPH_PATH, CHECK_PIPELINE_PATH, } from '../../../common'; -import { FLEET_PACKAGES_PATH } from '../../../common/constants'; +import { ANALYZE_LOGS_PATH, FLEET_PACKAGES_PATH } from '../../../common/constants'; export interface EpmPackageResponse { response: [{ id: string; name: string }]; @@ -42,6 +44,16 @@ export interface RequestDeps { abortSignal: AbortSignal; } +export const runAnalyzeLogsGraph = async ( + body: AnalyzeLogsRequestBody, + { http, abortSignal }: RequestDeps +): Promise => + http.post(ANALYZE_LOGS_PATH, { + headers: defaultHeaders, + body: JSON.stringify(body), + signal: abortSignal, + }); + export const runEcsGraph = async ( body: EcsMappingRequestBody, { http, abortSignal }: RequestDeps diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/mocks/state.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/mocks/state.ts index aa310f034290c..c842d097fa7c3 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/mocks/state.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/mocks/state.ts @@ -5,11 +5,11 @@ * 2.0. */ -import type { Pipeline, Docs } from '../../../../../common'; +import type { Pipeline, Docs, SamplesFormat } from '../../../../../common'; import type { Actions, State } from '../state'; import type { AIConnector } from '../types'; -const result: { pipeline: Pipeline; docs: Docs } = { +const result: { pipeline: Pipeline; docs: Docs; samplesFormat: SamplesFormat } = { pipeline: { description: 'Pipeline to process my_integration my_data_stream_title logs', processors: [ @@ -389,6 +389,7 @@ const result: { pipeline: Pipeline; docs: Docs } = { ], }, ], + samplesFormat: { name: 'json' }, }; const rawSamples = [ @@ -419,8 +420,7 @@ export const mockState: State = { dataStreamName: 'mocked_datastream_name', dataStreamDescription: 'Mocked Data Stream Description', inputTypes: ['filestream'], - logsSampleParsed: rawSamples, - samplesFormat: { name: 'ndjson', multiline: false }, + logSamples: rawSamples, }, isGenerating: false, result, diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/state.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/state.ts index 161d1b0646541..bef5b35624df4 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/state.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/state.ts @@ -5,7 +5,7 @@ * 2.0. */ import { createContext, useContext } from 'react'; -import type { Pipeline, Docs } from '../../../../common'; +import type { Pipeline, Docs, SamplesFormat } from '../../../../common'; import type { AIConnector, IntegrationSettings } from './types'; export interface State { @@ -16,6 +16,7 @@ export interface State { result?: { pipeline: Pipeline; docs: Docs; + samplesFormat?: SamplesFormat; }; } diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.test.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.test.tsx index 1c1cf3c881cdf..4d0f6eee1c407 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.test.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.test.tsx @@ -17,9 +17,14 @@ import { TelemetryEventType } from '../../../../../services/telemetry/types'; const integrationSettings = mockState.integrationSettings!; const connector = mockState.connector!; +const mockAnalyzeLogsResults = { + parsedSamples: [{ test: 'analyzeLogsResponse' }], + sampleLogsFormat: { name: 'json' }, +}; const mockEcsMappingResults = { pipeline: { test: 'ecsMappingResponse' }, docs: [] }; const mockCategorizationResults = { pipeline: { test: 'categorizationResponse' }, docs: [] }; const mockRelatedResults = { pipeline: { test: 'relatedResponse' }, docs: [] }; +const mockRunAnalyzeLogsGraph = jest.fn((_: unknown) => ({ results: mockAnalyzeLogsResults })); const mockRunEcsGraph = jest.fn((_: unknown) => ({ results: mockEcsMappingResults })); const mockRunCategorizationGraph = jest.fn((_: unknown) => ({ results: mockCategorizationResults, @@ -27,13 +32,12 @@ const mockRunCategorizationGraph = jest.fn((_: unknown) => ({ const mockRunRelatedGraph = jest.fn((_: unknown) => ({ results: mockRelatedResults })); const defaultRequest = { - packageName: integrationSettings.name ?? '', - dataStreamName: integrationSettings.dataStreamName ?? '', - rawSamples: integrationSettings.logsSampleParsed ?? [], connectorId: connector.id, + LangSmithOptions: undefined, }; jest.mock('../../../../../common/lib/api', () => ({ + runAnalyzeLogsGraph: (params: unknown) => mockRunAnalyzeLogsGraph(params), runEcsGraph: (params: unknown) => mockRunEcsGraph(params), runCategorizationGraph: (params: unknown) => mockRunCategorizationGraph(params), runRelatedGraph: (params: unknown) => mockRunRelatedGraph(params), @@ -74,14 +78,29 @@ describe('GenerationModal', () => { expect(result.queryByTestId('generationModal')).toBeInTheDocument(); }); + it('should call runAnalyzeLogsGraph with correct parameters', () => { + expect(mockRunAnalyzeLogsGraph).toHaveBeenCalledWith({ + ...defaultRequest, + logSamples: integrationSettings.logSamples ?? [], + }); + }); + it('should call runEcsGraph with correct parameters', () => { - expect(mockRunEcsGraph).toHaveBeenCalledWith(defaultRequest); + expect(mockRunEcsGraph).toHaveBeenCalledWith({ + ...defaultRequest, + rawSamples: mockAnalyzeLogsResults.parsedSamples, + packageName: integrationSettings.name ?? '', + dataStreamName: integrationSettings.dataStreamName ?? '', + }); }); it('should call runCategorizationGraph with correct parameters', () => { expect(mockRunCategorizationGraph).toHaveBeenCalledWith({ ...defaultRequest, currentPipeline: mockEcsMappingResults.pipeline, + rawSamples: mockAnalyzeLogsResults.parsedSamples, + packageName: integrationSettings.name ?? '', + dataStreamName: integrationSettings.dataStreamName ?? '', }); }); @@ -89,6 +108,9 @@ describe('GenerationModal', () => { expect(mockRunRelatedGraph).toHaveBeenCalledWith({ ...defaultRequest, currentPipeline: mockCategorizationResults.pipeline, + rawSamples: mockAnalyzeLogsResults.parsedSamples, + packageName: integrationSettings.name ?? '', + dataStreamName: integrationSettings.dataStreamName ?? '', }); }); @@ -101,7 +123,7 @@ describe('GenerationModal', () => { TelemetryEventType.IntegrationAssistantGenerationComplete, { sessionId: expect.any(String), - sampleRows: integrationSettings.logsSampleParsed?.length ?? 0, + sampleRows: integrationSettings.logSamples?.length ?? 0, actionTypeId: connector.actionTypeId, model: expect.anything(), provider: connector.apiProvider ?? 'unknown', @@ -147,7 +169,7 @@ describe('GenerationModal', () => { TelemetryEventType.IntegrationAssistantGenerationComplete, { sessionId: expect.any(String), - sampleRows: integrationSettings.logsSampleParsed?.length ?? 0, + sampleRows: integrationSettings.logSamples?.length ?? 0, actionTypeId: connector.actionTypeId, model: expect.anything(), provider: connector.apiProvider ?? 'unknown', diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx index b83c5315bd619..f25423390fb6d 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/generation_modal.tsx @@ -25,15 +25,17 @@ import { isEmpty } from 'lodash/fp'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { css } from '@emotion/react'; import { getLangSmithOptions } from '../../../../../common/lib/lang_smith'; -import type { - CategorizationRequestBody, - EcsMappingRequestBody, - RelatedRequestBody, +import { + type AnalyzeLogsRequestBody, + type CategorizationRequestBody, + type EcsMappingRequestBody, + type RelatedRequestBody, } from '../../../../../../common'; import { runCategorizationGraph, runEcsGraph, runRelatedGraph, + runAnalyzeLogsGraph, } from '../../../../../common/lib/api'; import { useKibana } from '../../../../../common/hooks/use_kibana'; import type { State } from '../../state'; @@ -46,6 +48,7 @@ const ProgressOrder = ['ecs', 'categorization', 'related']; type ProgressItem = (typeof ProgressOrder)[number]; const progressText: Record = { + analyzeLogs: i18n.PROGRESS_ANALYZE_LOGS, ecs: i18n.PROGRESS_ECS_MAPPING, categorization: i18n.PROGRESS_CATEGORIZATION, related: i18n.PROGRESS_RELATED_GRAPH, @@ -83,10 +86,31 @@ export const useGeneration = ({ (async () => { try { + let logSamples = integrationSettings.logSamples; + let samplesFormat = integrationSettings.samplesFormat; + + if (integrationSettings.samplesFormat === undefined) { + const analyzeLogsRequest: AnalyzeLogsRequestBody = { + logSamples: integrationSettings.logSamples ?? [], + connectorId: connector.id, + langSmithOptions: getLangSmithOptions(), + }; + + setProgress('analyzeLogs'); + const analyzeLogsResult = await runAnalyzeLogsGraph(analyzeLogsRequest, deps); + if (abortController.signal.aborted) return; + if (isEmpty(analyzeLogsResult?.results)) { + setError('No results from Analyze Logs Graph'); + return; + } + logSamples = analyzeLogsResult.results.parsedSamples; + samplesFormat = analyzeLogsResult.results.samplesFormat; + } + const ecsRequest: EcsMappingRequestBody = { packageName: integrationSettings.name ?? '', dataStreamName: integrationSettings.dataStreamName ?? '', - rawSamples: integrationSettings.logsSampleParsed ?? [], + rawSamples: logSamples ?? [], connectorId: connector.id, langSmithOptions: getLangSmithOptions(), }; @@ -125,7 +149,13 @@ export const useGeneration = ({ durationMs: Date.now() - generationStartedAt, }); - onComplete(relatedGraphResult.results); + const result = { + pipeline: relatedGraphResult.results.pipeline, + docs: relatedGraphResult.results.docs, + samplesFormat, + }; + + onComplete(result); } catch (e) { if (abortController.signal.aborted) return; const errorMessage = `${e.message}${ diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/is_step_ready.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/is_step_ready.ts index 43e0006275fa9..4a40334a72ab2 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/is_step_ready.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/is_step_ready.ts @@ -12,5 +12,5 @@ export const isDataStreamStepReady = ({ integrationSettings }: State) => integrationSettings?.dataStreamTitle && integrationSettings?.dataStreamDescription && integrationSettings?.dataStreamName && - integrationSettings?.logsSampleParsed + integrationSettings?.logSamples ); diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/sample_logs_input.test.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/sample_logs_input.test.tsx index 4c15aa8a4785c..2d994f9030764 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/sample_logs_input.test.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/sample_logs_input.test.tsx @@ -161,7 +161,7 @@ describe('SampleLogsInput', () => { it('should set the integrationSetting correctly', () => { expect(mockActions.setIntegrationSettings).toBeCalledWith({ - logsSampleParsed: logsSampleRaw.split(','), + logSamples: logsSampleRaw.split(','), samplesFormat: { name: 'json', json_path: [] }, }); }); @@ -174,7 +174,7 @@ describe('SampleLogsInput', () => { it('should truncate the logs sample', () => { expect(mockActions.setIntegrationSettings).toBeCalledWith({ - logsSampleParsed: tooLargeLogsSample.split(',').slice(0, 10), + logSamples: tooLargeLogsSample.split(',').slice(0, 10), samplesFormat: { name: 'json', json_path: [] }, }); }); @@ -193,7 +193,7 @@ describe('SampleLogsInput', () => { it('should set the integrationSetting correctly', () => { expect(mockActions.setIntegrationSettings).toBeCalledWith({ - logsSampleParsed: splitNDJSON, + logSamples: splitNDJSON, samplesFormat: { name: 'json', json_path: ['events'] }, }); }); @@ -201,10 +201,6 @@ describe('SampleLogsInput', () => { describe('when the file is invalid', () => { describe.each([ - [ - '[{"message":"test message 1"}', - 'Cannot parse the logs sample file as either a JSON or NDJSON file', - ], ['["test message 1"]', 'The logs sample file contains non-object entries'], ['[]', 'The logs sample file is empty'], ])('with logs content %s', (logsSample, errorMessage) => { @@ -218,7 +214,7 @@ describe('SampleLogsInput', () => { it('should set the integrationSetting correctly', () => { expect(mockActions.setIntegrationSettings).toBeCalledWith({ - logsSampleParsed: undefined, + logSamples: undefined, samplesFormat: undefined, }); }); @@ -236,7 +232,7 @@ describe('SampleLogsInput', () => { it('should set the integrationSetting correctly', () => { expect(mockActions.setIntegrationSettings).toBeCalledWith({ - logsSampleParsed: splitNDJSON, + logSamples: splitNDJSON, samplesFormat: { name: 'ndjson', multiline: false }, }); }); @@ -249,7 +245,7 @@ describe('SampleLogsInput', () => { it('should truncate the logs sample', () => { expect(mockActions.setIntegrationSettings).toBeCalledWith({ - logsSampleParsed: tooLargeLogsSample.split('\n').slice(0, 10), + logSamples: tooLargeLogsSample.split('\n').slice(0, 10), samplesFormat: { name: 'ndjson', multiline: false }, }); }); @@ -268,7 +264,7 @@ describe('SampleLogsInput', () => { it('should set the integrationSetting correctly', () => { expect(mockActions.setIntegrationSettings).toBeCalledWith({ - logsSampleParsed: [splitNDJSON[0]], + logSamples: [splitNDJSON[0]], samplesFormat: { name: 'ndjson', multiline: false }, }); }); @@ -281,7 +277,7 @@ describe('SampleLogsInput', () => { it('should set the integrationSetting correctly', () => { expect(mockActions.setIntegrationSettings).toBeCalledWith({ - logsSampleParsed: splitNDJSON, + logSamples: splitNDJSON, samplesFormat: { name: 'ndjson', multiline: true }, }); }); @@ -289,10 +285,6 @@ describe('SampleLogsInput', () => { describe('when the file is invalid', () => { describe.each([ - [ - '{"message":"test message 1"}\n{"message": }', - 'Cannot parse the logs sample file as either a JSON or NDJSON file', - ], ['"test message 1"', 'The logs sample file contains non-object entries'], ['', 'The logs sample file is empty'], ])('with logs content %s', (logsSample, errorMessage) => { @@ -306,7 +298,7 @@ describe('SampleLogsInput', () => { it('should set the integrationSetting correctly', () => { expect(mockActions.setIntegrationSettings).toBeCalledWith({ - logsSampleParsed: undefined, + logSamples: undefined, samplesFormat: undefined, }); }); diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/sample_logs_input.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/sample_logs_input.tsx index fd9c2e3f8c362..51ad4543bb30a 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/sample_logs_input.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/sample_logs_input.tsx @@ -7,8 +7,8 @@ import React, { useCallback, useState } from 'react'; import { EuiCallOut, EuiFilePicker, EuiFormRow, EuiSpacer, EuiText } from '@elastic/eui'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; import { isPlainObject } from 'lodash/fp'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; import type { IntegrationSettings } from '../../types'; import * as i18n from './translations'; import { useActions } from '../../state'; @@ -68,16 +68,12 @@ export const parseJSONArray = ( * Parse the logs sample file content (json or ndjson) and return the parsed logs sample */ const parseLogsContent = ( - fileContent: string | undefined + fileContent: string ): { error?: string; - isTruncated?: boolean; - logsSampleParsed?: string[]; + logSamples: string[]; samplesFormat?: SamplesFormat; } => { - if (fileContent == null) { - return { error: i18n.LOGS_SAMPLE_ERROR.CAN_NOT_READ }; - } let parsedContent: unknown[]; let samplesFormat: SamplesFormat; @@ -97,7 +93,7 @@ const parseLogsContent = ( try { const { entries, pathToEntries, errorNoArrayFound } = parseJSONArray(fileContent); if (errorNoArrayFound) { - return { error: i18n.LOGS_SAMPLE_ERROR.NOT_ARRAY }; + return { error: i18n.LOGS_SAMPLE_ERROR.NOT_ARRAY, logSamples: [] }; } parsedContent = entries; samplesFormat = { name: 'json', json_path: pathToEntries }; @@ -106,32 +102,29 @@ const parseLogsContent = ( parsedContent = parseNDJSON(fileContent, true); samplesFormat = { name: 'ndjson', multiline: true }; } catch (parseMultilineNDJSONError) { - return { error: i18n.LOGS_SAMPLE_ERROR.CAN_NOT_PARSE }; + return { + logSamples: fileContent.split('\n').filter((line) => line.trim() !== ''), + }; } } } if (parsedContent.length === 0) { - return { error: i18n.LOGS_SAMPLE_ERROR.EMPTY }; - } - - let isTruncated = false; - if (parsedContent.length > MaxLogsSampleRows) { - parsedContent = parsedContent.slice(0, MaxLogsSampleRows); - isTruncated = true; + return { error: i18n.LOGS_SAMPLE_ERROR.EMPTY, logSamples: [] }; } if (parsedContent.some((log) => !isPlainObject(log))) { - return { error: i18n.LOGS_SAMPLE_ERROR.NOT_OBJECT }; + return { error: i18n.LOGS_SAMPLE_ERROR.NOT_OBJECT, logSamples: [] }; } - const logsSampleParsed = parsedContent.map((log) => JSON.stringify(log)); - return { isTruncated, logsSampleParsed, samplesFormat }; + const logSamples = parsedContent.map((log) => JSON.stringify(log)); + return { logSamples, samplesFormat }; }; interface SampleLogsInputProps { integrationSettings: IntegrationSettings | undefined; } + export const SampleLogsInput = React.memo(({ integrationSettings }) => { const { notifications } = useKibana().services; const { setIntegrationSettings } = useActions(); @@ -145,7 +138,7 @@ export const SampleLogsInput = React.memo(({ integrationSe setSampleFileError(undefined); setIntegrationSettings({ ...integrationSettings, - logsSampleParsed: undefined, + logSamples: undefined, samplesFormat: undefined, }); return; @@ -154,26 +147,32 @@ export const SampleLogsInput = React.memo(({ integrationSe const reader = new FileReader(); reader.onload = function (e) { const fileContent = e.target?.result as string | undefined; // We can safely cast to string since we call `readAsText` to load the file. - const { error, isTruncated, logsSampleParsed, samplesFormat } = - parseLogsContent(fileContent); + if (fileContent == null) { + return { error: i18n.LOGS_SAMPLE_ERROR.CAN_NOT_READ }; + } + let samples; + const { error, logSamples, samplesFormat } = parseLogsContent(fileContent); setIsParsing(false); - setSampleFileError(error); + samples = logSamples; + if (error) { + setSampleFileError(error); setIntegrationSettings({ ...integrationSettings, - logsSampleParsed: undefined, + logSamples: undefined, samplesFormat: undefined, }); return; } - if (isTruncated) { + if (samples.length > MaxLogsSampleRows) { + samples = samples.slice(0, MaxLogsSampleRows); notifications?.toasts.addInfo(i18n.LOGS_SAMPLE_TRUNCATED(MaxLogsSampleRows)); } setIntegrationSettings({ ...integrationSettings, - logsSampleParsed, + logSamples: samples, samplesFormat, }); }; diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts index 0af9f803f71fc..bbc7000073f52 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts @@ -149,6 +149,12 @@ export const LOGS_SAMPLE_ERROR = { export const ANALYZING = i18n.translate('xpack.integrationAssistant.step.dataStream.analyzing', { defaultMessage: 'Analyzing', }); +export const PROGRESS_ANALYZE_LOGS = i18n.translate( + 'xpack.integrationAssistant.step.dataStream.progress.analyzeLogs', + { + defaultMessage: 'Analyzing Sample logs', + } +); export const PROGRESS_ECS_MAPPING = i18n.translate( 'xpack.integrationAssistant.step.dataStream.progress.ecsMapping', { diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/deploy_step.test.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/deploy_step.test.tsx index d4920ba927d20..1a35c9e4f02c9 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/deploy_step.test.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/deploy_step.test.tsx @@ -31,10 +31,10 @@ const parameters: BuildIntegrationRequestBody = { description: integrationSettings.dataStreamDescription!, name: integrationSettings.dataStreamName!, inputTypes: integrationSettings.inputTypes!, - rawSamples: integrationSettings.logsSampleParsed!, + rawSamples: integrationSettings.logSamples!, docs: results.docs!, pipeline: results.pipeline, - samplesFormat: integrationSettings.samplesFormat!, + samplesFormat: results.samplesFormat!, }, ], }, diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/use_deploy_integration.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/use_deploy_integration.ts index c1451a9d81a9d..5ec27b4e6de65 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/use_deploy_integration.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/deploy_step/use_deploy_integration.ts @@ -37,7 +37,8 @@ export const useDeployIntegration = ({ connector == null || integrationSettings == null || notifications?.toasts == null || - result?.pipeline == null + result?.pipeline == null || + result?.samplesFormat == null ) { return; } @@ -46,12 +47,6 @@ export const useDeployIntegration = ({ (async () => { try { - if (integrationSettings.samplesFormat == null) { - throw new Error( - 'Logic error: samplesFormat is required and cannot be null or undefined when creating integration.' - ); - } - const parameters: BuildIntegrationRequestBody = { integration: { title: integrationSettings.title ?? '', @@ -64,10 +59,10 @@ export const useDeployIntegration = ({ description: integrationSettings.dataStreamDescription ?? '', name: integrationSettings.dataStreamName ?? '', inputTypes: integrationSettings.inputTypes ?? [], - rawSamples: integrationSettings.logsSampleParsed ?? [], + rawSamples: integrationSettings.logSamples ?? [], docs: result.docs ?? [], + samplesFormat: result.samplesFormat ?? { name: 'json' }, pipeline: result.pipeline, - samplesFormat: integrationSettings.samplesFormat, }, ], }, @@ -123,6 +118,7 @@ export const useDeployIntegration = ({ notifications?.toasts, result?.docs, result?.pipeline, + result?.samplesFormat, telemetry, ]); diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/review_step/review_step.test.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/review_step/review_step.test.tsx index 2c8fd73f16998..8a9da9295a8f0 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/review_step/review_step.test.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/review_step/review_step.test.tsx @@ -25,7 +25,7 @@ const customPipeline = { }; const defaultRequest = { pipeline: customPipeline, - rawSamples: integrationSettings.logsSampleParsed!, + rawSamples: integrationSettings.logSamples!, }; const mockRunCheckPipelineResults = jest.fn((_: unknown) => ({ results: mockResults })); jest.mock('../../../../../common/lib/api', () => ({ diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/review_step/use_check_pipeline.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/review_step/use_check_pipeline.ts index 953b8c442abb0..a166e7c73fcc3 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/review_step/use_check_pipeline.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/review_step/use_check_pipeline.ts @@ -38,7 +38,7 @@ export const useCheckPipeline = ({ integrationSettings, customPipeline }: CheckP try { const parameters: CheckPipelineRequestBody = { pipeline: customPipeline, - rawSamples: integrationSettings.logsSampleParsed ?? [], + rawSamples: integrationSettings.logSamples ?? [], }; setIsGenerating(true); diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/types.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/types.ts index c924415ec53e1..6ba7b2945b7a8 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/types.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/types.ts @@ -33,6 +33,6 @@ export interface IntegrationSettings { dataStreamDescription?: string; dataStreamName?: string; inputTypes?: InputType[]; - logsSampleParsed?: string[]; + logSamples?: string[]; samplesFormat?: SamplesFormat; } diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/telemetry.tsx b/x-pack/plugins/integration_assistant/public/components/create_integration/telemetry.tsx index 54988e238bd4d..f4dd6d7d436be 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/telemetry.tsx +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/telemetry.tsx @@ -102,7 +102,7 @@ export const TelemetryContextProvider = React.memo>(({ chi ({ connector, integrationSettings, durationMs, error }) => { telemetry.reportEvent(TelemetryEventType.IntegrationAssistantGenerationComplete, { sessionId: sessionData.current.sessionId, - sampleRows: integrationSettings?.logsSampleParsed?.length ?? 0, + sampleRows: integrationSettings?.logSamples?.length ?? 0, actionTypeId: connector.actionTypeId, model: getConnectorModel(connector), provider: connector.apiProvider ?? 'unknown', diff --git a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/constants.ts b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/constants.ts new file mode 100644 index 0000000000000..b7814b390f8ac --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/constants.ts @@ -0,0 +1,10 @@ +/* + * 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. + */ + +export const EX_ANSWER_LOG_TYPE = { + log_type: 'structured', +}; diff --git a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/detection.test.ts b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/detection.test.ts new file mode 100644 index 0000000000000..5008f5fa3ef34 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/detection.test.ts @@ -0,0 +1,29 @@ +/* + * 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 { FakeLLM } from '@langchain/core/utils/testing'; +import { handleLogFormatDetection } from './detection'; +import type { LogFormatDetectionState } from '../../types'; +import { logFormatDetectionTestState } from '../../../__jest__/fixtures/log_type_detection'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLLM = new FakeLLM({ + response: '{ "log_type": "structured"}', +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +const testState: LogFormatDetectionState = logFormatDetectionTestState; + +describe('Testing log type detection handler', () => { + it('handleLogFormatDetection()', async () => { + const response = await handleLogFormatDetection(testState, mockLLM); + expect(response.logFormat).toStrictEqual('structured'); + expect(response.lastExecutedChain).toBe('logFormatDetection'); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/detection.ts b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/detection.ts new file mode 100644 index 0000000000000..c41b66263c7f4 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/detection.ts @@ -0,0 +1,36 @@ +/* + * 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 { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { JsonOutputParser } from '@langchain/core/output_parsers'; +import type { LogFormatDetectionState } from '../../types'; +import { LOG_FORMAT_DETECTION_PROMPT } from './prompts'; + +const MaxLogSamplesInPrompt = 5; + +export async function handleLogFormatDetection( + state: LogFormatDetectionState, + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const outputParser = new JsonOutputParser(); + const logFormatDetectionNode = LOG_FORMAT_DETECTION_PROMPT.pipe(model).pipe(outputParser); + + const samples = + state.logSamples.length > MaxLogSamplesInPrompt + ? state.logSamples.slice(0, MaxLogSamplesInPrompt) + : state.logSamples; + + const detectedLogFormatAnswer = await logFormatDetectionNode.invoke({ + ex_answer: state.exAnswer, + log_samples: samples, + }); + const logFormat = detectedLogFormatAnswer.log_type; + + return { logFormat, lastExecutedChain: 'logFormatDetection' }; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/graph.test.ts b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/graph.test.ts new file mode 100644 index 0000000000000..3a14239a1c8f2 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/graph.test.ts @@ -0,0 +1,31 @@ +/* + * 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 { FakeLLM } from '@langchain/core/utils/testing'; +import { getLogFormatDetectionGraph } from './graph'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; + +const mockLLM = new FakeLLM({ + response: '{"log_type": "structured"}', +}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; + +describe('LogFormatDetectionGraph', () => { + describe('Compiling and Running', () => { + it('Ensures that the graph compiles', async () => { + // When getLogFormatDetectionGraph runs, langgraph compiles the graph it will error if the graph has any issues. + // Common issues for example detecting a node has no next step, or there is a infinite loop between them. + try { + await getLogFormatDetectionGraph(mockLLM); + } catch (error) { + fail(`getLogFormatDetectionGraph threw an error: ${error}`); + } + }); + }); +}); diff --git a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/graph.ts b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/graph.ts new file mode 100644 index 0000000000000..e0773b556e844 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/graph.ts @@ -0,0 +1,110 @@ +/* + * 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 { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import type { StateGraphArgs } from '@langchain/langgraph'; +import { END, START, StateGraph } from '@langchain/langgraph'; +import type { LogFormatDetectionState } from '../../types'; +import { EX_ANSWER_LOG_TYPE } from './constants'; +import { handleLogFormatDetection } from './detection'; +import { SamplesFormat } from '../../../common'; + +const graphState: StateGraphArgs['channels'] = { + lastExecutedChain: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + logSamples: { + value: (x: string[], y?: string[]) => y ?? x, + default: () => [], + }, + exAnswer: { + value: (x: string, y?: string) => y ?? x, + default: () => '', + }, + finalized: { + value: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }, + samplesFormat: { + value: (x: SamplesFormat, y?: SamplesFormat) => y ?? x, + default: () => ({ name: 'unsupported' }), + }, + ecsVersion: { + value: (x: string, y?: string) => y ?? x, + default: () => '8.11.0', + }, + results: { + value: (x: object, y?: object) => y ?? x, + default: () => ({}), + }, +}; + +function modelInput(state: LogFormatDetectionState): Partial { + return { + exAnswer: JSON.stringify(EX_ANSWER_LOG_TYPE, null, 2), + finalized: false, + lastExecutedChain: 'modelInput', + }; +} + +function modelOutput(state: LogFormatDetectionState): Partial { + return { + finalized: true, + lastExecutedChain: 'modelOutput', + results: { + samplesFormat: state.samplesFormat, + parsedSamples: state.logSamples, // TODO: Add parsed samples + }, + }; +} + +function logFormatRouter(state: LogFormatDetectionState): string { + // if (state.samplesFormat === LogFormat.STRUCTURED) { + // return 'structured'; + // } + // if (state.samplesFormat === LogFormat.UNSTRUCTURED) { + // return 'unstructured'; + // } + // if (state.samplesFormat === LogFormat.CSV) { + // return 'csv'; + // } + return 'unsupported'; +} + +export async function getLogFormatDetectionGraph( + model: ActionsClientChatOpenAI | ActionsClientSimpleChatModel +) { + const workflow = new StateGraph({ + channels: graphState, + }) + .addNode('modelInput', modelInput) + .addNode('modelOutput', modelOutput) + .addNode('handleLogFormatDetection', (state: LogFormatDetectionState) => + handleLogFormatDetection(state, model) + ) + // .addNode('handleKVGraph', (state: LogFormatDetectionState) => getCompiledKvGraph(state, model)) + // .addNode('handleUnstructuredGraph', (state: LogFormatDetectionState) => getCompiledUnstructuredGraph(state, model)) + // .addNode('handleCsvGraph', (state: LogFormatDetectionState) => getCompiledCsvGraph(state, model)) + .addEdge(START, 'modelInput') + .addEdge('modelInput', 'handleLogFormatDetection') + .addEdge('modelOutput', END) + .addConditionalEdges('handleLogFormatDetection', logFormatRouter, { + // TODO: Add structured, unstructured, csv nodes + // structured: 'handleKVGraph', + // unstructured: 'handleUnstructuredGraph', + // csv: 'handleCsvGraph', + unsupported: 'modelOutput', + }); + + const compiledLogFormatDetectionGraph = workflow.compile(); + + return compiledLogFormatDetectionGraph; +} diff --git a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts new file mode 100644 index 0000000000000..9ad06d7592c0f --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts @@ -0,0 +1,41 @@ +/* + * 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 { ChatPromptTemplate } from '@langchain/core/prompts'; +export const LOG_FORMAT_DETECTION_PROMPT = ChatPromptTemplate.fromMessages([ + [ + 'system', + `You are a helpful, expert assistant in identifying different log types based on the format. + +Here is some context for you to reference for your task, read it carefully as you will get questions about it later: + + +{log_samples} + +`, + ], + [ + 'human', + `Looking at the log samples , our goal is to identify the syslog type based on the guidelines below. + +- Go through each log sample and identify the log format type. +- If the syslog samples have header and structured body then classify it as "structured". +- If the syslog samples have header and unstructured body then classify it as "unstructured". +- If the syslog samples follow a csv format then classify it as "csv". +- If you do not find the log format in any of the above categories then classify it as "unsupported". +- Do not respond with anything except the updated current mapping JSON object enclosed with 3 backticks (\`). See example response below. + + +Example response format: + +A: Please find the JSON object below: +\`\`\`json +{ex_answer} +\`\`\` +`, + ], + ['ai', 'Please find the JSON object below:'], +]); diff --git a/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts b/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts new file mode 100644 index 0000000000000..85826e56c2004 --- /dev/null +++ b/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts @@ -0,0 +1,95 @@ +/* + * 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 { IKibanaResponse, IRouter } from '@kbn/core/server'; +import { getRequestAbortedSignal } from '@kbn/data-plugin/server'; +import { + ActionsClientChatOpenAI, + ActionsClientSimpleChatModel, +} from '@kbn/langchain/server/language_models'; +import { APMTracer } from '@kbn/langchain/server/tracers/apm'; +import { getLangSmithTracer } from '@kbn/langchain/server/tracers/langsmith'; +import { ANALYZE_LOGS_PATH, AnalyzeLogsRequestBody, AnalyzeLogsResponse } from '../../common'; +import { ROUTE_HANDLER_TIMEOUT } from '../constants'; +import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; +import { buildRouteValidationWithZod } from '../util/route_validation'; +import { withAvailability } from './with_availability'; +import { getLogFormatDetectionGraph } from '../graphs/log_type_detection/graph'; + +export function registerAnalyzeLogsRoutes( + router: IRouter +) { + router.versioned + .post({ + path: ANALYZE_LOGS_PATH, + access: 'internal', + options: { + timeout: { + idleSocket: ROUTE_HANDLER_TIMEOUT, + }, + }, + }) + .addVersion( + { + version: '1', + validate: { + request: { + body: buildRouteValidationWithZod(AnalyzeLogsRequestBody), + }, + }, + }, + withAvailability(async (context, req, res): Promise> => { + const { logSamples, langSmithOptions } = req.body; + const { getStartServices, logger } = await context.integrationAssistant; + const [, { actions: actionsPlugin }] = await getStartServices(); + try { + const actionsClient = await actionsPlugin.getActionsClientWithRequest(req); + const connector = req.body.connectorId + ? await actionsClient.get({ id: req.body.connectorId }) + : (await actionsClient.getAll()).filter( + (connectorItem) => connectorItem.actionTypeId === '.bedrock' + )[0]; + const abortSignal = getRequestAbortedSignal(req.events.aborted$); + const isOpenAI = connector.actionTypeId === '.gen-ai'; + const llmClass = isOpenAI ? ActionsClientChatOpenAI : ActionsClientSimpleChatModel; + const model = new llmClass({ + actionsClient, + connectorId: connector.id, + logger, + llmType: isOpenAI ? 'openai' : 'bedrock', + model: connector.config?.defaultModel, + temperature: 0.05, + maxTokens: 4096, + signal: abortSignal, + streaming: false, + }); + const options = { + callbacks: [ + new APMTracer({ projectName: langSmithOptions?.projectName ?? 'default' }, logger), + ...getLangSmithTracer({ ...langSmithOptions, logger }), + ], + }; + + const logFormatParameters = { + logSamples, + }; + const graph = await getLogFormatDetectionGraph(model); + const graphResults = await graph.invoke(logFormatParameters, options); + const graphLogFormat = graphResults.results.samplesFormat.name; + if (graphLogFormat === 'unsupported') { + return res.customError({ + statusCode: 501, + body: { message: `Unsupported log samples format` }, + }); + } + return res.ok({ body: AnalyzeLogsResponse.parse(graphResults) }); + } catch (e) { + return res.badRequest({ body: e }); + } + }) + ); +} diff --git a/x-pack/plugins/integration_assistant/server/routes/register_routes.ts b/x-pack/plugins/integration_assistant/server/routes/register_routes.ts index a8ccc39ff2a0f..781010972ddcb 100644 --- a/x-pack/plugins/integration_assistant/server/routes/register_routes.ts +++ b/x-pack/plugins/integration_assistant/server/routes/register_routes.ts @@ -12,8 +12,10 @@ import { registerCategorizationRoutes } from './categorization_routes'; import { registerRelatedRoutes } from './related_routes'; import { registerPipelineRoutes } from './pipeline_routes'; import type { IntegrationAssistantRouteHandlerContext } from '../plugin'; +import { registerAnalyzeLogsRoutes } from './analyze_logs_routes'; export function registerRoutes(router: IRouter) { + registerAnalyzeLogsRoutes(router); registerEcsRoutes(router); registerIntegrationBuilderRoutes(router); registerCategorizationRoutes(router); diff --git a/x-pack/plugins/integration_assistant/server/types.ts b/x-pack/plugins/integration_assistant/server/types.ts index 2f5d9f1237870..d6fa5652c44b8 100644 --- a/x-pack/plugins/integration_assistant/server/types.ts +++ b/x-pack/plugins/integration_assistant/server/types.ts @@ -12,6 +12,7 @@ import { ActionsClientSimpleChatModel, ActionsClientGeminiChatModel, } from '@kbn/langchain/server'; +import { SamplesFormat } from '../common'; export interface IntegrationAssistantPluginSetup { setIsAvailable: (isAvailable: boolean) => void; @@ -84,6 +85,16 @@ export interface EcsMappingState { ecsVersion: string; } +export interface LogFormatDetectionState { + lastExecutedChain: string; + logSamples: string[]; + exAnswer: string; + finalized: boolean; + samplesFormat: SamplesFormat; + ecsVersion: string; + results: object; +} + export interface RelatedState { rawSamples: string[]; samples: string[]; From 069c158e6cad5fbbf2ed4ddd1f5e43cde407ae3a Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Tue, 27 Aug 2024 18:23:36 +0200 Subject: [PATCH 16/74] [ftr] add fleetAndAgents service (#191448) ## Summary This PR refactors the `setupFleetAndAgents` helper function into a `FleetAndAgents` FTR service, which is now initialized during the config file loading. Reason: The previous implementation of `setupFleetAndAgents` wrapped a Mocha `before` hook, which is considered an anti-pattern according to the Mocha ESLint rules that the Operations and QA teams have agreed to enable in the Kibana repo. It's best practice to avoid duplicating hooks, as this can lead to inconsistent test results and make debugging difficult. Ensuring a single before and after hook sequence guarantees that the associated logic runs in a predictable and sequential manner. This change also unblocks #191267, where we plan to enforce the same recommended Mocha ESLint rules that were previously enabled for UI tests in #190690. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../status/status_index_timeout.ts | 6 ++- .../status/status_waiting_for_results.ts | 7 ++-- .../services/fleet_and_agents.ts | 39 +++++++++++++++++++ x-pack/test/api_integration/services/index.ts | 2 + .../apis/agent_policy/agent_policy.ts | 11 +++--- .../agent_policy_datastream_permissions.ts | 4 +- .../agent_policy_root_integrations.ts | 4 +- .../agent_policy_with_agents_setup.ts | 5 +-- .../apis/agents/action_status.ts | 4 +- .../apis/agents/reassign.ts | 4 +- .../apis/agents/request_diagnostics.ts | 7 +++- .../apis/agents/services.ts | 39 ------------------- .../apis/agents/unenroll.ts | 4 +- .../apis/agents/update_agent_tags.ts | 4 +- .../apis/agents/upgrade.ts | 4 +- .../apis/agents/uploads.ts | 4 +- .../apis/download_sources/crud.ts | 6 +-- .../apis/enrollment_api_keys/crud.ts | 5 ++- .../apis/enrollment_api_keys/privileges.ts | 4 +- .../apis/epm/bulk_get_assets.ts | 8 +++- .../apis/epm/bulk_install.ts | 7 +++- .../apis/epm/bulk_upgrade.ts | 7 +++- .../apis/epm/custom_ingest_pipeline.ts | 4 +- .../apis/epm/data_stream.ts | 14 +++++-- .../apis/epm/data_views.ts | 8 ++-- .../fleet_api_integration/apis/epm/delete.ts | 4 +- .../apis/epm/final_pipeline.ts | 4 +- .../fleet_api_integration/apis/epm/get.ts | 7 +++- .../apis/epm/get_templates_inputs.ts | 4 +- .../apis/epm/install_bundled.ts | 9 +++-- .../apis/epm/install_by_upload.ts | 7 +++- .../epm/install_dynamic_template_metric.ts | 7 +++- .../apis/epm/install_endpoint.ts | 4 +- .../apis/epm/install_error_rollback.ts | 7 +++- .../apis/epm/install_hidden_datastreams.ts | 9 +++-- .../install_integration_in_multiple_spaces.ts | 4 +- .../apis/epm/install_overrides.ts | 7 +++- .../apis/epm/install_prerelease.ts | 9 +++-- .../apis/epm/install_remove_assets.ts | 6 +-- .../epm/install_remove_kbn_assets_in_space.ts | 10 ++--- .../apis/epm/install_remove_multiple.ts | 7 ++-- .../apis/epm/install_runtime_field.ts | 9 +++-- .../apis/epm/install_tag_assets.ts | 4 +- .../apis/epm/install_tsds_disable.ts | 7 +++- .../apis/epm/install_update.ts | 7 +++- .../install_with_signature_verification.ts | 7 +++- .../fleet_api_integration/apis/epm/list.ts | 4 +- .../apis/epm/package_install_complete.ts | 7 +++- .../apis/epm/remove_legacy_templates.ts | 7 +++- .../apis/epm/routing_rules.ts | 4 +- .../fleet_api_integration/apis/epm/setup.ts | 8 +++- .../apis/epm/update_assets.ts | 4 +- .../apis/fleet_proxies/crud.ts | 4 +- .../apis/fleet_server_hosts/crud.ts | 4 +- .../apis/fleet_telemetry.ts | 5 +-- .../apis/integrations/elastic_agent.ts | 5 ++- .../apis/outputs/crud.ts | 4 +- .../input_package_create_upgrade.ts | 8 +++- .../package_policy/input_package_rollback.ts | 5 ++- .../apis/package_policy/upgrade.ts | 6 +-- .../apis/policy_secrets.ts | 4 +- .../apis/settings/enrollment.ts | 7 +++- .../apis/settings/get.ts | 4 +- .../apis/settings/update.ts | 4 +- .../apis/uninstall_token/privileges.ts | 4 +- 65 files changed, 264 insertions(+), 184 deletions(-) create mode 100644 x-pack/test/api_integration/services/fleet_and_agents.ts diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_index_timeout.ts b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_index_timeout.ts index b82140727fc24..4c90ac3e4e4f2 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_index_timeout.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_index_timeout.ts @@ -13,7 +13,6 @@ import { LATEST_VULNERABILITIES_INDEX_DEFAULT_NS, VULNERABILITIES_INDEX_DEFAULT_NS, } from '@kbn/cloud-security-posture-plugin/common/constants'; -import { setupFleetAndAgents } from '../../../../fleet_api_integration/apis/agents/services'; import { generateAgent } from '../../../../fleet_api_integration/helpers'; import { FtrProviderContext } from '../../../ftr_provider_context'; import { deleteIndex, createPackagePolicy } from '../helper'; @@ -35,12 +34,15 @@ export default function (providerContext: FtrProviderContext) { const es = getService('es'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); describe('GET /internal/cloud_security_posture/status', () => { let agentPolicyId: string; describe('STATUS = INDEX_TIMEOUT TEST', () => { - setupFleetAndAgents(providerContext); + before(async () => { + await fleetAndAgents.setup(); + }); beforeEach(async () => { await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_waiting_for_results.ts b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_waiting_for_results.ts index bfb5321bdcba9..883bc4b0e745b 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/status/status_waiting_for_results.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/status/status_waiting_for_results.ts @@ -7,7 +7,6 @@ import expect from '@kbn/expect'; import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; import type { CspSetupStatus } from '@kbn/cloud-security-posture-common'; -import { setupFleetAndAgents } from '../../../../fleet_api_integration/apis/agents/services'; import { generateAgent } from '../../../../fleet_api_integration/helpers'; import { FtrProviderContext } from '../../../ftr_provider_context'; import { createPackagePolicy } from '../helper'; @@ -19,13 +18,15 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); describe('GET /internal/cloud_security_posture/status', () => { let agentPolicyId: string; describe('STATUS = WAITING_FOR_RESULT TEST', () => { - setupFleetAndAgents(providerContext); - + before(async () => { + await fleetAndAgents.setup(); + }); beforeEach(async () => { await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); diff --git a/x-pack/test/api_integration/services/fleet_and_agents.ts b/x-pack/test/api_integration/services/fleet_and_agents.ts new file mode 100644 index 0000000000000..8a30dc35e2651 --- /dev/null +++ b/x-pack/test/api_integration/services/fleet_and_agents.ts @@ -0,0 +1,39 @@ +/* + * 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 { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; +import { FtrProviderContext } from '../ftr_provider_context'; + +export async function FleetAndAgents({ getService }: FtrProviderContext) { + // Use elastic/fleet-server service account to execute setup to verify privilege configuration + const es = getService('es'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + + return { + async setup() { + const { token } = await es.security.createServiceToken({ + namespace: 'elastic', + service: 'fleet-server', + }); + + await supertestWithoutAuth + .post(`/api/fleet/setup`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') + .set('kbn-xsrf', 'xxx') + .set('Authorization', `Bearer ${token.value}`) + .send() + .expect(200); + await supertestWithoutAuth + .post(`/api/fleet/agents/setup`) + .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') + .set('kbn-xsrf', 'xxx') + .set('Authorization', `Bearer ${token.value}`) + .send({ forceRecreate: true }) + .expect(200); + }, + }; +} diff --git a/x-pack/test/api_integration/services/index.ts b/x-pack/test/api_integration/services/index.ts index cc2b3f77ca0fa..f6561446cc751 100644 --- a/x-pack/test/api_integration/services/index.ts +++ b/x-pack/test/api_integration/services/index.ts @@ -23,6 +23,7 @@ import { IndexManagementProvider } from './index_management'; import { DataViewApiProvider } from './data_view_api'; import { SloApiProvider } from './slo'; import { SecuritySolutionApiProvider } from './security_solution_api.gen'; +import { FleetAndAgents } from './fleet_and_agents'; export const services = { ...commonServices, @@ -42,4 +43,5 @@ export const services = { indexManagement: IndexManagementProvider, slo: SloApiProvider, securitySolutionApi: SecuritySolutionApiProvider, + fleetAndAgents: FleetAndAgents, }; diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts index 80309b8909363..b51e135ba9c3e 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts @@ -9,7 +9,6 @@ import expect from '@kbn/expect'; import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; import { FLEET_AGENT_POLICIES_SCHEMA_VERSION } from '@kbn/fleet-plugin/server/constants'; import { skipIfNoDockerRegistry, generateAgent } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; export default function (providerContext: FtrProviderContext) { @@ -18,6 +17,7 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const getPackage = async (pkgName: string) => { const getPkgRes = await supertest @@ -42,9 +42,8 @@ export default function (providerContext: FtrProviderContext) { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); await kibanaServer.savedObjects.cleanStandardList(); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); - it('should get list agent policies', async () => { await supertest.get(`/api/fleet/agent_policies`).expect(200); }); @@ -102,8 +101,8 @@ export default function (providerContext: FtrProviderContext) { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); await kibanaServer.savedObjects.cleanStandardList(); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); let packagePoliciesToDeleteIds: string[] = []; after(async () => { if (systemPkgVersion) { @@ -476,8 +475,8 @@ export default function (providerContext: FtrProviderContext) { describe('POST /api/fleet/agent_policies/{agentPolicyId}/copy', () => { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/fleet/agents'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); const createdPolicyIds: string[] = []; after(async () => { const deletedPromises = createdPolicyIds.map((agentPolicyId) => @@ -1460,8 +1459,8 @@ export default function (providerContext: FtrProviderContext) { let policyId: string; before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); before(async () => { const getPkRes = await getPackage('system'); diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_datastream_permissions.ts b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_datastream_permissions.ts index c786b806b1b14..2b0d4e3a2f361 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_datastream_permissions.ts +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_datastream_permissions.ts @@ -8,20 +8,20 @@ import expect from '@kbn/expect'; import { v4 as uuidv4 } from 'uuid'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from '../agents/services'; import { skipIfNoDockerRegistry } from '../../helpers'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); + const fleetAndAgents = getService('fleetAndAgents'); describe('datastream privileges', () => { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_root_integrations.ts b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_root_integrations.ts index 1de66d530d184..f5ce7dada17e2 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_root_integrations.ts +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_root_integrations.ts @@ -8,20 +8,20 @@ import expect from '@kbn/expect'; import { v4 as uuidv4 } from 'uuid'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from '../agents/services'; import { skipIfNoDockerRegistry } from '../../helpers'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); + const fleetAndAgents = getService('fleetAndAgents'); describe('agent policy with root integrations', () => { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_with_agents_setup.ts b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_with_agents_setup.ts index 72fd2d855130d..33e76b11d7791 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_with_agents_setup.ts +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy_with_agents_setup.ts @@ -13,7 +13,6 @@ import { import { ENROLLMENT_API_KEYS_INDEX } from '@kbn/fleet-plugin/common/constants'; import { skipIfNoDockerRegistry } from '../../helpers'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; @@ -21,6 +20,7 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const esClient = getService('es'); const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); async function getEnrollmentKeyForPolicyId(policyId: string) { const listRes = await supertest.get(`/api/fleet/enrollment_api_keys`).expect(200); @@ -89,6 +89,7 @@ export default function (providerContext: FtrProviderContext) { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/fleet/agents'); + await fleetAndAgents.setup(); }); after(async () => { // Wait before agent status is updated @@ -98,8 +99,6 @@ export default function (providerContext: FtrProviderContext) { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/agents'); }); - setupFleetAndAgents(providerContext); - describe('In default space', () => { describe('POST /api/fleet/agent_policies', () => { it('should create an enrollment key for the policy', async () => { diff --git a/x-pack/test/fleet_api_integration/apis/agents/action_status.ts b/x-pack/test/fleet_api_integration/apis/agents/action_status.ts index 184b1ea8d203e..772aa3eaf4eb9 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/action_status.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/action_status.ts @@ -12,7 +12,6 @@ import { AGENT_POLICY_INDEX, } from '@kbn/fleet-plugin/common'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from './services'; import { skipIfNoDockerRegistry } from '../../helpers'; const ES_INDEX_OPTIONS = { headers: { 'X-elastic-product-origin': 'fleet' } }; @@ -22,13 +21,14 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const es = getService('es'); const esArchiver = getService('esArchiver'); + const fleetAndAgents = getService('fleetAndAgents'); describe('action_status_api', () => { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/agents'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/agents'); diff --git a/x-pack/test/fleet_api_integration/apis/agents/reassign.ts b/x-pack/test/fleet_api_integration/apis/agents/reassign.ts index 1bbc9eb29ceb2..48a29d2a7190d 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/reassign.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/reassign.ts @@ -7,7 +7,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from './services'; import { testUsers } from '../test_users'; export default function (providerContext: FtrProviderContext) { @@ -15,17 +14,18 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); + const fleetAndAgents = getService('fleetAndAgents'); describe('fleet_reassign_agent', () => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); beforeEach(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); await esArchiver.load('x-pack/test/functional/es_archives/fleet/agents'); await getService('supertest').post(`/api/fleet/setup`).set('kbn-xsrf', 'xxx').send(); }); - setupFleetAndAgents(providerContext); afterEach(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/agents'); await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); diff --git a/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts b/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts index 45cca59da5e8e..782104e907dc9 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/request_diagnostics.ts @@ -9,7 +9,6 @@ import expect from '@kbn/expect'; import moment from 'moment'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from './services'; import { skipIfNoDockerRegistry } from '../../helpers'; import { testUsers } from '../test_users'; @@ -19,10 +18,14 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); describe('fleet_request_diagnostics', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); beforeEach(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); await esArchiver.load('x-pack/test/functional/es_archives/fleet/agents'); diff --git a/x-pack/test/fleet_api_integration/apis/agents/services.ts b/x-pack/test/fleet_api_integration/apis/agents/services.ts index 7cb04d895ce7c..171744631c1cb 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/services.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/services.ts @@ -5,23 +5,11 @@ * 2.0. */ -import supertest from 'supertest'; import { Client, HttpConnection } from '@elastic/elasticsearch'; import { format as formatUrl } from 'url'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; - import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -export function getSupertestWithoutAuth({ getService }: FtrProviderContext) { - const config = getService('config'); - const kibanaUrl = config.get('servers.kibana'); - kibanaUrl.auth = null; - kibanaUrl.password = null; - - return supertest(formatUrl(kibanaUrl)); -} - export function getEsClientForAPIKey({ getService }: FtrProviderContext, esApiKey: string) { const config = getService('config'); const url = formatUrl({ ...config.get('servers.elasticsearch'), auth: false }); @@ -34,30 +22,3 @@ export function getEsClientForAPIKey({ getService }: FtrProviderContext, esApiKe Connection: HttpConnection, }); } - -export function setupFleetAndAgents(providerContext: FtrProviderContext) { - before(async () => { - // Use elastic/fleet-server service account to execute setup to verify privilege configuration - const es = providerContext.getService('es'); - const { token } = await es.security.createServiceToken({ - namespace: 'elastic', - service: 'fleet-server', - }); - const supetestWithoutAuth = getSupertestWithoutAuth(providerContext); - - await supetestWithoutAuth - .post(`/api/fleet/setup`) - .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') - .set('kbn-xsrf', 'xxx') - .set('Authorization', `Bearer ${token.value}`) - .send() - .expect(200); - await supetestWithoutAuth - .post(`/api/fleet/agents/setup`) - .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') - .set('kbn-xsrf', 'xxx') - .set('Authorization', `Bearer ${token.value}`) - .send({ forceRecreate: true }) - .expect(200); - }); -} diff --git a/x-pack/test/fleet_api_integration/apis/agents/unenroll.ts b/x-pack/test/fleet_api_integration/apis/agents/unenroll.ts index 120bd026ec3f1..68ef8f242b505 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/unenroll.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/unenroll.ts @@ -10,7 +10,6 @@ import { v4 as uuidv4 } from 'uuid'; import { AGENTS_INDEX } from '@kbn/fleet-plugin/common'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from './services'; import { skipIfNoDockerRegistry } from '../../helpers'; export default function (providerContext: FtrProviderContext) { @@ -18,6 +17,7 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const supertest = getService('supertest'); const esClient = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); describe('fleet_unenroll_agent', () => { skipIfNoDockerRegistry(providerContext); @@ -25,8 +25,8 @@ export default function (providerContext: FtrProviderContext) { let outputAPIKeyId: string; before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); beforeEach(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); await esArchiver.load('x-pack/test/functional/es_archives/fleet/agents'); diff --git a/x-pack/test/fleet_api_integration/apis/agents/update_agent_tags.ts b/x-pack/test/fleet_api_integration/apis/agents/update_agent_tags.ts index 92e0500f5e365..497e82ea6abc4 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/update_agent_tags.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/update_agent_tags.ts @@ -7,23 +7,23 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from './services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const esArchiver = getService('esArchiver'); const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); describe('fleet_update_agent_tags', () => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); beforeEach(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); await esArchiver.load('x-pack/test/functional/es_archives/fleet/agents'); await getService('supertest').post(`/api/fleet/setup`).set('kbn-xsrf', 'xxx').send(); }); - setupFleetAndAgents(providerContext); afterEach(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/agents'); await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); diff --git a/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts b/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts index 22f548e119129..27ba9377a37a8 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/upgrade.ts @@ -11,7 +11,6 @@ import moment from 'moment'; import { AGENTS_INDEX, PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from './services'; import { skipIfNoDockerRegistry, generateAgent, makeSnapshotVersion } from '../../helpers'; import { testUsers } from '../test_users'; @@ -22,13 +21,14 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const supertestWithoutAuth = getService('supertestWithoutAuth'); + const fleetAndAgents = getService('fleetAndAgents'); describe('fleet_upgrade_agent', () => { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/agents'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); beforeEach(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/agents'); diff --git a/x-pack/test/fleet_api_integration/apis/agents/uploads.ts b/x-pack/test/fleet_api_integration/apis/agents/uploads.ts index 8ea34cc8c17de..6ffc84c79bc9d 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/uploads.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/uploads.ts @@ -12,7 +12,6 @@ import { FILE_STORAGE_METADATA_AGENT_INDEX, } from '@kbn/fleet-plugin/server/constants'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from './services'; import { skipIfNoDockerRegistry } from '../../helpers'; export default function (providerContext: FtrProviderContext) { @@ -20,6 +19,7 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const supertest = getService('supertest'); const esClient = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const ES_INDEX_OPTIONS = { headers: { 'X-elastic-product-origin': 'fleet' } }; @@ -155,9 +155,9 @@ export default function (providerContext: FtrProviderContext) { describe('fleet_uploads', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); before(async () => { + await fleetAndAgents.setup(); await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); await getService('supertest').post(`/api/fleet/setup`).set('kbn-xsrf', 'xxx').send(); await cleanupFiles(); diff --git a/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts b/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts index 0a7ab7b8bcf9e..578641515aab7 100644 --- a/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { testUsers } from '../test_users'; export default function (providerContext: FtrProviderContext) { @@ -18,14 +17,15 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); - describe('fleet_download_sources_crud', async function () { + describe('fleet_download_sources_crud', function () { skipIfNoDockerRegistry(providerContext); before(async () => { await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); let defaultDownloadSourceId: string; diff --git a/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts b/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts index d5e59733a008b..58922bd0f3cad 100644 --- a/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/crud.ts @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents, getEsClientForAPIKey } from '../agents/services'; +import { getEsClientForAPIKey } from '../agents/services'; import { skipIfNoDockerRegistry } from '../../helpers'; import { testUsers } from '../test_users'; @@ -21,10 +21,12 @@ export default function (providerContext: FtrProviderContext) { const es = getService('es'); const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); + const fleetAndAgents = getService('fleetAndAgents'); describe('fleet_enrollment_api_keys_crud', () => { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/fleet/agents'); + await fleetAndAgents.setup(); }); after(async () => { @@ -32,7 +34,6 @@ export default function (providerContext: FtrProviderContext) { }); skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); describe('GET /fleet/enrollment_api_keys', async () => { it('should list existing api keys', async () => { diff --git a/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/privileges.ts b/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/privileges.ts index 187fcacab570d..6b681cdff3f95 100644 --- a/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/privileges.ts +++ b/x-pack/test/fleet_api_integration/apis/enrollment_api_keys/privileges.ts @@ -8,7 +8,6 @@ import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; import { runPrivilegeTests } from '../../privileges_helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { testUsers } from '../test_users'; export default function (providerContext: FtrProviderContext) { @@ -16,10 +15,12 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const supertestWithoutAuth = getService('supertestWithoutAuth'); const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); describe('fleet_enrollment_api_keys_privileges', () => { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/fleet/agents'); + await fleetAndAgents.setup(); }); after(async () => { @@ -27,7 +28,6 @@ export default function (providerContext: FtrProviderContext) { }); skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); const SCENARIOS = [ { diff --git a/x-pack/test/fleet_api_integration/apis/epm/bulk_get_assets.ts b/x-pack/test/fleet_api_integration/apis/epm/bulk_get_assets.ts index 07b871dd18032..0d8bac87fa83e 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/bulk_get_assets.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/bulk_get_assets.ts @@ -8,11 +8,12 @@ import { GetBulkAssetsResponse } from '@kbn/fleet-plugin/common'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); + const pkgName = 'all_assets'; const pkgVersion = '0.1.0'; @@ -28,7 +29,10 @@ export default function (providerContext: FtrProviderContext) { describe('Bulk get assets', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); describe('installs all assets when installing a package for the first time', async () => { before(async () => { diff --git a/x-pack/test/fleet_api_integration/apis/epm/bulk_install.ts b/x-pack/test/fleet_api_integration/apis/epm/bulk_install.ts index 790fcd13873ea..547f066e43c00 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/bulk_install.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/bulk_install.ts @@ -8,11 +8,11 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); const pkgName = 'multiple_versions'; const pkgOlderVersion = '0.1.0'; @@ -24,7 +24,10 @@ export default function (providerContext: FtrProviderContext) { describe('bulk package install api', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); it('should install the latest version by default', async () => { const response = await supertest diff --git a/x-pack/test/fleet_api_integration/apis/epm/bulk_upgrade.ts b/x-pack/test/fleet_api_integration/apis/epm/bulk_upgrade.ts index ad9c1eec519c4..e644f9b1296b9 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/bulk_upgrade.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/bulk_upgrade.ts @@ -13,13 +13,13 @@ import { } from '@kbn/fleet-plugin/common'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { testUsers } from '../test_users'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); + const fleetAndAgents = getService('fleetAndAgents'); const deletePackage = async (name: string, version: string) => { await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); @@ -27,7 +27,10 @@ export default function (providerContext: FtrProviderContext) { describe('bulk package upgrade api', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); describe('bulk package upgrade with a package already installed', async () => { beforeEach(async () => { diff --git a/x-pack/test/fleet_api_integration/apis/epm/custom_ingest_pipeline.ts b/x-pack/test/fleet_api_integration/apis/epm/custom_ingest_pipeline.ts index 93476c0d252fc..78de2c34dbeb1 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/custom_ingest_pipeline.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/custom_ingest_pipeline.ts @@ -7,7 +7,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from '../agents/services'; import { skipIfNoDockerRegistry } from '../../helpers'; const TEST_INDEX = 'logs-log.log-test'; @@ -19,6 +18,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const es = getService('es'); const esArchiver = getService('esArchiver'); + const fleetAndAgents = getService('fleetAndAgents'); // TODO: Use test package or move to input package version github.com/elastic/kibana/issues/154243 const LOG_INTEGRATION_VERSION = '1.1.2'; @@ -26,8 +26,8 @@ export default function (providerContext: FtrProviderContext) { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); before(async () => { await supertest diff --git a/x-pack/test/fleet_api_integration/apis/epm/data_stream.ts b/x-pack/test/fleet_api_integration/apis/epm/data_stream.ts index a257ff97933d9..fbbb623354340 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/data_stream.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/data_stream.ts @@ -10,12 +10,12 @@ import { v4 as uuidv4 } from 'uuid'; import { asyncForEach } from '@kbn/std'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const es = getService('es'); const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); const uninstallPackage = async (name: string, version: string) => { await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); @@ -29,7 +29,7 @@ export default function (providerContext: FtrProviderContext) { .expect(200); }; - describe('datastreams', async () => { + describe('datastreams', () => { describe('standard integration', () => { const pkgName = 'datastreams'; const pkgVersion = '0.1.0'; @@ -39,7 +39,10 @@ export default function (providerContext: FtrProviderContext) { const namespaces = ['default', 'foo', 'bar']; skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); const writeMetricsDoc = (namespace: string) => es.transport.request( @@ -310,7 +313,10 @@ export default function (providerContext: FtrProviderContext) { const namespace = 'default'; skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); const writeMetricDoc = (body: any = {}) => es.transport.request( diff --git a/x-pack/test/fleet_api_integration/apis/epm/data_views.ts b/x-pack/test/fleet_api_integration/apis/epm/data_views.ts index 5a0753fb321b4..be1335e171c02 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/data_views.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/data_views.ts @@ -8,11 +8,10 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; - + const fleetAndAgents = getService('fleetAndAgents'); const supertest = getService('supertest'); const testPkgs = [ @@ -45,7 +44,10 @@ export default function (providerContext: FtrProviderContext) { describe('EPM - data views', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); afterEach(async () => { await Promise.all(testPkgs.map((pkg) => uninstallPackage(pkg.name, pkg.version))); diff --git a/x-pack/test/fleet_api_integration/apis/epm/delete.ts b/x-pack/test/fleet_api_integration/apis/epm/delete.ts index 9ec8b7318f6c9..e05f9e6e1ee9b 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/delete.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/delete.ts @@ -7,13 +7,13 @@ import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { testUsers } from '../test_users'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); + const fleetAndAgents = getService('fleetAndAgents'); const requiredPackage = 'elastic_agent'; const pkgVersion = '0.0.7'; @@ -33,9 +33,9 @@ export default function (providerContext: FtrProviderContext) { describe('delete and force delete scenarios', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); before(async () => { + await fleetAndAgents.setup(); await installPackage(requiredPackage, pkgVersion); }); after(async () => { diff --git a/x-pack/test/fleet_api_integration/apis/epm/final_pipeline.ts b/x-pack/test/fleet_api_integration/apis/epm/final_pipeline.ts index 157e0178f0ca4..b2b9cb32d8474 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/final_pipeline.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/final_pipeline.ts @@ -7,7 +7,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from '../agents/services'; import { skipIfNoDockerRegistry } from '../../helpers'; const TEST_INDEX = 'logs-log.log-test'; @@ -24,6 +23,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const es = getService('es'); const esArchiver = getService('esArchiver'); + const fleetAndAgents = getService('fleetAndAgents'); function indexUsingApiKey(body: any, apiKey: string): Promise<{ body: Record }> { const supertestWithoutAuth = getService('esSupertestWithoutAuth'); @@ -38,8 +38,8 @@ export default function (providerContext: FtrProviderContext) { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); // Use the custom log package to test the fleet final pipeline before(async () => { diff --git a/x-pack/test/fleet_api_integration/apis/epm/get.ts b/x-pack/test/fleet_api_integration/apis/epm/get.ts index c98bb318bdf41..6941f14b1bbe6 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/get.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/get.ts @@ -11,7 +11,6 @@ import fs from 'fs'; import path from 'path'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { testUsers } from '../test_users'; import { bundlePackage, removeBundledPackages } from './install_bundled'; @@ -20,6 +19,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); + const fleetAndAgents = getService('fleetAndAgents'); const testPkgName = 'apache'; const testPkgVersion = '0.1.4'; @@ -54,7 +54,10 @@ export default function (providerContext: FtrProviderContext) { describe('EPM - get', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); it('returns package info from the registry if it was installed from the registry', async function () { // this will install through the registry by default diff --git a/x-pack/test/fleet_api_integration/apis/epm/get_templates_inputs.ts b/x-pack/test/fleet_api_integration/apis/epm/get_templates_inputs.ts index 744e805c5e229..0f77bde3b15fa 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/get_templates_inputs.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/get_templates_inputs.ts @@ -10,7 +10,6 @@ import fs from 'fs'; import path from 'path'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { testUsers } from '../test_users'; export default function (providerContext: FtrProviderContext) { @@ -18,6 +17,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); + const fleetAndAgents = getService('fleetAndAgents'); const testPkgName = 'apache'; const testPkgVersion = '0.1.4'; @@ -36,8 +36,8 @@ export default function (providerContext: FtrProviderContext) { describe('EPM Templates - Get Inputs', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); before(async () => { + await fleetAndAgents.setup(); const buf = fs.readFileSync(testPkgArchiveZip); await supertest .post(`/api/fleet/epm/packages`) diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_bundled.ts b/x-pack/test/fleet_api_integration/apis/epm/install_bundled.ts index ffef558628804..dbda057f0ba25 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_bundled.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_bundled.ts @@ -13,7 +13,6 @@ import { ToolingLog } from '@kbn/tooling-log'; import { BUNDLED_PACKAGE_DIR } from '../../config.base'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; const BUNDLED_PACKAGE_FIXTURES_DIR = path.join( path.dirname(__filename), @@ -55,10 +54,14 @@ export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const log = getService('log'); + const fleetAndAgents = getService('fleetAndAgents'); - describe('Installing bundled packages', async () => { + describe('Installing bundled packages', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); afterEach(async () => { await removeBundledPackages(log); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts b/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts index e7f3d1d3c0f66..12c29eb5e25e7 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_by_upload.ts @@ -13,7 +13,6 @@ import { HTTPError } from 'superagent'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { testUsers } from '../test_users'; /* @@ -26,6 +25,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); const esClient = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const testPkgArchiveTgz = path.join( path.dirname(__filename), @@ -71,7 +71,10 @@ export default function (providerContext: FtrProviderContext) { describe('Installs packages from direct upload', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); afterEach(async () => { if (isDockerRegistryEnabledOrSkipped(providerContext)) { diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_dynamic_template_metric.ts b/x-pack/test/fleet_api_integration/apis/epm/install_dynamic_template_metric.ts index 9bcf3fc673eab..740739963971e 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_dynamic_template_metric.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_dynamic_template_metric.ts @@ -8,12 +8,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const deletePackage = async (name: string, version: string) => { await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); @@ -21,7 +21,10 @@ export default function (providerContext: FtrProviderContext) { describe('metric_type with dynamic_templates', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); after(async () => { await deletePackage('no_tsdb_to_tsdb', '0.2.0'); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_endpoint.ts b/x-pack/test/fleet_api_integration/apis/epm/install_endpoint.ts index f1e915ec2f048..672b0c881b027 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_endpoint.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_endpoint.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { bundlePackage, removeBundledPackages } from './install_bundled'; export default function (providerContext: FtrProviderContext) { @@ -19,11 +18,11 @@ export default function (providerContext: FtrProviderContext) { describe('Install endpoint package', () => { const { getService } = providerContext; skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); const supertest = getService('supertest'); const es = getService('es'); const log = getService('log'); + const fleetAndAgents = getService('fleetAndAgents'); const pkgName = 'endpoint'; const pkgVersion = '8.6.1'; @@ -46,6 +45,7 @@ export default function (providerContext: FtrProviderContext) { }; before(async () => { + await fleetAndAgents.setup(); if (!isDockerRegistryEnabledOrSkipped(providerContext)) return; await bundlePackage('endpoint-8.6.1'); await installPackage('endpoint', '8.6.1'); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_error_rollback.ts b/x-pack/test/fleet_api_integration/apis/epm/install_error_rollback.ts index 5f4c5b784a280..348808d75f846 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_error_rollback.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_error_rollback.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; @@ -18,6 +17,7 @@ export default function (providerContext: FtrProviderContext) { const badPackageVersion = '0.2.0'; const goodUpgradePackageVersion = '0.3.0'; const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); const installPackage = (pkg: string, version: string) => { return supertest @@ -41,7 +41,10 @@ export default function (providerContext: FtrProviderContext) { describe('package installation error handling and rollback', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); beforeEach(async () => { await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_hidden_datastreams.ts b/x-pack/test/fleet_api_integration/apis/epm/install_hidden_datastreams.ts index 45a80bfa88456..dff9a69b90f97 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_hidden_datastreams.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_hidden_datastreams.ts @@ -8,20 +8,23 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const deletePackage = async (name: string, version: string) => { await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); }; - describe('installing with hidden datastream', async () => { + describe('installing with hidden datastream', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); afterEach(async () => { await deletePackage('apm', '8.8.0'); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_integration_in_multiple_spaces.ts b/x-pack/test/fleet_api_integration/apis/epm/install_integration_in_multiple_spaces.ts index 8fe4ac81ea7cc..06ccf86a582d2 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_integration_in_multiple_spaces.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_integration_in_multiple_spaces.ts @@ -10,7 +10,6 @@ import { PACKAGES_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; import pRetry from 'p-retry'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; const testSpaceId = 'fleet_test_space'; @@ -20,6 +19,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const pkgName = 'system'; const pkgVersion = '1.27.0'; @@ -72,9 +72,9 @@ export default function (providerContext: FtrProviderContext) { describe('When installing system integration in multiple spaces', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); before(async () => { + await fleetAndAgents.setup(); if (!isDockerRegistryEnabledOrSkipped(providerContext)) { return; } diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_overrides.ts b/x-pack/test/fleet_api_integration/apis/epm/install_overrides.ts index 1fd228e6ce799..a96ec23e6e77c 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_overrides.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_overrides.ts @@ -8,12 +8,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const mappingsPackage = 'overrides'; const mappingsPackageVersion = '0.1.0'; @@ -23,7 +23,10 @@ export default function (providerContext: FtrProviderContext) { describe('installs packages that include settings and mappings overrides', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); after(async () => { if (isDockerRegistryEnabledOrSkipped(providerContext)) { diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_prerelease.ts b/x-pack/test/fleet_api_integration/apis/epm/install_prerelease.ts index 86c1a612c0eb5..b804d3b8a20bc 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_prerelease.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_prerelease.ts @@ -7,11 +7,11 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); const testPackage = 'prerelease'; const testPackageVersion = '0.1.0-dev.0+abc'; @@ -20,9 +20,12 @@ export default function (providerContext: FtrProviderContext) { await supertest.delete(`/api/fleet/epm/packages/${pkg}/${version}`).set('kbn-xsrf', 'xxxx'); }; - describe('installs package that has a prerelease version', async () => { + describe('installs package that has a prerelease version', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); after(async () => { if (isDockerRegistryEnabledOrSkipped(providerContext)) { diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_remove_assets.ts b/x-pack/test/fleet_api_integration/apis/epm/install_remove_assets.ts index 83cb1fb6e312f..d8e6f2de86032 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_remove_assets.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_remove_assets.ts @@ -12,7 +12,6 @@ import { AssetReference } from '@kbn/fleet-plugin/common/types'; import { FLEET_INSTALL_FORMAT_VERSION } from '@kbn/fleet-plugin/server/constants'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; function checkErrorWithResponseDataOrThrow(err: any) { if (!err?.response?.data) { @@ -25,6 +24,7 @@ export default function (providerContext: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const supertest = getService('supertest'); const es: Client = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const pkgName = 'all_assets'; const pkgVersion = '0.1.0'; const logsTemplateName = `logs-${pkgName}.test_logs`; @@ -40,12 +40,12 @@ export default function (providerContext: FtrProviderContext) { .send({ force: true }); }; - describe('installs and uninstalls all assets', async () => { + describe('installs and uninstalls all assets', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); describe('installs all assets when installing a package for the first time', async () => { before(async () => { + await fleetAndAgents.setup(); if (!isDockerRegistryEnabledOrSkipped(providerContext)) return; await installPackage(pkgName, pkgVersion); }); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_remove_kbn_assets_in_space.ts b/x-pack/test/fleet_api_integration/apis/epm/install_remove_kbn_assets_in_space.ts index 9cbc9261f37be..f46242402fce9 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_remove_kbn_assets_in_space.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_remove_kbn_assets_in_space.ts @@ -7,7 +7,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; const testSpaceId = 'fleet_test_space'; @@ -15,6 +14,7 @@ export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const kibanaServer = getService('kibanaServer'); const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); const pkgName = 'only_dashboard'; const pkgVersion = '0.1.0'; @@ -43,18 +43,18 @@ export default function (providerContext: FtrProviderContext) { await supertest.delete(`/api/spaces/space/${spaceId}`).set('kbn-xsrf', 'xxxx').send(); }; - describe('installs and uninstalls all assets (non default space)', async () => { + describe('installs and uninstalls all assets (non default space)', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); before(async () => { + await fleetAndAgents.setup(); await createSpace(testSpaceId); }); after(async () => { await deleteSpace(testSpaceId); }); - describe('installs all assets when installing a package for the first time in non default space', async () => { + describe('installs all assets when installing a package for the first time in non default space', () => { before(async () => { if (!isDockerRegistryEnabledOrSkipped(providerContext)) return; await installPackageInSpace(pkgName, pkgVersion, testSpaceId); @@ -70,7 +70,7 @@ export default function (providerContext: FtrProviderContext) { }); }); - describe('uninstalls all assets when uninstalling a package from a different space', async () => { + describe('uninstalls all assets when uninstalling a package from a different space', () => { before(async () => { if (!isDockerRegistryEnabledOrSkipped(providerContext)) return; await installPackageInSpace(pkgName, pkgVersion, testSpaceId); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_remove_multiple.ts b/x-pack/test/fleet_api_integration/apis/epm/install_remove_multiple.ts index 3d509fc819f0d..f4d1a6106396d 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_remove_multiple.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_remove_multiple.ts @@ -10,7 +10,6 @@ import path from 'path'; import fs from 'fs'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; @@ -20,6 +19,7 @@ export default function (providerContext: FtrProviderContext) { const pkgVersion = '0.1.0'; const experimentalPkgName = 'experimental'; const experimental2PkgName = 'experimental2'; + const fleetAndAgents = getService('fleetAndAgents'); const uploadPkgName = 'apache'; @@ -57,11 +57,12 @@ export default function (providerContext: FtrProviderContext) { return Promise.all(uninstallingPackagesPromise); }; - describe('installs and uninstalls multiple packages side effects', async () => { + describe('installs and uninstalls multiple packages side effects', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); before(async () => { + await fleetAndAgents.setup(); + if (!isDockerRegistryEnabledOrSkipped(providerContext)) return; await installPackages([ { name: pkgName, version: pkgVersion }, diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_runtime_field.ts b/x-pack/test/fleet_api_integration/apis/epm/install_runtime_field.ts index 6f8bc6f4e3ccd..ab43043456761 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_runtime_field.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_runtime_field.ts @@ -9,12 +9,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const testPackage = 'runtime_fields'; const testPackageVersion = '0.0.1'; @@ -23,9 +23,12 @@ export default function (providerContext: FtrProviderContext) { await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); }; - describe('package with runtime fields', async () => { + describe('package with runtime fields', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); after(async () => { if (isDockerRegistryEnabledOrSkipped(providerContext)) { diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_tag_assets.ts b/x-pack/test/fleet_api_integration/apis/epm/install_tag_assets.ts index cf1e5be7726ce..6a668e6b87c51 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_tag_assets.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_tag_assets.ts @@ -9,13 +9,13 @@ import fs from 'fs'; import path from 'path'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; const testSpaceId = 'fleet_test_space'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const kibanaServer = getService('kibanaServer'); const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); const pkgName = 'only_dashboard'; const pkgVersion = '0.1.0'; @@ -67,9 +67,9 @@ export default function (providerContext: FtrProviderContext) { }; describe('Assets tagging', () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); before(async () => { + await fleetAndAgents.setup(); await createSpace(testSpaceId); }); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_tsds_disable.ts b/x-pack/test/fleet_api_integration/apis/epm/install_tsds_disable.ts index 321596dde9f9e..3f01308661963 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_tsds_disable.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_tsds_disable.ts @@ -8,12 +8,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const deletePackage = async (name: string, version: string) => { await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); @@ -21,7 +21,10 @@ export default function (providerContext: FtrProviderContext) { describe('installing with tsds disabled', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); after(async () => { await deletePackage('nginx', '1.12.1-beta'); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_update.ts b/x-pack/test/fleet_api_integration/apis/epm/install_update.ts index c36efd6066b6e..d823df132ed47 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_update.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_update.ts @@ -12,12 +12,12 @@ import { } from '@kbn/fleet-plugin/common/constants'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const kibanaServer = getService('kibanaServer'); const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); const deletePackage = async (name: string, version: string) => { await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); @@ -25,7 +25,10 @@ export default function (providerContext: FtrProviderContext) { describe('installing and updating scenarios', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); after(async () => { await deletePackage('multiple_versions', '0.3.0'); diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_with_signature_verification.ts b/x-pack/test/fleet_api_integration/apis/epm/install_with_signature_verification.ts index 7ee3a2637d6af..f0da6118b73f8 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_with_signature_verification.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_with_signature_verification.ts @@ -10,13 +10,13 @@ import { INGEST_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import { Installation } from '@kbn/fleet-plugin/server/types'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; const TEST_KEY_ID = 'd2a182a7b0e00c14'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const es: Client = getService('es'); const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); const uninstallPackage = async (pkg: string, version: string) => { await supertest.delete(`/api/fleet/epm/packages/${pkg}/${version}`).set('kbn-xsrf', 'xxxx'); @@ -39,7 +39,10 @@ export default function (providerContext: FtrProviderContext) { describe('Installs verified and unverified packages', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); describe('verified package', async () => { after(async () => { diff --git a/x-pack/test/fleet_api_integration/apis/epm/list.ts b/x-pack/test/fleet_api_integration/apis/epm/list.ts index 6bccbc37a678c..e3dd62af4aa08 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/list.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/list.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { testUsers } from '../test_users'; import { bundlePackage, removeBundledPackages } from './install_bundled'; @@ -17,6 +16,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const supertestWithoutAuth = getService('supertestWithoutAuth'); const esArchiver = getService('esArchiver'); + const fleetAndAgents = getService('fleetAndAgents'); // use function () {} and not () => {} here // because `this` has to point to the Mocha context @@ -28,8 +28,8 @@ export default function (providerContext: FtrProviderContext) { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); }); diff --git a/x-pack/test/fleet_api_integration/apis/epm/package_install_complete.ts b/x-pack/test/fleet_api_integration/apis/epm/package_install_complete.ts index 5552d9504c8fe..45efd25163b18 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/package_install_complete.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/package_install_complete.ts @@ -12,19 +12,22 @@ import { } from '@kbn/fleet-plugin/common/constants'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); const pkgName = 'multiple_versions'; const pkgVersion = '0.1.0'; const pkgUpdateVersion = '0.2.0'; describe('setup checks packages completed install', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); describe('package install', async () => { before(async () => { diff --git a/x-pack/test/fleet_api_integration/apis/epm/remove_legacy_templates.ts b/x-pack/test/fleet_api_integration/apis/epm/remove_legacy_templates.ts index bce10e14428f7..567d6f504eb4a 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/remove_legacy_templates.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/remove_legacy_templates.ts @@ -11,13 +11,13 @@ import fs from 'fs'; import { promisify } from 'util'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, isDockerRegistryEnabledOrSkipped } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; const sleep = promisify(setTimeout); export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const esClient = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const uploadPkgName = 'apache'; const uploadPkgVersion = '0.1.4'; @@ -100,7 +100,10 @@ export default function (providerContext: FtrProviderContext) { describe('Legacy component template removal', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); afterEach(async () => { if (!isDockerRegistryEnabledOrSkipped(providerContext)) return; diff --git a/x-pack/test/fleet_api_integration/apis/epm/routing_rules.ts b/x-pack/test/fleet_api_integration/apis/epm/routing_rules.ts index 33ef065ee7d49..059b72f75d735 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/routing_rules.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/routing_rules.ts @@ -7,7 +7,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; -import { setupFleetAndAgents } from '../agents/services'; import { skipIfNoDockerRegistry } from '../../helpers'; const TEST_WRITE_INDEX = 'logs-routing_rules.test-test'; @@ -21,13 +20,14 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const es = getService('es'); const esArchiver = getService('esArchiver'); + const fleetAndAgents = getService('fleetAndAgents'); describe('routing rules for fleet managed datastreams', () => { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); before(async () => { await supertest diff --git a/x-pack/test/fleet_api_integration/apis/epm/setup.ts b/x-pack/test/fleet_api_integration/apis/epm/setup.ts index 001cab435d75b..187fb53b1716f 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/setup.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/setup.ts @@ -9,7 +9,6 @@ import expect from '@kbn/expect'; import { GetInfoResponse, InstalledRegistry } from '@kbn/fleet-plugin/common/types'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; @@ -17,6 +16,7 @@ export default function (providerContext: FtrProviderContext) { const supertestWithoutAuth = getService('supertestWithoutAuth'); const log = getService('log'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const uninstallPackage = async (name: string, version: string) => { await supertest @@ -27,7 +27,11 @@ export default function (providerContext: FtrProviderContext) { describe('setup api', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); + after(async () => { await uninstallPackage('deprecated', '0.1.0'); await uninstallPackage('multiple_versions', '0.3.0'); diff --git a/x-pack/test/fleet_api_integration/apis/epm/update_assets.ts b/x-pack/test/fleet_api_integration/apis/epm/update_assets.ts index a932172cf0960..d6d32e443fd58 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/update_assets.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/update_assets.ts @@ -10,13 +10,13 @@ import { FLEET_INSTALL_FORMAT_VERSION } from '@kbn/fleet-plugin/server/constants import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const kibanaServer = getService('kibanaServer'); const supertest = getService('supertest'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); const pkgName = 'all_assets'; const pkgVersion = '0.1.0'; const pkgUpdateVersion = '0.2.0'; @@ -36,9 +36,9 @@ export default function (providerContext: FtrProviderContext) { describe('updates all assets when updating a package to a different version', async () => { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); before(async () => { + await fleetAndAgents.setup(); await installPackage(pkgName, pkgVersion); await installPackage(pkgName, pkgUpdateVersion); }); diff --git a/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts b/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts index a2441b4532805..9e0a0873b4b91 100644 --- a/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/fleet_proxies/crud.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; @@ -16,6 +15,7 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); async function getLatestFleetPolicies(policyId: string): Promise { const policyDocRes = await es.search({ @@ -36,8 +36,8 @@ export default function (providerContext: FtrProviderContext) { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); await kibanaServer.savedObjects.cleanStandardList(); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); const existingId = 'test-default-123'; const fleetServerHostId = 'test-fleetserver-123'; diff --git a/x-pack/test/fleet_api_integration/apis/fleet_server_hosts/crud.ts b/x-pack/test/fleet_api_integration/apis/fleet_server_hosts/crud.ts index f17a894f859cc..2b806db92d6ea 100644 --- a/x-pack/test/fleet_api_integration/apis/fleet_server_hosts/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/fleet_server_hosts/crud.ts @@ -8,21 +8,21 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); describe('fleet_fleet_server_hosts_crud', async function () { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); await kibanaServer.savedObjects.cleanStandardList(); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); let defaultFleetServerHostId: string; diff --git a/x-pack/test/fleet_api_integration/apis/fleet_telemetry.ts b/x-pack/test/fleet_api_integration/apis/fleet_telemetry.ts index 03ae82d06f6b7..dad2f59fc8af9 100644 --- a/x-pack/test/fleet_api_integration/apis/fleet_telemetry.ts +++ b/x-pack/test/fleet_api_integration/apis/fleet_telemetry.ts @@ -13,7 +13,6 @@ import expect from '@kbn/expect'; import type { GetAgentsResponse } from '@kbn/fleet-plugin/common'; import { FtrProviderContext } from '../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry, generateAgent } from '../helpers'; -import { setupFleetAndAgents } from './agents/services'; const AGENT_COUNT_WAIT_ATTEMPTS = 3; @@ -22,6 +21,7 @@ export default function (providerContext: FtrProviderContext) { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); let agentCount = 0; let pkgVersion: string; @@ -30,10 +30,9 @@ export default function (providerContext: FtrProviderContext) { before(async () => { await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); - after(async () => { await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.unload('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); diff --git a/x-pack/test/fleet_api_integration/apis/integrations/elastic_agent.ts b/x-pack/test/fleet_api_integration/apis/integrations/elastic_agent.ts index 401c1b3714bd3..61e4b5e95443d 100644 --- a/x-pack/test/fleet_api_integration/apis/integrations/elastic_agent.ts +++ b/x-pack/test/fleet_api_integration/apis/integrations/elastic_agent.ts @@ -11,19 +11,20 @@ import { FLEET_ELASTIC_AGENT_PACKAGE } from '@kbn/fleet-plugin/common/constants/ import { DASHBOARD_LOCATORS_IDS } from '@kbn/fleet-plugin/common'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { describe('Install elastic_agent package', () => { const { getService } = providerContext; + const fleetAndAgents = getService('fleetAndAgents'); + skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); const kibanaServer = getService('kibanaServer'); const supertest = getService('supertest'); let pkgVersion: string; before(async () => { + await fleetAndAgents.setup(); const getPkRes = await supertest .get(`/api/fleet/epm/packages/${FLEET_ELASTIC_AGENT_PACKAGE}`) .set('kbn-xsrf', 'xxxx') diff --git a/x-pack/test/fleet_api_integration/apis/outputs/crud.ts b/x-pack/test/fleet_api_integration/apis/outputs/crud.ts index b830373e7dbbd..32e14db8f65e6 100644 --- a/x-pack/test/fleet_api_integration/apis/outputs/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/outputs/crud.ts @@ -14,7 +14,6 @@ import { import { v4 as uuidV4 } from 'uuid'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { enableSecrets, skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; @@ -22,6 +21,7 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); let pkgVersion: string; @@ -201,8 +201,8 @@ export default function (providerContext: FtrProviderContext) { before(async () => { await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); let defaultOutputId: string; let ESOutputId: string; diff --git a/x-pack/test/fleet_api_integration/apis/package_policy/input_package_create_upgrade.ts b/x-pack/test/fleet_api_integration/apis/package_policy/input_package_create_upgrade.ts index 1bdb664c3ec07..b6221313bee23 100644 --- a/x-pack/test/fleet_api_integration/apis/package_policy/input_package_create_upgrade.ts +++ b/x-pack/test/fleet_api_integration/apis/package_policy/input_package_create_upgrade.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { sortBy } from 'lodash'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; const PACKAGE_NAME = 'input_package_upgrade'; const START_VERSION = '1.0.0'; const UPGRADE_VERSION = '1.1.0'; @@ -20,6 +19,8 @@ export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); + const uninstallPackage = async (name: string, version: string) => { await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); }; @@ -176,6 +177,10 @@ export default function (providerContext: FtrProviderContext) { describe('Package Policy - input package behavior', async function () { skipIfNoDockerRegistry(providerContext); + before(async () => { + await fleetAndAgents.setup(); + }); + let agentPolicyId: string; beforeEach(async () => { await installPackage(PACKAGE_NAME, START_VERSION); @@ -188,7 +193,6 @@ export default function (providerContext: FtrProviderContext) { await uninstallPackage(PACKAGE_NAME, START_VERSION); }); - setupFleetAndAgents(providerContext); it('should not have created any ES assets on install', async () => { const installation = await getInstallationSavedObject(PACKAGE_NAME, START_VERSION); diff --git a/x-pack/test/fleet_api_integration/apis/package_policy/input_package_rollback.ts b/x-pack/test/fleet_api_integration/apis/package_policy/input_package_rollback.ts index f470b872a8e52..2f58f5e982dac 100644 --- a/x-pack/test/fleet_api_integration/apis/package_policy/input_package_rollback.ts +++ b/x-pack/test/fleet_api_integration/apis/package_policy/input_package_rollback.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { sortBy } from 'lodash'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; const PACKAGE_NAME = 'input_package_upgrade'; const START_VERSION = '1.0.0'; @@ -18,6 +17,8 @@ const expectIdArraysEqual = (arr1: any[], arr2: any[]) => { export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); + const uninstallPackage = async (name: string, version: string) => { await supertest.delete(`/api/fleet/epm/packages/${name}/${version}`).set('kbn-xsrf', 'xxxx'); }; @@ -109,12 +110,12 @@ export default function (providerContext: FtrProviderContext) { before(async () => { const agentPolicy = await createAgentPolicy(); agentPolicyId = agentPolicy.id; + await fleetAndAgents.setup(); }); after(async () => { await deleteAgentPolicy(agentPolicyId); }); - setupFleetAndAgents(providerContext); it('should rollback package install on package policy create failure', async () => { const res = await createPackagePolicyWithDataset(agentPolicyId, 'test*', 400); diff --git a/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts b/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts index 066d8fc93f1fd..60f0ef0ecdc3d 100644 --- a/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts +++ b/x-pack/test/fleet_api_integration/apis/package_policy/upgrade.ts @@ -12,7 +12,6 @@ import { import { sortBy } from 'lodash'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; const expectIdArraysEqual = (arr1: any[], arr2: any[]) => { expect(sortBy(arr1, 'id')).to.eql(sortBy(arr2, 'id')); @@ -24,6 +23,8 @@ export default function (providerContext: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const es = getService('es'); + const fleetAndAgents = getService('fleetAndAgents'); + function withTestPackage(name: string, version: string) { const pkgRoute = `/api/fleet/epm/packages/${name}/${version}`; before(async function () { @@ -62,6 +63,7 @@ export default function (providerContext: FtrProviderContext) { before(async () => { await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); after(async () => { @@ -71,8 +73,6 @@ export default function (providerContext: FtrProviderContext) { ); }); - setupFleetAndAgents(providerContext); - describe('when package version is not installed', function () { beforeEach(async function () { const { body: agentPolicyResponse } = await supertest diff --git a/x-pack/test/fleet_api_integration/apis/policy_secrets.ts b/x-pack/test/fleet_api_integration/apis/policy_secrets.ts index 86e32ca567413..0abeb46accd5a 100644 --- a/x-pack/test/fleet_api_integration/apis/policy_secrets.ts +++ b/x-pack/test/fleet_api_integration/apis/policy_secrets.ts @@ -18,7 +18,6 @@ import moment from 'moment'; import { v4 as uuidv4 } from 'uuid'; import { FtrProviderContext } from '../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../helpers'; -import { setupFleetAndAgents } from './agents/services'; const secretVar = (id: string) => `$co.elastic.secret{${id}}`; @@ -53,6 +52,7 @@ export default function (providerContext: FtrProviderContext) { const es: Client = getService('es'); const kibanaServer = getService('kibanaServer'); const supertest = getService('supertest'); + const fleetAndAgents = getService('fleetAndAgents'); const createAgentPolicy = async () => { const { body: agentPolicyResponse } = await supertest @@ -377,9 +377,9 @@ export default function (providerContext: FtrProviderContext) { }; skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); before(async () => { + await fleetAndAgents.setup(); await getService('esArchiver').load( 'x-pack/test/functional/es_archives/fleet/empty_fleet_server' ); diff --git a/x-pack/test/fleet_api_integration/apis/settings/enrollment.ts b/x-pack/test/fleet_api_integration/apis/settings/enrollment.ts index 046c5408dcbee..663f2889a9bfe 100644 --- a/x-pack/test/fleet_api_integration/apis/settings/enrollment.ts +++ b/x-pack/test/fleet_api_integration/apis/settings/enrollment.ts @@ -8,16 +8,19 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); + const fleetAndAgents = getService('fleetAndAgents'); describe('Enrollment settings - get', async function () { skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); + + before(async () => { + await fleetAndAgents.setup(); + }); it('should respond with empty enrollment settings on empty cluster', async function () { const response = await supertest diff --git a/x-pack/test/fleet_api_integration/apis/settings/get.ts b/x-pack/test/fleet_api_integration/apis/settings/get.ts index 3d6a3adb394c2..154fcb7fe0e8f 100644 --- a/x-pack/test/fleet_api_integration/apis/settings/get.ts +++ b/x-pack/test/fleet_api_integration/apis/settings/get.ts @@ -8,20 +8,20 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); describe('Settings - get', async function () { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); after(async () => { await kibanaServer.savedObjects.cleanStandardList(); diff --git a/x-pack/test/fleet_api_integration/apis/settings/update.ts b/x-pack/test/fleet_api_integration/apis/settings/update.ts index cc9f499967055..1a609373b4051 100644 --- a/x-pack/test/fleet_api_integration/apis/settings/update.ts +++ b/x-pack/test/fleet_api_integration/apis/settings/update.ts @@ -9,7 +9,6 @@ import expect from '@kbn/expect'; import { AGENT_POLICY_INDEX } from '@kbn/fleet-plugin/common'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; -import { setupFleetAndAgents } from '../agents/services'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; @@ -17,14 +16,15 @@ export default function (providerContext: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const esClient = getService('es'); const esArchiver = getService('esArchiver'); + const fleetAndAgents = getService('fleetAndAgents'); // Skipped as the Fleet Server hosts settings values are no longer used as of https://github.com/elastic/kibana/issues/137785 describe.skip('Settings - update', async function () { skipIfNoDockerRegistry(providerContext); before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); + await fleetAndAgents.setup(); }); - setupFleetAndAgents(providerContext); const createdAgentPolicyIds: string[] = []; after(async () => { diff --git a/x-pack/test/fleet_api_integration/apis/uninstall_token/privileges.ts b/x-pack/test/fleet_api_integration/apis/uninstall_token/privileges.ts index 25b23074bd7c1..d956a5aabe7b6 100644 --- a/x-pack/test/fleet_api_integration/apis/uninstall_token/privileges.ts +++ b/x-pack/test/fleet_api_integration/apis/uninstall_token/privileges.ts @@ -8,7 +8,6 @@ import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; import { runPrivilegeTests } from '../../privileges_helpers'; -import { setupFleetAndAgents } from '../agents/services'; import { testUsers } from '../test_users'; import { generateNAgentPolicies } from '../../helpers'; @@ -17,6 +16,7 @@ export default function (providerContext: FtrProviderContext) { const supertestWithoutAuth = getService('supertestWithoutAuth'); const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); + const fleetAndAgents = getService('fleetAndAgents'); describe('fleet_uninstall_token_privileges', () => { before(async () => { @@ -28,10 +28,10 @@ export default function (providerContext: FtrProviderContext) { }); before(async () => { await generateNAgentPolicies(supertest, 2); + await fleetAndAgents.setup(); }); skipIfNoDockerRegistry(providerContext); - setupFleetAndAgents(providerContext); const SCENARIOS = [ { From 7d632c5c8b944a4328def0de2cc83628c1c166b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Tue, 27 Aug 2024 18:37:19 +0200 Subject: [PATCH 17/74] chore(deps): upgrade `monaco` (#191305) --- package.json | 4 ++-- .../rules_table/rules_table_filtering.cy.ts | 4 ++-- .../cypress/e2e/explore/urls/state.cy.ts | 4 ++-- yarn.lock | 16 ++++++++-------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 95ad8e437e9d3..eb66b20245b44 100644 --- a/package.json +++ b/package.json @@ -1136,9 +1136,9 @@ "mime": "^2.4.4", "mime-types": "^2.1.27", "minimatch": "^3.1.2", - "moment": "^2.29.4", + "moment": "^2.30.1", "moment-duration-format": "^2.3.2", - "moment-timezone": "^0.5.43", + "moment-timezone": "^0.5.45", "monaco-editor": "^0.44.0", "monaco-yaml": "^5.1.0", "murmurhash": "^2.0.1", diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_filtering.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_filtering.cy.ts index 117fc0eee632b..f23f703e3815a 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_filtering.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/rule_management/rules_table/rules_table_filtering.cy.ts @@ -73,8 +73,8 @@ describe('Rules table: filtering', { tags: ['@ess', '@serverless'] }, () => { name: 'Failed rule', rule_id: 'failed_rule', index: ['test_index'], - // Setting a crazy large "Additional look-back time" to force a failure - from: 'now-9007199254746990s', + // Setting a malformed query to force a failure + query: 'host.name: "*', enabled: true, }) ); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/urls/state.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/urls/state.cy.ts index 4e34fedb1dd43..7531cf30a7752 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/urls/state.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/urls/state.cy.ts @@ -59,8 +59,8 @@ const ABSOLUTE_DATE = { endTime: 'Aug 1, 2019 @ 20:33:29.186', endTimeTimeline: '2019-08-02T21:03:29.186Z', endTimeTimelineFormatted: 'Aug 2, 2019 @ 21:03:29.186', - newEndTimeTyped: 'Aug 01, 2019 @ 15:03:29.186', - newStartTimeTyped: 'Aug 01, 2019 @ 14:33:29.186', + newEndTimeTyped: 'Aug 1, 2019 @ 15:03:29.186', + newStartTimeTyped: 'Aug 1, 2019 @ 14:33:29.186', startTime: 'Aug 1, 2019 @ 20:03:29.186', startTimeTimeline: '2019-08-02T20:03:29.186Z', startTimeTimelineFormatted: 'Aug 2, 2019 @ 20:03:29.186', diff --git a/yarn.lock b/yarn.lock index 4ee86f1601adb..d7e0e3503bd94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23448,17 +23448,17 @@ moment-duration-format@^2.3.2: resolved "https://registry.yarnpkg.com/moment-duration-format/-/moment-duration-format-2.3.2.tgz#5fa2b19b941b8d277122ff3f87a12895ec0d6212" integrity sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ== -moment-timezone@^0.5.43: - version "0.5.43" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.43.tgz#3dd7f3d0c67f78c23cd1906b9b2137a09b3c4790" - integrity sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ== +moment-timezone@^0.5.45: + version "0.5.45" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" + integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== dependencies: moment "^2.29.4" -moment@>=2.14.0, moment@^2.10.6, moment@^2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +moment@>=2.14.0, moment@^2.10.6, moment@^2.29.4, moment@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== monaco-editor@^0.44.0: version "0.44.0" From b02f6dbcc5e260adb17f3824bc2c122b41dd93fa Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Tue, 27 Aug 2024 13:36:33 -0400 Subject: [PATCH 18/74] [Collapsable Panels] Better Scrolling for kbn grid layout (#191120) changes `kbn grid layout` to allow better scrolling behaviour. --- .i18nrc.json | 1 + examples/grid_example/public/app.tsx | 6 +- .../grid/grid_height_smoother.tsx | 56 ++++++++ packages/kbn-grid-layout/grid/grid_layout.tsx | 93 +++++------- .../kbn-grid-layout/grid/grid_overlay.tsx | 134 ++++++++++++++++++ packages/kbn-grid-layout/grid/grid_panel.tsx | 29 +--- packages/kbn-grid-layout/grid/grid_row.tsx | 4 + packages/kbn-grid-layout/grid/types.ts | 2 + .../grid/use_grid_layout_events.ts | 59 +++----- .../grid/use_grid_layout_state.ts | 105 +++++++------- packages/kbn-grid-layout/tsconfig.json | 1 + 11 files changed, 320 insertions(+), 170 deletions(-) create mode 100644 packages/kbn-grid-layout/grid/grid_height_smoother.tsx create mode 100644 packages/kbn-grid-layout/grid/grid_overlay.tsx diff --git a/.i18nrc.json b/.i18nrc.json index 59e33320eeea1..7707bfdcde172 100644 --- a/.i18nrc.json +++ b/.i18nrc.json @@ -33,6 +33,7 @@ "presentationPanel": "src/plugins/presentation_panel", "embeddableExamples": "examples/embeddable_examples", "esQuery": "packages/kbn-es-query/src", + "kbnGridLayout": "packages/kbn-grid-layout", "esUi": "src/plugins/es_ui_shared", "expandableFlyout": "packages/kbn-expandable-flyout", "expressionError": "src/plugins/expression_error", diff --git a/examples/grid_example/public/app.tsx b/examples/grid_example/public/app.tsx index 8c26ecf8f1e2a..c10d740b8dc3f 100644 --- a/examples/grid_example/public/app.tsx +++ b/examples/grid_example/public/app.tsx @@ -15,9 +15,9 @@ import { EuiPageTemplate, EuiProvider } from '@elastic/eui'; export const GridExample = () => { return ( - + - + { return
{id}
; @@ -41,7 +41,7 @@ export const GridExample = () => { { title: 'Small section', isCollapsed: false, - panels: { panel9: { column: 0, row: 0, width: 12, height: 6, id: 'panel9' } }, + panels: { panel9: { column: 0, row: 0, width: 12, height: 16, id: 'panel9' } }, }, { title: 'Another small section', diff --git a/packages/kbn-grid-layout/grid/grid_height_smoother.tsx b/packages/kbn-grid-layout/grid/grid_height_smoother.tsx new file mode 100644 index 0000000000000..238d8996ae15e --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_height_smoother.tsx @@ -0,0 +1,56 @@ +/* + * 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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { css } from '@emotion/react'; +import React, { PropsWithChildren, useEffect, useRef } from 'react'; +import { combineLatest } from 'rxjs'; +import { GridLayoutStateManager } from './types'; + +export const GridHeightSmoother = ({ + children, + gridLayoutStateManager, +}: PropsWithChildren<{ gridLayoutStateManager: GridLayoutStateManager }>) => { + // set the parent div size directly to smooth out height changes. + const smoothHeightRef = useRef(null); + useEffect(() => { + const subscription = combineLatest([ + gridLayoutStateManager.gridDimensions$, + gridLayoutStateManager.interactionEvent$, + ]).subscribe(([dimensions, interactionEvent]) => { + if (!smoothHeightRef.current) return; + if (!interactionEvent) { + smoothHeightRef.current.style.height = `${dimensions.height}px`; + return; + } + + /** + * When the user is interacting with an element, the page can grow, but it cannot + * shrink. This is to stop a behaviour where the page would scroll up automatically + * making the panel shrink or grow unpredictably. + */ + smoothHeightRef.current.style.height = `${Math.max( + dimensions.height ?? 0, + smoothHeightRef.current.getBoundingClientRect().height + )}px`; + }); + return () => subscription.unsubscribe(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( +
+ {children} +
+ ); +}; diff --git a/packages/kbn-grid-layout/grid/grid_layout.tsx b/packages/kbn-grid-layout/grid/grid_layout.tsx index 68650035f7b44..78259b1556c3e 100644 --- a/packages/kbn-grid-layout/grid/grid_layout.tsx +++ b/packages/kbn-grid-layout/grid/grid_layout.tsx @@ -6,11 +6,10 @@ * Side Public License, v 1. */ -import { EuiPortal, transparentize } from '@elastic/eui'; -import { css } from '@emotion/react'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; -import { euiThemeVars } from '@kbn/ui-theme'; import React from 'react'; +import { GridHeightSmoother } from './grid_height_smoother'; +import { GridOverlay } from './grid_overlay'; import { GridRow } from './grid_row'; import { GridLayoutData, GridSettings } from './types'; import { useGridLayoutEvents } from './use_grid_layout_events'; @@ -23,7 +22,7 @@ export const GridLayout = ({ getCreationOptions: () => { initialLayout: GridLayoutData; gridSettings: GridSettings }; renderPanelContents: (panelId: string) => React.ReactNode; }) => { - const { gridLayoutStateManager, gridSizeRef } = useGridLayoutState({ + const { gridLayoutStateManager, setDimensionsRef } = useGridLayoutState({ getCreationOptions, }); useGridLayoutEvents({ gridLayoutStateManager }); @@ -35,58 +34,44 @@ export const GridLayout = ({ ); return ( -
- {gridLayout.map((rowData, rowIndex) => { - return ( - { - const currentLayout = gridLayoutStateManager.gridLayout$.value; - currentLayout[rowIndex].isCollapsed = !currentLayout[rowIndex].isCollapsed; - gridLayoutStateManager.gridLayout$.next(currentLayout); - }} - setInteractionEvent={(nextInteractionEvent) => { - if (!nextInteractionEvent) { - gridLayoutStateManager.hideDragPreview(); - } - gridLayoutStateManager.interactionEvent$.next(nextInteractionEvent); - }} - ref={(element) => (gridLayoutStateManager.rowRefs.current[rowIndex] = element)} - /> - ); - })} - + <> +
{ + setDimensionsRef(divElement); + }} > -
+ {gridLayout.map((rowData, rowIndex) => { + return ( + { + const currentLayout = gridLayoutStateManager.gridLayout$.value; + currentLayout[rowIndex].isCollapsed = !currentLayout[rowIndex].isCollapsed; + gridLayoutStateManager.gridLayout$.next(currentLayout); + }} + setInteractionEvent={(nextInteractionEvent) => { + if (!nextInteractionEvent) { + gridLayoutStateManager.hideDragPreview(); + } + gridLayoutStateManager.interactionEvent$.next(nextInteractionEvent); + }} + ref={(element) => (gridLayoutStateManager.rowRefs.current[rowIndex] = element)} + /> + ); + })}
- -
+
+ + ); }; diff --git a/packages/kbn-grid-layout/grid/grid_overlay.tsx b/packages/kbn-grid-layout/grid/grid_overlay.tsx new file mode 100644 index 0000000000000..3050b721abcb2 --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_overlay.tsx @@ -0,0 +1,134 @@ +/* + * 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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { EuiPortal, EuiText, transparentize } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; +import { euiThemeVars } from '@kbn/ui-theme'; +import React, { useRef, useState } from 'react'; +import { GridLayoutStateManager, PanelInteractionEvent } from './types'; + +type ScrollDirection = 'up' | 'down'; + +const scrollLabels: { [key in ScrollDirection]: string } = { + up: i18n.translate('kbnGridLayout.overlays.scrollUpLabel', { defaultMessage: 'Scroll up' }), + down: i18n.translate('kbnGridLayout.overlays.scrollDownLabel', { defaultMessage: 'Scroll down' }), +}; + +const scrollOnInterval = (direction: ScrollDirection) => { + const interval = setInterval(() => { + window.scroll({ + top: window.scrollY + (direction === 'down' ? 50 : -50), + behavior: 'smooth', + }); + }, 100); + return interval; +}; + +const ScrollOnHover = ({ direction, hide }: { hide: boolean; direction: ScrollDirection }) => { + const [isActive, setIsActive] = useState(false); + const scrollInterval = useRef(null); + const stopScrollInterval = () => { + if (scrollInterval.current) { + clearInterval(scrollInterval.current); + } + }; + + return ( +
{ + setIsActive(true); + scrollInterval.current = scrollOnInterval(direction); + }} + onMouseLeave={() => { + setIsActive(false); + stopScrollInterval(); + }} + css={css` + width: 100%; + position: fixed; + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + opacity: ${hide ? 0 : 1}; + transition: opacity 100ms linear; + padding: ${euiThemeVars.euiSizeM}; + ${direction === 'down' ? 'bottom: 0;' : 'top: 0;'} + `} + > + {direction === 'up' && ( +
+ )} +
+ + {scrollLabels[direction]} + +
+
+ ); +}; + +export const GridOverlay = ({ + interactionEvent, + gridLayoutStateManager, +}: { + interactionEvent?: PanelInteractionEvent; + gridLayoutStateManager: GridLayoutStateManager; +}) => { + return ( + +
+ + +
+
+ + ); +}; diff --git a/packages/kbn-grid-layout/grid/grid_panel.tsx b/packages/kbn-grid-layout/grid/grid_panel.tsx index a0f53cef8869c..fc1ab5cb1e619 100644 --- a/packages/kbn-grid-layout/grid/grid_panel.tsx +++ b/packages/kbn-grid-layout/grid/grid_panel.tsx @@ -30,15 +30,13 @@ export const GridPanel = ({ setInteractionEvent: (interactionData?: Omit) => void; }) => { const panelRef = useRef(null); - const ghostRef = useRef(null); const thisPanelActive = activePanelId === panelData.id; const interactionStart = useCallback( - (type: 'drag' | 'resize', e: React.DragEvent) => { - if (!panelRef.current || !ghostRef.current) return; - e.dataTransfer.effectAllowed = 'move'; - e.dataTransfer.dropEffect = 'move'; - e.dataTransfer.setDragImage(ghostRef.current, 0, 0); + (type: 'drag' | 'resize', e: React.MouseEvent) => { + if (!panelRef.current) return; + e.preventDefault(); + e.stopPropagation(); const panelRect = panelRef.current.getBoundingClientRect(); setInteractionEvent({ type, @@ -83,22 +81,8 @@ export const GridPanel = ({ } `} > - {/* Hidden dragging ghost */} -
{/* drag handle */}
) => interactionStart('drag', e)} + onMouseDown={(e) => interactionStart('drag', e)} >
{/* Resize handle */}
interactionStart('resize', e)} + onMouseDown={(e) => interactionStart('resize', e)} css={css` right: 0; bottom: 0; diff --git a/packages/kbn-grid-layout/grid/grid_row.tsx b/packages/kbn-grid-layout/grid/grid_row.tsx index 3f2676a1db6ba..ce2d226fc2cb8 100644 --- a/packages/kbn-grid-layout/grid/grid_row.tsx +++ b/packages/kbn-grid-layout/grid/grid_row.tsx @@ -8,6 +8,7 @@ import { EuiButtonIcon, EuiFlexGroup, EuiSpacer, EuiTitle, transparentize } from '@elastic/eui'; import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; import { euiThemeVars } from '@kbn/ui-theme'; import React, { forwardRef, useMemo } from 'react'; import { GridPanel } from './grid_panel'; @@ -69,6 +70,9 @@ export const GridRow = forwardRef< diff --git a/packages/kbn-grid-layout/grid/types.ts b/packages/kbn-grid-layout/grid/types.ts index e3119f6e1cfd2..1ef9b69fc997e 100644 --- a/packages/kbn-grid-layout/grid/types.ts +++ b/packages/kbn-grid-layout/grid/types.ts @@ -7,6 +7,7 @@ */ import { BehaviorSubject } from 'rxjs'; +import type { ObservedSize } from 'use-resize-observer/polyfilled'; export interface GridCoordinate { column: number; row: number; @@ -53,6 +54,7 @@ export interface GridLayoutStateManager { right: number; }) => void; + gridDimensions$: BehaviorSubject; gridLayout$: BehaviorSubject; runtimeSettings$: BehaviorSubject; rowRefs: React.MutableRefObject>; diff --git a/packages/kbn-grid-layout/grid/use_grid_layout_events.ts b/packages/kbn-grid-layout/grid/use_grid_layout_events.ts index c8c1a505fc13a..11e514674f883 100644 --- a/packages/kbn-grid-layout/grid/use_grid_layout_events.ts +++ b/packages/kbn-grid-layout/grid/use_grid_layout_events.ts @@ -25,7 +25,7 @@ export const useGridLayoutEvents = ({ }: { gridLayoutStateManager: GridLayoutStateManager; }) => { - const dragEnterCount = useRef(0); + const mouseClientPosition = useRef({ x: 0, y: 0 }); const lastRequestedPanelPosition = useRef(undefined); // ----------------------------------------------------------------------------------------- @@ -33,7 +33,8 @@ export const useGridLayoutEvents = ({ // ----------------------------------------------------------------------------------------- useEffect(() => { const { runtimeSettings$, interactionEvent$, gridLayout$ } = gridLayoutStateManager; - const dragOver = (e: MouseEvent) => { + const calculateUserEvent = (e: Event) => { + if (!interactionEvent$.value) return; e.preventDefault(); e.stopPropagation(); @@ -51,17 +52,14 @@ export const useGridLayoutEvents = ({ } })(); - if ( - !runtimeSettings$.value || - !interactionEvent || - !previewElement || - !gridRowElements || - !currentGridData - ) { + if (!runtimeSettings$.value || !previewElement || !gridRowElements || !currentGridData) { return; } - const mouseTargetPixel = { x: e.clientX, y: e.clientY }; + const mouseTargetPixel = { + x: mouseClientPosition.current.x, + y: mouseClientPosition.current.y, + }; const panelRect = interactionEvent.panelDiv.getBoundingClientRect(); const previewRect = { left: isResize ? panelRect.left : mouseTargetPixel.x - interactionEvent.mouseOffsets.left, @@ -159,46 +157,27 @@ export const useGridLayoutEvents = ({ } }; - const onDrop = (e: MouseEvent) => { + const onMouseUp = (e: MouseEvent) => { + if (!interactionEvent$.value) return; e.preventDefault(); e.stopPropagation(); - if (!interactionEvent$.value) return; interactionEvent$.next(undefined); gridLayoutStateManager.hideDragPreview(); - dragEnterCount.current = 0; }; - const onDragEnter = (e: MouseEvent) => { - e.preventDefault(); - e.stopPropagation(); - if (!interactionEvent$.value) return; - - dragEnterCount.current++; - }; - - const onDragLeave = (e: MouseEvent) => { - e.preventDefault(); - e.stopPropagation(); - if (!interactionEvent$.value) return; - - dragEnterCount.current--; - if (dragEnterCount.current === 0) { - interactionEvent$.next(undefined); - gridLayoutStateManager.hideDragPreview(); - dragEnterCount.current = 0; - } + const onMouseMove = (e: MouseEvent) => { + mouseClientPosition.current = { x: e.clientX, y: e.clientY }; + calculateUserEvent(e); }; - window.addEventListener('drop', onDrop); - window.addEventListener('dragover', dragOver); - window.addEventListener('dragenter', onDragEnter); - window.addEventListener('dragleave', onDragLeave); + document.addEventListener('mouseup', onMouseUp); + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('scroll', calculateUserEvent); return () => { - window.removeEventListener('drop', dragOver); - window.removeEventListener('dragover', dragOver); - window.removeEventListener('dragenter', onDragEnter); - window.removeEventListener('dragleave', onDragLeave); + document.removeEventListener('mouseup', onMouseUp); + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('scroll', calculateUserEvent); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); diff --git a/packages/kbn-grid-layout/grid/use_grid_layout_state.ts b/packages/kbn-grid-layout/grid/use_grid_layout_state.ts index bad259b428892..182eb2a88cec8 100644 --- a/packages/kbn-grid-layout/grid/use_grid_layout_state.ts +++ b/packages/kbn-grid-layout/grid/use_grid_layout_state.ts @@ -6,10 +6,9 @@ * Side Public License, v 1. */ -import { debounce } from 'lodash'; -import { useMemo, useRef } from 'react'; -import { BehaviorSubject } from 'rxjs'; -import useResizeObserver from 'use-resize-observer/polyfilled'; +import { useEffect, useMemo, useRef } from 'react'; +import { BehaviorSubject, debounceTime } from 'rxjs'; +import useResizeObserver, { type ObservedSize } from 'use-resize-observer/polyfilled'; import { GridLayoutData, GridLayoutStateManager, @@ -24,71 +23,77 @@ export const useGridLayoutState = ({ getCreationOptions: () => { initialLayout: GridLayoutData; gridSettings: GridSettings }; }): { gridLayoutStateManager: GridLayoutStateManager; - gridSizeRef: (instance: HTMLDivElement | null) => void; + setDimensionsRef: (instance: HTMLDivElement | null) => void; } => { const rowRefs = useRef>([]); const dragPreviewRef = useRef(null); - const { gridLayoutStateManager, onWidthChange } = useMemo(() => { - const { initialLayout, gridSettings } = getCreationOptions(); + // eslint-disable-next-line react-hooks/exhaustive-deps + const { initialLayout, gridSettings } = useMemo(() => getCreationOptions(), []); + + const gridLayoutStateManager = useMemo(() => { const gridLayout$ = new BehaviorSubject(initialLayout); + const gridDimensions$ = new BehaviorSubject({ width: 0, height: 0 }); const interactionEvent$ = new BehaviorSubject(undefined); const runtimeSettings$ = new BehaviorSubject({ ...gridSettings, columnPixelWidth: 0, }); - // debounce width changes to avoid re-rendering too frequently when the browser is resizing - const widthChange = debounce((elementWidth: number) => { - const columnPixelWidth = - (elementWidth - gridSettings.gutterSize * (gridSettings.columnCount - 1)) / - gridSettings.columnCount; - runtimeSettings$.next({ ...gridSettings, columnPixelWidth }); - }, 250); - return { - gridLayoutStateManager: { - rowRefs, - gridLayout$, - dragPreviewRef, - runtimeSettings$, - interactionEvent$, - updatePreviewElement: (previewRect: { - top: number; - bottom: number; - left: number; - right: number; - }) => { - if (!dragPreviewRef.current) return; - dragPreviewRef.current.style.opacity = '1'; - dragPreviewRef.current.style.left = `${previewRect.left}px`; - dragPreviewRef.current.style.top = `${previewRect.top}px`; - dragPreviewRef.current.style.width = `${Math.max( - previewRect.right - previewRect.left, - runtimeSettings$.value.columnPixelWidth - )}px`; - dragPreviewRef.current.style.height = `${Math.max( - previewRect.bottom - previewRect.top, - runtimeSettings$.value.rowHeight - )}px`; - }, - hideDragPreview: () => { - if (!dragPreviewRef.current) return; - dragPreviewRef.current.style.opacity = '0'; - }, + rowRefs, + gridLayout$, + dragPreviewRef, + gridDimensions$, + runtimeSettings$, + interactionEvent$, + updatePreviewElement: (previewRect: { + top: number; + bottom: number; + left: number; + right: number; + }) => { + if (!dragPreviewRef.current) return; + dragPreviewRef.current.style.opacity = '1'; + dragPreviewRef.current.style.left = `${previewRect.left}px`; + dragPreviewRef.current.style.top = `${previewRect.top}px`; + dragPreviewRef.current.style.width = `${Math.max( + previewRect.right - previewRect.left, + runtimeSettings$.value.columnPixelWidth + )}px`; + dragPreviewRef.current.style.height = `${Math.max( + previewRect.bottom - previewRect.top, + runtimeSettings$.value.rowHeight + )}px`; + }, + hideDragPreview: () => { + if (!dragPreviewRef.current) return; + dragPreviewRef.current.style.opacity = '0'; }, - onWidthChange: widthChange, }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - const { ref: gridSizeRef } = useResizeObserver({ + useEffect(() => { + // debounce width changes to avoid unnecessary column width recalculation. + const subscription = gridLayoutStateManager.gridDimensions$ + .pipe(debounceTime(250)) + .subscribe((dimensions) => { + const elementWidth = dimensions.width ?? 0; + const columnPixelWidth = + (elementWidth - gridSettings.gutterSize * (gridSettings.columnCount - 1)) / + gridSettings.columnCount; + gridLayoutStateManager.runtimeSettings$.next({ ...gridSettings, columnPixelWidth }); + }); + return () => subscription.unsubscribe(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const { ref: setDimensionsRef } = useResizeObserver({ onResize: (dimensions) => { - if (dimensions.width) { - onWidthChange(dimensions.width); - } + gridLayoutStateManager.gridDimensions$.next(dimensions); }, }); - return { gridLayoutStateManager, gridSizeRef }; + return { gridLayoutStateManager, setDimensionsRef }; }; diff --git a/packages/kbn-grid-layout/tsconfig.json b/packages/kbn-grid-layout/tsconfig.json index 3aff3ea3aa354..5a1888db0dc64 100644 --- a/packages/kbn-grid-layout/tsconfig.json +++ b/packages/kbn-grid-layout/tsconfig.json @@ -19,5 +19,6 @@ "kbn_references": [ "@kbn/presentation-publishing", "@kbn/ui-theme", + "@kbn/i18n", ] } From 8d5d3455d591b69602cd7370c2fcdc02348d777e Mon Sep 17 00:00:00 2001 From: "Mark J. Hoy" Date: Tue, 27 Aug 2024 13:52:36 -0400 Subject: [PATCH 19/74] [Search] Remove Dashboard and Search App Buttons When Gated Form is Showing (#191519) ## Summary When the Workplace Search interstitial form is showing, we have buttons to the user's personal dashboard and search applications - but, since Workplace Search is not set up yet, these buttons go to a 404. This PR hides these buttons only for the gate form. ![image](https://github.com/user-attachments/assets/7f9b0b89-f30a-4802-b03f-c9c88871b06a) ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --- .../layout/kibana_header_actions.test.tsx | 25 +++++++++++++++++++ .../layout/kibana_header_actions.tsx | 17 +++++++++++++ 2 files changed, 42 insertions(+) diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/kibana_header_actions.test.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/kibana_header_actions.test.tsx index 58b5065e7dbda..17739a7791b56 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/kibana_header_actions.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/kibana_header_actions.test.tsx @@ -5,6 +5,8 @@ * 2.0. */ +import { setMockValues } from '../../../__mocks__/kea_logic'; + import React from 'react'; import { shallow } from 'enzyme'; @@ -16,7 +18,13 @@ import { WorkplaceSearchHeaderActions } from '.'; describe('WorkplaceSearchHeaderActions', () => { const ENT_SEARCH_URL = 'http://localhost:3002'; + beforeEach(() => { + jest.clearAllMocks(); + setMockValues({ dataLoading: false, organization: { kibanaUIsEnabled: true } }); + }); + it('does not render without an Enterprise Search URL set', () => { + setMockValues({ dataLoading: false, organization: {} }); const wrapper = shallow(); expect(wrapper.isEmptyRender()).toBe(true); @@ -39,4 +47,21 @@ describe('WorkplaceSearchHeaderActions', () => { 'http://localhost:3002/ws/search' ); }); + + it('renders the dashboard and search button when not gated', () => { + externalUrl.enterpriseSearchUrl = ENT_SEARCH_URL; + const wrapper = shallow(); + + expect(wrapper.find('[data-test-subj="PersonalDashboardButton"]').exists()).toBe(true); + expect(wrapper.find('[data-test-subj="HeaderSearchButton"]').exists()).toBe(true); + }); + + it('does not render the dashboard and search button on the gated form', () => { + externalUrl.enterpriseSearchUrl = ENT_SEARCH_URL; + setMockValues({ dataLoading: false, organization: { kibanaUIsEnabled: false } }); + const wrapper = shallow(); + + expect(wrapper.find('[data-test-subj="PersonalDashboardButton"]').exists()).toBe(false); + expect(wrapper.find('[data-test-subj="HeaderSearchButton"]').exists()).toBe(false); + }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/kibana_header_actions.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/kibana_header_actions.tsx index d1eb78b184223..d113df570f445 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/kibana_header_actions.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/components/layout/kibana_header_actions.tsx @@ -7,17 +7,34 @@ import React from 'react'; +import { useValues } from 'kea'; + import { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { externalUrl, getWorkplaceSearchUrl } from '../../../shared/enterprise_search_url'; import { EndpointsHeaderAction } from '../../../shared/layout/endpoints_header_action'; import { EuiButtonEmptyTo } from '../../../shared/react_router_helpers'; +import { AppLogic } from '../../app_logic'; import { NAV } from '../../constants'; import { PRIVATE_SOURCES_PATH } from '../../routes'; export const WorkplaceSearchHeaderActions: React.FC = () => { + const { + organization: { kibanaUIsEnabled }, + } = useValues(AppLogic); + if (!externalUrl.enterpriseSearchUrl) return null; + if (!kibanaUIsEnabled) { + // we can't just return a null here as it will not render + // the Endpoints and Keys flyout button + return ( + + <> + + ); + } + return ( From dc6550236b714a571246fa80a493871690c0b4af Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Tue, 27 Aug 2024 21:40:03 +0300 Subject: [PATCH 20/74] fix: [AXE-CORE][Serverless - Observability] Observability -> AIOps->Anomaly Detection page fails scope attribute should be used correctly a11y check (#191297) Closes: https://github.com/elastic/kibana/issues/188859 ## Describe the Bug: On the Observability -> AIOps -> Anomaly Detection page, the `scope` attribute is incorrectly used, failing the a11y check. **Element location:** ``` .euiTableRow.euiTableRow-isSelectable.euiTableRow-hasActions:nth-child(1) > .css-dmrba8-euiTableRowCell-middle-desktop[scope="row"][data-test-subj="mlJobListColumnId"] ``` ## What Was Changed: 1. The incorrect `scope: 'row'` attribute was removed. 2. Added `rowHeader="id"`. ## Screen: image > No issues in AXE report image --- .../components/analytics_list/analytics_list.tsx | 1 + .../components/analytics_list/use_columns.tsx | 1 - .../jobs/jobs_list/components/jobs_list/jobs_list.js | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx index e0a12f4187ab3..19d4d3a55f732 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx @@ -278,6 +278,7 @@ export const DataFrameAnalyticsList: FC = ({
+ rowHeader={DataFrameAnalyticsListColumn.id} allowNeutralSort={false} columns={columns} itemIdToExpandedRowMap={itemIdToExpandedRowMap} diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_columns.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_columns.tsx index 0f9b1dab9e491..fb9731c347aca 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_columns.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_columns.tsx @@ -216,7 +216,6 @@ export const useColumns = ( sortable: (item: DataFrameAnalyticsListRow) => item.id, truncateText: { lines: TRUNCATE_TEXT_LINES }, 'data-test-subj': 'mlAnalyticsTableColumnId', - scope: 'row', render: (id: string) => { return {id}; }, diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js index c746d8003ce6b..b72bbf41269cc 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js @@ -170,7 +170,6 @@ export class JobsList extends Component { sortable: true, truncateText: false, width: '15%', - scope: 'row', render: (id, item) => { if (!isManagedJob(item)) return id; @@ -395,6 +394,7 @@ export class JobsList extends Component { 'data-test-subj': `mlJobListRow row-${item.id}`, })} css={{ '.euiTableRow-isExpandedRow .euiTableCellContent': { animation: 'none' } }} + rowHeader="id" /> ); } From 489a50d674c6ca3e87e9209d8ca4825280aee598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Tue, 27 Aug 2024 21:09:10 +0200 Subject: [PATCH 21/74] [FullStory] Hold from capturing until optin confirmation (#191091) --- package.json | 2 +- .../cloud_full_story/public/plugin.test.ts | 2 ++ .../cloud_full_story/public/plugin.ts | 2 ++ yarn.lock | 33 +++++++++---------- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index eb66b20245b44..7ca0a053cf5ff 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "@elastic/apm-rum-react": "^2.0.3", "@elastic/charts": "66.1.1", "@elastic/datemath": "5.0.3", - "@elastic/ebt": "1.0.0", + "@elastic/ebt": "^1.1.1", "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.15.0", "@elastic/ems-client": "8.5.3", diff --git a/x-pack/plugins/cloud_integrations/cloud_full_story/public/plugin.test.ts b/x-pack/plugins/cloud_integrations/cloud_full_story/public/plugin.test.ts index b0abbbe568d21..8409a8275ef19 100644 --- a/x-pack/plugins/cloud_integrations/cloud_full_story/public/plugin.test.ts +++ b/x-pack/plugins/cloud_integrations/cloud_full_story/public/plugin.test.ts @@ -52,6 +52,7 @@ describe('Cloud Plugin', () => { fullStoryOrgId: 'foo', scriptUrl: '/internal/cloud/100/fullstory.js', namespace: 'FSKibana', + captureOnStartup: false, }); }); @@ -66,6 +67,7 @@ describe('Cloud Plugin', () => { pageVarsDebounceTimeMs: 500, scriptUrl: '/internal/cloud/100/fullstory.js', namespace: 'FSKibana', + captureOnStartup: false, }); }); diff --git a/x-pack/plugins/cloud_integrations/cloud_full_story/public/plugin.ts b/x-pack/plugins/cloud_integrations/cloud_full_story/public/plugin.ts index 420346c19b3ce..05a635d782c0e 100755 --- a/x-pack/plugins/cloud_integrations/cloud_full_story/public/plugin.ts +++ b/x-pack/plugins/cloud_integrations/cloud_full_story/public/plugin.ts @@ -85,6 +85,8 @@ export class CloudFullStoryPlugin implements Plugin { `/internal/cloud/${this.initializerContext.env.packageInfo.buildNum}/fullstory.js` ), namespace: 'FSKibana', + // Tell FullStory to not capture from the start, and wait for the opt-in confirmation + captureOnStartup: false, }); } } diff --git a/yarn.lock b/yarn.lock index d7e0e3503bd94..c61a66aeaeebe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1334,10 +1334,10 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.24.1", "@babel/runtime@^7.24.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" - integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.24.1", "@babel/runtime@^7.24.7", "@babel/runtime@^7.25.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== dependencies: regenerator-runtime "^0.14.0" @@ -1675,20 +1675,19 @@ dependencies: tslib "^1.9.3" -"@elastic/ebt@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@elastic/ebt/-/ebt-1.0.0.tgz#49a3772363c0e6e180e451a4aa24e219add4a6f3" - integrity sha512-/M3/bW8Kk4osYWM7xx5R0ePH1xr1fLER36bkw/HY8vHlHv+WCHnyLhL1yqQdCrq+eVunAPcoGawHXgi52SV05A== +"@elastic/ebt@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@elastic/ebt/-/ebt-1.1.1.tgz#48c46c3860e2f1937f53fb718a26e5a5a7b9c76c" + integrity sha512-r809op8EdzOV57Jrt+r3YObKueVEDcAwoBLaeUx/IYoJF9lLNEbI8XIVccnvNJwTxaFpc3z3qLyZye0/T5k5/w== dependencies: - "@babel/runtime" "^7.24.7" + "@babel/runtime" "^7.25.0" fp-ts "^2.3.1" io-ts "^2.0.5" lodash.get "^4.4.2" lodash.has "^4.5.2" - moment "^2.29.4" + moment "^2.30.1" node-fetch "^2.6.7" - rxjs "^7.5.5" - typescript "^5.5.4" + rxjs "^7.8.1" "@elastic/ecs-helpers@^2.1.1": version "2.1.1" @@ -27813,10 +27812,10 @@ rxjs@^6.4.0, rxjs@^6.6.0, rxjs@^6.6.7: dependencies: tslib "^1.9.0" -rxjs@^7.4.0, rxjs@^7.5.5: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== +rxjs@^7.4.0, rxjs@^7.5.5, rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" @@ -30649,7 +30648,7 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@5, typescript@5.1.6, typescript@^3.3.3333, typescript@^5.0.4, typescript@^5.5.4: +typescript@5, typescript@5.1.6, typescript@^3.3.3333, typescript@^5.0.4: version "5.1.6" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== From e2a03811179a00d54753408834a74bc3c1d37ec2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Tue, 27 Aug 2024 21:38:17 +0200 Subject: [PATCH 22/74] [Move `@kbn/config-schema` to server] `maps` (#191523) --- x-pack/plugins/maps/public/index.ts | 2 +- x-pack/plugins/maps/public/kibana_services.ts | 2 +- x-pack/plugins/maps/public/plugin.ts | 2 +- x-pack/plugins/maps/{ => server}/config.ts | 0 x-pack/plugins/maps/server/index.ts | 2 +- x-pack/plugins/maps/server/plugin.ts | 2 +- x-pack/plugins/maps/tsconfig.json | 4 ++-- 7 files changed, 7 insertions(+), 7 deletions(-) rename x-pack/plugins/maps/{ => server}/config.ts (100%) diff --git a/x-pack/plugins/maps/public/index.ts b/x-pack/plugins/maps/public/index.ts index fc6c3b0fc7616..90eee7980501c 100644 --- a/x-pack/plugins/maps/public/index.ts +++ b/x-pack/plugins/maps/public/index.ts @@ -8,7 +8,7 @@ import { PluginInitializer } from '@kbn/core/public'; import { PluginInitializerContext } from '@kbn/core/public'; import { MapsPlugin, MapsPluginSetup, MapsPluginStart } from './plugin'; -import { MapsXPackConfig } from '../config'; +import type { MapsXPackConfig } from '../server/config'; export const plugin: PluginInitializer = ( initContext: PluginInitializerContext diff --git a/x-pack/plugins/maps/public/kibana_services.ts b/x-pack/plugins/maps/public/kibana_services.ts index 9c11f56a7f5c7..e6f65fc67866d 100644 --- a/x-pack/plugins/maps/public/kibana_services.ts +++ b/x-pack/plugins/maps/public/kibana_services.ts @@ -9,7 +9,7 @@ import type { CoreStart } from '@kbn/core/public'; import type { EMSSettings } from '@kbn/maps-ems-plugin/common/ems_settings'; import { MapsEmsPluginPublicStart } from '@kbn/maps-ems-plugin/public'; import { BehaviorSubject } from 'rxjs'; -import type { MapsConfigType } from '../config'; +import type { MapsConfigType } from '../server/config'; import type { MapsPluginStartDependencies } from './plugin'; const servicesReady$ = new BehaviorSubject(false); diff --git a/x-pack/plugins/maps/public/plugin.ts b/x-pack/plugins/maps/public/plugin.ts index 169731af566fe..cc4cc4bcc91e8 100644 --- a/x-pack/plugins/maps/public/plugin.ts +++ b/x-pack/plugins/maps/public/plugin.ts @@ -68,7 +68,7 @@ import { MapsStartApi, suggestEMSTermJoinConfig, } from './api'; -import { MapsXPackConfig, MapsConfigType } from '../config'; +import type { MapsXPackConfig, MapsConfigType } from '../server/config'; import { filterByMapExtentAction } from './trigger_actions/filter_by_map_extent/action'; import { synchronizeMovementAction } from './trigger_actions/synchronize_movement/action'; import { visualizeGeoFieldAction } from './trigger_actions/visualize_geo_field_action'; diff --git a/x-pack/plugins/maps/config.ts b/x-pack/plugins/maps/server/config.ts similarity index 100% rename from x-pack/plugins/maps/config.ts rename to x-pack/plugins/maps/server/config.ts diff --git a/x-pack/plugins/maps/server/index.ts b/x-pack/plugins/maps/server/index.ts index eadb5ccd3eaf9..b6a7bd090a699 100644 --- a/x-pack/plugins/maps/server/index.ts +++ b/x-pack/plugins/maps/server/index.ts @@ -7,7 +7,7 @@ import { PluginInitializerContext } from '@kbn/core/server'; import { PluginConfigDescriptor } from '@kbn/core/server'; -import { configSchema, MapsXPackConfig } from '../config'; +import { configSchema, MapsXPackConfig } from './config'; export const config: PluginConfigDescriptor = { // exposeToBrowser specifies kibana.yml settings to expose to the browser diff --git a/x-pack/plugins/maps/server/plugin.ts b/x-pack/plugins/maps/server/plugin.ts index 8d926952d1bd0..2366731c3826e 100644 --- a/x-pack/plugins/maps/server/plugin.ts +++ b/x-pack/plugins/maps/server/plugin.ts @@ -24,7 +24,7 @@ import { getFlightsSavedObjects } from './sample_data/flights_saved_objects'; import { getWebLogsSavedObjects } from './sample_data/web_logs_saved_objects'; import { registerMapsUsageCollector } from './maps_telemetry/collectors/register'; import { APP_ID, APP_ICON, MAP_SAVED_OBJECT_TYPE, getFullPath } from '../common/constants'; -import { MapsXPackConfig } from '../config'; +import { MapsXPackConfig } from './config'; import { setStartServices } from './kibana_server_services'; import { emsBoundariesSpecProvider } from './tutorials/ems'; import { initRoutes } from './routes'; diff --git a/x-pack/plugins/maps/tsconfig.json b/x-pack/plugins/maps/tsconfig.json index cfd635f23d58d..dfee193ed0a25 100644 --- a/x-pack/plugins/maps/tsconfig.json +++ b/x-pack/plugins/maps/tsconfig.json @@ -8,8 +8,8 @@ "common/**/*", "public/**/*", "server/**/*", - "config.ts", - "../../../typings/**/*", + "server/config.ts", + "../../../typings/**/*" ], "kbn_references": [ "@kbn/core", From fae013926cfb4454923aa272a34a246a1a31ec5f Mon Sep 17 00:00:00 2001 From: Hannah Mudge Date: Tue, 27 Aug 2024 13:44:12 -0600 Subject: [PATCH 23/74] [Embeddable Rebuild] [Controls] Add `ignoreValidations` support to options list control (#191303) Closes https://github.com/elastic/kibana/issues/191295 ## Summary This PR makes it so that the options list control respects the `ignoreParentSettings.ignoreValidations` setting when validating its selections: https://github.com/user-attachments/assets/abd41283-aafd-4802-8e2e-2f55d9551df3 Note that in the above video, we are "dropping" invalid selections in the UI when this setting is active, which means that the only way to unselect "empty" options is to click the "Show only selected" option in the UI. While I considered changing that behaviour in this PR, I opted to keep this PR as simple as possible by keeping the behaviour consistent with the non-React options list (i.e. the behaviour demonstrated in the video above is consistent with how options list work in Dashboards on `main`). We can always revisit that behaviour later, since it is a very easy change to make. ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- src/plugins/controls/common/options_list/types.ts | 1 + .../options_list_control/fetch_and_validate.tsx | 3 +++ .../options_list_control/options_list_fetch_cache.ts | 2 ++ .../options_list/options_list_suggestions_route.ts | 11 ++++++++--- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/plugins/controls/common/options_list/types.ts b/src/plugins/controls/common/options_list/types.ts index 4192cc6aac26d..f84b1a85f857f 100644 --- a/src/plugins/controls/common/options_list/types.ts +++ b/src/plugins/controls/common/options_list/types.ts @@ -81,6 +81,7 @@ export interface OptionsListRequestBody > { runtimeFieldMap?: Record; allowExpensiveQueries: boolean; + ignoreValidations?: boolean; filters?: Array<{ bool: BoolQuery }>; runPastTimeout?: boolean; searchString?: string; diff --git a/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/fetch_and_validate.tsx b/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/fetch_and_validate.tsx index f3633b13d3d1a..c03acb4fceafa 100644 --- a/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/fetch_and_validate.tsx +++ b/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/fetch_and_validate.tsx @@ -55,6 +55,7 @@ export function fetchAndValidate$({ api.field$, api.controlFetch$, api.parentApi.allowExpensiveQueries$, + api.parentApi.ignoreParentSettings$, api.debouncedSearchString, stateManager.sort, stateManager.searchTechnique, @@ -86,6 +87,7 @@ export function fetchAndValidate$({ field, controlFetchContext, allowExpensiveQueries, + ignoreParentSettings, searchString, sort, searchTechnique, @@ -116,6 +118,7 @@ export function fetchAndValidate$({ field: field.toSpec(), size: requestSize, allowExpensiveQueries, + ignoreValidations: ignoreParentSettings?.ignoreValidations, ...controlFetchContext, }; diff --git a/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/options_list_fetch_cache.ts b/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/options_list_fetch_cache.ts index 6a4bc779a61a2..4e6e0aa779b48 100644 --- a/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/options_list_fetch_cache.ts +++ b/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/options_list_fetch_cache.ts @@ -51,6 +51,7 @@ export class OptionsListFetchCache { runPastTimeout, selectedOptions, searchTechnique, + ignoreValidations, field: { name: fieldName }, dataView: { title: dataViewTitle }, } = request; @@ -67,6 +68,7 @@ export class OptionsListFetchCache { query, sort, searchTechnique, + ignoreValidations, runPastTimeout, dataViewTitle, searchString: searchString ?? '', diff --git a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts index b31c4feb6bf0f..abe6cb536289b 100644 --- a/src/plugins/controls/server/options_list/options_list_suggestions_route.ts +++ b/src/plugins/controls/server/options_list/options_list_suggestions_route.ts @@ -48,6 +48,7 @@ export const setupOptionsListSuggestionsRoute = ( filters: schema.maybe(schema.any()), fieldSpec: schema.maybe(schema.any()), allowExpensiveQueries: schema.boolean(), + ignoreValidations: schema.maybe(schema.boolean()), searchString: schema.maybe(schema.string()), searchTechnique: schema.maybe( schema.oneOf([ @@ -102,7 +103,7 @@ export const setupOptionsListSuggestionsRoute = ( /** * Build ES Query */ - const { runPastTimeout, filters, runtimeFieldMap } = request; + const { runPastTimeout, filters, runtimeFieldMap, ignoreValidations } = request; const { terminateAfter, timeout } = getAutocompleteSettings(); const timeoutSettings = runPastTimeout ? {} @@ -112,7 +113,9 @@ export const setupOptionsListSuggestionsRoute = ( const validationBuilder = getValidationAggregationBuilder(); const suggestionAggregation: any = suggestionBuilder.buildAggregation(request) ?? {}; - const validationAggregation: any = validationBuilder.buildAggregation(request); + const validationAggregation: any = ignoreValidations + ? {} + : validationBuilder.buildAggregation(request); const body: SearchRequest['body'] = { size: 0, @@ -141,7 +144,9 @@ export const setupOptionsListSuggestionsRoute = ( */ const results = suggestionBuilder.parse(rawEsResult, request); const totalCardinality = results.totalCardinality; - const invalidSelections = validationBuilder.parse(rawEsResult, request); + const invalidSelections = ignoreValidations + ? [] + : validationBuilder.parse(rawEsResult, request); return { suggestions: results.suggestions, From 2a033c1621414e838c2fc7de1710c0fc3ee340e1 Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Tue, 27 Aug 2024 22:12:59 +0200 Subject: [PATCH 24/74] [Managed Content] fix flaky tests (#191388) ## Summary Fixes https://github.com/elastic/kibana/issues/190227 Fixes https://github.com/elastic/kibana/issues/190737 https://github.com/elastic/kibana/issues/190990 https://github.com/elastic/kibana/issues/190802 https://github.com/elastic/kibana/issues/179307 (couldn't find the rootcause so just decided to align the solution with other files that follow similar path and are not flaky) Fixes https://github.com/elastic/kibana/issues/191151 https://github.com/elastic/kibana/issues/191152 https://github.com/elastic/kibana/issues/191176 https://github.com/elastic/kibana/issues/191177 https://github.com/elastic/kibana/issues/191178 https://github.com/elastic/kibana/issues/191153 https://github.com/elastic/kibana/issues/191238 Fixes https://github.com/elastic/kibana/issues/190711 --- .../apps/lens/group4/show_underlying_data.ts | 3 ++- .../apps/lens/open_in_lens/tsvb/dashboard.ts | 19 ++++++++++++------- .../apps/managed_content/managed_content.ts | 6 ++++-- .../test/functional/page_objects/lens_page.ts | 5 +++++ .../group2/open_in_lens/agg_based/goal.ts | 12 +++++++++--- .../group2/open_in_lens/agg_based/metric.ts | 13 +++++++++++-- .../group3/open_in_lens/tsvb/dashboard.ts | 7 +++++++ 7 files changed, 50 insertions(+), 15 deletions(-) diff --git a/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts b/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts index fee3756e11759..2d9035238452f 100644 --- a/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts +++ b/x-pack/test/functional/apps/lens/group4/show_underlying_data.ts @@ -48,7 +48,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.switchToWindow(discoverWindowHandle); await PageObjects.header.waitUntilLoadingHasFinished(); - await testSubjects.existOrFail('unifiedHistogramChart'); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await testSubjects.existOrFail('unifiedDataTableToolbar'); // check the table columns const columns = await PageObjects.discover.getColumnHeaders(); expect(columns).to.eql(['@timestamp', 'extension.raw', 'bytes']); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts index e61dd9e9ffb97..880c35c98975e 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/tsvb/dashboard.ts @@ -89,15 +89,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dashboard.waitForRenderComplete(); const originalEmbeddableCount = await canvas.getEmbeddableCount(); - await retry.try(async () => { - await dashboardPanelActions.customizePanel(); - await dashboardCustomizePanel.enableCustomTimeRange(); + + await panelActions.customizePanel(); + await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutOpen(); + await dashboardCustomizePanel.enableCustomTimeRange(); + await retry.waitFor('quick menu', async () => { await dashboardCustomizePanel.openDatePickerQuickMenu(); - await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_30 days'); - await dashboardCustomizePanel.clickSaveButton(); - await dashboard.waitForRenderComplete(); - await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); + return await testSubjects.exists('superDatePickerCommonlyUsed_Last_30 days'); }); + await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_30 days'); + await dashboardCustomizePanel.clickSaveButton(); + await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutClosed(); + await dashboard.waitForRenderComplete(); + await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); + await panelActions.openContextMenu(); await panelActions.clickEdit(); diff --git a/x-pack/test/functional/apps/managed_content/managed_content.ts b/x-pack/test/functional/apps/managed_content/managed_content.ts index 24f88fd72dc36..63ac63e0c7bf6 100644 --- a/x-pack/test/functional/apps/managed_content/managed_content.ts +++ b/x-pack/test/functional/apps/managed_content/managed_content.ts @@ -112,7 +112,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('maps', async () => { await PageObjects.common.navigateToActualUrl( 'maps', - 'map/managed-d7ab-46eb-a807-8fed28ed8566' + 'map/managed-d7ab-46eb-a807-8fed28ed8566', + { ensureCurrentUrl: false } ); await PageObjects.maps.waitForLayerAddPanelClosed(); @@ -120,7 +121,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.common.navigateToActualUrl( 'maps', - 'map/unmanaged-d7ab-46eb-a807-8fed28ed8566' + 'map/unmanaged-d7ab-46eb-a807-8fed28ed8566', + { ensureCurrentUrl: false } ); await PageObjects.maps.waitForLayerAddPanelClosed(); diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 19a80b2dfce7c..d2228257d2fba 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -1380,6 +1380,11 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }; }, + async hoverOverDimensionButton(index = 0) { + const dimensionButton = (await testSubjects.findAll('lns-dimensionTrigger'))[index]; + await dimensionButton.moveMouseTo(); + }, + async getMetricVisualizationData() { const tiles = await this.getMetricTiles(); const showingBar = Boolean(await findService.existsByCssSelector('.echSingleMetricProgress')); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/goal.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/goal.ts index 15da3d48d9037..819cf92062cbb 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/goal.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/goal.ts @@ -21,9 +21,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); describe('Goal', function describeIndexTests() { - // fails on MKI, see https://github.com/elastic/kibana/issues/191238 - this.tags(['failsOnMKI']); - const fixture = 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/goal.json'; @@ -49,6 +46,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should convert to Lens', async () => { await panelActions.convertToLensByTitle('Goal - Basic'); await lens.waitForVisualization('mtrVis'); + + // hovering over dimension button to make sure neither of metrics are hovered so the color is stable + await lens.hoverOverDimensionButton(); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(1); expect(data).to.eql([ @@ -76,6 +76,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); expect(await dimensions[1].getVisibleText()).to.be('Static value: 1'); + // hovering over dimension button to make sure neither of metrics are hovered so the color is stable + await lens.hoverOverDimensionButton(); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(1); expect(data).to.eql([ @@ -104,6 +106,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(await dimensions[1].getVisibleText()).to.be('Static value: 1'); expect(await dimensions[2].getVisibleText()).to.be('@timestamp'); + // hovering over dimension button to make sure neither of metrics are hovered so the color is stable + await lens.hoverOverDimensionButton(); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(1); expect(data).to.eql([ @@ -132,6 +136,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(await dimensions[1].getVisibleText()).to.be('Static value: 13300000000'); expect(await dimensions[2].getVisibleText()).to.be('machine.os.raw: Descending'); + // hovering over dimension button to make sure neither of metrics are hovered so the color is stable + await lens.hoverOverDimensionButton(); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(6); expect(data).to.eql([ diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts index 860f7f2cee1c3..213d3b17cea11 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts @@ -20,8 +20,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const panelActions = getService('dashboardPanelActions'); const kibanaServer = getService('kibanaServer'); - // Failing: See https://github.com/elastic/kibana/issues/191153 - describe.skip('Metric', function describeIndexTests() { + describe('Metric', function describeIndexTests() { const fixture = 'x-pack/test_serverless/functional/fixtures/kbn_archiver/lens/open_in_lens/agg_based/metric.json'; @@ -44,6 +43,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await panelActions.convertToLensByTitle('Metric - Basic'); await lens.waitForVisualization('mtrVis'); + // hovering over dimension button to make sure neither of metrics are hovered so the color is stable + await lens.hoverOverDimensionButton(); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(1); expect(data).to.eql([ @@ -70,6 +71,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(dimensions).to.have.length(1); expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); + // hovering over dimension button to make sure neither of metrics are hovered so the color is stable + await lens.hoverOverDimensionButton(); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(1); expect(data).to.eql([ @@ -97,6 +100,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(await dimensions[0].getVisibleText()).to.be('Overall Max of Count'); expect(await dimensions[1].getVisibleText()).to.be('@timestamp'); + // hovering over dimension button to make sure neither of metrics are hovered so the color is stable + await lens.hoverOverDimensionButton(); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(1); expect(data).to.eql([ @@ -129,6 +134,10 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(dimensions).to.have.length(2); expect(await dimensions[0].getVisibleText()).to.be('Average machine.ram'); expect(await dimensions[1].getVisibleText()).to.be('machine.os.raw: Descending'); + + // hovering over dimension button to make sure neither of metrics are hovered so the color is stable + await lens.hoverOverDimensionButton(); + const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(6); expect(data).to.eql([ diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts index 2569695008ed1..c41bf13a1e678 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts @@ -84,11 +84,18 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dashboard.waitForRenderComplete(); const originalEmbeddableCount = await canvas.getEmbeddableCount(); + await dashboardPanelActions.customizePanel(); + await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutOpen(); await dashboardCustomizePanel.enableCustomTimeRange(); await dashboardCustomizePanel.openDatePickerQuickMenu(); + await retry.waitFor('quick menu', async () => { + await dashboardCustomizePanel.openDatePickerQuickMenu(); + return await testSubjects.exists('superDatePickerCommonlyUsed_Last_30 days'); + }); await dashboardCustomizePanel.clickCommonlyUsedTimeRange('Last_30 days'); await dashboardCustomizePanel.clickSaveButton(); + await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutClosed(); await dashboard.waitForRenderComplete(); await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); From 03ba36a0287f72fa6ebf50e26675183c575bcd15 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 27 Aug 2024 16:08:45 -0500 Subject: [PATCH 25/74] [ci] Fix check for pre-emption failure (#191325) --- .../pipeline-utils/buildkite/client.test.ts | 16 ++++------------ .buildkite/pipeline-utils/buildkite/client.ts | 2 +- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/.buildkite/pipeline-utils/buildkite/client.test.ts b/.buildkite/pipeline-utils/buildkite/client.test.ts index ef70a0b3a4620..97b14815f6937 100644 --- a/.buildkite/pipeline-utils/buildkite/client.test.ts +++ b/.buildkite/pipeline-utils/buildkite/client.test.ts @@ -24,9 +24,7 @@ describe('BuildkiteClient', () => { id: 'id-1', retried_in_job_id: 'id-2', state: 'failed', - agent: { - meta_data: ['spot=true'], - }, + agent_query_rules: ['preemptible=true'], retried: true, exit_status: -1, type: 'script', @@ -35,9 +33,7 @@ describe('BuildkiteClient', () => { const retry: Job = { id: 'id-2', state: 'passed', - agent: { - meta_data: ['spot=true'], - }, + agent_query_rules: ['preemptible=true'], type: 'script', } as Job; @@ -58,9 +54,7 @@ describe('BuildkiteClient', () => { id: 'id-1', retried_in_job_id: 'id-2', state: 'failed', - agent: { - meta_data: ['spot=true'], - }, + agent_query_rules: ['preemptible=true'], retried: true, exit_status: 1, type: 'script', @@ -69,9 +63,7 @@ describe('BuildkiteClient', () => { const retry: Job = { id: 'id-2', state: 'passed', - agent: { - meta_data: ['spot=true'], - }, + agent_query_rules: ['preemptible=true'], type: 'script', } as Job; diff --git a/.buildkite/pipeline-utils/buildkite/client.ts b/.buildkite/pipeline-utils/buildkite/client.ts index a0232d90e8e07..45f09817dba8e 100644 --- a/.buildkite/pipeline-utils/buildkite/client.ts +++ b/.buildkite/pipeline-utils/buildkite/client.ts @@ -285,7 +285,7 @@ export class BuildkiteClient { hasRetries = true; const isPreemptionFailure = job.state === 'failed' && - job.agent?.meta_data?.some((el) => ['spot=true', 'gcp:preemptible=true'].includes(el)) && + job.agent_query_rules?.includes('preemptible=true') && job.exit_status === -1; if (!isPreemptionFailure) { From 7944c1963ded4c72fd4042913c35435f9fc5bf2d Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Tue, 27 Aug 2024 19:03:08 -0600 Subject: [PATCH 26/74] [EEM] Calculate the latest metadata lookback based on the calculated history delay (#191324) --- .../lib/entities/helpers/calculate_offset.ts | 34 +++++++++++++++++++ .../helpers/fixtures/entity_definition.ts | 5 +++ .../generate_history_transform.test.ts.snap | 6 ++-- .../generate_latest_transform.test.ts.snap | 8 ++--- .../generate_metadata_aggregations.test.ts | 8 ++--- .../generate_metadata_aggregations.ts | 5 ++- 6 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/calculate_offset.ts diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/calculate_offset.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/calculate_offset.ts new file mode 100644 index 0000000000000..3eba710561abf --- /dev/null +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/calculate_offset.ts @@ -0,0 +1,34 @@ +/* + * 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 { EntityDefinition } from '@kbn/entities-schema'; +import moment from 'moment'; +import { + ENTITY_DEFAULT_HISTORY_FREQUENCY, + ENTITY_DEFAULT_HISTORY_SYNC_DELAY, +} from '../../../../common/constants_entities'; + +const durationToSeconds = (dateMath: string) => { + const parts = dateMath.match(/(\d+)([m|s|h|d])/); + if (!parts) { + throw new Error(`Invalid date math supplied: ${dateMath}`); + } + const value = parseInt(parts[1], 10); + const unit = parts[2] as 'm' | 's' | 'h' | 'd'; + return moment.duration(value, unit).asSeconds(); +}; + +export function calculateOffset(definition: EntityDefinition) { + const syncDelay = durationToSeconds( + definition.history.settings.syncDelay || ENTITY_DEFAULT_HISTORY_SYNC_DELAY + ); + const frequency = + durationToSeconds(definition.history.settings.frequency || ENTITY_DEFAULT_HISTORY_FREQUENCY) * + 2; + + return syncDelay + frequency; +} diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts index 727f73a044c4f..940e209260c54 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts @@ -15,6 +15,11 @@ export const rawEntityDefinition = { history: { timestampField: '@timestamp', interval: '1m', + settings: { + lookbackPeriod: '10m', + frequency: '2m', + syncDelay: '2m', + }, }, identityFields: ['log.logger', { field: 'event.category', optional: true }], displayNameTemplate: '{{log.logger}}{{#event.category}}:{{.}}{{/event.category}}', diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap index 93c440038c3e6..b19a805b24b12 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap @@ -163,7 +163,7 @@ Object { "index": ".entities.v1.history.noop", "pipeline": "entities-v1-history-admin-console-services", }, - "frequency": "1m", + "frequency": "2m", "pivot": Object { "aggs": Object { "_errorRate_A": Object { @@ -286,7 +286,7 @@ Object { Object { "range": Object { "@timestamp": Object { - "gte": "now-1h", + "gte": "now-10m", }, }, }, @@ -296,7 +296,7 @@ Object { }, "sync": Object { "time": Object { - "delay": "60s", + "delay": "2m", "field": "@timestamp", }, }, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap index ca4cda934328e..ab1224525f4d7 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap @@ -98,7 +98,7 @@ Object { "filter": Object { "range": Object { "@timestamp": Object { - "gte": "now-1m", + "gte": "now-360s", }, }, }, @@ -115,7 +115,7 @@ Object { "filter": Object { "range": Object { "@timestamp": Object { - "gte": "now-1m", + "gte": "now-360s", }, }, }, @@ -132,7 +132,7 @@ Object { "filter": Object { "range": Object { "@timestamp": Object { - "gte": "now-1m", + "gte": "now-360s", }, }, }, @@ -149,7 +149,7 @@ Object { "filter": Object { "range": Object { "@timestamp": Object { - "gte": "now-1m", + "gte": "now-360s", }, }, }, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts index ef54abe305a69..69f6d4f071696 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts @@ -86,7 +86,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { filter: { range: { '@timestamp': { - gte: 'now-1m', + gte: 'now-360s', }, }, }, @@ -112,7 +112,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { filter: { range: { '@timestamp': { - gte: 'now-1m', + gte: 'now-360s', }, }, }, @@ -138,7 +138,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { filter: { range: { '@timestamp': { - gte: 'now-1m', + gte: 'now-360s', }, }, }, @@ -164,7 +164,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { filter: { range: { '@timestamp': { - gte: 'now-1m', + gte: 'now-360s', }, }, }, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts index 79aa4312c2955..1da8988209db6 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts @@ -7,6 +7,7 @@ import { EntityDefinition } from '@kbn/entities-schema'; import { ENTITY_DEFAULT_METADATA_LIMIT } from '../../../../common/constants_entities'; +import { calculateOffset } from '../helpers/calculate_offset'; export function generateHistoryMetadataAggregations(definition: EntityDefinition) { if (!definition.metadata) { @@ -31,6 +32,8 @@ export function generateLatestMetadataAggregations(definition: EntityDefinition) return {}; } + const offsetInSeconds = calculateOffset(definition); + return definition.metadata.reduce( (aggs, metadata) => ({ ...aggs, @@ -38,7 +41,7 @@ export function generateLatestMetadataAggregations(definition: EntityDefinition) filter: { range: { '@timestamp': { - gte: `now-${definition.history.interval}`, + gte: `now-${offsetInSeconds}s`, }, }, }, From a994629331cc4180972e37a7fa69878fe3dd1633 Mon Sep 17 00:00:00 2001 From: Nick Partridge Date: Tue, 27 Aug 2024 21:06:54 -0500 Subject: [PATCH 27/74] [Lens][Table] Add color by terms with color mappings (#189895) Adds support for coloring Table cells by terms with color mapping assignments. Supported for both `Rows` and `Metric` dimensions. --- .../categorical_color_mapping.tsx | 26 +- .../color_mapping/color/color_handling.ts | 2 +- .../color_mapping/color/rule_matching.ts | 8 +- .../components/assignment/assignment.tsx | 2 +- .../components/assignment/match.tsx | 4 +- .../components/color_picker/color_picker.tsx | 29 +- .../components/color_picker/color_swatch.tsx | 15 +- .../color_picker/palette_colors.tsx | 42 +-- .../components/container/assigments.tsx | 29 +- .../components/container/container.tsx | 1 + .../components/palette_selector/scale.tsx | 1 + .../shared_components/color_mapping/index.ts | 9 +- .../coloring/palette_picker.tsx | 6 +- packages/kbn-optimizer/limits.yml | 2 +- .../common/color_categories.test.ts | 71 +++++ .../common/color_categories.ts | 47 +-- .../__snapshots__/xy_chart.test.tsx.snap | 40 +-- .../public/components/data_layers.tsx | 4 +- .../public/helpers/color_assignment.ts | 1 - .../public/helpers/data_layers.tsx | 16 +- .../charts/public/services/palettes/mock.ts | 7 +- .../component/settings/settings_flyout.tsx | 49 ++- .../public/lib/converters/_string.scss | 4 + .../common/expressions/datatable/datatable.ts | 4 +- .../expressions/datatable/datatable_column.ts | 38 ++- .../expressions/datatable/datatable_fn.ts | 1 + .../common/expressions/datatable/index.ts | 1 + .../expressions/datatable/summary.test.ts | 8 +- .../common/expressions/datatable/summary.ts | 12 +- .../datatable/transpose_helpers.ts | 26 +- .../common/expressions/datatable/types.ts | 1 + .../common/expressions/datatable/utils.ts | 11 +- .../dimension_panel/dimension_editor.tsx | 2 +- .../coloring/color_mapping_accessor.test.ts | 36 +++ .../coloring/color_mapping_accessor.ts | 37 +++ .../coloring/color_mapping_by_terms.tsx | 141 ++++++++ .../coloring/color_mapping_by_values.tsx | 73 +++++ .../coloring/get_cell_color_fn.ts | 71 +++++ .../shared_components/coloring/utils.test.ts | 21 +- .../shared_components/coloring/utils.ts | 41 ++- .../shared_components/palette_picker.tsx | 14 +- .../public/state_management/lens_slice.ts | 23 +- x-pack/plugins/lens/public/types.ts | 2 + x-pack/plugins/lens/public/utils.test.ts | 22 +- x-pack/plugins/lens/public/utils.ts | 12 + .../datatable/components/cell_value.test.tsx | 72 +++-- .../datatable/components/cell_value.tsx | 96 +++--- .../datatable/components/columns.tsx | 4 +- .../components/dimension_editor.test.tsx | 193 +++++++---- .../datatable/components/dimension_editor.tsx | 147 +++++---- ...mension_editor_additional_section.test.tsx | 55 +++- .../dimension_editor_addtional_section.tsx | 2 - .../components/table_actions.test.ts | 4 +- .../datatable/components/table_actions.ts | 22 +- .../datatable/components/table_basic.test.tsx | 167 +++++++--- .../datatable/components/table_basic.tsx | 103 ++++-- .../datatable/components/types.ts | 6 - .../datatable/expression.test.tsx | 8 +- .../visualizations/datatable/expression.tsx | 1 + .../public/visualizations/datatable/index.ts | 2 +- .../datatable/visualization.test.tsx | 301 ++++++++++++++---- .../datatable/visualization.tsx | 195 ++++++++---- .../visualizations/gauge/dimension_editor.tsx | 5 +- .../legacy_metric/dimension_editor.tsx | 5 +- .../metric/dimension_editor.test.tsx | 3 +- .../metric/dimension_editor.tsx | 10 +- .../partition/dimension_editor.tsx | 8 +- .../tagcloud/tags_dimension_editor.tsx | 8 +- .../visualizations/xy/visualization.tsx | 4 +- .../xy/xy_config_panel/dimension_editor.tsx | 194 ++++------- .../xy_config_panel/xy_config_panel.test.tsx | 10 +- .../translations/translations/fr-FR.json | 5 +- .../translations/translations/ja-JP.json | 5 +- .../translations/translations/zh-CN.json | 5 +- .../apps/dashboard/group2/panel_titles.ts | 2 +- .../apps/dashboard/group2/sync_colors.ts | 88 +++-- .../test/functional/page_objects/lens_page.ts | 23 +- 77 files changed, 1928 insertions(+), 837 deletions(-) create mode 100644 src/plugins/chart_expressions/common/color_categories.test.ts create mode 100644 x-pack/plugins/lens/public/shared_components/coloring/color_mapping_accessor.test.ts create mode 100644 x-pack/plugins/lens/public/shared_components/coloring/color_mapping_accessor.ts create mode 100644 x-pack/plugins/lens/public/shared_components/coloring/color_mapping_by_terms.tsx create mode 100644 x-pack/plugins/lens/public/shared_components/coloring/color_mapping_by_values.tsx create mode 100644 x-pack/plugins/lens/public/shared_components/coloring/get_cell_color_fn.ts diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx index 290c549684f90..a9249d703d747 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx @@ -15,22 +15,26 @@ import { Container } from './components/container/container'; import { ColorMapping } from './config'; import { uiReducer } from './state/ui'; +export interface ColorMappingInputCategoricalData { + type: 'categories'; + /** an ORDERED array of categories rendered in the visualization */ + categories: Array; +} + +export interface ColorMappingInputContinuousData { + type: 'ranges'; + min: number; + max: number; + bins: number; +} + /** * A configuration object that is required to populate correctly the visible categories * or the ranges in the CategoricalColorMapping component */ export type ColorMappingInputData = - | { - type: 'categories'; - /** an ORDERED array of categories rendered in the visualization */ - categories: Array; - } - | { - type: 'ranges'; - min: number; - max: number; - bins: number; - }; + | ColorMappingInputCategoricalData + | ColorMappingInputContinuousData; /** * The props of the CategoricalColorMapping component diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/color/color_handling.ts b/packages/kbn-coloring/src/shared_components/color_mapping/color/color_handling.ts index 8867b07572308..77aec76e68a4e 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/color/color_handling.ts +++ b/packages/kbn-coloring/src/shared_components/color_mapping/color/color_handling.ts @@ -74,7 +74,7 @@ export function getColorFactory( }) : []; - // find all categories that doesn't match with an assignment + // find all categories that don't match with an assignment const notAssignedCategories = data.type === 'categories' ? data.categories.filter((category) => { diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts b/packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts index a157c7927747c..7bfc22691bb72 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts +++ b/packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts @@ -41,7 +41,7 @@ export function rangeMatch(rule: ColorMapping.RuleRange, value: number) { } // TODO: move in some data/table related package -export const SPECIAL_TOKENS_STRING_CONVERTION = new Map([ +export const SPECIAL_TOKENS_STRING_CONVERSION = new Map([ [ '__other__', i18n.translate('coloring.colorMapping.terms.otherBucketLabel', { @@ -55,3 +55,9 @@ export const SPECIAL_TOKENS_STRING_CONVERTION = new Map([ }), ], ]); + +/** + * Returns special string for sake of color mapping/syncing + */ +export const getSpecialString = (value: string) => + SPECIAL_TOKENS_STRING_CONVERSION.get(value) ?? value; diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/assignment.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/assignment.tsx index 89c4375d4bc10..7e9e6869849c6 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/assignment.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/assignment.tsx @@ -121,7 +121,7 @@ export function Assignment({ css={ !disableDelete ? css` - color: ${euiThemeVars.euiTextSubduedColor}; + color: ${euiThemeVars.euiTextColor}; transition: ${euiThemeVars.euiAnimSpeedFast} ease-in-out; transition-property: color; &:hover, diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/match.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/match.tsx index bfef7a270e1a0..c10b3c0194cf7 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/match.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/assignment/match.tsx @@ -73,6 +73,7 @@ export const Match: React.FC<{ return ( diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/color_picker.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/color_picker.tsx index f576daa2096cc..ebce7b9749830 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/color_picker.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/color_picker.tsx @@ -7,14 +7,7 @@ */ import React, { useState } from 'react'; -import { - EuiButtonEmpty, - EuiPopoverTitle, - EuiTab, - EuiTabs, - EuiTitle, - EuiHorizontalRule, -} from '@elastic/eui'; +import { EuiButtonEmpty, EuiPopoverTitle, EuiTab, EuiTabs, EuiHorizontalRule } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { ColorMapping } from '../../config'; import { getPalette } from '../../palettes'; @@ -56,22 +49,14 @@ export function ColorPicker({ > setTab('palette')} isSelected={tab === 'palette'}> - - - {i18n.translate('coloring.colorMapping.colorPicker.paletteTabLabel', { - defaultMessage: 'Colors', - })} - - + {i18n.translate('coloring.colorMapping.colorPicker.paletteTabLabel', { + defaultMessage: 'Colors', + })} setTab('custom')} isSelected={tab === 'custom'}> - - - {i18n.translate('coloring.colorMapping.colorPicker.customTabLabel', { - defaultMessage: 'Custom', - })} - - + {i18n.translate('coloring.colorMapping.colorPicker.customTabLabel', { + defaultMessage: 'Custom', + })} diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/color_swatch.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/color_swatch.tsx index 34ffbefeca30f..9b466810b069c 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/color_swatch.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/color_swatch.tsx @@ -124,15 +124,14 @@ export const ColorSwatch = ({ css={css` &::after { content: ''; - width: 0; - height: 0; - border-left: 3px solid transparent; - border-right: 3px solid transparent; - border-top: 4px solid ${colorIsDark ? 'white' : 'black'}; - margin: 0; - bottom: 2px; + background-color: ${colorIsDark ? 'white' : 'black'}; + // custom arrowDown svg + mask-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3IiBoZWlnaHQ9IjQiIHZpZXdCb3g9IjAgMCA3IDQiPgogIDxwYXRoIGQ9Ik0uMTQ2LjE0N2EuNS41IDAgMCAxIC43MDggMEwzLjUgMi43OTQgNi4xNDYuMTQ3YS41LjUgMCAxIDEgLjcwOC43MDhsLTMgM2EuNS41IDAgMCAxLS43MDggMGwtMy0zYS41LjUgMCAwIDEgMC0uNzA4WiIvPgo8L3N2Zz4K'); + height: 4px; + width: 7px; + bottom: 6px; + right: 4px; position: absolute; - right: 2px; } `} /> diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/palette_colors.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/palette_colors.tsx index 77a8273654b89..48473fc191f25 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/palette_colors.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/color_picker/palette_colors.tsx @@ -12,8 +12,9 @@ import { EuiFlexItem, EuiHorizontalRule, EuiIcon, - EuiText, + EuiTitle, EuiToolTip, + EuiSpacer, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { ColorMapping } from '../../config'; @@ -50,13 +51,14 @@ export function PaletteColors({ <> - - + +
{i18n.translate('coloring.colorMapping.colorPicker.paletteColorsLabel', { defaultMessage: 'Palette colors', })} - - +
+ + - - + +
{i18n.translate('coloring.colorMapping.colorPicker.themeAwareColorsLabel', { defaultMessage: 'Neutral colors', })} - - - - - + + + +
+ + @@ -214,7 +214,6 @@ export function AssignmentsConfig({ , @@ -228,13 +227,14 @@ export function AssignmentsConfig({
{assignments.length > 0 && } -
- {assignments.length > 0 && ( + + {assignments.length > 0 && ( +
{i18n.translate( 'coloring.colorMapping.container.clearAllAssignmentsButtonLabel', @@ -322,8 +325,8 @@ export function AssignmentsConfig({ )} - )} -
+
+ )} ); } diff --git a/packages/kbn-coloring/src/shared_components/color_mapping/components/container/container.tsx b/packages/kbn-coloring/src/shared_components/color_mapping/components/container/container.tsx index e3de3c0a24261..e8466e428ee88 100644 --- a/packages/kbn-coloring/src/shared_components/color_mapping/components/container/container.tsx +++ b/packages/kbn-coloring/src/shared_components/color_mapping/components/container/container.tsx @@ -81,6 +81,7 @@ export function Container({ > - showDynamicColorOnly ? canDynamicColoring : !internal - ) + .filter(({ internal, canDynamicColoring }) => { + return showDynamicColorOnly ? canDynamicColoring && !internal : !internal; + }) .map(({ id, title, getCategoricalColors }) => { const colors = getCategoricalColors( activePalette?.params?.steps || DEFAULT_COLOR_STEPS, diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 3a56e7e75029b..aea38badef492 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -55,7 +55,7 @@ pageLoadAssetSize: expressionLegacyMetricVis: 23121 expressionMetric: 22238 expressionMetricVis: 23121 - expressionPartitionVis: 29700 + expressionPartitionVis: 44888 expressionRepeatImage: 22341 expressionRevealImage: 25675 expressions: 140958 diff --git a/src/plugins/chart_expressions/common/color_categories.test.ts b/src/plugins/chart_expressions/common/color_categories.test.ts new file mode 100644 index 0000000000000..cbd02e149ecdc --- /dev/null +++ b/src/plugins/chart_expressions/common/color_categories.test.ts @@ -0,0 +1,71 @@ +/* + * 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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { DatatableRow } from '@kbn/expressions-plugin/common'; +import { getColorCategories } from './color_categories'; + +const extensions = ['gz', 'css', '', 'rpm', 'deb', 'zip', null]; +const getExtension = (i: number) => extensions[i % extensions.length]; + +const basicDatatableRows: DatatableRow[] = Array.from({ length: 30 }).map((_, i) => ({ + count: i, + extension: getExtension(i), +})); + +const isTransposedDatatableRows: DatatableRow[] = Array.from({ length: 30 }).map((_, i) => ({ + count: i, + ['safari---extension']: getExtension(i), + ['chrome---extension']: getExtension(i + 1), + ['firefox---extension']: getExtension(i + 2), +})); + +describe('getColorCategories', () => { + it('should return all categories from datatable rows', () => { + expect(getColorCategories(basicDatatableRows, 'extension')).toEqual([ + 'gz', + 'css', + '', + 'rpm', + 'deb', + 'zip', + 'null', + ]); + }); + + it('should exclude selected categories from datatable rows', () => { + expect(getColorCategories(basicDatatableRows, 'extension', false, ['', null])).toEqual([ + 'gz', + 'css', + 'rpm', + 'deb', + 'zip', + ]); + }); + + it('should return categories across all transpose columns of datatable rows', () => { + expect(getColorCategories(isTransposedDatatableRows, 'extension', true)).toEqual([ + 'gz', + 'css', + '', + 'rpm', + 'deb', + 'zip', + 'null', + ]); + }); + + it('should exclude selected categories across all transpose columns of datatable rows', () => { + expect(getColorCategories(isTransposedDatatableRows, 'extension', true, ['', null])).toEqual([ + 'gz', + 'css', + 'rpm', + 'deb', + 'zip', + ]); + }); +}); diff --git a/src/plugins/chart_expressions/common/color_categories.ts b/src/plugins/chart_expressions/common/color_categories.ts index 0bb8811f2701a..3699c89d2c8ce 100644 --- a/src/plugins/chart_expressions/common/color_categories.ts +++ b/src/plugins/chart_expressions/common/color_categories.ts @@ -15,27 +15,38 @@ import { isMultiFieldKey } from '@kbn/data-plugin/common'; */ export function getColorCategories( rows: DatatableRow[], - accessor?: string + accessor?: string, + isTransposed?: boolean, + exclude?: any[] ): Array { - return accessor - ? rows.reduce<{ keys: Set; categories: Array }>( - (acc, r) => { - const value = r[accessor]; - if (value === undefined) { - return acc; - } + const ids = isTransposed + ? Object.keys(rows[0]).filter((key) => accessor && key.endsWith(accessor)) + : accessor + ? [accessor] + : []; + + return rows + .flatMap((r) => + ids + .map((id) => r[id]) + .filter((v) => !(v === undefined || exclude?.includes(v))) + .map((v) => { // The categories needs to be stringified in their unformatted version. // We can't distinguish between a number and a string from a text input and the match should // work with both numeric field values and string values. - const key = (isMultiFieldKey(value) ? [...value.keys] : [value]).map(String); + const key = (isMultiFieldKey(v) ? v.keys : [v]).map(String); const stringifiedKeys = key.join(','); - if (!acc.keys.has(stringifiedKeys)) { - acc.keys.add(stringifiedKeys); - acc.categories.push(key.length === 1 ? key[0] : key); - } - return acc; - }, - { keys: new Set(), categories: [] } - ).categories - : []; + return { key, stringifiedKeys }; + }) + ) + .reduce<{ keys: Set; categories: Array }>( + (acc, { key, stringifiedKeys }) => { + if (!acc.keys.has(stringifiedKeys)) { + acc.keys.add(stringifiedKeys); + acc.categories.push(key.length === 1 ? key[0] : key); + } + return acc; + }, + { keys: new Set(), categories: [] } + ).categories; } diff --git a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap index b983bc6047077..789878ac673fa 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap +++ b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap @@ -1747,8 +1747,8 @@ exports[`XYChart component it renders area 1`] = ` minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} @@ -3302,8 +3302,8 @@ exports[`XYChart component it renders bar 1`] = ` minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} @@ -4857,8 +4857,8 @@ exports[`XYChart component it renders horizontal bar 1`] = ` minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} @@ -6412,8 +6412,8 @@ exports[`XYChart component it renders line 1`] = ` minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} @@ -7967,8 +7967,8 @@ exports[`XYChart component it renders stacked area 1`] = ` minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} @@ -9522,8 +9522,8 @@ exports[`XYChart component it renders stacked bar 1`] = ` minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} @@ -11077,8 +11077,8 @@ exports[`XYChart component it renders stacked horizontal bar 1`] = ` minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} @@ -12858,8 +12858,8 @@ exports[`XYChart component split chart should render split chart if both, splitR minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} @@ -14646,8 +14646,8 @@ exports[`XYChart component split chart should render split chart if splitColumnA minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} @@ -16432,8 +16432,8 @@ exports[`XYChart component split chart should render split chart if splitRowAcce minBarHeight={1} paletteService={ Object { - "get": [Function], - "getAll": [Function], + "get": [MockFunction], + "getAll": [MockFunction], } } shouldShowValueLabels={true} diff --git a/src/plugins/chart_expressions/expression_xy/public/components/data_layers.tsx b/src/plugins/chart_expressions/expression_xy/public/components/data_layers.tsx index c5223a270eadd..ffdb868ecff53 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/data_layers.tsx +++ b/src/plugins/chart_expressions/expression_xy/public/components/data_layers.tsx @@ -48,8 +48,8 @@ interface Props { endValue?: EndValue | undefined; paletteService: PaletteRegistry; formattedDatatables: DatatablesWithFormatInfo; - syncColors?: boolean; - timeZone?: string; + syncColors: boolean; + timeZone: string; emphasizeFitting?: boolean; fillOpacity?: number; minBarHeight: number; diff --git a/src/plugins/chart_expressions/expression_xy/public/helpers/color_assignment.ts b/src/plugins/chart_expressions/expression_xy/public/helpers/color_assignment.ts index 990d1ab93a1bc..0dd7ca05a2c9d 100644 --- a/src/plugins/chart_expressions/expression_xy/public/helpers/color_assignment.ts +++ b/src/plugins/chart_expressions/expression_xy/public/helpers/color_assignment.ts @@ -98,7 +98,6 @@ export const getAllSeries = ( /** * This function joins every data series name available on each layer by the same color palette. * The returned function `getRank` should return the position of a series name in this unified list by palette. - * */ export function getColorAssignments( layers: CommonXYLayerConfig[], diff --git a/src/plugins/chart_expressions/expression_xy/public/helpers/data_layers.tsx b/src/plugins/chart_expressions/expression_xy/public/helpers/data_layers.tsx index b3684217d137f..406c498c15bba 100644 --- a/src/plugins/chart_expressions/expression_xy/public/helpers/data_layers.tsx +++ b/src/plugins/chart_expressions/expression_xy/public/helpers/data_layers.tsx @@ -28,7 +28,7 @@ import { getPalette, AVAILABLE_PALETTES, NeutralPalette, - SPECIAL_TOKENS_STRING_CONVERTION, + SPECIAL_TOKENS_STRING_CONVERSION, } from '@kbn/coloring'; import { getColorCategories } from '@kbn/chart-expressions-common'; import { isDataLayer } from '../../common/utils/layer_types_guards'; @@ -53,10 +53,10 @@ type GetSeriesPropsFn = (config: { colorAssignments: ColorAssignments; columnToLabelMap: Record; paletteService: PaletteRegistry; - syncColors?: boolean; yAxis?: GroupsConfiguration[number]; xAxis?: GroupsConfiguration[number]; - timeZone?: string; + syncColors: boolean; + timeZone: string; emphasizeFitting?: boolean; fillOpacity?: number; formattedDatatableInfo: DatatableWithFormatInfo; @@ -324,7 +324,7 @@ const getColor: GetColorFn = ( series, { layer, colorAssignments, paletteService, syncColors, getSeriesNameFn }, uiState, - singleTable + isSingleTable ) => { const overwriteColor = getSeriesColor(layer, series.yAccessor as string); if (overwriteColor !== null) { @@ -333,7 +333,7 @@ const getColor: GetColorFn = ( const name = getSeriesNameFn(series)?.toString() || ''; - const overwriteColors: Record = uiState?.get ? uiState.get('vis.colors', {}) : {}; + const overwriteColors: Record = uiState?.get?.('vis.colors', {}) ?? {}; if (Object.keys(overwriteColors).includes(name)) { return overwriteColors[name]; @@ -344,7 +344,7 @@ const getColor: GetColorFn = ( { name, totalSeriesAtDepth: colorAssignment.totalSeriesCount, - rankAtDepth: colorAssignment.getRank(singleTable ? 'commonLayerId' : layer.layerId, name), + rankAtDepth: colorAssignment.getRank(isSingleTable ? 'commonLayerId' : layer.layerId, name), }, ]; return paletteService.get(layer.palette.name).getCategoricalColor( @@ -493,7 +493,7 @@ export const getSeriesProps: GetSeriesPropsFn = ({ // if colorMapping exist then we can apply it, if not let's use the legacy coloring method layer.colorMapping && splitColumnIds.length > 0 ? getColorSeriesAccessorFn( - JSON.parse(layer.colorMapping), // the color mapping is at this point just a strinfigied JSON + JSON.parse(layer.colorMapping), // the color mapping is at this point just a stringified JSON getPalette(AVAILABLE_PALETTES, NeutralPalette), isDarkMode, { @@ -501,7 +501,7 @@ export const getSeriesProps: GetSeriesPropsFn = ({ categories: getColorCategories(table.rows, splitColumnIds[0]), }, splitColumnIds[0], - SPECIAL_TOKENS_STRING_CONVERTION + SPECIAL_TOKENS_STRING_CONVERSION ) : (series) => getColor( diff --git a/src/plugins/charts/public/services/palettes/mock.ts b/src/plugins/charts/public/services/palettes/mock.ts index 8d7007f96529b..2d1ee87e385ca 100644 --- a/src/plugins/charts/public/services/palettes/mock.ts +++ b/src/plugins/charts/public/services/palettes/mock.ts @@ -74,9 +74,10 @@ export const getPaletteRegistry = () => { }; return { - get: (name: string) => - name === 'custom' ? mockPalette3 : name !== 'default' ? mockPalette2 : mockPalette1, - getAll: () => [mockPalette1, mockPalette2, mockPalette3], + get: jest.fn((name: string) => + name === 'custom' ? mockPalette3 : name !== 'default' ? mockPalette2 : mockPalette1 + ), + getAll: jest.fn(() => [mockPalette1, mockPalette2, mockPalette3]), }; }; diff --git a/src/plugins/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx b/src/plugins/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx index 339d4d4bda10b..750056691cfb5 100644 --- a/src/plugins/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx +++ b/src/plugins/dashboard/public/dashboard_container/component/settings/settings_flyout.tsx @@ -24,6 +24,8 @@ import { EuiTitle, EuiCallOut, EuiSwitch, + EuiText, + EuiIconTip, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { DashboardContainerInput } from '../../../../common'; @@ -269,12 +271,47 @@ export const DashboardSettings = ({ onClose }: DashboardSettingsProps) => { <> + {i18n.translate( + 'dashboard.embeddableApi.showSettings.flyout.form.syncColorsBetweenPanelsSwitchLabel', + { + defaultMessage: 'Sync color palettes across panels', + } + )}{' '} + + {i18n.translate('dashboard.palettes.defaultPaletteLabel', { + defaultMessage: 'Default', + })} + + ), + compatibility: ( + + {i18n.translate('dashboard.palettes.kibanaPaletteLabel', { + defaultMessage: 'Compatibility', + })} + + ), + }} + /> + } + iconProps={{ + className: 'eui-alignTop', + }} + position="top" + size="s" + type="questionInCircle" + /> + + } checked={dashboardSettingsState.syncColors} onChange={(event) => updateDashboardSetting({ syncColors: event.target.checked })} data-test-subj="dashboardSyncColorsCheckbox" diff --git a/src/plugins/field_formats/public/lib/converters/_string.scss b/src/plugins/field_formats/public/lib/converters/_string.scss index 9d97f0195780c..dd27bded25083 100644 --- a/src/plugins/field_formats/public/lib/converters/_string.scss +++ b/src/plugins/field_formats/public/lib/converters/_string.scss @@ -1,3 +1,7 @@ .ffString__emptyValue { color: $euiColorDarkShade; } + +.lnsTableCell--colored .ffString__emptyValue { + color: unset; +} diff --git a/x-pack/plugins/lens/common/expressions/datatable/datatable.ts b/x-pack/plugins/lens/common/expressions/datatable/datatable.ts index 6b73b63d30c63..11faf78dc3b4b 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/datatable.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/datatable.ts @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import type { ExecutionContext } from '@kbn/expressions-plugin/common'; import type { FormatFactory, RowHeightMode } from '../../types'; -import type { ColumnConfigArg } from './datatable_column'; +import type { DatatableColumnResult } from './datatable_column'; import type { DatatableExpressionFunction } from './types'; export interface SortingState { @@ -24,7 +24,7 @@ export interface PagingState { export interface DatatableArgs { title: string; description?: string; - columns: ColumnConfigArg[]; + columns: DatatableColumnResult[]; sortingColumnId: SortingState['columnId']; sortingDirection: SortingState['direction']; fitRowToContent?: boolean; diff --git a/x-pack/plugins/lens/common/expressions/datatable/datatable_column.ts b/x-pack/plugins/lens/common/expressions/datatable/datatable_column.ts index 267671a062655..6f4702c8b32c1 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/datatable_column.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/datatable_column.ts @@ -6,23 +6,25 @@ */ import type { Direction } from '@elastic/eui'; -import type { PaletteOutput, CustomPaletteParams } from '@kbn/coloring'; +import type { PaletteOutput, CustomPaletteParams, ColorMapping } from '@kbn/coloring'; import type { CustomPaletteState } from '@kbn/charts-plugin/common'; import type { ExpressionFunctionDefinition, DatatableColumn } from '@kbn/expressions-plugin/common'; import type { SortingHint } from '../../types'; import { CollapseFunction } from '../collapse'; +const LENS_DATATABLE_COLUMN = 'lens_datatable_column'; + export type LensGridDirection = 'none' | Direction; -export interface ColumnConfig { - columns: ColumnConfigArg[]; +export interface DatatableColumnConfig { + columns: DatatableColumnResult[]; sortingColumnId: string | undefined; sortingDirection: LensGridDirection; } -export type ColumnConfigArg = Omit & { - type: 'lens_datatable_column'; +export type DatatableColumnArgs = Omit & { palette?: PaletteOutput; + colorMapping?: string; summaryRowValue?: unknown; sortingHint?: SortingHint; }; @@ -41,6 +43,7 @@ export interface ColumnState { bucketValues?: Array<{ originalBucketColumn: DatatableColumn; value: unknown }>; alignment?: 'left' | 'right' | 'center'; palette?: PaletteOutput; + colorMapping?: ColorMapping.Config; colorMode?: 'none' | 'cell' | 'text'; summaryRow?: 'none' | 'sum' | 'avg' | 'count' | 'min' | 'max'; summaryLabel?: string; @@ -48,18 +51,21 @@ export interface ColumnState { isMetric?: boolean; } -export type DatatableColumnResult = ColumnState & { type: 'lens_datatable_column' }; -export type DatatableColumnFunction = ExpressionFunctionDefinition< - 'lens_datatable_column', +export type DatatableColumnResult = DatatableColumnArgs & { + type: typeof LENS_DATATABLE_COLUMN; +}; + +export type DatatableColumnFn = ExpressionFunctionDefinition< + typeof LENS_DATATABLE_COLUMN, null, - ColumnState & { sortingHint?: SortingHint }, + DatatableColumnArgs, DatatableColumnResult >; -export const datatableColumn: DatatableColumnFunction = { - name: 'lens_datatable_column', +export const datatableColumn: DatatableColumnFn = { + name: LENS_DATATABLE_COLUMN, aliases: [], - type: 'lens_datatable_column', + type: LENS_DATATABLE_COLUMN, help: '', inputTypes: ['null'], args: { @@ -76,12 +82,16 @@ export const datatableColumn: DatatableColumnFunction = { types: ['palette'], help: '', }, + colorMapping: { + types: ['string'], + help: '', + }, summaryRow: { types: ['string'], help: '' }, summaryLabel: { types: ['string'], help: '' }, }, - fn: function fn(input: unknown, args: ColumnState) { + fn: function fn(input, args) { return { - type: 'lens_datatable_column', + type: LENS_DATATABLE_COLUMN, ...args, }; }, diff --git a/x-pack/plugins/lens/common/expressions/datatable/datatable_fn.ts b/x-pack/plugins/lens/common/expressions/datatable/datatable_fn.ts index a5b8ef9a24013..b528bde76e220 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/datatable_fn.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/datatable_fn.ts @@ -72,6 +72,7 @@ export const datatableFn = value: { data: table, untransposedData, + syncColors: context.isSyncColorsEnabled?.() ?? false, args: { ...args, title: (context.variables.embeddableTitle as string) ?? args.title, diff --git a/x-pack/plugins/lens/common/expressions/datatable/index.ts b/x-pack/plugins/lens/common/expressions/datatable/index.ts index 7003fd8d486b8..4b27aa90d5190 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/index.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/index.ts @@ -7,5 +7,6 @@ export * from './datatable_column'; export * from './datatable'; +export { isTransposeId, getOriginalId } from './transpose_helpers'; export type { DatatableProps, DatatableExpressionFunction } from './types'; diff --git a/x-pack/plugins/lens/common/expressions/datatable/summary.test.ts b/x-pack/plugins/lens/common/expressions/datatable/summary.test.ts index 207bf5779bbee..b772c3a51208c 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/summary.test.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/summary.test.ts @@ -72,7 +72,7 @@ describe('Summary row helpers', () => { it(`should return formatted value for a ${op} summary function`, () => { expect( computeSummaryRowForColumn( - { summaryRow: op, columnId: 'myColumn', type: 'lens_datatable_column' }, + { summaryRow: op, columnId: 'myColumn' }, mockNumericTable, { myColumn: customNumericFormatter, @@ -86,7 +86,7 @@ describe('Summary row helpers', () => { it('should ignore the column formatter, rather return the raw value for count operation', () => { expect( computeSummaryRowForColumn( - { summaryRow: 'count', columnId: 'myColumn', type: 'lens_datatable_column' }, + { summaryRow: 'count', columnId: 'myColumn' }, mockNumericTable, { myColumn: customNumericFormatter, @@ -99,7 +99,7 @@ describe('Summary row helpers', () => { it('should only count non-null/empty values', () => { expect( computeSummaryRowForColumn( - { summaryRow: 'count', columnId: 'myColumn', type: 'lens_datatable_column' }, + { summaryRow: 'count', columnId: 'myColumn' }, { ...mockNumericTable, rows: [...mockNumericTable.rows, { myColumn: null }] }, { myColumn: customNumericFormatter, @@ -112,7 +112,7 @@ describe('Summary row helpers', () => { it('should count numeric arrays as valid and distinct values', () => { expect( computeSummaryRowForColumn( - { summaryRow: 'count', columnId: 'myColumn', type: 'lens_datatable_column' }, + { summaryRow: 'count', columnId: 'myColumn' }, mockNumericTableWithArray, { myColumn: defaultFormatter, diff --git a/x-pack/plugins/lens/common/expressions/datatable/summary.ts b/x-pack/plugins/lens/common/expressions/datatable/summary.ts index 4516abfabb06c..f4ae186fc1d2f 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/summary.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/summary.ts @@ -8,15 +8,15 @@ import { i18n } from '@kbn/i18n'; import type { FieldFormat } from '@kbn/field-formats-plugin/common'; import type { Datatable } from '@kbn/expressions-plugin/common'; -import { ColumnConfigArg } from './datatable_column'; +import { DatatableColumnArgs } from './datatable_column'; import { getOriginalId } from './transpose_helpers'; import { isNumericFieldForDatatable } from './utils'; -type SummaryRowType = Extract; +type SummaryRowType = Extract; export function getFinalSummaryConfiguration( columnId: string, - columnArgs: Pick | undefined, + columnArgs: Pick | undefined, table: Datatable | undefined ) { const isNumeric = isNumericFieldForDatatable(table, columnId); @@ -87,13 +87,13 @@ export function getSummaryRowOptions(): Array<{ /** @internal **/ export function computeSummaryRowForColumn( - columnArgs: ColumnConfigArg, + columnArgs: DatatableColumnArgs, table: Datatable, formatters: Record, defaultFormatter: FieldFormat ) { const summaryValue = computeFinalValue(columnArgs.summaryRow, columnArgs.columnId, table.rows); - // ignore the coluymn formatter for the count case + // ignore the column formatter for the count case if (columnArgs.summaryRow === 'count') { return defaultFormatter.convert(summaryValue); } @@ -101,7 +101,7 @@ export function computeSummaryRowForColumn( } function computeFinalValue( - type: ColumnConfigArg['summaryRow'], + type: DatatableColumnArgs['summaryRow'], columnId: string, rows: Datatable['rows'] ) { diff --git a/x-pack/plugins/lens/common/expressions/datatable/transpose_helpers.ts b/x-pack/plugins/lens/common/expressions/datatable/transpose_helpers.ts index ef07a87cfb9e1..7f7e4d467f250 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/transpose_helpers.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/transpose_helpers.ts @@ -8,16 +8,20 @@ import type { Datatable, DatatableColumn, DatatableRow } from '@kbn/expressions-plugin/common'; import type { FieldFormat } from '@kbn/field-formats-plugin/common'; import type { DatatableArgs } from './datatable'; -import type { ColumnConfig, ColumnConfigArg } from './datatable_column'; +import type { DatatableColumnConfig, DatatableColumnArgs } from './datatable_column'; const TRANSPOSE_SEPARATOR = '---'; const TRANSPOSE_VISUAL_SEPARATOR = '›'; -function getTransposeId(value: string, columnId: string) { +export function getTransposeId(value: string, columnId: string) { return `${value}${TRANSPOSE_SEPARATOR}${columnId}`; } +export function isTransposeId(id: string): boolean { + return id.split(TRANSPOSE_SEPARATOR).length > 1; +} + export function getOriginalId(id: string) { if (id.includes(TRANSPOSE_SEPARATOR)) { const idParts = id.split(TRANSPOSE_SEPARATOR); @@ -87,11 +91,11 @@ export function transposeTable( function transposeRows( firstTable: Datatable, - bucketsColumnArgs: ColumnConfigArg[], + bucketsColumnArgs: DatatableColumnArgs[], formatters: Record, transposedColumnFormatter: FieldFormat, transposedColumnId: string, - metricsColumnArgs: ColumnConfigArg[] + metricsColumnArgs: DatatableColumnArgs[] ) { const rowsByBucketColumns: Record = groupRowsByBucketColumns( firstTable, @@ -113,8 +117,8 @@ function transposeRows( */ function updateColumnArgs( args: DatatableArgs, - bucketsColumnArgs: ColumnConfig['columns'], - transposedColumnGroups: Array + bucketsColumnArgs: DatatableColumnConfig['columns'], + transposedColumnGroups: Array ) { args.columns = [...bucketsColumnArgs]; // add first column from each group, then add second column for each group, ... @@ -151,8 +155,8 @@ function getUniqueValues(table: Datatable, formatter: FieldFormat, columnId: str */ function transposeColumns( args: DatatableArgs, - bucketsColumnArgs: ColumnConfig['columns'], - metricColumns: ColumnConfig['columns'], + bucketsColumnArgs: DatatableColumnConfig['columns'], + metricColumns: DatatableColumnConfig['columns'], firstTable: Datatable, uniqueValues: string[], uniqueRawValues: unknown[], @@ -196,10 +200,10 @@ function transposeColumns( */ function mergeRowGroups( rowsByBucketColumns: Record, - bucketColumns: ColumnConfigArg[], + bucketColumns: DatatableColumnArgs[], formatter: FieldFormat, transposedColumnId: string, - metricColumns: ColumnConfigArg[] + metricColumns: DatatableColumnArgs[] ) { return Object.values(rowsByBucketColumns).map((rows) => { const mergedRow: DatatableRow = {}; @@ -222,7 +226,7 @@ function mergeRowGroups( */ function groupRowsByBucketColumns( firstTable: Datatable, - bucketColumns: ColumnConfigArg[], + bucketColumns: DatatableColumnArgs[], formatters: Record ) { const rowsByBucketColumns: Record = {}; diff --git a/x-pack/plugins/lens/common/expressions/datatable/types.ts b/x-pack/plugins/lens/common/expressions/datatable/types.ts index 7de3bdde894dc..7f03a1f4fb19b 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/types.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/types.ts @@ -10,6 +10,7 @@ import type { DatatableArgs } from './datatable'; export interface DatatableProps { data: Datatable; + syncColors: boolean; untransposedData?: Datatable; args: DatatableArgs; } diff --git a/x-pack/plugins/lens/common/expressions/datatable/utils.ts b/x-pack/plugins/lens/common/expressions/datatable/utils.ts index 3b60b7e4834fe..71c3d92126b33 100644 --- a/x-pack/plugins/lens/common/expressions/datatable/utils.ts +++ b/x-pack/plugins/lens/common/expressions/datatable/utils.ts @@ -8,10 +8,11 @@ import type { Datatable } from '@kbn/expressions-plugin/common'; import { getOriginalId } from './transpose_helpers'; -export function isNumericFieldForDatatable(currentData: Datatable | undefined, accessor: string) { - const column = currentData?.columns.find( - (col) => col.id === accessor || getOriginalId(col.id) === accessor - ); +export function isNumericFieldForDatatable(table: Datatable | undefined, accessor: string) { + return getFieldTypeFromDatatable(table, accessor) === 'number'; +} - return column?.meta.type === 'number'; +export function getFieldTypeFromDatatable(table: Datatable | undefined, accessor: string) { + return table?.columns.find((col) => col.id === accessor || getOriginalId(col.id) === accessor) + ?.meta.type; } diff --git a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_editor.tsx b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_editor.tsx index faf00ff6350fb..b551ac967eead 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/dimension_editor.tsx @@ -499,7 +499,7 @@ export function DimensionEditor(props: DimensionEditorProps) { position="left" size="s" type="dot" - color="warning" + color={euiTheme.colors.warning} /> )} diff --git a/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_accessor.test.ts b/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_accessor.test.ts new file mode 100644 index 0000000000000..139c6ced456bc --- /dev/null +++ b/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_accessor.test.ts @@ -0,0 +1,36 @@ +/* + * 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 { getColorAccessorFn } from './color_mapping_accessor'; + +jest.mock('@kbn/coloring', () => ({ + ...jest.requireActual('@kbn/coloring'), + getColorFactory: jest + .fn() + .mockReturnValue((v: string | number) => (v === '123' ? 'blue' : 'red')), +})); + +describe('getColorAccessorFn', () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const getColorAccessor = getColorAccessorFn('{}', {} as any, false); + + it('should return null for null values', () => { + expect(getColorAccessor(null)).toBe(null); + }); + + it('should return null for undefined values', () => { + expect(getColorAccessor(undefined)).toBe(null); + }); + + it('should return stringified value for numbers', () => { + expect(getColorAccessor(123)).toBe('blue'); + }); + + it('should return color for string values', () => { + expect(getColorAccessor('testing')).toBe('red'); + }); +}); diff --git a/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_accessor.ts b/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_accessor.ts new file mode 100644 index 0000000000000..116b21bb2245d --- /dev/null +++ b/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_accessor.ts @@ -0,0 +1,37 @@ +/* + * 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 { + AVAILABLE_PALETTES, + getColorFactory, + getPalette, + NeutralPalette, + ColorMappingInputCategoricalData, +} from '@kbn/coloring'; +import { CellColorFn } from './get_cell_color_fn'; + +/** + * Return a color accessor function for XY charts depending on the split accessors received. + */ +export function getColorAccessorFn( + colorMapping: string, + data: ColorMappingInputCategoricalData, + isDarkMode: boolean +): CellColorFn { + const getColor = getColorFactory( + JSON.parse(colorMapping), + getPalette(AVAILABLE_PALETTES, NeutralPalette), + isDarkMode, + data + ); + + return (value) => { + if (value === undefined || value === null) return null; + + return getColor(String(value)); + }; +} diff --git a/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_by_terms.tsx b/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_by_terms.tsx new file mode 100644 index 0000000000000..1eec5a4093275 --- /dev/null +++ b/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_by_terms.tsx @@ -0,0 +1,141 @@ +/* + * 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 React, { MutableRefObject, useState } from 'react'; + +import { + EuiBadge, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiSpacer, + EuiSwitch, + EuiText, +} from '@elastic/eui'; +import { + ColorMapping, + DEFAULT_COLOR_MAPPING_CONFIG, + CategoricalColorMapping, + SPECIAL_TOKENS_STRING_CONVERSION, + AVAILABLE_PALETTES, + PaletteOutput, + PaletteRegistry, + CustomPaletteParams, +} from '@kbn/coloring'; +import { i18n } from '@kbn/i18n'; +import { trackUiCounterEvents } from '../../lens_ui_telemetry'; +import { PalettePicker } from '../palette_picker'; +import { PalettePanelContainer } from './palette_panel_container'; +import { getColorStops } from './utils'; + +interface ColorMappingByTermsProps { + isDarkMode: boolean; + colorMapping?: ColorMapping.Config; + palette?: PaletteOutput; + isInlineEditing?: boolean; + setPalette: (palette: PaletteOutput) => void; + setColorMapping: (colorMapping?: ColorMapping.Config) => void; + paletteService: PaletteRegistry; + panelRef: MutableRefObject; + categories: Array; +} + +export function ColorMappingByTerms({ + isDarkMode, + colorMapping, + palette, + isInlineEditing, + setPalette, + setColorMapping, + paletteService, + panelRef, + categories, +}: ColorMappingByTermsProps) { + const [useNewColorMapping, setUseNewColorMapping] = useState(Boolean(colorMapping)); + + return ( + + +
+ + + + + {i18n.translate('xpack.lens.colorMapping.tryLabel', { + defaultMessage: 'Use the new Color Mapping feature', + })}{' '} + + {i18n.translate('xpack.lens.colorMapping.techPreviewLabel', { + defaultMessage: 'Tech preview', + })} + + + + } + data-test-subj="lns_colorMappingOrLegacyPalette_switch" + compressed + checked={useNewColorMapping} + onChange={({ target: { checked } }) => { + trackUiCounterEvents(`color_mapping_switch_${checked ? 'enabled' : 'disabled'}`); + setColorMapping(checked ? { ...DEFAULT_COLOR_MAPPING_CONFIG } : undefined); + setUseNewColorMapping(checked); + }} + /> + + + + {useNewColorMapping ? ( + + ) : ( + + )} + + +
+
+
+ ); +} diff --git a/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_by_values.tsx b/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_by_values.tsx new file mode 100644 index 0000000000000..9e18f6ae149a8 --- /dev/null +++ b/x-pack/plugins/lens/public/shared_components/coloring/color_mapping_by_values.tsx @@ -0,0 +1,73 @@ +/* + * 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 React, { MutableRefObject } from 'react'; + +import { EuiFormRow } from '@elastic/eui'; +import { + PaletteOutput, + PaletteRegistry, + CustomizablePalette, + DataBounds, + CustomPaletteParams, +} from '@kbn/coloring'; +import { i18n } from '@kbn/i18n'; +import { PalettePanelContainer } from './palette_panel_container'; + +interface ColorMappingByValuesProps { + palette: PaletteOutput; + isInlineEditing?: boolean; + setPalette: (palette: PaletteOutput) => void; + paletteService: PaletteRegistry; + panelRef: MutableRefObject; + dataBounds?: DataBounds; +} + +export function ColorMappingByValues({ + palette, + isInlineEditing, + setPalette, + paletteService, + panelRef, + dataBounds, +}: ColorMappingByValuesProps) { + const colors = palette.params?.stops?.map(({ color }) => color) ?? []; + + return ( + + +
+ { + setPalette(p); + }} + /> +
+
+
+ ); +} diff --git a/x-pack/plugins/lens/public/shared_components/coloring/get_cell_color_fn.ts b/x-pack/plugins/lens/public/shared_components/coloring/get_cell_color_fn.ts new file mode 100644 index 0000000000000..bb7e25220f793 --- /dev/null +++ b/x-pack/plugins/lens/public/shared_components/coloring/get_cell_color_fn.ts @@ -0,0 +1,71 @@ +/* + * 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 { + ColorMappingInputData, + PaletteOutput, + PaletteRegistry, + getSpecialString, +} from '@kbn/coloring'; +import { CustomPaletteState } from '@kbn/charts-plugin/common'; +import { getColorAccessorFn } from './color_mapping_accessor'; + +export type CellColorFn = (value?: number | string | null) => string | null; + +export function getCellColorFn( + paletteService: PaletteRegistry, + data: ColorMappingInputData, + colorByTerms: boolean, + isDarkMode: boolean, + syncColors: boolean, + palette?: PaletteOutput, + colorMapping?: string +): CellColorFn { + if (!colorByTerms && palette && data.type === 'ranges') { + return (value) => { + if (value === null || value === undefined || typeof value !== 'number') return null; + + return ( + paletteService.get(palette.name).getColorForValue?.(value, palette.params, data) ?? null + ); + }; + } + + if (colorByTerms && data.type === 'categories') { + if (colorMapping) { + return getColorAccessorFn(colorMapping, data, isDarkMode); + } else if (palette) { + return (category) => { + if (category === undefined || category === null) return null; + + const strCategory = String(category); // can be a number as a string + + return paletteService.get(palette.name).getCategoricalColor( + [ + { + name: getSpecialString(strCategory), // needed to sync special categories (i.e. '') + rankAtDepth: Math.max( + data.categories.findIndex((v) => v === strCategory), + 0 + ), + totalSeriesAtDepth: data.categories.length || 1, + }, + ], + { + maxDepth: 1, + totalSeries: data.categories.length || 1, + behindText: false, + syncColors, + }, + palette?.params ?? { colors: [] } + ); + }; + } + } + + return () => null; +} diff --git a/x-pack/plugins/lens/public/shared_components/coloring/utils.test.ts b/x-pack/plugins/lens/public/shared_components/coloring/utils.test.ts index 04306ffdfa326..5a126565c251f 100644 --- a/x-pack/plugins/lens/public/shared_components/coloring/utils.test.ts +++ b/x-pack/plugins/lens/public/shared_components/coloring/utils.test.ts @@ -6,7 +6,12 @@ */ import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; -import { applyPaletteParams, findMinMaxByColumnId, getContrastColor } from './utils'; +import { + applyPaletteParams, + findMinMaxByColumnId, + getContrastColor, + shouldColorByTerms, +} from './utils'; describe('applyPaletteParams', () => { const paletteRegistry = chartPluginMock.createPaletteRegistry(); @@ -108,3 +113,17 @@ describe('findMinMaxByColumnId', () => { ).toEqual({ b: { min: 2, max: 53 } }); }); }); + +describe('shouldColorByTerms', () => { + it('should return true if bucketed regardless of value', () => { + expect(shouldColorByTerms('number', true)).toBe(true); + }); + + it('should return false if not bucketed and numeric', () => { + expect(shouldColorByTerms('number', false)).toBe(false); + }); + + it('should return true if not bucketed and non-numeric', () => { + expect(shouldColorByTerms('string', false)).toBe(true); + }); +}); diff --git a/x-pack/plugins/lens/public/shared_components/coloring/utils.ts b/x-pack/plugins/lens/public/shared_components/coloring/utils.ts index 9436dec74be04..211628a096189 100644 --- a/x-pack/plugins/lens/public/shared_components/coloring/utils.ts +++ b/x-pack/plugins/lens/public/shared_components/coloring/utils.ts @@ -17,8 +17,40 @@ import { getPaletteStops, CUSTOM_PALETTE, enforceColorContrast, + ColorMapping, + getColorsFromMapping, + DEFAULT_FALLBACK_PALETTE, } from '@kbn/coloring'; -import { Datatable } from '@kbn/expressions-plugin/common'; +import { Datatable, DatatableColumnType } from '@kbn/expressions-plugin/common'; +import { DataType } from '../../types'; + +/** + * Returns array of colors for provided palette or colorMapping + */ +export function getColorStops( + paletteService: PaletteRegistry, + isDarkMode: boolean, + palette?: PaletteOutput, + colorMapping?: ColorMapping.Config +): string[] { + return colorMapping + ? getColorsFromMapping(isDarkMode, colorMapping) + : palette?.name === CUSTOM_PALETTE + ? palette?.params?.stops?.map(({ color }) => color) ?? [] + : paletteService + .get(palette?.name || DEFAULT_FALLBACK_PALETTE) + .getCategoricalColors(10, palette); +} + +/** + * Bucketed numerical columns should be treated as categorical + */ +export function shouldColorByTerms( + dataType?: DataType | DatatableColumnType, + isBucketed?: boolean +) { + return isBucketed || dataType !== 'number'; +} export function getContrastColor( color: string, @@ -37,11 +69,8 @@ export function getContrastColor( return enforceColorContrast(color, backgroundColor) ? lightColor : darkColor; } -export function getNumericValue(rowValue: number | number[] | undefined) { - if (rowValue == null || Array.isArray(rowValue)) { - return; - } - return rowValue; +export function getNumericValue(rowValue?: unknown) { + return typeof rowValue === 'number' ? rowValue : undefined; } export function applyPaletteParams>( diff --git a/x-pack/plugins/lens/public/shared_components/palette_picker.tsx b/x-pack/plugins/lens/public/shared_components/palette_picker.tsx index 6796eee37a542..24c6b05e6b6e1 100644 --- a/x-pack/plugins/lens/public/shared_components/palette_picker.tsx +++ b/x-pack/plugins/lens/public/shared_components/palette_picker.tsx @@ -12,17 +12,14 @@ import { EuiColorPalettePicker, EuiColorPalettePickerPaletteProps } from '@elast import { EuiFormRow } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -export function PalettePicker({ - palettes, - activePalette, - setPalette, -}: { +interface PalettePickerProps { palettes: PaletteRegistry; - activePalette?: PaletteOutput; + activePalette?: PaletteOutput; setPalette: (palette: PaletteOutput) => void; -}) { - const paletteName = getActivePaletteName(activePalette?.name); +} +export function PalettePicker({ palettes, activePalette, setPalette }: PalettePickerProps) { + const paletteName = getActivePaletteName(activePalette?.name); const palettesToShow: EuiColorPalettePickerPaletteProps[] = palettes .getAll() .filter(({ internal }) => !internal) @@ -34,6 +31,7 @@ export function PalettePicker({ palette: getCategoricalColors(10, id === paletteName ? activePalette?.params : undefined), }; }); + return ( { const { datasourceState: syncedDatasourceState, visualizationState: syncedVisualizationState, + frame, } = syncLinkedDimensions( currentState, visualizationMap, @@ -627,7 +628,11 @@ export const makeLensReducer = (storeDeps: LensStoreDeps) => { payload.datasourceId ); - state.visualization.state = syncedVisualizationState; + const visualization = visualizationMap[state.visualization.activeId!]; + + state.visualization.state = + visualization.onDatasourceUpdate?.(syncedVisualizationState, frame) ?? + syncedVisualizationState; state.datasourceStates[payload.datasourceId].state = syncedDatasourceState; }) .addCase(updateVisualizationState, (state, { payload }) => { @@ -1227,14 +1232,14 @@ function syncLinkedDimensions( const linkedDimensions = activeVisualization.getLinkedDimensions?.(visualizationState); const frame = selectFramePublicAPI({ lens: state }, datasourceMap); - const getDimensionGroups = (layerId: string) => - activeVisualization.getConfiguration({ - state: visualizationState, - layerId, - frame, - }).groups; - if (linkedDimensions) { + const getDimensionGroups = (layerId: string) => + activeVisualization.getConfiguration({ + state: visualizationState, + layerId, + frame, + }).groups; + const idAssuredLinks = linkedDimensions.map((link) => ({ ...link, to: { ...link.to, columnId: link.to.columnId ?? generateId() }, @@ -1276,5 +1281,5 @@ function syncLinkedDimensions( }); } - return { datasourceState, visualizationState }; + return { datasourceState, visualizationState, frame }; } diff --git a/x-pack/plugins/lens/public/types.ts b/x-pack/plugins/lens/public/types.ts index 6af614357b89b..65a27f0afea25 100644 --- a/x-pack/plugins/lens/public/types.ts +++ b/x-pack/plugins/lens/public/types.ts @@ -1317,6 +1317,8 @@ export interface Visualization) => T; + onDatasourceUpdate?: (state: T, frame?: FramePublicAPI) => T; + /** * Some visualization track indexPattern changes (i.e. annotations) * This method makes it aware of the change and produces a new updated state diff --git a/x-pack/plugins/lens/public/utils.test.ts b/x-pack/plugins/lens/public/utils.test.ts index e775059586aff..58366d38161b0 100644 --- a/x-pack/plugins/lens/public/utils.test.ts +++ b/x-pack/plugins/lens/public/utils.test.ts @@ -7,7 +7,7 @@ import { createDatatableUtilitiesMock } from '@kbn/data-plugin/common/mocks'; import { Datatable } from '@kbn/expressions-plugin/public'; -import { getUniqueLabelGenerator, inferTimeField, renewIDs } from './utils'; +import { getUniqueLabelGenerator, inferTimeField, isLensRange, renewIDs } from './utils'; const datatableUtilities = createDatatableUtilitiesMock(); @@ -187,4 +187,24 @@ describe('utils', () => { expect([' ', ' '].map(labelGenerator)).toEqual(['[Untitled]', '[Untitled] [1]']); }); }); + + describe('isRange', () => { + it.each<[expected: boolean, input: unknown]>([ + [true, { from: 0, to: 100, label: '' }], + [true, { from: 0, to: null, label: '' }], + [true, { from: null, to: 100, label: '' }], + [false, { from: 0, to: 100 }], + [false, { from: 0, to: null }], + [false, { from: null, to: 100 }], + [false, { from: 0 }], + [false, { to: 100 }], + [false, null], + [false, undefined], + [false, 123], + [false, 'string'], + [false, {}], + ])('should return %s for %j', (expected, input) => { + expect(isLensRange(input)).toBe(expected); + }); + }); }); diff --git a/x-pack/plugins/lens/public/utils.ts b/x-pack/plugins/lens/public/utils.ts index 83d0b841d0b2a..43129161adde1 100644 --- a/x-pack/plugins/lens/public/utils.ts +++ b/x-pack/plugins/lens/public/utils.ts @@ -39,6 +39,7 @@ import { import type { DatasourceStates, VisualizationState } from './state_management'; import type { IndexPatternServiceAPI } from './data_views_service/service'; import { COLOR_MAPPING_OFF_BY_DEFAULT } from '../common/constants'; +import type { RangeTypeLens } from './datasources/form_based/operations/definitions/ranges'; export function getVisualizeGeoFieldMessage(fieldType: string) { return i18n.translate('xpack.lens.visualizeGeoFieldMessage', { @@ -47,6 +48,17 @@ export function getVisualizeGeoFieldMessage(fieldType: string) { }); } +export const isLensRange = (range: unknown = {}): range is RangeTypeLens => { + if (!range || typeof range !== 'object') return false; + const { from, to, label } = range as RangeTypeLens; + + return ( + label !== undefined && + (typeof from === 'number' || from === null) && + (typeof to === 'number' || to === null) + ); +}; + export const getResolvedDateRange = function (timefilter: TimefilterContract) { const { from, to } = timefilter.getTime(); return { fromDate: from, toDate: to }; diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.test.tsx index ba436f0a588fa..76b8fc7b61740 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.test.tsx @@ -10,13 +10,16 @@ import { DataContext } from './table_basic'; import { createGridCell } from './cell_value'; import type { FieldFormat } from '@kbn/field-formats-plugin/common'; import { Datatable } from '@kbn/expressions-plugin/public'; -import { coreMock } from '@kbn/core/public/mocks'; -import { DatatableArgs, ColumnConfigArg } from '../../../../common/expressions'; +import { DatatableArgs } from '../../../../common/expressions'; import { DataContextType } from './types'; -import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { render, screen } from '@testing-library/react'; +import { getTransposeId } from '../../../../common/expressions/datatable/transpose_helpers'; describe('datatable cell renderer', () => { + const innerCellColorFnMock = jest.fn().mockReturnValue('blue'); + const cellColorFnMock = jest.fn().mockReturnValue(innerCellColorFnMock); + const setCellProps = jest.fn(); + const table: Datatable = { type: 'datatable', columns: [ @@ -30,18 +33,16 @@ describe('datatable cell renderer', () => { ], rows: [{ a: 123 }], }; - const { theme: setUpMockTheme } = coreMock.createSetup(); const CellRenderer = createGridCell( { a: { convert: (x) => `formatted ${x}` } as FieldFormat, }, { columns: [], sortingColumnId: '', sortingDirection: 'none' }, DataContext, - setUpMockTheme + false, + cellColorFnMock ); - const setCellProps = jest.fn(); - afterEach(() => { jest.clearAllMocks(); }); @@ -101,7 +102,8 @@ describe('datatable cell renderer', () => { }, { columns: [], sortingColumnId: '', sortingDirection: 'none' }, DataContext, - setUpMockTheme, + false, + cellColorFnMock, true ); render( @@ -137,7 +139,8 @@ describe('datatable cell renderer', () => { sortingDirection: 'none', }, DataContext, - setUpMockTheme, + false, + cellColorFnMock, true ); render( @@ -156,9 +159,6 @@ describe('datatable cell renderer', () => { }); describe('dynamic coloring', () => { - const paletteRegistry = chartPluginMock.createPaletteRegistry(); - const customPalette = paletteRegistry.get('custom'); - function getCellRenderer(columnConfig: DatatableArgs) { return createGridCell( { @@ -166,7 +166,8 @@ describe('datatable cell renderer', () => { }, columnConfig, DataContext, - setUpMockTheme + false, + cellColorFnMock ); } function getColumnConfiguration(): DatatableArgs { @@ -189,7 +190,7 @@ describe('datatable cell renderer', () => { }, }, type: 'lens_datatable_column', - } as ColumnConfigArg, + }, ], sortingColumnId: '', sortingDirection: 'none', @@ -207,7 +208,7 @@ describe('datatable cell renderer', () => { { { wrapper: DataContextProviderWrapper({ table, - minMaxByColumnId: { a: { min: 12, max: 155 /* > 123 */ } }, - getColorForValue: customPalette.getColorForValue, + minMaxByColumnId: { a: { min: 12, max: 155 } }, ...context, }), } @@ -241,6 +241,27 @@ describe('datatable cell renderer', () => { }); }); + it('should call getCellColor with full columnId of transpose column', () => { + const columnId = getTransposeId('test', 'a'); + const columnConfig = getColumnConfiguration(); + columnConfig.columns[0].colorMode = 'cell'; + columnConfig.columns[0].columnId = columnId; + + renderCellComponent(columnConfig, { + table: { + ...table, + columns: [ + { + ...table.columns[0], + id: columnId, + }, + ], + }, + }); + + expect(cellColorFnMock.mock.calls[0][0]).toBe(columnId); + }); + it('should set the coloring of the text when enabled', () => { const columnConfig = getColumnConfiguration(); columnConfig.columns[0].colorMode = 'text'; @@ -252,14 +273,23 @@ describe('datatable cell renderer', () => { }); }); - it('should not color the cell when the value is an array', () => { + it('should not color the cell when color function returns null', () => { setCellProps.mockClear(); + innerCellColorFnMock.mockReturnValueOnce(null); const columnConfig = getColumnConfiguration(); columnConfig.columns[0].colorMode = 'cell'; - renderCellComponent(columnConfig, { - table: { ...table, rows: [{ a: [10, 123] }] }, - }); + renderCellComponent(columnConfig, {}); + + expect(setCellProps).not.toHaveBeenCalled(); + }); + + it('should not color the cell when color function returns empty string', () => { + innerCellColorFnMock.mockReturnValueOnce(''); + const columnConfig = getColumnConfiguration(); + columnConfig.columns[0].colorMode = 'cell'; + + renderCellComponent(columnConfig, {}); expect(setCellProps).not.toHaveBeenCalled(); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.tsx index a0a01f795ca19..0761c7904e75f 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/cell_value.tsx @@ -6,63 +6,73 @@ */ import React, { useContext, useEffect } from 'react'; -import useObservable from 'react-use/lib/useObservable'; import { EuiDataGridCellValueElementProps, EuiLink } from '@elastic/eui'; -import type { CoreSetup } from '@kbn/core/public'; import classNames from 'classnames'; +import { PaletteOutput } from '@kbn/coloring'; +import { CustomPaletteState } from '@kbn/charts-plugin/common'; import type { FormatFactory } from '../../../../common/types'; -import { getOriginalId } from '../../../../common/expressions/datatable/transpose_helpers'; -import type { ColumnConfig } from '../../../../common/expressions'; +import type { DatatableColumnConfig } from '../../../../common/expressions'; import type { DataContextType } from './types'; -import { getContrastColor, getNumericValue } from '../../../shared_components/coloring/utils'; +import { getContrastColor } from '../../../shared_components/coloring/utils'; +import { CellColorFn } from '../../../shared_components/coloring/get_cell_color_fn'; + +import { isLensRange } from '../../../utils'; + +const getParsedValue = (v: unknown) => { + if (v == null || typeof v === 'number') { + return v; + } + if (isLensRange(v)) { + return v.toString(); + } + return String(v); +}; export const createGridCell = ( formatters: Record>, - columnConfig: ColumnConfig, + columnConfig: DatatableColumnConfig, DataContext: React.Context, - theme: CoreSetup['theme'], + isDarkMode: boolean, + getCellColor: ( + originalId: string, + palette?: PaletteOutput, + colorMapping?: string + ) => CellColorFn, fitRowToContent?: boolean ) => { return ({ rowIndex, columnId, setCellProps, isExpanded }: EuiDataGridCellValueElementProps) => { - const { table, alignments, minMaxByColumnId, getColorForValue, handleFilterClick } = - useContext(DataContext); - const IS_DARK_THEME: boolean = useObservable(theme.theme$, { darkMode: false }).darkMode; - - const rowValue = table?.rows[rowIndex]?.[columnId]; - + const { table, alignments, handleFilterClick } = useContext(DataContext); + const rawRowValue = table?.rows[rowIndex]?.[columnId]; + const rowValue = getParsedValue(rawRowValue); const colIndex = columnConfig.columns.findIndex(({ columnId: id }) => id === columnId); - const { colorMode = 'none', palette, oneClickFilter } = columnConfig.columns[colIndex] || {}; + const { + oneClickFilter, + colorMode = 'none', + palette, + colorMapping, + } = columnConfig.columns[colIndex] ?? {}; const filterOnClick = oneClickFilter && handleFilterClick; - - const content = formatters[columnId]?.convert(rowValue, filterOnClick ? 'text' : 'html'); + const content = formatters[columnId]?.convert(rawRowValue, filterOnClick ? 'text' : 'html'); const currentAlignment = alignments && alignments[columnId]; useEffect(() => { let colorSet = false; - const originalId = getOriginalId(columnId); - if (minMaxByColumnId?.[originalId]) { - if (colorMode !== 'none' && palette?.params && getColorForValue) { - // workout the bucket the value belongs to - const color = getColorForValue( - getNumericValue(rowValue), - palette.params, - minMaxByColumnId[originalId] - ); - if (color) { - const style = { [colorMode === 'cell' ? 'backgroundColor' : 'color']: color }; - if (colorMode === 'cell' && color) { - style.color = getContrastColor(color, IS_DARK_THEME); - } - colorSet = true; - setCellProps({ - style, - }); + if (colorMode !== 'none' && (palette || colorMapping)) { + const color = getCellColor(columnId, palette, colorMapping)(rowValue); + + if (color) { + const style = { [colorMode === 'cell' ? 'backgroundColor' : 'color']: color }; + if (colorMode === 'cell' && color) { + style.color = getContrastColor(color, isDarkMode); } + colorSet = true; + setCellProps({ style }); } } + // Clean up styles when something changes, this avoids cell's styling to stick forever // Checks isExpanded to prevent clearing style after expanding cell - if (colorMode !== 'none' && minMaxByColumnId?.[originalId] && colorSet && !isExpanded) { + if (colorSet && !isExpanded) { return () => { setCellProps({ style: { @@ -72,17 +82,7 @@ export const createGridCell = ( }); }; } - }, [ - rowValue, - columnId, - setCellProps, - colorMode, - palette, - minMaxByColumnId, - getColorForValue, - IS_DARK_THEME, - isExpanded, - ]); + }, [rowValue, columnId, setCellProps, colorMode, palette, colorMapping, isExpanded]); if (filterOnClick) { return ( @@ -95,7 +95,7 @@ export const createGridCell = ( > { - handleFilterClick?.(columnId, rowValue, colIndex, rowIndex); + handleFilterClick?.(columnId, rawRowValue, colIndex, rowIndex); }} > {content} @@ -103,6 +103,7 @@ export const createGridCell = (
); } + return (
diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/columns.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/columns.tsx index 99bc648f8bf6d..6cd8c32db4b6d 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/columns.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/columns.tsx @@ -18,7 +18,7 @@ import { EuiDataGridColumnCellAction } from '@elastic/eui/src/components/datagri import { FILTER_CELL_ACTION_TYPE } from '@kbn/cell-actions/constants'; import type { FormatFactory } from '../../../../common/types'; import { RowHeightMode } from '../../../../common/types'; -import type { ColumnConfig } from '../../../../common/expressions'; +import type { DatatableColumnConfig } from '../../../../common/expressions'; import { LensCellValueAction } from '../../../types'; import { buildColumnsMetaLookup } from './helpers'; import { DEFAULT_HEADER_ROW_HEIGHT } from './constants'; @@ -46,7 +46,7 @@ export const createGridColumns = ( ) => void) | undefined, isReadOnly: boolean, - columnConfig: ColumnConfig, + columnConfig: DatatableColumnConfig, visibleColumns: string[], formatFactory: FormatFactory, onColumnResize: (eventData: { columnId: string; width: number | undefined }) => void, diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.test.tsx index 133b18bb3ce67..f58b66dba20d3 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.test.tsx @@ -6,28 +6,36 @@ */ import React from 'react'; -import type { PaletteRegistry } from '@kbn/coloring'; -import { render, screen } from '@testing-library/react'; +import { DEFAULT_COLOR_MAPPING_CONFIG, type PaletteRegistry } from '@kbn/coloring'; +import { act, render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; -import { getSelectedButtonInGroup } from '@kbn/test-eui-helpers'; +import { EuiButtonGroupTestHarness } from '@kbn/test-eui-helpers'; import { FramePublicAPI, OperationDescriptor, VisualizationDimensionEditorProps, DatasourcePublicAPI, + DataType, } from '../../../types'; import { DatatableVisualizationState } from '../visualization'; import { createMockDatasource, createMockFramePublicAPI } from '../../../mocks'; import { TableDimensionEditor } from './dimension_editor'; +import { ColumnState } from '../../../../common/expressions'; +import { capitalize } from 'lodash'; describe('data table dimension editor', () => { let frame: FramePublicAPI; let state: DatatableVisualizationState; - let setState: (newState: DatatableVisualizationState) => void; + let btnGroups: { + colorMode: EuiButtonGroupTestHarness; + alignment: EuiButtonGroupTestHarness; + }; + let mockOperationForFirstColumn: (overrides?: Partial) => void; let props: VisualizationDimensionEditorProps & { paletteService: PaletteRegistry; + isDarkMode: boolean; }; function testState(): DatatableVisualizationState { @@ -42,7 +50,19 @@ describe('data table dimension editor', () => { }; } + beforeAll(() => { + jest.useFakeTimers(); + }); + + afterAll(() => { + jest.useRealTimers(); + }); + beforeEach(() => { + btnGroups = { + colorMode: new EuiButtonGroupTestHarness('lnsDatatable_dynamicColoring_groups'), + alignment: new EuiButtonGroupTestHarness('lnsDatatable_alignment_groups'), + }; state = testState(); frame = createMockFramePublicAPI(); frame.datasourceLayers = { @@ -63,21 +83,32 @@ describe('data table dimension editor', () => { rows: [], }, }; - setState = jest.fn(); - props = { accessor: 'foo', frame, groupId: 'columns', layerId: 'first', state, - setState, + setState: jest.fn(), + isDarkMode: false, paletteService: chartPluginMock.createPaletteRegistry(), panelRef: React.createRef(), addLayer: jest.fn(), removeLayer: jest.fn(), datasource: {} as DatasourcePublicAPI, }; + + mockOperationForFirstColumn = (overrides: Partial = {}) => { + frame!.datasourceLayers!.first!.getOperationForColumnId = jest.fn().mockReturnValue({ + label: 'label', + isBucketed: false, + dataType: 'string', + hasTimeShift: false, + hasReducedTimeRange: false, + ...overrides, + } satisfies OperationDescriptor); + }; + mockOperationForFirstColumn(); }); const renderTableDimensionEditor = ( @@ -99,19 +130,19 @@ describe('data table dimension editor', () => { it('should render default alignment', () => { renderTableDimensionEditor(); - expect(getSelectedButtonInGroup('lnsDatatable_alignment_groups')()).toHaveTextContent('Left'); + expect(btnGroups.alignment.selected).toHaveTextContent('Left'); }); it('should render default alignment for number', () => { - frame.activeData!.first.columns[0].meta.type = 'number'; + mockOperationForFirstColumn({ dataType: 'number' }); renderTableDimensionEditor(); - expect(getSelectedButtonInGroup('lnsDatatable_alignment_groups')()).toHaveTextContent('Right'); + expect(btnGroups.alignment.selected).toHaveTextContent('Right'); }); it('should render specific alignment', () => { state.columns[0].alignment = 'center'; renderTableDimensionEditor(); - expect(getSelectedButtonInGroup('lnsDatatable_alignment_groups')()).toHaveTextContent('Center'); + expect(btnGroups.alignment.selected).toHaveTextContent('Center'); }); it('should set state for the right column', () => { @@ -125,7 +156,8 @@ describe('data table dimension editor', () => { ]; renderTableDimensionEditor(); userEvent.click(screen.getByRole('button', { name: 'Center' })); - expect(setState).toHaveBeenCalledWith({ + jest.advanceTimersByTime(256); + expect(props.setState).toHaveBeenCalledWith({ ...state, columns: [ { @@ -139,44 +171,49 @@ describe('data table dimension editor', () => { }); }); - it('should not show the dynamic coloring option for non numeric columns', () => { - renderTableDimensionEditor(); - expect(screen.queryByTestId('lnsDatatable_dynamicColoring_groups')).not.toBeInTheDocument(); - expect(screen.queryByTestId('lns_dynamicColoring_edit')).not.toBeInTheDocument(); - }); - it('should set the dynamic coloring default to "none"', () => { - frame.activeData!.first.columns[0].meta.type = 'number'; + state.columns[0].colorMode = undefined; renderTableDimensionEditor(); - expect(getSelectedButtonInGroup('lnsDatatable_dynamicColoring_groups')()).toHaveTextContent( - 'None' - ); + expect(btnGroups.colorMode.selected).toHaveTextContent('None'); expect(screen.queryByTestId('lns_dynamicColoring_edit')).not.toBeInTheDocument(); }); - it('should show the dynamic palette display ony when colorMode is different from "none"', () => { - frame.activeData!.first.columns[0].meta.type = 'number'; - state.columns[0].colorMode = 'text'; - renderTableDimensionEditor(); - expect(getSelectedButtonInGroup('lnsDatatable_dynamicColoring_groups')()).toHaveTextContent( - 'Text' - ); - expect(screen.getByTestId('lns_dynamicColoring_edit')).toBeInTheDocument(); - }); + it.each(['date'])( + 'should not show the dynamic coloring option for "%s" columns', + (dataType) => { + mockOperationForFirstColumn({ dataType }); + renderTableDimensionEditor(); + expect(screen.queryByTestId('lnsDatatable_dynamicColoring_groups')).not.toBeInTheDocument(); + expect(screen.queryByTestId('lns_dynamicColoring_edit')).not.toBeInTheDocument(); + } + ); + + it.each(['cell', 'text'])( + 'should show the palette options ony when colorMode is "%s"', + (colorMode) => { + state.columns[0].colorMode = colorMode; + renderTableDimensionEditor(); + expect(btnGroups.colorMode.selected).toHaveTextContent(capitalize(colorMode)); + expect(screen.getByTestId('lns_dynamicColoring_edit')).toBeInTheDocument(); + } + ); + + it.each(['none', undefined])( + 'should not show the palette options when colorMode is "%s"', + (colorMode) => { + state.columns[0].colorMode = colorMode; + renderTableDimensionEditor(); + expect(btnGroups.colorMode.selected).toHaveTextContent(capitalize(colorMode ?? 'none')); + expect(screen.queryByTestId('lns_dynamicColoring_edit')).not.toBeInTheDocument(); + } + ); it('should set the coloring mode to the right column', () => { - frame.activeData!.first.columns[0].meta.type = 'number'; - state.columns = [ - { - columnId: 'foo', - }, - { - columnId: 'bar', - }, - ]; + state.columns = [{ columnId: 'foo' }, { columnId: 'bar' }]; renderTableDimensionEditor(); userEvent.click(screen.getByRole('button', { name: 'Cell' })); - expect(setState).toHaveBeenCalledWith({ + jest.advanceTimersByTime(256); + expect(props.setState).toHaveBeenCalledWith({ ...state, columns: [ { @@ -191,31 +228,73 @@ describe('data table dimension editor', () => { }); }); - it('should open the palette panel when "Settings" link is clicked in the palette input', () => { - frame.activeData!.first.columns[0].meta.type = 'number'; + it.each<{ flyout: 'terms' | 'values'; isBucketed: boolean; dataType: DataType }>([ + { flyout: 'terms', isBucketed: true, dataType: 'number' }, + { flyout: 'terms', isBucketed: false, dataType: 'string' }, + { flyout: 'values', isBucketed: false, dataType: 'number' }, + ])( + 'should show color by $flyout flyout when bucketing is $isBucketed with $dataType column', + ({ flyout, isBucketed, dataType }) => { + state.columns[0].colorMode = 'cell'; + mockOperationForFirstColumn({ isBucketed, dataType }); + renderTableDimensionEditor(); + + userEvent.click(screen.getByLabelText('Edit colors')); + + expect(screen.getByTestId(`lns-palettePanel-${flyout}`)).toBeInTheDocument(); + } + ); + + it('should show the dynamic coloring option for a bucketed operation', () => { state.columns[0].colorMode = 'cell'; + mockOperationForFirstColumn({ isBucketed: true }); renderTableDimensionEditor(); - userEvent.click(screen.getByLabelText('Edit colors')); - expect(screen.getByTestId('lns-palettePanelFlyout')).toBeInTheDocument(); + expect(screen.queryByTestId('lnsDatatable_dynamicColoring_groups')).toBeInTheDocument(); + expect(screen.queryByTestId('lns_dynamicColoring_edit')).toBeInTheDocument(); }); - it('should not show the dynamic coloring option for a bucketed operation', () => { - frame.activeData!.first.columns[0].meta.type = 'number'; - const datasourceLayers = frame.datasourceLayers as Record; - datasourceLayers.first.getOperationForColumnId = jest.fn( - () => ({ isBucketed: true } as OperationDescriptor) - ); + it('should clear palette and colorMapping when colorMode is set to "none"', () => { state.columns[0].colorMode = 'cell'; + state.columns[0].palette = { + type: 'palette', + name: 'default', + }; + state.columns[0].colorMapping = DEFAULT_COLOR_MAPPING_CONFIG; renderTableDimensionEditor(); - expect(screen.queryByTestId('lnsDatatable_dynamicColoring_groups')).not.toBeInTheDocument(); - expect(screen.queryByTestId('lns_dynamicColoring_edit')).not.toBeInTheDocument(); + + act(() => { + // this throws an error about state update even in act() + btnGroups.colorMode.select('None'); + }); + + jest.advanceTimersByTime(256); + expect(props.setState).toBeCalledWith({ + ...state, + columns: [ + expect.objectContaining({ + colorMode: 'none', + palette: undefined, + colorMapping: undefined, + }), + ], + }); }); - it('should not show the summary field for non numeric columns', () => { - renderTableDimensionEditor(); - expect(screen.queryByTestId('lnsDatatable_summaryrow_function')).not.toBeInTheDocument(); - expect(screen.queryByTestId('lnsDatatable_summaryrow_label')).not.toBeInTheDocument(); + [true, false].forEach((isTransposed) => { + it(`should${isTransposed ? ' not' : ''} show hidden switch when column is${ + !isTransposed ? ' not' : '' + } transposed`, () => { + state.columns[0].isTransposed = isTransposed; + renderTableDimensionEditor(); + + const hiddenSwitch = screen.queryByTestId('lns-table-column-hidden'); + if (isTransposed) { + expect(hiddenSwitch).not.toBeInTheDocument(); + } else { + expect(hiddenSwitch).toBeInTheDocument(); + } + }); }); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.tsx index 2ffe06144ff48..c1e097276cf3d 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor.tsx @@ -5,37 +5,40 @@ * 2.0. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiFormRow, EuiSwitch, EuiButtonGroup, htmlIdGenerator } from '@elastic/eui'; -import { CustomizablePalette, PaletteRegistry } from '@kbn/coloring'; +import { PaletteRegistry } from '@kbn/coloring'; +import { getColorCategories } from '@kbn/chart-expressions-common'; +import { useDebouncedValue } from '@kbn/visualization-utils'; import type { VisualizationDimensionEditorProps } from '../../../types'; import type { DatatableVisualizationState } from '../visualization'; import { applyPaletteParams, defaultPaletteParams, - PalettePanelContainer, findMinMaxByColumnId, + shouldColorByTerms, } from '../../../shared_components'; -import { isNumericFieldForDatatable } from '../../../../common/expressions/datatable/utils'; import { getOriginalId } from '../../../../common/expressions/datatable/transpose_helpers'; import './dimension_editor.scss'; import { CollapseSetting } from '../../../shared_components/collapse_setting'; +import { ColorMappingByValues } from '../../../shared_components/coloring/color_mapping_by_values'; +import { ColorMappingByTerms } from '../../../shared_components/coloring/color_mapping_by_terms'; const idPrefix = htmlIdGenerator()(); type ColumnType = DatatableVisualizationState['columns'][number]; -function updateColumnWith( +function updateColumn( state: DatatableVisualizationState, columnId: string, - newColumnProps: Partial + newColumn: Partial ) { return state.columns.map((currentColumn) => { if (currentColumn.columnId === columnId) { - return { ...currentColumn, ...newColumnProps }; + return { ...currentColumn, ...newColumn }; } else { return currentColumn; } @@ -45,30 +48,41 @@ function updateColumnWith( export function TableDimensionEditor( props: VisualizationDimensionEditorProps & { paletteService: PaletteRegistry; + isDarkMode: boolean; } ) { - const { state, setState, frame, accessor, isInlineEditing } = props; - const column = state.columns.find(({ columnId }) => accessor === columnId); + const { frame, accessor, isInlineEditing, isDarkMode } = props; + const column = props.state.columns.find(({ columnId }) => accessor === columnId); + const { inputValue: localState, handleInputChange: setLocalState } = + useDebouncedValue({ + value: props.state, + onChange: props.setState, + }); + + const updateColumnState = useCallback( + (columnId: string, newColumn: Partial) => { + setLocalState({ + ...localState, + columns: updateColumn(localState, columnId, newColumn), + }); + }, + [setLocalState, localState] + ); if (!column) return null; if (column.isTransposed) return null; - const currentData = frame.activeData?.[state.layerId]; - - // either read config state or use same logic as chart itself - const isNumeric = isNumericFieldForDatatable(currentData, accessor); - const currentAlignment = column?.alignment || (isNumeric ? 'right' : 'left'); + const currentData = frame.activeData?.[localState.layerId]; + const datasource = frame.datasourceLayers?.[localState.layerId]; + const { dataType, isBucketed } = datasource?.getOperationForColumnId(accessor) ?? {}; + const showColorByTerms = shouldColorByTerms(dataType, isBucketed); + const currentAlignment = column?.alignment || (dataType === 'number' ? 'right' : 'left'); const currentColorMode = column?.colorMode || 'none'; const hasDynamicColoring = currentColorMode !== 'none'; + const showDynamicColoringFeature = dataType !== 'date'; + const visibleColumnsCount = localState.columns.filter((c) => !c.hidden).length; - const datasource = frame.datasourceLayers[state.layerId]; - const showDynamicColoringFeature = Boolean( - isNumeric && !datasource?.getOperationForColumnId(accessor)?.isBucketed - ); - - const visibleColumnsCount = state.columns.filter((c) => !c.hidden).length; - - const hasTransposedColumn = state.columns.some(({ isTransposed }) => isTransposed); + const hasTransposedColumn = localState.columns.some(({ isTransposed }) => isTransposed); const columnsToCheck = hasTransposedColumn ? currentData?.columns.filter(({ id }) => getOriginalId(id) === accessor).map(({ id }) => id) || [] @@ -76,12 +90,13 @@ export function TableDimensionEditor( const minMaxByColumnId = findMinMaxByColumnId(columnsToCheck, currentData, getOriginalId); const currentMinMax = minMaxByColumnId[accessor]; - const activePalette = column?.palette || { + const activePalette = column?.palette ?? { type: 'palette', - name: defaultPaletteParams.name, + name: showColorByTerms ? 'default' : defaultPaletteParams.name, }; // need to tell the helper that the colorStops are required to display const displayStops = applyPaletteParams(props.paletteService, activePalette, currentMinMax); + const categories = getColorCategories(currentData?.rows ?? [], accessor, false, [null]); return ( <> @@ -125,10 +140,7 @@ export function TableDimensionEditor( idSelected={`${idPrefix}${currentAlignment}`} onChange={(id) => { const newMode = id.replace(idPrefix, '') as ColumnType['alignment']; - setState({ - ...state, - columns: updateColumnWith(state, accessor, { alignment: newMode }), - }); + updateColumnState(accessor, { alignment: newMode }); }} /> @@ -187,45 +199,46 @@ export function TableDimensionEditor( }, }; } + // clear up when switching to no coloring - if (column?.palette && newMode === 'none') { + if (newMode === 'none') { params.palette = undefined; + params.colorMapping = undefined; } - setState({ - ...state, - columns: updateColumnWith(state, accessor, params), - }); + updateColumnState(accessor, params); }} /> - {hasDynamicColoring && ( - - color)} - siblingRef={props.panelRef} + + {hasDynamicColoring && + (showColorByTerms ? ( + { + updateColumnState(accessor, { palette }); + }} + setColorMapping={(colorMapping) => { + updateColumnState(accessor, { colorMapping }); + }} + paletteService={props.paletteService} + panelRef={props.panelRef} + categories={categories} + /> + ) : ( + - { - setState({ - ...state, - columns: updateColumnWith(state, accessor, { palette: newPalette }), - }); - }} - /> - - - )} + setPalette={(newPalette) => { + updateColumnState(accessor, { palette: newPalette }); + }} + paletteService={props.paletteService} + panelRef={props.panelRef} + dataBounds={currentMinMax} + /> + ))} )} {!column.isTransposed && ( @@ -247,8 +260,8 @@ export function TableDimensionEditor( disabled={!column.hidden && visibleColumnsCount <= 1} onChange={() => { const newState = { - ...state, - columns: state.columns.map((currentColumn) => { + ...localState, + columns: localState.columns.map((currentColumn) => { if (currentColumn.columnId === accessor) { return { ...currentColumn, @@ -259,7 +272,7 @@ export function TableDimensionEditor( } }), }; - setState(newState); + setLocalState(newState); }} /> @@ -283,8 +296,8 @@ export function TableDimensionEditor( disabled={column.hidden} onChange={() => { const newState = { - ...state, - columns: state.columns.map((currentColumn) => { + ...localState, + columns: localState.columns.map((currentColumn) => { if (currentColumn.columnId === accessor) { return { ...currentColumn, @@ -295,7 +308,7 @@ export function TableDimensionEditor( } }), }; - setState(newState); + setLocalState(newState); }} /> @@ -323,7 +336,7 @@ export function TableDimensionDataExtraEditor( onChange={(collapseFn) => { setState({ ...state, - columns: updateColumnWith(state, accessor, { collapseFn }), + columns: updateColumn(state, accessor, { collapseFn }), }); }} /> diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_additional_section.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_additional_section.test.tsx index b55f637f3cbb3..a12e10d4585c2 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_additional_section.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_additional_section.test.tsx @@ -18,11 +18,11 @@ import { import { DatatableVisualizationState } from '../visualization'; import { createMockDatasource, createMockFramePublicAPI } from '../../../mocks'; import { TableDimensionEditorAdditionalSection } from './dimension_editor_addtional_section'; +import { ColumnState } from '../../../../common/expressions'; describe('data table dimension editor additional section', () => { let frame: FramePublicAPI; let state: DatatableVisualizationState; - let setState: (newState: DatatableVisualizationState) => void; let props: VisualizationDimensionEditorProps & { paletteService: PaletteRegistry; }; @@ -34,6 +34,7 @@ describe('data table dimension editor additional section', () => { columns: [ { columnId: 'foo', + summaryRow: undefined, }, ], }; @@ -53,21 +54,20 @@ describe('data table dimension editor additional section', () => { id: 'foo', name: 'foo', meta: { - type: 'string', + type: 'number', }, }, ], rows: [], }, }; - setState = jest.fn(); props = { accessor: 'foo', frame, groupId: 'columns', layerId: 'first', state, - setState, + setState: jest.fn(), paletteService: chartPluginMock.createPaletteRegistry(), panelRef: React.createRef(), addLayer: jest.fn(), @@ -76,27 +76,50 @@ describe('data table dimension editor additional section', () => { }; }); - it('should set the summary row function default to "none"', () => { - frame.activeData!.first.columns[0].meta.type = 'number'; - render(); + const renderComponent = ( + overrideProps?: Partial< + VisualizationDimensionEditorProps & { + paletteService: PaletteRegistry; + } + > + ) => { + return render(); + }; + + it('should set the summary row fn default to "none"', () => { + state.columns[0].summaryRow = undefined; + renderComponent(); expect(screen.getByRole('combobox')).toHaveValue('None'); expect(screen.queryByTestId('lnsDatatable_summaryrow_label')).not.toBeInTheDocument(); }); - it('should show the summary row label input ony when summary row is different from "none"', () => { - frame.activeData!.first.columns[0].meta.type = 'number'; - state.columns[0].summaryRow = 'sum'; - render(); - expect(screen.getByRole('combobox')).toHaveValue('Sum'); - expect(screen.getByTestId('lnsDatatable_summaryrow_label')).toHaveValue('Sum'); - }); + it.each<[summaryRow: ColumnState['summaryRow'], label: string]>([ + ['sum', 'Sum'], + ['avg', 'Average'], + ['count', 'Value count'], + ['min', 'Minimum'], + ['max', 'Maximum'], + ])( + 'should show the summary row label input ony when summary row fn is "%s"', + (summaryRow, label) => { + state.columns[0].summaryRow = summaryRow; + renderComponent(); + expect(screen.getByRole('combobox')).toHaveValue(label); + expect(screen.getByTestId('lnsDatatable_summaryrow_label')).toHaveValue(label); + } + ); it("should show the correct summary row name when user's changes summary label", () => { - frame.activeData!.first.columns[0].meta.type = 'number'; state.columns[0].summaryRow = 'sum'; state.columns[0].summaryLabel = 'MySum'; - render(); + renderComponent(); expect(screen.getByRole('combobox')).toHaveValue('Sum'); expect(screen.getByTestId('lnsDatatable_summaryrow_label')).toHaveValue('MySum'); }); + + it('should not show the summary field for non numeric columns', () => { + frame.activeData!.first.columns[0].meta.type = 'string'; + expect(screen.queryByTestId('lnsDatatable_summaryrow_function')).not.toBeInTheDocument(); + expect(screen.queryByTestId('lnsDatatable_summaryrow_label')).not.toBeInTheDocument(); + }); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_addtional_section.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_addtional_section.tsx index 62e038d71090c..92268d052cd44 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_addtional_section.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/dimension_editor_addtional_section.tsx @@ -21,7 +21,6 @@ import { getFinalSummaryConfiguration, getSummaryRowOptions, } from '../../../../common/expressions/datatable/summary'; - import { isNumericFieldForDatatable } from '../../../../common/expressions/datatable/utils'; import './dimension_editor.scss'; @@ -76,7 +75,6 @@ export function TableDimensionEditorAdditionalSection( const currentData = frame.activeData?.[state.layerId]; - // either read config state or use same logic as chart itself const isNumeric = isNumericFieldForDatatable(currentData, accessor); // when switching from one operation to another, make sure to keep the configuration consistent const { summaryRow, summaryLabel: fallbackSummaryLabel } = getFinalSummaryConfiguration( diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/table_actions.test.ts b/x-pack/plugins/lens/public/visualizations/datatable/components/table_actions.test.ts index 2a517acc33084..3b89f32b22ffc 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/table_actions.test.ts +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/table_actions.test.ts @@ -17,9 +17,9 @@ import { createGridHideHandler, createTransposeColumnFilterHandler, } from './table_actions'; -import type { LensGridDirection, ColumnConfig } from '../../../../common/expressions'; +import type { LensGridDirection, DatatableColumnConfig } from '../../../../common/expressions'; -function getDefaultConfig(): ColumnConfig { +function getDefaultConfig(): DatatableColumnConfig { return { columns: [ { columnId: 'a', type: 'lens_datatable_column' }, diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/table_actions.ts b/x-pack/plugins/lens/public/visualizations/datatable/components/table_actions.ts index 8c1c56343b2f5..e53713069fb8f 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/table_actions.ts +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/table_actions.ts @@ -19,19 +19,15 @@ import { ClickTriggerEvent } from '@kbn/charts-plugin/public'; import { getSortingCriteria } from '@kbn/sort-predicates'; import { i18n } from '@kbn/i18n'; import type { LensResizeAction, LensSortAction, LensToggleAction } from './types'; -import type { - ColumnConfig, - ColumnConfigArg, - LensGridDirection, -} from '../../../../common/expressions'; +import type { DatatableColumnConfig, LensGridDirection } from '../../../../common/expressions'; import { getOriginalId } from '../../../../common/expressions/datatable/transpose_helpers'; import type { FormatFactory } from '../../../../common/types'; import { buildColumnsMetaLookup } from './helpers'; export const createGridResizeHandler = ( - columnConfig: ColumnConfig, - setColumnConfig: React.Dispatch>, + columnConfig: DatatableColumnConfig, + setColumnConfig: React.Dispatch>, onEditAction: (data: LensResizeAction['data']) => void ) => (eventData: { columnId: string; width: number | undefined }) => { @@ -59,8 +55,8 @@ export const createGridResizeHandler = export const createGridHideHandler = ( - columnConfig: ColumnConfig, - setColumnConfig: React.Dispatch>, + columnConfig: DatatableColumnConfig, + setColumnConfig: React.Dispatch>, onEditAction: (data: LensToggleAction['data']) => void ) => (eventData: { columnId: string }) => { @@ -177,7 +173,7 @@ function getColumnType({ columnId, lookup, }: { - columnConfig: ColumnConfig; + columnConfig: DatatableColumnConfig; columnId: string; lookup: Record< string, @@ -194,11 +190,7 @@ function getColumnType({ export const buildSchemaDetectors = ( columns: EuiDataGridColumn[], - columnConfig: { - columns: ColumnConfigArg[]; - sortingColumnId: string | undefined; - sortingDirection: 'none' | 'asc' | 'desc'; - }, + columnConfig: DatatableColumnConfig, table: Datatable, formatters: Record> ): EuiDataGridSchemaDetector[] => { diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx index 8f3060c037808..3c0243e1b980e 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.test.tsx @@ -20,6 +20,18 @@ import { DatatableComponent } from './table_basic'; import type { DatatableProps } from '../../../../common/expressions'; import { LENS_EDIT_PAGESIZE_ACTION } from './constants'; import { DatatableRenderProps } from './types'; +import { PaletteOutput } from '@kbn/coloring'; +import { CustomPaletteState } from '@kbn/charts-plugin/common'; +import { getCellColorFn } from '../../../shared_components/coloring/get_cell_color_fn'; +import { getTransposeId } from '../../../../common/expressions/datatable/transpose_helpers'; + +jest.mock('../../../shared_components/coloring/get_cell_color_fn', () => { + const mod = jest.requireActual('../../../shared_components/coloring/get_cell_color_fn'); + return { + ...mod, + getCellColorFn: jest.fn(mod.getCellColorFn), + }; +}); const { theme: setUpMockTheme } = coreMock.createSetup(); @@ -97,8 +109,12 @@ describe('DatatableComponent', () => { args = sample.args; }); + afterEach(() => { + jest.clearAllMocks(); + }); + const renderDatatableComponent = (propsOverrides: Partial = {}) => { - const props = { + const props: DatatableRenderProps = { data, args, formatFactory: () => ({ convert: (x) => x } as IFieldFormat), @@ -108,6 +124,7 @@ describe('DatatableComponent', () => { theme: setUpMockTheme, renderMode: 'edit' as const, interactive: true, + syncColors: false, renderComplete, ...propsOverrides, }; @@ -345,9 +362,9 @@ describe('DatatableComponent', () => { args: { ...args, columns: [ - { columnId: 'a', alignment: 'center', type: 'lens_datatable_column' }, - { columnId: 'b', type: 'lens_datatable_column' }, - { columnId: 'c', type: 'lens_datatable_column' }, + { columnId: 'a', alignment: 'center', type: 'lens_datatable_column', colorMode: 'none' }, + { columnId: 'b', type: 'lens_datatable_column', colorMode: 'none' }, + { columnId: 'c', type: 'lens_datatable_column', colorMode: 'none' }, ], sortingColumnId: 'b', sortingDirection: 'desc', @@ -358,44 +375,10 @@ describe('DatatableComponent', () => { .map((cell) => cell.className); expect(alignmentsClassNames).toEqual([ - // set via args - 'lnsTableCell--center', - // default for date - 'lnsTableCell--left', - // default for number - 'lnsTableCell--right', + 'lnsTableCell--center', // set via args + 'lnsTableCell--left', // default for date + 'lnsTableCell--right', // default for number ]); - // ({ convert: (x) => x } as IFieldFormat)} - // dispatchEvent={onDispatchEvent} - // getType={jest.fn()} - // renderMode="view" - // paletteService={chartPluginMock.createPaletteRegistry()} - // theme={setUpMockTheme} - // interactive - // renderComplete={renderComplete} - // /> - // ); - - // expect(wrapper.find(DataContext.Provider).prop('value').alignments).toEqual({ - // // set via args - // a: 'center', - // // default for date - // b: 'left', - // // default for number - // c: 'right', - // }); }); test('it should refresh the table header when the datatable data changes', () => { @@ -633,4 +616,106 @@ describe('DatatableComponent', () => { ); }); }); + + describe('renderCellValue', () => { + describe('getCellColor', () => { + const palette: PaletteOutput = { + type: 'palette', + name: 'default', + params: { + colors: [], + gradient: false, + stops: [], + range: 'number', + rangeMin: 0, + rangeMax: 100, + }, + }; + + describe('caching', () => { + test('caches getCellColorFn by columnId', () => { + args.columns[0].palette = palette; + args.columns[0].colorMode = 'cell'; + data.rows.push( + ...[ + { a: 'pants', b: 1588024800000, c: 4 }, + { a: 'hat', b: 1588024800000, c: 5 }, + { a: 'bag', b: 1588024800000, c: 6 }, + ] + ); + + renderDatatableComponent(); + + expect(getCellColorFn).toBeCalledTimes(2); // 2 initial renders of table + }); + + test('caches getCellColorFn by columnId with transpose columns', () => { + const columnId1 = getTransposeId('a', 'test'); + const columnId2 = getTransposeId('b', 'test'); + + renderDatatableComponent({ + data: { + ...data, + rows: [{ [columnId1]: 'shoe', [columnId2]: 'hat' }], + columns: [columnId1, columnId2].map((id) => ({ + ...data.columns[0], + id, + })), + }, + args: { + ...args, + columns: [columnId1, columnId2].map((columnId) => ({ + ...args.columns[0], + palette, + colorMode: 'cell', + columnId, + })), + }, + }); + + expect(getCellColorFn).toBeCalledTimes(2); // 2 initial renders of table + }); + }); + + const color = 'red'; + + test('should correctly color numerical values', () => { + args.columns[0].palette = palette; + args.columns[0].colorMode = 'cell'; + + (getCellColorFn as jest.Mock).mockReturnValue(() => color); + + renderDatatableComponent(); + + const cellColors = screen + .queryAllByRole('gridcell') + .map((cell) => [cell.textContent, cell.style.backgroundColor]); + + expect(cellColors).toEqual([ + ['shoes- a, column 1, row 1', 'red'], + ['1588024800000- b, column 2, row 1', ''], + ['3- c, column 3, row 1', ''], + ]); + }); + + test('should correctly color string values', () => { + args.columns[2].palette = palette; + args.columns[2].colorMode = 'cell'; + + (getCellColorFn as jest.Mock).mockReturnValue(() => color); + + renderDatatableComponent(); + + const cellColors = screen + .queryAllByRole('gridcell') + .map((cell) => [cell.textContent, cell.style.backgroundColor]); + + expect(cellColors).toEqual([ + ['shoes- a, column 1, row 1', ''], + ['1588024800000- b, column 2, row 1', ''], + ['3- c, column 3, row 1', 'red'], + ]); + }); + }); + }); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.tsx b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.tsx index 07c095ecc87ab..9c3823c434a21 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/table_basic.tsx @@ -6,7 +6,7 @@ */ import './table_basic.scss'; -import { CUSTOM_PALETTE } from '@kbn/coloring'; +import { ColorMappingInputData, PaletteOutput } from '@kbn/coloring'; import React, { useLayoutEffect, useCallback, @@ -27,15 +27,17 @@ import { EuiDataGridSorting, EuiDataGridStyle, } from '@elastic/eui'; -import { EmptyPlaceholder } from '@kbn/charts-plugin/public'; +import { CustomPaletteState, EmptyPlaceholder } from '@kbn/charts-plugin/public'; import { ClickTriggerEvent } from '@kbn/charts-plugin/public'; import { IconChartDatatable } from '@kbn/chart-icons'; +import useObservable from 'react-use/lib/useObservable'; +import { getColorCategories } from '@kbn/chart-expressions-common'; import type { LensTableRowContextMenuEvent } from '../../../types'; import type { FormatFactory } from '../../../../common/types'; import { RowHeightMode } from '../../../../common/types'; -import type { LensGridDirection } from '../../../../common/expressions'; +import { getOriginalId, isTransposeId, LensGridDirection } from '../../../../common/expressions'; import { VisualizationContainer } from '../../../visualization_container'; -import { findMinMaxByColumnId } from '../../../shared_components'; +import { findMinMaxByColumnId, shouldColorByTerms } from '../../../shared_components'; import type { DataContextType, DatatableRenderProps, @@ -55,8 +57,9 @@ import { createTransposeColumnFilterHandler, } from './table_actions'; import { getFinalSummaryConfiguration } from '../../../../common/expressions/datatable/summary'; -import { getOriginalId } from '../../../../common/expressions/datatable/transpose_helpers'; import { DEFAULT_HEADER_ROW_HEIGHT, DEFAULT_HEADER_ROW_HEIGHT_LINES } from './constants'; +import { getFieldTypeFromDatatable } from '../../../../common/expressions/datatable/utils'; +import { CellColorFn, getCellColorFn } from '../../../shared_components/coloring/get_cell_color_fn'; export const DataContext = React.createContext({}); @@ -72,6 +75,7 @@ export const DatatableComponent = (props: DatatableRenderProps) => { const dataGridRef = useRef(null); const isInteractive = props.interactive; + const isDarkMode = useObservable(props.theme.theme$, { darkMode: false }).darkMode; const [columnConfig, setColumnConfig] = useState({ columns: props.args.columns, @@ -144,7 +148,7 @@ export const DatatableComponent = (props: DatatableRenderProps) => { const hasAtLeastOneRowClickAction = props.rowHasRowClickTriggerActions?.some((x) => x); - const { getType, dispatchEvent, renderMode, formatFactory } = props; + const { getType, dispatchEvent, renderMode, formatFactory, syncColors } = props; const formatters: Record> = useMemo( () => @@ -220,7 +224,7 @@ export const DatatableComponent = (props: DatatableRenderProps) => { [onClickValue, untransposedDataRef, isInteractive] ); - const bucketColumns = useMemo( + const bucketedColumns = useMemo( () => columnConfig.columns .filter((_col, index) => { @@ -236,8 +240,8 @@ export const DatatableComponent = (props: DatatableRenderProps) => { const isEmpty = firstLocalTable.rows.length === 0 || - (bucketColumns.length && - props.data.rows.every((row) => bucketColumns.every((col) => row[col] == null))); + (bucketedColumns.length && + props.data.rows.every((row) => bucketedColumns.every((col) => row[col] == null))); const visibleColumns = useMemo( () => @@ -302,7 +306,7 @@ export const DatatableComponent = (props: DatatableRenderProps) => { const columns: EuiDataGridColumn[] = useMemo( () => createGridColumns( - bucketColumns, + bucketedColumns, firstLocalTable, handleFilterClick, handleTransposedColumnClick, @@ -320,7 +324,7 @@ export const DatatableComponent = (props: DatatableRenderProps) => { props.columnFilterable ), [ - bucketColumns, + bucketedColumns, firstLocalTable, handleFilterClick, handleTransposedColumnClick, @@ -385,17 +389,71 @@ export const DatatableComponent = (props: DatatableRenderProps) => { isInteractive, ]); - const renderCellValue = useMemo( - () => - createGridCell( - formatters, - columnConfig, - DataContext, - props.theme, - props.args.fitRowToContent - ), - [formatters, columnConfig, props.theme, props.args.fitRowToContent] - ); + const renderCellValue = useMemo(() => { + const cellColorFnMap = new Map(); + const getCellColor = ( + columnId: string, + palette?: PaletteOutput, + colorMapping?: string + ): CellColorFn => { + const originalId = getOriginalId(columnId); // workout what bucket the value belongs to + + if (cellColorFnMap.has(originalId)) { + return cellColorFnMap.get(originalId)!; + } + + const dataType = getFieldTypeFromDatatable(firstLocalTable, originalId); + const isBucketed = bucketedColumns.some((id) => id === columnId); + const colorByTerms = shouldColorByTerms(dataType, isBucketed); + + const data: ColorMappingInputData = colorByTerms + ? { + type: 'categories', + categories: getColorCategories( + firstLocalTable.rows, + originalId, + isTransposeId(columnId), + [null] + ), + } + : { + type: 'ranges', + bins: 0, + ...minMaxByColumnId[originalId], + }; + const colorFn = getCellColorFn( + props.paletteService, + data, + colorByTerms, + isDarkMode, + syncColors, + palette, + colorMapping + ); + cellColorFnMap.set(originalId, colorFn); + + return colorFn; + }; + + return createGridCell( + formatters, + columnConfig, + DataContext, + isDarkMode, + getCellColor, + props.args.fitRowToContent + ); + }, [ + formatters, + columnConfig, + isDarkMode, + props.args.fitRowToContent, + props.paletteService, + firstLocalTable, + bucketedColumns, + minMaxByColumnId, + syncColors, + ]); const columnVisibility = useMemo( () => ({ @@ -471,7 +529,6 @@ export const DatatableComponent = (props: DatatableRenderProps) => { rowHasRowClickTriggerActions: props.rowHasRowClickTriggerActions, alignments, minMaxByColumnId, - getColorForValue: props.paletteService.get(CUSTOM_PALETTE).getColorForValue!, handleFilterClick, }} > diff --git a/x-pack/plugins/lens/public/visualizations/datatable/components/types.ts b/x-pack/plugins/lens/public/visualizations/datatable/components/types.ts index 987d852161f2c..b884a2c716be9 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/components/types.ts +++ b/x-pack/plugins/lens/public/visualizations/datatable/components/types.ts @@ -7,7 +7,6 @@ import { CoreSetup } from '@kbn/core/public'; import type { PaletteRegistry } from '@kbn/coloring'; -import { CustomPaletteState } from '@kbn/charts-plugin/public'; import type { IAggType } from '@kbn/data-plugin/public'; import type { Datatable, RenderMode } from '@kbn/expressions-plugin/common'; import type { @@ -82,9 +81,4 @@ export interface DataContextType { rowIndex: number, negate?: boolean ) => void; - getColorForValue?: ( - value: number | undefined, - state: CustomPaletteState, - minMax: { min: number; max: number } - ) => string | undefined; } diff --git a/x-pack/plugins/lens/public/visualizations/datatable/expression.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/expression.test.tsx index e8d450fdb6b59..715cfdf526aed 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/expression.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/expression.test.tsx @@ -18,7 +18,7 @@ const cellValueAction: LensCellValueAction = { iconType: 'test-icon', execute: () => {}, }; -function sampleArgs() { +function sampleArgs(): DatatableProps { const indexPatternId = 'indexPatternId'; const data: Datatable = { type: 'datatable', @@ -80,13 +80,13 @@ function sampleArgs() { sortingDirection: 'none', }; - return { data, args }; + return { data, args, syncColors: false }; } describe('datatable_expression', () => { describe('datatable renders', () => { test('it renders with the specified data and args', async () => { - const { data, args } = sampleArgs(); + const { data, args, ...rest } = sampleArgs(); const result = await getDatatable(() => Promise.resolve((() => {}) as FormatFactory)).fn( data, args, @@ -96,7 +96,7 @@ describe('datatable_expression', () => { expect(result).toEqual({ type: 'render', as: 'lens_datatable_renderer', - value: { data, args }, + value: { data, args, ...rest }, }); }); }); diff --git a/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx b/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx index d58f0cbb04208..652abec75695e 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/expression.tsx @@ -168,6 +168,7 @@ export const getDatatableRenderer = (dependencies: { interactive={isInteractive()} theme={dependencies.core.theme} renderComplete={renderComplete} + syncColors={config.syncColors} /> , domNode diff --git a/x-pack/plugins/lens/public/visualizations/datatable/index.ts b/x-pack/plugins/lens/public/visualizations/datatable/index.ts index 78a8e6e43dfe8..f68f167ea5f02 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/index.ts +++ b/x-pack/plugins/lens/public/visualizations/datatable/index.ts @@ -44,7 +44,7 @@ export class DatatableVisualization { }) ); - return getDatatableVisualization({ paletteService: palettes, theme: core.theme }); + return getDatatableVisualization({ paletteService: palettes, kibanaTheme: core.theme }); }); } } diff --git a/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx b/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx index 877fed8a4016e..c6670d933e729 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/visualization.test.tsx @@ -7,13 +7,7 @@ import { Ast } from '@kbn/interpreter'; import { buildExpression } from '@kbn/expressions-plugin/public'; -import { - createMockDatasource, - createMockFramePublicAPI, - DatasourceMock, - generateActiveData, -} from '../../mocks'; -import faker from 'faker'; +import { createMockDatasource, createMockFramePublicAPI, DatasourceMock } from '../../mocks'; import { DatatableVisualizationState, getDatatableVisualization } from './visualization'; import { Operation, @@ -27,6 +21,20 @@ import { RowHeightMode } from '../../../common/types'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; import { themeServiceMock } from '@kbn/core/public/mocks'; +import { ColorMapping, CUSTOM_PALETTE, CustomPaletteParams, PaletteOutput } from '@kbn/coloring'; +import { + ColumnState, + DatatableColumnFn, + DatatableExpressionFunction, +} from '../../../common/expressions'; +import { getColorStops } from '../../shared_components/coloring'; + +jest.mock('../../shared_components/coloring', () => { + return { + ...jest.requireActual('../../shared_components/coloring'), + getColorStops: jest.fn().mockReturnValue([]), + }; +}); function mockFrame(): FramePublicAPI { return { @@ -35,12 +43,18 @@ function mockFrame(): FramePublicAPI { }; } -const datatableVisualization = getDatatableVisualization({ +const mockServices = { paletteService: chartPluginMock.createPaletteRegistry(), - theme: themeServiceMock.createStartContract(), -}); + kibanaTheme: themeServiceMock.createStartContract(), +}; + +const datatableVisualization = getDatatableVisualization(mockServices); describe('Datatable Visualization', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + describe('#initialize', () => { it('should initialize from the empty state', () => { expect(datatableVisualization.initialize(() => 'aaa', undefined)).toEqual({ @@ -417,64 +431,122 @@ describe('Datatable Visualization', () => { }); describe('with palette', () => { + const mockStops = ['red', 'white', 'blue']; + const datasource = createMockDatasource('test'); let params: VisualizationConfigProps; + beforeEach(() => { - const datasource = createMockDatasource('test'); - datasource.publicAPIMock.getTableSpec.mockReturnValue([{ columnId: 'b', fields: [] }]); - params = { - layerId: 'a', - state: { - layerId: 'a', - layerType: LayerTypes.DATA, - columns: [ - { - columnId: 'b', - palette: { - type: 'palette' as const, - name: '', - params: { stops: [{ color: 'blue', stop: 0 }] }, - }, - }, - ], - }, - frame: { - ...mockFrame(), - activeData: generateActiveData([ - { - id: 'a', - rows: Array(3).fill({ - b: faker.random.number(), - }), - }, - ]), - datasourceLayers: { a: datasource.publicAPIMock }, - }, - }; + (getColorStops as jest.Mock).mockReturnValue(mockStops); }); - it('does include palette for accessor config if the values are numeric and palette exists', () => { - expect(datatableVisualization.getConfiguration(params).groups[2].accessors).toEqual([ - { columnId: 'b', palette: ['blue'], triggerIconType: 'colorBy' }, - ]); - }); - it('does not include palette for accessor config if the values are not numeric and palette exists', () => { - params.frame.activeData = generateActiveData([ - { - id: 'a', - rows: Array(3).fill({ - b: faker.random.word(), - }), - }, - ]); - expect(datatableVisualization.getConfiguration(params).groups[2].accessors).toEqual([ - { columnId: 'b' }, - ]); + describe('rows', () => { + beforeEach(() => { + datasource.publicAPIMock.getOperationForColumnId.mockReturnValueOnce({ + dataType: 'string', + isBucketed: true, + label: 'label', + isStaticValue: false, + hasTimeShift: false, + hasReducedTimeRange: false, + }); + datasource.publicAPIMock.getTableSpec.mockReturnValue([ + { columnId: 'b', fields: [] }, + { columnId: 'c', fields: [] }, + ]); + + params = { + layerId: 'a', + state: { + layerId: 'a', + layerType: LayerTypes.DATA, + columns: [{ columnId: 'b' }, { columnId: 'c' }], + }, + frame: { + ...mockFrame(), + datasourceLayers: { a: datasource.publicAPIMock }, + }, + }; + }); + + it.each(['cell', 'text'])( + 'should include palette if colorMode is %s and has stops', + (colorMode) => { + params.state.columns[0].colorMode = colorMode; + expect(datatableVisualization.getConfiguration(params).groups[0].accessors).toEqual([ + { columnId: 'b', palette: mockStops, triggerIconType: 'colorBy' }, + ]); + } + ); + + it.each(['cell', 'text'])( + 'should not include palette if colorMode is %s but stops is empty', + (colorMode) => { + (getColorStops as jest.Mock).mockReturnValue([]); + params.state.columns[0].colorMode = colorMode; + expect(datatableVisualization.getConfiguration(params).groups[0].accessors).toEqual([ + { columnId: 'b' }, + ]); + } + ); + + it.each(['none', undefined])( + 'should not include palette if colorMode is %s even if stops exist', + (colorMode) => { + params.state.columns[0].colorMode = colorMode; + expect(datatableVisualization.getConfiguration(params).groups[0].accessors).toEqual([ + { columnId: 'b' }, + ]); + } + ); }); - it('does not include palette for accessor config if the values are numeric but palette exists', () => { - params.state.columns[0].palette = undefined; - expect(datatableVisualization.getConfiguration(params).groups[2].accessors).toEqual([ - { columnId: 'b' }, - ]); + + describe('metrics', () => { + beforeEach(() => { + datasource.publicAPIMock.getTableSpec.mockReturnValue([{ columnId: 'b', fields: [] }]); + params = { + layerId: 'a', + state: { + layerId: 'a', + layerType: LayerTypes.DATA, + columns: [{ columnId: 'b' }], + }, + frame: { + ...mockFrame(), + datasourceLayers: { a: datasource.publicAPIMock }, + }, + }; + }); + + it.each(['cell', 'text'])( + 'should include palette if colorMode is %s and has stops', + (colorMode) => { + params.state.columns[0].colorMode = colorMode; + expect(datatableVisualization.getConfiguration(params).groups[2].accessors).toEqual([ + { columnId: 'b', palette: mockStops, triggerIconType: 'colorBy' }, + ]); + } + ); + + it.each(['cell', 'text'])( + 'should not include palette if colorMode is %s but stops is empty', + (colorMode) => { + (getColorStops as jest.Mock).mockReturnValue([]); + params.state.columns[0].colorMode = colorMode; + expect(datatableVisualization.getConfiguration(params).groups[2].accessors).toEqual([ + { columnId: 'b' }, + ]); + } + ); + + it.each(['none', undefined])( + 'should not include palette if colorMode is %s even if stops exist', + (colorMode) => { + params.state.columns[0].colorMode = colorMode; + expect(datatableVisualization.getConfiguration(params).groups[2].accessors).toEqual([ + { columnId: 'b' }, + ]); + } + ); }); }); @@ -629,13 +701,12 @@ describe('Datatable Visualization', () => { datatableVisualization.toExpression( state, frame.datasourceLayers, - {}, { '1': { type: 'expression', chain: [] } } ) as Ast - ).findFunction('lens_datatable')[0].arguments; + ).findFunction('lens_datatable')[0].arguments; - const defaultExpressionTableState = { + const defaultExpressionTableState: DatatableVisualizationState = { layerId: 'a', layerType: LayerTypes.DATA, columns: [{ columnId: 'b' }, { columnId: 'c' }], @@ -881,6 +952,104 @@ describe('Datatable Visualization', () => { }) ); }); + + describe('palette/colorMapping/colorMode', () => { + const colorMapping: ColorMapping.Config = { + paletteId: 'default', + colorMode: { type: 'categorical' }, + assignments: [], + specialAssignments: [], + }; + const palette: PaletteOutput = { + type: 'palette', + name: 'default', + }; + const colorExpressionTableState = ( + colorMode?: 'cell' | 'text' | 'none' + ): DatatableVisualizationState => ({ + ...defaultExpressionTableState, + columns: [{ columnId: 'b', colorMapping, palette, colorMode }], + }); + + beforeEach(() => { + datasource.publicAPIMock.getTableSpec.mockReturnValue([{ columnId: 'b', fields: [] }]); + }); + + it.each<[DataType, string]>([ + ['string', palette.name], + ['number', CUSTOM_PALETTE], // required to property handle toExpression + ])( + 'should call paletteService.get with correct palette name for %s dataType', + (dataType, paletteName) => { + datasource.publicAPIMock.getOperationForColumnId.mockReturnValue({ + dataType, + isBucketed: false, + label: 'label', + hasTimeShift: false, + hasReducedTimeRange: false, + }); + + getDatatableExpressionArgs(colorExpressionTableState()); + + expect(mockServices.paletteService.get).toBeCalledWith(paletteName); + } + ); + + describe.each<'cell' | 'text' | 'none' | undefined>(['cell', 'text', 'none', undefined])( + 'colorMode - %s', + (colorMode) => { + it.each<{ dataType: DataType; disallowed?: boolean }>([ + // allowed types + { dataType: 'document' }, + { dataType: 'ip' }, + { dataType: 'histogram' }, + { dataType: 'geo_point' }, + { dataType: 'geo_shape' }, + { dataType: 'counter' }, + { dataType: 'gauge' }, + { dataType: 'murmur3' }, + { dataType: 'string' }, + { dataType: 'number' }, + { dataType: 'boolean' }, + // disallowed types + { dataType: 'date', disallowed: true }, + ])( + 'should apply correct palette, colorMapping & colorMode for $dataType', + ({ dataType, disallowed = false }) => { + datasource.publicAPIMock.getOperationForColumnId.mockReturnValue({ + dataType, + isBucketed: false, + label: 'label', + hasTimeShift: false, + hasReducedTimeRange: false, + }); + + const expression = datatableVisualization.toExpression( + colorExpressionTableState(colorMode), + frame.datasourceLayers, + {}, + { '1': { type: 'expression', chain: [] } } + ) as Ast; + + const columnArgs = + buildExpression(expression).findFunction( + 'lens_datatable_column' + )[0].arguments; + + if (disallowed) { + expect(columnArgs.colorMode).toEqual(['none']); + expect(columnArgs.palette).toBeUndefined(); + expect(columnArgs.colorMapping).toBeUndefined(); + } else { + expect(columnArgs.colorMode).toEqual([colorMode ?? 'none']); + expect(columnArgs.palette).toEqual([expect.any(Object)]); + expect(columnArgs.colorMapping).toEqual([expect.any(String)]); + } + } + ); + } + ); + }); }); describe('#onEditAction', () => { diff --git a/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx b/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx index 534ece1785af4..d5c8684b3f2e0 100644 --- a/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx +++ b/x-pack/plugins/lens/public/visualizations/datatable/visualization.tsx @@ -8,13 +8,13 @@ import React from 'react'; import { Ast } from '@kbn/interpreter'; import { i18n } from '@kbn/i18n'; -import { PaletteRegistry, CUSTOM_PALETTE } from '@kbn/coloring'; +import { PaletteRegistry, CUSTOM_PALETTE, PaletteOutput, CustomPaletteParams } from '@kbn/coloring'; import { ThemeServiceStart } from '@kbn/core/public'; import { VIS_EVENT_TO_TRIGGER } from '@kbn/visualizations-plugin/public'; import { IconChartDatatable } from '@kbn/chart-icons'; import { LayerTypes } from '@kbn/expression-xy-plugin/public'; import { buildExpression, buildExpressionFunction } from '@kbn/expressions-plugin/common'; -import { isNumericFieldForDatatable } from '../../../common/expressions/datatable/utils'; +import useObservable from 'react-use/lib/useObservable'; import type { FormBasedPersistedState } from '../../datasources/form_based/types'; import type { SuggestionRequest, @@ -28,13 +28,14 @@ import { TableDimensionEditorAdditionalSection } from './components/dimension_ed import type { LayerType } from '../../../common/types'; import { RowHeightMode } from '../../../common/types'; import { getDefaultSummaryLabel } from '../../../common/expressions/datatable/summary'; -import type { - ColumnState, - SortingState, - PagingState, - CollapseExpressionFunction, - DatatableColumnFunction, - DatatableExpressionFunction, +import { + type ColumnState, + type SortingState, + type PagingState, + type CollapseExpressionFunction, + type DatatableColumnFn, + type DatatableExpressionFunction, + getOriginalId, } from '../../../common/expressions'; import { DataTableToolbar } from './components/toolbar'; import { @@ -42,6 +43,14 @@ import { DEFAULT_HEADER_ROW_HEIGHT_LINES, DEFAULT_ROW_HEIGHT, } from './components/constants'; +import { + applyPaletteParams, + defaultPaletteParams, + findMinMaxByColumnId, + getColorStops, + shouldColorByTerms, +} from '../../shared_components'; +import { getColorMappingTelemetryEvents } from '../../lens_ui_telemetry/color_telemetry_helpers'; export interface DatatableVisualizationState { columns: ColumnState[]; layerId: string; @@ -60,10 +69,10 @@ const visualizationLabel = i18n.translate('xpack.lens.datatable.label', { export const getDatatableVisualization = ({ paletteService, - theme, + kibanaTheme, }: { paletteService: PaletteRegistry; - theme: ThemeServiceStart; + kibanaTheme: ThemeServiceStart; }): Visualization => ({ id: 'lnsDatatable', @@ -115,6 +124,56 @@ export const getDatatableVisualization = ({ ); }, + onDatasourceUpdate(state, frame) { + const datasource = frame?.datasourceLayers?.[state.layerId]; + const paletteMap = new Map( + paletteService + .getAll() + .filter((p) => !p.internal) + .map((p) => [p.id, p]) + ); + + const hasTransposedColumn = state.columns.some(({ isTransposed }) => isTransposed); + const columns = state.columns.map((column) => { + if (column.palette) { + const accessor = column.columnId; + const currentData = frame?.activeData?.[state.layerId]; + const { dataType, isBucketed } = datasource?.getOperationForColumnId(column.columnId) ?? {}; + const showColorByTerms = shouldColorByTerms(dataType, isBucketed); + const palette = paletteMap.get(column.palette?.name ?? ''); + const columnsToCheck = hasTransposedColumn + ? currentData?.columns + .filter(({ id }) => getOriginalId(id) === accessor) + .map(({ id }) => id) || [] + : [accessor]; + const minMaxByColumnId = findMinMaxByColumnId(columnsToCheck, currentData, getOriginalId); + + if (palette && !showColorByTerms && !palette?.canDynamicColoring) { + const newPalette: PaletteOutput = { + type: 'palette', + name: showColorByTerms ? 'default' : defaultPaletteParams.name, + }; + return { + ...column, + palette: { + ...newPalette, + params: { + stops: applyPaletteParams(paletteService, newPalette, minMaxByColumnId[accessor]), + }, + }, + }; + } + } + + return column; + }); + + return { + ...state, + columns, + }; + }, + getSuggestions({ table, state, @@ -197,15 +256,16 @@ export const getDatatableVisualization = ({ }, /* - Datatable works differently on text based datasource and form based - - Form based: It relies on the isBucketed flag to identify groups. It allows only numeric fields + Datatable works differently on text-based datasource and form-based + - Form-based: It relies on the isBucketed flag to identify groups. It allows only numeric fields on the Metrics dimension - - Text based: It relies on the isMetric flag to identify groups. It allows all type of fields + - Text-based: It relies on the isMetric flag to identify groups. It allows all type of fields on the Metric dimension in cases where there are no numeric columns **/ - getConfiguration({ state, frame, layerId }) { + getConfiguration({ state, frame }) { + const isDarkMode = kibanaTheme.getTheme().darkMode; const { sortedColumns, datasource } = - getDataSourceAndSortedColumns(state, frame.datasourceLayers, layerId) || {}; + getDataSourceAndSortedColumns(state, frame.datasourceLayers) || {}; const columnMap: Record = {}; state.columns.forEach((column) => { @@ -245,14 +305,29 @@ export const getDatatableVisualization = ({ } return datasource!.getOperationForColumnId(c)?.isBucketed && !column?.isTransposed; }) - .map((accessor) => ({ - columnId: accessor, - triggerIconType: columnMap[accessor].hidden - ? 'invisible' - : columnMap[accessor].collapseFn - ? 'aggregate' - : undefined, - })), + .map((accessor) => { + const { + colorMode = 'none', + palette, + colorMapping, + hidden, + collapseFn, + } = columnMap[accessor] ?? {}; + const stops = getColorStops(paletteService, isDarkMode, palette, colorMapping); + const hasColoring = colorMode !== 'none' && stops.length > 0; + + return { + columnId: accessor, + triggerIconType: hidden + ? 'invisible' + : hasColoring + ? 'colorBy' + : collapseFn + ? 'aggregate' + : undefined, + palette: hasColoring ? stops : undefined, + }; + }), supportsMoreColumns: true, filterOperations: (op) => op.isBucketed, dataTestSubj: 'lnsDatatable_rows', @@ -319,22 +394,19 @@ export const getDatatableVisualization = ({ return !operation?.isBucketed; }) .map((accessor) => { - const columnConfig = columnMap[accessor]; - const stops = columnConfig?.palette?.params?.stops; - const isNumeric = Boolean( - accessor && isNumericFieldForDatatable(frame.activeData?.[state.layerId], accessor) - ); - const hasColoring = Boolean(columnConfig?.colorMode !== 'none' && stops); + const { + colorMode = 'none', + palette, + colorMapping, + hidden, + } = columnMap[accessor] ?? {}; + const stops = getColorStops(paletteService, isDarkMode, palette, colorMapping); + const hasColoring = colorMode !== 'none' && stops.length > 0; return { columnId: accessor, - triggerIconType: columnConfig?.hidden - ? 'invisible' - : hasColoring && isNumeric - ? 'colorBy' - : undefined, - palette: - hasColoring && isNumeric && stops ? stops.map(({ color }) => color) : undefined, + triggerIconType: hidden ? 'invisible' : hasColoring ? 'colorBy' : undefined, + palette: hasColoring ? stops : undefined, }; }), supportsMoreColumns: true, @@ -386,7 +458,11 @@ export const getDatatableVisualization = ({ }; }, DimensionEditorComponent(props) { - return ; + const isDarkMode = useObservable(kibanaTheme.theme$, { darkMode: false }).darkMode; + + return ( + + ); }, DimensionEditorAdditionalSectionComponent(props) { @@ -421,7 +497,7 @@ export const getDatatableVisualization = ({ datasourceExpressionsByLayers = {} ): Ast | null { const { sortedColumns, datasource } = - getDataSourceAndSortedColumns(state, datasourceLayers, state.layerId) || {}; + getDataSourceAndSortedColumns(state, datasourceLayers) || {}; const isTextBasedLanguage = datasource?.isTextBasedLanguage(); if ( @@ -481,23 +557,20 @@ export const getDatatableVisualization = ({ : [], reverse: false, // managed at UI level }; - const sortingHint = datasource!.getOperationForColumnId(column.columnId)!.sortingHint; - + const { dataType, isBucketed, sortingHint, inMetricDimension } = + datasource?.getOperationForColumnId(column.columnId) ?? {}; const hasNoSummaryRow = column.summaryRow == null || column.summaryRow === 'none'; - - const canColor = - datasource!.getOperationForColumnId(column.columnId)?.dataType === 'number'; - + const canColor = dataType !== 'date'; + const colorByTerms = shouldColorByTerms(dataType, isBucketed); let isTransposable = !isTextBasedLanguage && !datasource!.getOperationForColumnId(column.columnId)?.isBucketed; if (isTextBasedLanguage) { - const operation = datasource!.getOperationForColumnId(column.columnId); - isTransposable = Boolean(column?.isMetric || operation?.inMetricDimension); + isTransposable = Boolean(column?.isMetric || inMetricDimension); } - const datatableColumnFn = buildExpressionFunction( + const datatableColumnFn = buildExpressionFunction( 'lens_datatable_column', { columnId: column.columnId, @@ -507,8 +580,15 @@ export const getDatatableVisualization = ({ isTransposed: column.isTransposed, transposable: isTransposable, alignment: column.alignment, - colorMode: canColor && column.colorMode ? column.colorMode : 'none', - palette: paletteService.get(CUSTOM_PALETTE).toExpression(paletteParams), + colorMode: canColor ? column.colorMode ?? 'none' : 'none', + palette: !canColor + ? undefined + : paletteService + // The by value palette is a pseudo custom palette that is only custom from params level + .get(colorByTerms ? column.palette?.name || CUSTOM_PALETTE : CUSTOM_PALETTE) + .toExpression(paletteParams), + colorMapping: + canColor && column.colorMapping ? JSON.stringify(column.colorMapping) : undefined, summaryRow: hasNoSummaryRow ? undefined : column.summaryRow!, summaryLabel: hasNoSummaryRow ? undefined @@ -537,6 +617,15 @@ export const getDatatableVisualization = ({ }; }, + getTelemetryEventsOnSave(state, prevState) { + const colorMappingEvents = state.columns.flatMap((col) => { + const prevColumn = prevState?.columns?.find((prevCol) => prevCol.columnId === col.columnId); + return getColorMappingTelemetryEvents(col.colorMapping, prevColumn?.colorMapping); + }); + + return colorMappingEvents; + }, + getRenderEventCounters(state) { const events = { color_by_value: false, @@ -642,8 +731,7 @@ export const getDatatableVisualization = ({ }, getSortedColumns(state, datasourceLayers) { - const { sortedColumns } = - getDataSourceAndSortedColumns(state, datasourceLayers || {}, state.layerId) || {}; + const { sortedColumns } = getDataSourceAndSortedColumns(state, datasourceLayers || {}) || {}; return sortedColumns; }, @@ -696,8 +784,7 @@ export const getDatatableVisualization = ({ function getDataSourceAndSortedColumns( state: DatatableVisualizationState, - datasourceLayers: DatasourceLayers, - layerId: string + datasourceLayers: DatasourceLayers ) { const datasource = datasourceLayers[state.layerId]; const originalOrder = datasource?.getTableSpec().map(({ columnId }) => columnId); diff --git a/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx index 86eaf39479ff5..b30e36cfefa37 100644 --- a/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/gauge/dimension_editor.tsx @@ -110,13 +110,16 @@ export function GaugeDimensionEditor( display="columnCompressed" fullWidth label={i18n.translate('xpack.lens.paletteMetricGradient.label', { - defaultMessage: 'Color', + defaultMessage: 'Color mapping', })} > color)} siblingRef={props.panelRef} isInlineEditing={isInlineEditing} + title={i18n.translate('xpack.lens.paletteMetricGradient.label', { + defaultMessage: 'Color mapping', + })} > color)} siblingRef={props.panelRef} isInlineEditing={isInlineEditing} + title={i18n.translate('xpack.lens.paletteMetricGradient.label', { + defaultMessage: 'Color mapping', + })} > { /> ); - const colorModeGroup = screen.queryByRole('group', { name: /color mode/i }); + const colorModeGroup = screen.queryByRole('group', { name: /Color by value/i }); const staticColorPicker = screen.queryByTestId(SELECTORS.COLOR_PICKER); const typeColor = (color: string) => { @@ -170,6 +170,7 @@ describe('dimension editor', () => { expect(screen.queryByTestId(SELECTORS.MAX_EDITOR)).not.toBeInTheDocument(); expect(screen.queryByTestId(SELECTORS.BREAKDOWN_EDITOR)).not.toBeInTheDocument(); }); + it('Color mode switch is shown when the primary metric is numeric', () => { const { colorModeGroup } = renderPrimaryMetricEditor(); expect(colorModeGroup).toBeInTheDocument(); diff --git a/x-pack/plugins/lens/public/visualizations/metric/dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/metric/dimension_editor.tsx index 24248621c0982..2b6c1f4476006 100644 --- a/x-pack/plugins/lens/public/visualizations/metric/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/metric/dimension_editor.tsx @@ -258,15 +258,15 @@ function PrimaryMetricEditor(props: SubProps) { ) : ( ) : ( l.layerId === props.layerId)!; const dimensionEditor = isReferenceLayer(layer) ? ( ) : isAnnotationsLayer(layer) ? ( ) : ( - + ); return dimensionEditor; diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/dimension_editor.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/dimension_editor.tsx index e53bc9164b0c3..c0916b823466e 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/dimension_editor.tsx @@ -5,81 +5,68 @@ * 2.0. */ -import React, { useCallback, useMemo, useState } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import { useDebouncedValue } from '@kbn/visualization-utils'; import { ColorPicker } from '@kbn/visualization-ui-components'; -import { - EuiBadge, - EuiButtonGroup, - EuiFlexGroup, - EuiFlexItem, - EuiFormRow, - EuiSpacer, - EuiSwitch, - EuiText, - htmlIdGenerator, -} from '@elastic/eui'; -import { - PaletteRegistry, - ColorMapping, - DEFAULT_COLOR_MAPPING_CONFIG, - CategoricalColorMapping, - PaletteOutput, - SPECIAL_TOKENS_STRING_CONVERTION, - AVAILABLE_PALETTES, - getColorsFromMapping, -} from '@kbn/coloring'; +import { EuiButtonGroup, EuiFormRow, htmlIdGenerator } from '@elastic/eui'; +import { PaletteRegistry, ColorMapping, PaletteOutput } from '@kbn/coloring'; import { getColorCategories } from '@kbn/chart-expressions-common'; +import type { ValuesType } from 'utility-types'; import type { VisualizationDimensionEditorProps } from '../../../types'; import { State, XYState, XYDataLayerConfig, YConfig, YAxisMode } from '../types'; import { FormatFactory } from '../../../../common/types'; import { getSeriesColor, isHorizontalChart } from '../state_helpers'; -import { PalettePanelContainer, PalettePicker } from '../../../shared_components'; import { getDataLayers } from '../visualization_helpers'; import { CollapseSetting } from '../../../shared_components/collapse_setting'; import { getSortedAccessors } from '../to_expression'; import { getColorAssignments, getAssignedColorConfig } from '../color_assignment'; -import { trackUiCounterEvents } from '../../../lens_ui_telemetry'; +import { ColorMappingByTerms } from '../../../shared_components/coloring/color_mapping_by_terms'; -type UnwrapArray = T extends Array ? P : T; +export const idPrefix = htmlIdGenerator()(); -export function updateLayer( +function updateLayer( state: State, - layer: UnwrapArray, - index: number -): State { + index: number, + layer: ValuesType, + newLayer: Partial> +): State['layers'] { const newLayers = [...state.layers]; - newLayers[index] = layer; + newLayers[index] = { + ...layer, + ...newLayer, + } as ValuesType; - return { - ...state, - layers: newLayers, - }; + return newLayers; } -export const idPrefix = htmlIdGenerator()(); - export function DataDimensionEditor( props: VisualizationDimensionEditorProps & { formatFactory: FormatFactory; paletteService: PaletteRegistry; - darkMode: boolean; + isDarkMode: boolean; } ) { - const { state, layerId, accessor, darkMode, isInlineEditing } = props; + const { state, layerId, accessor, isDarkMode, isInlineEditing } = props; const index = state.layers.findIndex((l) => l.layerId === layerId); const layer = state.layers[index] as XYDataLayerConfig; - const canUseColorMapping = layer.colorMapping ? true : false; - - const [useNewColorMapping, setUseNewColorMapping] = useState(canUseColorMapping); const { inputValue: localState, handleInputChange: setLocalState } = useDebouncedValue({ value: props.state, onChange: props.setState, }); + const updateLayerState = useCallback( + (layerIndex: number, newLayer: Partial>) => { + setLocalState({ + ...localState, + layers: updateLayer(localState, layerIndex, layer, newLayer), + }); + }, + [layer, setLocalState, localState] + ); + const localYConfig = layer?.yConfig?.find((yAxisConfig) => yAxisConfig.forAccessor === accessor); const axisMode = localYConfig?.axisMode || 'auto'; @@ -100,22 +87,22 @@ export function DataDimensionEditor( ...yConfig, }); } - setLocalState(updateLayer(localState, { ...layer, yConfig: newYConfigs }, index)); + updateLayerState(index, { yConfig: newYConfigs }); }, - [accessor, index, localState, layer, setLocalState] + [layer.yConfig, updateLayerState, index, accessor] ); const setColorMapping = useCallback( (colorMapping?: ColorMapping.Config) => { - setLocalState(updateLayer(localState, { ...layer, colorMapping }, index)); + updateLayerState(index, { colorMapping }); }, - [index, localState, layer, setLocalState] + [updateLayerState, index] ); const setPalette = useCallback( (palette: PaletteOutput) => { - setLocalState(updateLayer(localState, { ...layer, palette }, index)); + updateLayerState(index, { palette }); }, - [index, localState, layer, setLocalState] + [updateLayerState, index] ); const overwriteColor = getSeriesColor(layer, accessor); @@ -143,105 +130,28 @@ export function DataDimensionEditor( ).color; }, [props.frame, props.paletteService, state.layers, accessor, props.formatFactory, layer]); - const localLayer: XYDataLayerConfig = layer; - - const colors = layer.colorMapping - ? getColorsFromMapping(props.darkMode, layer.colorMapping) - : props.paletteService - .get(layer.palette?.name || 'default') - .getCategoricalColors(10, layer.palette); - const table = props.frame.activeData?.[layer.layerId]; const { splitAccessor } = layer; const splitCategories = getColorCategories(table?.rows ?? [], splitAccessor); if (props.groupId === 'breakdown' && !layer.collapseFn) { return ( - - -
- - - - - {i18n.translate('xpack.lens.colorMapping.tryLabel', { - defaultMessage: 'Use the new Color Mapping feature', - })}{' '} - - {i18n.translate('xpack.lens.colorMapping.techPreviewLabel', { - defaultMessage: 'Tech preview', - })} - - - - } - data-test-subj="lns_colorMappingOrLegacyPalette_switch" - compressed - checked={useNewColorMapping} - onChange={({ target: { checked } }) => { - trackUiCounterEvents( - `color_mapping_switch_${checked ? 'enabled' : 'disabled'}` - ); - setColorMapping(checked ? { ...DEFAULT_COLOR_MAPPING_CONFIG } : undefined); - setUseNewColorMapping(checked); - }} - /> - - - - {canUseColorMapping || useNewColorMapping ? ( - setColorMapping(model)} - palettes={AVAILABLE_PALETTES} - data={{ - type: 'categories', - categories: splitCategories, - }} - specialTokens={SPECIAL_TOKENS_STRING_CONVERTION} - /> - ) : ( - { - setPalette(newPalette); - }} - /> - )} - - -
-
-
+ ); } const isHorizontal = isHorizontalChart(state.layers); - const disabledMessage = Boolean(!localLayer.collapseFn && localLayer.splitAccessor) + const disabledMessage = Boolean(!layer.collapseFn && layer.splitAccessor) ? i18n.translate('xpack.lens.xyChart.colorPicker.tooltip.disabled', { defaultMessage: 'You are unable to apply custom colors to individual series when the layer includes a "Break down by" field.', @@ -329,13 +239,23 @@ export function DataDimensionEditorDataSectionExtra( onChange: props.setState, }); + const updateLayerState = useCallback( + (layerIndex: number, newLayer: Partial>) => { + setLocalState({ + ...localState, + layers: updateLayer(localState, layerIndex, layer, newLayer), + }); + }, + [layer, setLocalState, localState] + ); + if (props.groupId === 'breakdown') { return ( <> { - setLocalState(updateLayer(localState, { ...layer, collapseFn }, index)); + updateLayerState(index, { collapseFn }); }} /> diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/xy_config_panel.test.tsx b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/xy_config_panel.test.tsx index 9a98f5bae168b..b0f553969e058 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/xy_config_panel.test.tsx +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_config_panel/xy_config_panel.test.tsx @@ -272,7 +272,7 @@ describe('XY Config panels', () => { addLayer={jest.fn()} removeLayer={jest.fn()} datasource={{} as DatasourcePublicAPI} - darkMode={false} + isDarkMode={false} /> ); @@ -300,7 +300,7 @@ describe('XY Config panels', () => { addLayer={jest.fn()} removeLayer={jest.fn()} datasource={{} as DatasourcePublicAPI} - darkMode={false} + isDarkMode={false} /> ); @@ -349,7 +349,7 @@ describe('XY Config panels', () => { addLayer={jest.fn()} removeLayer={jest.fn()} datasource={{} as DatasourcePublicAPI} - darkMode={false} + isDarkMode={false} /> ); @@ -395,7 +395,7 @@ describe('XY Config panels', () => { addLayer={jest.fn()} removeLayer={jest.fn()} datasource={{} as DatasourcePublicAPI} - darkMode={false} + isDarkMode={false} /> ); @@ -441,7 +441,7 @@ describe('XY Config panels', () => { addLayer={jest.fn()} removeLayer={jest.fn()} datasource={{} as DatasourcePublicAPI} - darkMode={false} + isDarkMode={false} /> ); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index f0ef033d63236..ff2f7c500b177 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -25109,7 +25109,7 @@ "xpack.lens.collapse.min": "Min.", "xpack.lens.collapse.none": "Aucun", "xpack.lens.collapse.sum": "Somme", - "xpack.lens.colorMapping.editColorMappingSectionlabel": "Mapping des couleurs", + "xpack.lens.colorMapping.editColorMappingSectionLabel": "Mapping des couleurs", "xpack.lens.colorMapping.editColorMappingTitle": "Modifier les couleurs par mapping de terme", "xpack.lens.colorMapping.editColors": "Modifier les couleurs", "xpack.lens.colorMapping.editColorsTitle": "Modifier les couleurs", @@ -25737,9 +25737,7 @@ "xpack.lens.metric.breakdownBy": "Répartir par", "xpack.lens.metric.color": "Couleur", "xpack.lens.metric.colorMode.dynamic": "Dynamique", - "xpack.lens.metric.colorMode.label": "Mode couleur", "xpack.lens.metric.colorMode.static": "Statique", - "xpack.lens.metric.dynamicColoring.label": "Mode couleur", "xpack.lens.metric.groupLabel": "Valeur d’objectif et unique", "xpack.lens.metric.headingLabel": "Valeur", "xpack.lens.metric.icon": "Décoration de l’icône", @@ -25795,7 +25793,6 @@ "xpack.lens.paletteHeatmapGradient.label": "Couleur", "xpack.lens.paletteMetricGradient.label": "Couleur", "xpack.lens.palettePicker.label": "Palette", - "xpack.lens.paletteTableGradient.label": "Couleur", "xpack.lens.pie.addLayer": "Visualisation", "xpack.lens.pie.arrayValues": "Les dimensions suivantes contiennent des valeurs de tableau : {label}. Le rendu de votre visualisation peut ne pas se présenter comme attendu.", "xpack.lens.pie.collapsedDimensionsDontCount": "(Les dimensions réduites ne sont pas concernées par cette limite.)", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index b3be85aaa7bd1..c72e9d555ddf2 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -25098,7 +25098,7 @@ "xpack.lens.collapse.min": "最低", "xpack.lens.collapse.none": "なし", "xpack.lens.collapse.sum": "合計", - "xpack.lens.colorMapping.editColorMappingSectionlabel": "カラーマッピング", + "xpack.lens.colorMapping.editColorMappingSectionLabel": "カラーマッピング", "xpack.lens.colorMapping.editColorMappingTitle": "用語マッピングで色を編集", "xpack.lens.colorMapping.editColors": "色を編集", "xpack.lens.colorMapping.editColorsTitle": "色を編集", @@ -25725,9 +25725,7 @@ "xpack.lens.metric.breakdownBy": "分類する", "xpack.lens.metric.color": "色", "xpack.lens.metric.colorMode.dynamic": "動的", - "xpack.lens.metric.colorMode.label": "色モード", "xpack.lens.metric.colorMode.static": "静的", - "xpack.lens.metric.dynamicColoring.label": "色モード", "xpack.lens.metric.groupLabel": "目標値と単一の値", "xpack.lens.metric.headingLabel": "値", "xpack.lens.metric.icon": "アイコン装飾", @@ -25783,7 +25781,6 @@ "xpack.lens.paletteHeatmapGradient.label": "色", "xpack.lens.paletteMetricGradient.label": "色", "xpack.lens.palettePicker.label": "パレット", - "xpack.lens.paletteTableGradient.label": "色", "xpack.lens.pie.addLayer": "ビジュアライゼーション", "xpack.lens.pie.arrayValues": "次のディメンションには配列値があります:{label}。可視化が想定通りに表示されない場合があります。", "xpack.lens.pie.collapsedDimensionsDontCount": "(折りたたまれたディメンションはこの制限に対してカウントされません。)", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 6ffabdf583e73..14c23084fd8c7 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -25129,7 +25129,7 @@ "xpack.lens.collapse.min": "最小值", "xpack.lens.collapse.none": "无", "xpack.lens.collapse.sum": "求和", - "xpack.lens.colorMapping.editColorMappingSectionlabel": "颜色映射", + "xpack.lens.colorMapping.editColorMappingSectionLabel": "颜色映射", "xpack.lens.colorMapping.editColorMappingTitle": "按词映射编辑颜色", "xpack.lens.colorMapping.editColors": "编辑颜色", "xpack.lens.colorMapping.editColorsTitle": "编辑颜色", @@ -25757,9 +25757,7 @@ "xpack.lens.metric.breakdownBy": "细分方式", "xpack.lens.metric.color": "颜色", "xpack.lens.metric.colorMode.dynamic": "动态", - "xpack.lens.metric.colorMode.label": "颜色模式", "xpack.lens.metric.colorMode.static": "静态", - "xpack.lens.metric.dynamicColoring.label": "颜色模式", "xpack.lens.metric.groupLabel": "目标值和单值", "xpack.lens.metric.headingLabel": "值", "xpack.lens.metric.icon": "图标装饰", @@ -25815,7 +25813,6 @@ "xpack.lens.paletteHeatmapGradient.label": "颜色", "xpack.lens.paletteMetricGradient.label": "颜色", "xpack.lens.palettePicker.label": "调色板", - "xpack.lens.paletteTableGradient.label": "颜色", "xpack.lens.pie.addLayer": "可视化", "xpack.lens.pie.arrayValues": "以下维度包含数组值:{label}。您的可视化可能无法正常渲染。", "xpack.lens.pie.collapsedDimensionsDontCount": "(折叠的维度不计入此限制。)", diff --git a/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts b/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts index 1eb629fdf0d35..33297ac310630 100644 --- a/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts +++ b/x-pack/test/functional/apps/dashboard/group2/panel_titles.ts @@ -88,7 +88,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('nick by reference', () => { + describe('by reference', () => { const VIS_LIBRARY_DESCRIPTION = 'Vis library description'; let count = 0; diff --git a/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts b/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts index a388a4d90af3b..ecd5c86d22955 100644 --- a/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts +++ b/x-pack/test/functional/apps/dashboard/group2/sync_colors.ts @@ -7,6 +7,7 @@ import { DebugState } from '@elastic/charts'; import expect from '@kbn/expect'; +import chroma from 'chroma-js'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { @@ -51,73 +52,104 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.savedObjects.cleanStandardList(); }); - it('should sync colors on dashboard by default', async function () { + it('should sync colors on dashboard for legacy default palette', async function () { await PageObjects.dashboard.navigateToApp(); await elasticChart.setNewChartUiDebugFlag(true); await PageObjects.dashboard.clickCreateDashboardPrompt(); + + // create non-filtered xy chart await dashboardAddPanel.clickCreateNewLink(); await PageObjects.lens.goToTimeRange(); - await PageObjects.lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'count', field: 'Records', }); - await PageObjects.lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', palette: { mode: 'legacy', id: 'default' }, }); - - await PageObjects.lens.save('vis1', false, true); + await PageObjects.lens.saveAndReturn(); await PageObjects.header.waitUntilLoadingHasFinished(); - await dashboardAddPanel.clickCreateNewLink(); + // create filtered xy chart + await dashboardAddPanel.clickCreateNewLink(); await PageObjects.lens.configureDimension({ dimension: 'lnsXY_yDimensionPanel > lns-empty-dimension', operation: 'count', field: 'Records', }); - await PageObjects.lens.configureDimension({ dimension: 'lnsXY_splitDimensionPanel > lns-empty-dimension', operation: 'terms', field: 'geo.src', palette: { mode: 'legacy', id: 'default' }, }); - await filterBar.addFilter({ field: 'geo.src', operation: 'is not', value: 'CN' }); + await PageObjects.lens.saveAndReturn(); + await PageObjects.header.waitUntilLoadingHasFinished(); - await PageObjects.lens.save('vis2', false, true); + // create datatable vis + await dashboardAddPanel.clickCreateNewLink(); + await PageObjects.lens.switchToVisualization('lnsDatatable'); + await PageObjects.lens.configureDimension({ + dimension: 'lnsDatatable_rows > lns-empty-dimension', + operation: 'terms', + field: 'geo.src', + keepOpen: true, + }); + await PageObjects.lens.setTermsNumberOfValues(5); + await PageObjects.lens.setTableDynamicColoring('cell'); + await PageObjects.lens.setPalette('default', true); + await PageObjects.lens.closeDimensionEditor(); + await PageObjects.lens.configureDimension({ + dimension: 'lnsDatatable_metrics > lns-empty-dimension', + operation: 'count', + field: 'Records', + }); + await PageObjects.lens.saveAndReturn(); + + // Set dashboard to sync colors await PageObjects.dashboard.openSettingsFlyout(); await dashboardSettings.toggleSyncColors(true); await dashboardSettings.clickApplyButton(); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.dashboard.waitForRenderComplete(); - const colorMapping1 = getColorMapping(await PageObjects.dashboard.getPanelChartDebugState(0)); - const colorMapping2 = getColorMapping(await PageObjects.dashboard.getPanelChartDebugState(1)); + const colorMappings1 = Object.entries( + getColorMapping(await PageObjects.dashboard.getPanelChartDebugState(0)) + ); + const colorMappings2 = Object.entries( + getColorMapping(await PageObjects.dashboard.getPanelChartDebugState(1)) + ); - expect(Object.keys(colorMapping1)).to.have.length(6); - expect(Object.keys(colorMapping1)).to.have.length(6); - const panel1Keys = ['CN']; - const panel2Keys = ['PK']; - const sharedKeys = ['IN', 'US', 'ID', 'BR', 'Other']; - // colors for keys exclusive to panel 1 should not occur in panel 2 - panel1Keys.forEach((panel1Key) => { - const assignedColor = colorMapping1[panel1Key]; - expect(Object.values(colorMapping2)).not.to.contain(assignedColor); - }); - // colors for keys exclusive to panel 2 should not occur in panel 1 - panel2Keys.forEach((panel2Key) => { - const assignedColor = colorMapping2[panel2Key]; - expect(Object.values(colorMapping1)).not.to.contain(assignedColor); + const els = await PageObjects.lens.getDatatableCellsByColumn(0); + const colorMappings3 = await Promise.all( + els.map(async (el) => [ + await el.getVisibleText(), + chroma((await PageObjects.lens.getStylesFromCell(el))['background-color']).hex(), // eui converts hex to rgb + ]) + ); + + expect(colorMappings1).to.have.length(6); + expect(colorMappings2).to.have.length(6); + expect(colorMappings3).to.have.length(6); + + const mergedColorAssignments = new Map>(); + + [...colorMappings1, ...colorMappings2, ...colorMappings3].forEach(([key, color]) => { + if (!mergedColorAssignments.has(key)) mergedColorAssignments.set(key, new Set()); + mergedColorAssignments.get(key)?.add(color); }); - // colors for keys used in both panels should be synced - sharedKeys.forEach((sharedKey) => { - expect(colorMapping1[sharedKey]).to.eql(colorMapping2[sharedKey]); + + // Each key should have only been assigned one color across all 3 visualizations + mergedColorAssignments.forEach((colors, key) => { + expect(colors.size).eql( + 1, + `Key "${key}" was assigned multiple colors: ${JSON.stringify([...colors])}` + ); }); }); diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index d2228257d2fba..4c32a87a57ba3 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -173,7 +173,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }, /** - * Changes the specified dimension to the specified operation and (optinally) field. + * Changes the specified dimension to the specified operation and optionally the field. * * @param opts.dimension - the selector of the dimension being changed * @param opts.operation - the desired operation ID for the dimension @@ -1129,8 +1129,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont return el.getVisibleText(); }, - async getDatatableCellStyle(rowIndex = 0, colIndex = 0) { - const el = await this.getDatatableCell(rowIndex, colIndex); + async getStylesFromCell(el: WebElementWrapper) { const styleString = (await el.getAttribute('style')) ?? ''; return styleString.split(';').reduce>((memo, cssLine) => { const [prop, value] = cssLine.split(':'); @@ -1141,6 +1140,11 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont }, {}); }, + async getDatatableCellStyle(rowIndex = 0, colIndex = 0) { + const el = await this.getDatatableCell(rowIndex, colIndex); + return this.getStylesFromCell(el); + }, + async getDatatableCellSpanStyle(rowIndex = 0, colIndex = 0) { const el = await (await this.getDatatableCell(rowIndex, colIndex)).findByCssSelector('span'); const styleString = (await el.getAttribute('style')) ?? ''; @@ -1174,6 +1178,12 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont ); }, + async getDatatableCellsByColumn(colIndex = 0) { + return await find.allByCssSelector( + `[data-test-subj="lnsDataTable"] [data-test-subj="dataGridRowCell"][data-gridcell-column-index="${colIndex}"]` + ); + }, + async isDatatableHeaderSorted(index = 0) { return find.existsByCssSelector( `[data-test-subj="lnsDataTable"] [data-test-subj="dataGridHeader"] [role=columnheader]:nth-child(${ @@ -1240,10 +1250,15 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont async setPalette(paletteId: string, isLegacy: boolean) { await testSubjects.click('lns_colorEditing_trigger'); + // This action needs to be slowed WAY down, otherwise it will not correctly set the palette + await PageObjects.common.sleep(200); await testSubjects.setEuiSwitch( 'lns_colorMappingOrLegacyPalette_switch', isLegacy ? 'uncheck' : 'check' ); + + await PageObjects.common.sleep(200); + if (isLegacy) { await testSubjects.click('lns-palettePicker'); await find.clickByCssSelector(`#${paletteId}`); @@ -1251,6 +1266,8 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont await testSubjects.click('kbnColoring_ColorMapping_PalettePicker'); await testSubjects.click(`kbnColoring_ColorMapping_Palette-${paletteId}`); } + await PageObjects.common.sleep(200); + await this.closePaletteEditor(); }, From 094f4a3ecdb2b7540359400e850dd76a2460504f Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:00:57 +1000 Subject: [PATCH 28/74] [api-docs] 2024-08-28 Daily api_docs build (#191567) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/813 --- api_docs/actions.devdocs.json | 134 ++- api_docs/actions.mdx | 4 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.devdocs.json | 8 - api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.devdocs.json | 112 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 10 +- api_docs/deprecations_by_plugin.mdx | 3 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.devdocs.json | 6 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.devdocs.json | 112 +- api_docs/integration_assistant.mdx | 4 +- api_docs/interactive_setup.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- .../kbn_chart_expressions_common.devdocs.json | 32 +- api_docs/kbn_chart_expressions_common.mdx | 4 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- .../kbn_cloud_security_posture.devdocs.json | 500 ++++++++ api_docs/kbn_cloud_security_posture.mdx | 30 + ...cloud_security_posture_common.devdocs.json | 685 +++++++++++ .../kbn_cloud_security_posture_common.mdx | 33 + api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.devdocs.json | 176 ++- api_docs/kbn_coloring.mdx | 4 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ent_management_content_insights_public.mdx | 2 +- ...ent_management_content_insights_server.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 28 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- ...kbn_core_saved_objects_common.devdocs.json | 24 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- ...kbn_core_saved_objects_server.devdocs.json | 8 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- .../kbn_deeplinks_observability.devdocs.json | 109 +- api_docs/kbn_deeplinks_observability.mdx | 4 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.devdocs.json | 62 + api_docs/kbn_discover_utils.mdx | 4 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- ..._esql_validation_autocomplete.devdocs.json | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.devdocs.json | 51 + api_docs/kbn_expandable_flyout.mdx | 4 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_investigation_shared.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- ...bn_reporting_export_types_csv.devdocs.json | 24 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- ...bn_reporting_export_types_pdf.devdocs.json | 16 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- ...bn_reporting_export_types_png.devdocs.json | 8 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- .../kbn_reporting_mocks_server.devdocs.json | 10 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.devdocs.json | 20 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- ..._security_plugin_types_public.devdocs.json | 129 ++- api_docs/kbn_security_plugin_types_public.mdx | 7 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- .../kbn_security_role_management_model.mdx | 2 +- .../kbn_security_solution_common.devdocs.json | 1025 +++++++++++++++++ api_docs/kbn_security_solution_common.mdx | 33 + ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_security_ui_components.devdocs.json | 880 ++++++++++++++ api_docs/kbn_security_ui_components.mdx | 33 + .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.devdocs.json | 50 + api_docs/lens.mdx | 4 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 30 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.devdocs.json | 22 + api_docs/security.mdx | 4 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 756 files changed, 4955 insertions(+), 919 deletions(-) create mode 100644 api_docs/kbn_cloud_security_posture.devdocs.json create mode 100644 api_docs/kbn_cloud_security_posture.mdx create mode 100644 api_docs/kbn_cloud_security_posture_common.devdocs.json create mode 100644 api_docs/kbn_cloud_security_posture_common.mdx create mode 100644 api_docs/kbn_security_solution_common.devdocs.json create mode 100644 api_docs/kbn_security_solution_common.mdx create mode 100644 api_docs/kbn_security_ui_components.devdocs.json create mode 100644 api_docs/kbn_security_ui_components.mdx diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index 22c2fabddb90b..51049c59a926f 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -317,7 +317,9 @@ "label": "addComment", "description": [], "signature": [ - "({ incidentId, comment, }: { incidentId: string; comment: string; }) => Promise" + "({ incidentId, comment, }: { incidentId: string; comment: string; }, connectorUsageCollector: ", + "ConnectorUsageCollector", + ") => Promise" ], "path": "x-pack/plugins/actions/server/sub_action_framework/case.ts", "deprecated": false, @@ -328,7 +330,7 @@ "id": "def-server.CaseConnector.addComment.$1", "type": "Object", "tags": [], - "label": "{\n incidentId,\n comment,\n }", + "label": "{\n incidentId,\n comment,\n }", "description": [], "path": "x-pack/plugins/actions/server/sub_action_framework/case.ts", "deprecated": false, @@ -357,6 +359,21 @@ "trackAdoption": false } ] + }, + { + "parentPluginId": "actions", + "id": "def-server.CaseConnector.addComment.$2", + "type": "Object", + "tags": [], + "label": "connectorUsageCollector", + "description": [], + "signature": [ + "ConnectorUsageCollector" + ], + "path": "x-pack/plugins/actions/server/sub_action_framework/case.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -369,7 +386,9 @@ "label": "createIncident", "description": [], "signature": [ - "(incident: Incident) => Promise<", + "(incident: Incident, connectorUsageCollector: ", + "ConnectorUsageCollector", + ") => Promise<", "ExternalServiceIncidentResponse", ">" ], @@ -391,6 +410,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "actions", + "id": "def-server.CaseConnector.createIncident.$2", + "type": "Object", + "tags": [], + "label": "connectorUsageCollector", + "description": [], + "signature": [ + "ConnectorUsageCollector" + ], + "path": "x-pack/plugins/actions/server/sub_action_framework/case.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -403,7 +437,9 @@ "label": "updateIncident", "description": [], "signature": [ - "({ incidentId, incident, }: { incidentId: string; incident: Incident; }) => Promise<", + "({ incidentId, incident, }: { incidentId: string; incident: Incident; }, connectorUsageCollector: ", + "ConnectorUsageCollector", + ") => Promise<", "ExternalServiceIncidentResponse", ">" ], @@ -416,7 +452,7 @@ "id": "def-server.CaseConnector.updateIncident.$1", "type": "Object", "tags": [], - "label": "{\n incidentId,\n incident,\n }", + "label": "{\n incidentId,\n incident,\n }", "description": [], "path": "x-pack/plugins/actions/server/sub_action_framework/case.ts", "deprecated": false, @@ -448,6 +484,21 @@ "trackAdoption": false } ] + }, + { + "parentPluginId": "actions", + "id": "def-server.CaseConnector.updateIncident.$2", + "type": "Object", + "tags": [], + "label": "connectorUsageCollector", + "description": [], + "signature": [ + "ConnectorUsageCollector" + ], + "path": "x-pack/plugins/actions/server/sub_action_framework/case.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -460,7 +511,9 @@ "label": "getIncident", "description": [], "signature": [ - "({ id }: { id: string; }) => Promise" + "({ id }: { id: string; }, connectorUsageCollector: ", + "ConnectorUsageCollector", + ") => Promise" ], "path": "x-pack/plugins/actions/server/sub_action_framework/case.ts", "deprecated": false, @@ -489,6 +542,21 @@ "trackAdoption": false } ] + }, + { + "parentPluginId": "actions", + "id": "def-server.CaseConnector.getIncident.$2", + "type": "Object", + "tags": [], + "label": "connectorUsageCollector", + "description": [], + "signature": [ + "ConnectorUsageCollector" + ], + "path": "x-pack/plugins/actions/server/sub_action_framework/case.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -501,7 +569,9 @@ "label": "pushToService", "description": [], "signature": [ - "(params: { incident: { externalId: string | null; } & Incident; comments: { commentId: string; comment: string; }[]; }) => Promise<", + "(params: { incident: { externalId: string | null; } & Incident; comments: { commentId: string; comment: string; }[]; }, connectorUsageCollector: ", + "ConnectorUsageCollector", + ") => Promise<", "PushToServiceResponse", ">" ], @@ -549,6 +619,21 @@ "trackAdoption": false } ] + }, + { + "parentPluginId": "actions", + "id": "def-server.CaseConnector.pushToService.$2", + "type": "Object", + "tags": [], + "label": "connectorUsageCollector", + "description": [], + "signature": [ + "ConnectorUsageCollector" + ], + "path": "x-pack/plugins/actions/server/sub_action_framework/case.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -2116,7 +2201,9 @@ "signature": [ "({ url, data, method, responseSchema, headers, timeout, ...config }: ", "SubActionRequestParams", - ") => Promise<", + ", connectorUsageCollector: ", + "ConnectorUsageCollector", + ") => Promise<", "AxiosResponse", ">" ], @@ -2129,7 +2216,7 @@ "id": "def-server.SubActionConnector.request.$1", "type": "CompoundType", "tags": [], - "label": "{\n url,\n data,\n method = 'get',\n responseSchema,\n headers,\n timeout,\n ...config\n }", + "label": "{\n url,\n data,\n method = 'get',\n responseSchema,\n headers,\n timeout,\n ...config\n }", "description": [], "signature": [ "SubActionRequestParams", @@ -2139,6 +2226,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "actions", + "id": "def-server.SubActionConnector.request.$2", + "type": "Object", + "tags": [], + "label": "connectorUsageCollector", + "description": [], + "signature": [ + "ConnectorUsageCollector" + ], + "path": "x-pack/plugins/actions/server/sub_action_framework/sub_action_connector.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -3141,6 +3243,20 @@ "path": "x-pack/plugins/actions/server/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "actions", + "id": "def-server.ActionTypeExecutorOptions.connectorUsageCollector", + "type": "Object", + "tags": [], + "label": "connectorUsageCollector", + "description": [], + "signature": [ + "ConnectorUsageCollector" + ], + "path": "x-pack/plugins/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index d1b0d67338110..4457571ce94f3 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 307 | 0 | 301 | 32 | +| 314 | 0 | 308 | 33 | ## Client diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 00f292e066bd1..ea7405e63a9a8 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index c693b3de6677e..9566f3ab11147 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index be6ca5a797716..f21d3a66c418b 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.devdocs.json b/api_docs/alerting.devdocs.json index a2ee90c61e223..b847d4bf6cbfd 100644 --- a/api_docs/alerting.devdocs.json +++ b/api_docs/alerting.devdocs.json @@ -3806,14 +3806,6 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_preview/api/preview_rules/route.ts" }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts" - }, - { - "plugin": "synthetics", - "path": "x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts" - }, { "plugin": "ruleRegistry", "path": "x-pack/plugins/rule_registry/server/utils/rule_executor.test_helpers.ts" diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 1a063657bc3ca..54e0b21aa1d43 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 13e52a01e4bc3..c6e978f6ca917 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 613931cbc07ad..1bd8d8fdae817 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index c84613332411c..9ff4002466854 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 37d3c259bd800..259b5cae72be5 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index f197f466828e3..7ca49c62b6acd 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 2df911cc5320b..18286a63686f2 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 51bfb61d58d53..ae187c3a74ef8 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index c41165e1ee318..05f55d21091cf 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 78b45c64c1598..270070464564a 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index 8924b2865f020..4d3da3b9a90c9 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index dd48d4ac54d58..224a4e0008510 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 62fd884e90c6d..28e31a74c3e80 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index daccfcd4cf298..1f7f8b8756a32 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index 68c4aee644c2c..ba1c2e6142eca 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index c8b738ffc3cac..7ba9a7400267c 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index be528efc795ec..b652965b61903 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 485b62c398132..acd09ee726292 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 42e081040e905..d6d058244748f 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index ae5937d365d80..2ee3f08218275 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 41028dd816d74..fcfcd3e76918d 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index fffe43296211b..5e736856213af 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index c25bda8943efb..45ac273fd7f20 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 436eede1240b4..9ac845ac5d584 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 89aa3a4b3ae7d..85796c1937831 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index 1757889dd6502..1c9507f27d38a 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 6a74b9a11ded2..aecc205649f31 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 91ca1bc925b24..612689cded592 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.devdocs.json b/api_docs/dataset_quality.devdocs.json index 22bb1d7a3e854..abb0b1320eb0c 100644 --- a/api_docs/dataset_quality.devdocs.json +++ b/api_docs/dataset_quality.devdocs.json @@ -240,15 +240,9 @@ "DatasetQualityRouteHandlerResources", " & { params: { path: { integration: string; }; }; }) => Promise<{ dashboards: { id: string; title: string; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", - "; \"GET /internal/dataset_quality/integrations\": { endpoint: \"GET /internal/dataset_quality/integrations\"; params?: ", - "TypeC", - "<{ query: ", - "PartialC", - "<{ type: ", - "KeyofC", - "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>; }> | undefined; handler: ({}: ", + "; \"GET /internal/dataset_quality/integrations\": { endpoint: \"GET /internal/dataset_quality/integrations\"; params?: undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | undefined; }; }; }) => Promise<{ integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ src: string; } & { path?: string | undefined; size?: string | undefined; title?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; })[]; }>; } & ", + ") => Promise<{ integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ src: string; } & { path?: string | undefined; size?: string | undefined; title?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/{dataStream}/settings\": { endpoint: \"GET /internal/dataset_quality/data_streams/{dataStream}/settings\"; params?: ", "TypeC", @@ -292,9 +286,13 @@ "DatasetQualityRouteHandlerResources", " & { params: { path: { dataStream: string; }; query: { start: number; end: number; }; }; }) => Promise<{ degradedFields: { name: string; count: number; lastOccurrence: number | null; timeSeries: { x: number; y: number; }[]; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", - "; \"GET /internal/dataset_quality/data_streams/non_aggregatable\": { endpoint: \"GET /internal/dataset_quality/data_streams/non_aggregatable\"; params?: ", + "; \"GET /internal/dataset_quality/data_streams/{dataStream}/non_aggregatable\": { endpoint: \"GET /internal/dataset_quality/data_streams/{dataStream}/non_aggregatable\"; params?: ", "TypeC", - "<{ query: ", + "<{ path: ", + "TypeC", + "<{ dataStream: ", + "StringC", + "; }>; query: ", "IntersectionC", "<[", "TypeC", @@ -303,16 +301,34 @@ "; end: ", "Type", "; }>, ", - "PartialC", + "TypeC", "<{ type: ", "KeyofC", - "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", + "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>]>; }> | undefined; handler: ({}: ", + "DatasetQualityRouteHandlerResources", + " & { params: { path: { dataStream: string; }; query: { start: number; end: number; } & { type: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\"; }; }; }) => Promise<{ aggregatable: boolean; datasets: string[]; }>; } & ", + "DatasetQualityRouteCreateOptions", + "; \"GET /internal/dataset_quality/data_streams/non_aggregatable\": { endpoint: \"GET /internal/dataset_quality/data_streams/non_aggregatable\"; params?: ", + "TypeC", + "<{ query: ", + "IntersectionC", + "<[", + "TypeC", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; }>, ", + "TypeC", + "<{ types: ", + "Type", + "<(\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[], (\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[], unknown>; }>, ", "PartialC", "<{ dataStream: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { start: number; end: number; } & { type?: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | undefined; } & { dataStream?: string | undefined; }; }; }) => Promise<{ aggregatable: boolean; datasets: string[]; }>; } & ", + " & { params: { query: { start: number; end: number; } & { types: (\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[]; } & { dataStream?: string | undefined; }; }; }) => Promise<{ aggregatable: boolean; datasets: string[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/degraded_docs\": { endpoint: \"GET /internal/dataset_quality/data_streams/degraded_docs\"; params?: ", "TypeC", @@ -325,7 +341,7 @@ "; end: ", "Type", "; }>, ", - "PartialC", + "TypeC", "<{ type: ", "KeyofC", "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", @@ -334,23 +350,23 @@ "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { start: number; end: number; } & { type?: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ degradedDocs: { dataset: string; count: number; docsCount: number; percentage: number; }[]; }>; } & ", + " & { params: { query: { start: number; end: number; } & { type: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\"; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ degradedDocs: { dataset: string; count: number; docsCount: number; percentage: number; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/stats\": { endpoint: \"GET /internal/dataset_quality/data_streams/stats\"; params?: ", "TypeC", "<{ query: ", "IntersectionC", "<[", - "PartialC", - "<{ type: ", - "KeyofC", - "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", + "TypeC", + "<{ types: ", + "Type", + "<(\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[], (\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[], unknown>; }>, ", "PartialC", "<{ datasetQuery: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ datasetUserPrivileges: { canMonitor: boolean; } & { canRead: boolean; canViewIntegrations: boolean; }; dataStreamsStats: ({ name: string; userPrivileges: { canMonitor: boolean; }; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; totalDocs?: number | null | undefined; })[]; }>; } & ", + " & { params: { query: { types: (\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[]; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ datasetUserPrivileges: { canMonitor: boolean; } & { canRead: boolean; canViewIntegrations: boolean; }; dataStreamsStats: ({ name: string; userPrivileges: { canMonitor: boolean; }; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; totalDocs?: number | null | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: infer TRouteParamsRT extends ", { @@ -401,15 +417,9 @@ "DatasetQualityRouteHandlerResources", " & { params: { path: { integration: string; }; }; }) => Promise<{ dashboards: { id: string; title: string; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", - "; \"GET /internal/dataset_quality/integrations\": { endpoint: \"GET /internal/dataset_quality/integrations\"; params?: ", - "TypeC", - "<{ query: ", - "PartialC", - "<{ type: ", - "KeyofC", - "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>; }> | undefined; handler: ({}: ", + "; \"GET /internal/dataset_quality/integrations\": { endpoint: \"GET /internal/dataset_quality/integrations\"; params?: undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | undefined; }; }; }) => Promise<{ integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ src: string; } & { path?: string | undefined; size?: string | undefined; title?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; })[]; }>; } & ", + ") => Promise<{ integrations: ({ name: string; } & { title?: string | undefined; version?: string | undefined; icons?: ({ src: string; } & { path?: string | undefined; size?: string | undefined; title?: string | undefined; type?: string | undefined; })[] | undefined; datasets?: { [x: string]: string; } | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/{dataStream}/settings\": { endpoint: \"GET /internal/dataset_quality/data_streams/{dataStream}/settings\"; params?: ", "TypeC", @@ -453,9 +463,13 @@ "DatasetQualityRouteHandlerResources", " & { params: { path: { dataStream: string; }; query: { start: number; end: number; }; }; }) => Promise<{ degradedFields: { name: string; count: number; lastOccurrence: number | null; timeSeries: { x: number; y: number; }[]; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", - "; \"GET /internal/dataset_quality/data_streams/non_aggregatable\": { endpoint: \"GET /internal/dataset_quality/data_streams/non_aggregatable\"; params?: ", + "; \"GET /internal/dataset_quality/data_streams/{dataStream}/non_aggregatable\": { endpoint: \"GET /internal/dataset_quality/data_streams/{dataStream}/non_aggregatable\"; params?: ", "TypeC", - "<{ query: ", + "<{ path: ", + "TypeC", + "<{ dataStream: ", + "StringC", + "; }>; query: ", "IntersectionC", "<[", "TypeC", @@ -464,16 +478,34 @@ "; end: ", "Type", "; }>, ", - "PartialC", + "TypeC", "<{ type: ", "KeyofC", - "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", + "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>]>; }> | undefined; handler: ({}: ", + "DatasetQualityRouteHandlerResources", + " & { params: { path: { dataStream: string; }; query: { start: number; end: number; } & { type: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\"; }; }; }) => Promise<{ aggregatable: boolean; datasets: string[]; }>; } & ", + "DatasetQualityRouteCreateOptions", + "; \"GET /internal/dataset_quality/data_streams/non_aggregatable\": { endpoint: \"GET /internal/dataset_quality/data_streams/non_aggregatable\"; params?: ", + "TypeC", + "<{ query: ", + "IntersectionC", + "<[", + "TypeC", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; }>, ", + "TypeC", + "<{ types: ", + "Type", + "<(\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[], (\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[], unknown>; }>, ", "PartialC", "<{ dataStream: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { start: number; end: number; } & { type?: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | undefined; } & { dataStream?: string | undefined; }; }; }) => Promise<{ aggregatable: boolean; datasets: string[]; }>; } & ", + " & { params: { query: { start: number; end: number; } & { types: (\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[]; } & { dataStream?: string | undefined; }; }; }) => Promise<{ aggregatable: boolean; datasets: string[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/degraded_docs\": { endpoint: \"GET /internal/dataset_quality/data_streams/degraded_docs\"; params?: ", "TypeC", @@ -486,7 +518,7 @@ "; end: ", "Type", "; }>, ", - "PartialC", + "TypeC", "<{ type: ", "KeyofC", "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", @@ -495,23 +527,23 @@ "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { start: number; end: number; } & { type?: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ degradedDocs: { dataset: string; count: number; docsCount: number; percentage: number; }[]; }>; } & ", + " & { params: { query: { start: number; end: number; } & { type: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\"; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ degradedDocs: { dataset: string; count: number; docsCount: number; percentage: number; }[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/stats\": { endpoint: \"GET /internal/dataset_quality/data_streams/stats\"; params?: ", "TypeC", "<{ query: ", "IntersectionC", "<[", - "PartialC", - "<{ type: ", - "KeyofC", - "<{ logs: null; metrics: null; traces: null; synthetics: null; profiling: null; }>; }>, ", + "TypeC", + "<{ types: ", + "Type", + "<(\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[], (\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[], unknown>; }>, ", "PartialC", "<{ datasetQuery: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { query: { type?: \"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | undefined; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ datasetUserPrivileges: { canMonitor: boolean; } & { canRead: boolean; canViewIntegrations: boolean; }; dataStreamsStats: ({ name: string; userPrivileges: { canMonitor: boolean; }; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; totalDocs?: number | null | undefined; })[]; }>; } & ", + " & { params: { query: { types: (\"profiling\" | \"metrics\" | \"synthetics\" | \"traces\" | \"logs\")[]; } & { datasetQuery?: string | undefined; }; }; }) => Promise<{ datasetUserPrivileges: { canMonitor: boolean; } & { canRead: boolean; canViewIntegrations: boolean; }; dataStreamsStats: ({ name: string; userPrivileges: { canMonitor: boolean; }; } & { size?: string | undefined; sizeBytes?: number | undefined; lastActivity?: number | undefined; integration?: string | undefined; totalDocs?: number | null | undefined; })[]; }>; } & ", "DatasetQualityRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", { diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index f3589688ad057..f4c0066b664b0 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 3f4966f0c7a88..b8a40cca3f85e 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -22,7 +22,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | actions, savedObjectsTagging, ml, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, dataVisualizer, ml, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core, savedObjects, embeddable, visualizations, canvas, graph, ml | - | -| | @kbn/core-saved-objects-base-server-internal, @kbn/core-saved-objects-migration-server-internal, @kbn/core-saved-objects-server-internal, @kbn/core-ui-settings-server-internal, @kbn/core-usage-data-server-internal, spaces, taskManager, actions, @kbn/core-saved-objects-migration-server-mocks, share, dataViews, data, alerting, lens, cases, savedSearch, canvas, fleet, cloudSecurityPosture, ml, logsShared, graph, lists, maps, visualizations, infra, apmDataAccess, securitySolution, apm, slo, synthetics, uptime, dashboard, eventAnnotation, links, savedObjectsManagement, @kbn/core-test-helpers-so-type-serializer, @kbn/core-saved-objects-api-server-internal | - | +| | @kbn/core-saved-objects-base-server-internal, @kbn/core-saved-objects-migration-server-internal, @kbn/core-saved-objects-server-internal, @kbn/core-ui-settings-server-internal, @kbn/core-usage-data-server-internal, taskManager, spaces, actions, @kbn/core-saved-objects-migration-server-mocks, share, dataViews, data, alerting, lens, cases, savedSearch, canvas, fleet, cloudSecurityPosture, ml, logsShared, graph, lists, maps, visualizations, infra, apmDataAccess, securitySolution, apm, slo, synthetics, uptime, dashboard, eventAnnotation, links, savedObjectsManagement, @kbn/core-test-helpers-so-type-serializer, @kbn/core-saved-objects-api-server-internal | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | graph, stackAlerts, inputControlVis, securitySolution, savedObjects | - | | | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - | @@ -30,7 +30,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | triggersActionsUi | - | | | triggersActionsUi | - | | | @kbn/core, visualizations, triggersActionsUi | - | -| | ruleRegistry, securitySolution, synthetics, slo | - | +| | ruleRegistry, securitySolution, slo | - | | | security, actions, alerting, ruleRegistry, files, cases, fleet, securitySolution | - | | | securitySolution, cloudChat, observabilityOnboarding | - | | | alerting, securitySolution | - | @@ -67,10 +67,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | @kbn/monaco, securitySolution | - | | | cloudSecurityPosture, securitySolution | - | -| | fleet, exploratoryView, osquery, synthetics | - | -| | alerting, observabilityAIAssistant, fleet, cloudSecurityPosture, enterpriseSearch, serverlessSearch, transform, upgradeAssistant, apm, entityManager, synthetics, security | - | | | cloudChat | - | | | @kbn/core-elasticsearch-server-internal, @kbn/core-plugins-server-internal, enterpriseSearch, observabilityOnboarding, console | - | +| | alerting, observabilityAIAssistant, fleet, cloudSecurityPosture, enterpriseSearch, serverlessSearch, transform, upgradeAssistant, apm, entityManager, synthetics, security | - | | | actions, alerting | - | | | monitoring | - | | | @kbn/core-saved-objects-api-browser, @kbn/core, savedObjects, savedObjectsManagement, visualizations, savedObjectsTagging, eventAnnotation, lens, maps, graph, dashboard, savedObjectsTaggingOss, kibanaUtils, expressions, data, embeddable, uiActionsEnhanced, controls, canvas, dashboardEnhanced, globalSearchProviders | - | @@ -107,6 +106,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-saved-objects-api-server-internal | - | | | @kbn/core-saved-objects-api-server-internal, canvas | - | | | @kbn/core-saved-objects-api-server-internal, @kbn/core-saved-objects-migration-server-internal, spaces, data, savedSearch, cloudSecurityPosture, visualizations, dashboard, @kbn/core-test-helpers-so-type-serializer | - | +| | fleet, exploratoryView, osquery, synthetics | - | | | graph, visTypeTimeseries, dataViewManagement, dataViews | - | | | graph, visTypeTimeseries, dataViewManagement, dataViews | - | | | graph, visTypeTimeseries, dataViewManagement | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 9d2017898746e..1fb9c771723b7 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1477,7 +1477,6 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [message_utils.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/message_utils.ts#:~:text=alertFactory), [tls_rule.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/server/alert_rules/tls_rule/tls_rule.ts#:~:text=alertFactory) | - | | | [stderr_logs.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/stderr_logs.tsx#:~:text=indexPatternId) | - | | | [synthetics_private_location.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts#:~:text=policy_id) | - | | | [synthetics_private_location.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts#:~:text=policy_id) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 8e248de96b0bd..2f3cb0803d93d 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 763357dce3d34..9e90bb566c549 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index fc1bfd676d94d..e3c96334b92a4 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 8b59717c8123d..1ba77eba28942 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 97e775ece5349..1989b12548930 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index d4ae7cd36f63d..395e5ee21f8a5 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 632160f5c04a9..6ce470f6f79ef 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 6afa158bf1204..4ec24d611d726 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index 34e8d7bd33b28..3564fff0ccb97 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 01c434f316a48..5c7e0de563200 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index a86dd58f54772..731227f4f53ff 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index 9bc9b25dd0bfc..13f3446eb5d65 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index b52d2f36b5f39..ae99029ee8f3a 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 1f1a0ded169d4..ba15a2cab261e 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index 45d20a01d3834..31cec7faef2ce 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index c961d5ad93093..5cf8231c0a120 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 041bac091bc0b..f13c7fe7233e8 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 5079a06b4d0f0..ad6417689a554 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.devdocs.json b/api_docs/event_log.devdocs.json index 7ce5819610f98..5233179e19fd1 100644 --- a/api_docs/event_log.devdocs.json +++ b/api_docs/event_log.devdocs.json @@ -1450,7 +1450,7 @@ "label": "data", "description": [], "signature": [ - "(Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; code?: string | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" + "(Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; type_id?: string | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; code?: string | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" ], "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", "deprecated": false, @@ -1470,7 +1470,7 @@ "label": "IEvent", "description": [], "signature": [ - "DeepPartial | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; code?: string | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" + "DeepPartial | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; type_id?: string | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; code?: string | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, @@ -1485,7 +1485,7 @@ "label": "IValidatedEvent", "description": [], "signature": [ - "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; code?: string | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" + "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; type_id?: string | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; code?: string | undefined; url?: string | undefined; created?: string | undefined; dataset?: string | undefined; provider?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 57ee52ba4ebb6..2982cc5ef9020 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 3472ef2cd2b8e..6ca103e4be8d1 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 98f8d449dacad..fc80d871fbfe1 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index c1ec78c25a48d..5103f749123f8 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 1220aeaeb1197..00654dcc9df1f 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 63a3bb1804286..5e9d0afdec154 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 0f53d63b6f7b6..672d7962a76d4 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index da30f6abd5686..63abe0e9ba14f 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 66b5f5c744a70..bf3f90ffb18d1 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index d31843a6fb7cc..881f9f476ae49 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 2e80c4db64538..70b9d0c108d47 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 0c54bc0c3bf43..38cfb6af09f4f 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 1807e75907553..95cb1a083521b 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index 9e08043cf7ad3..4dea8fcc24037 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index cad02c831acd9..72191fb3ab0df 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 91eae5512c2eb..447dcd0dcb2d6 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index f67e6ab2de725..5d7328b0ffc4e 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index e985fa2b90bff..d8ddce35586f9 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 00c482ea0b345..3ccbe68bbd5f3 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index d717a1ed62e1e..5094afa1c2bec 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 60537517ae2ec..5be76becea477 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 93407e10b2fd2..ee04b19fd8c0d 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index b64018272a21b..8f42cb55c77bd 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index eac71905ded56..ccf972157447e 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index 197a35e1a463c..cae2196329f56 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index 8d281fc9b1aef..b80e24b3ee0a7 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 16d8e69eaeebd..75338dcd8418d 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 15a25b6609373..208a9d63bb7ce 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 84f5f3de0a2c0..5d2ca61e790b5 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index fd95715a8cc2f..f5b5593da4217 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 19175d82460f5..043bad6e5e526 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index e4cafbc124649..b53c897a962e6 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 5cf566b63af27..098f230aac610 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.devdocs.json b/api_docs/integration_assistant.devdocs.json index ab607c4fa22fe..3fafbef540dff 100644 --- a/api_docs/integration_assistant.devdocs.json +++ b/api_docs/integration_assistant.devdocs.json @@ -164,6 +164,48 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.ANALYZE_LOGS_PATH", + "type": "string", + "tags": [], + "label": "ANALYZE_LOGS_PATH", + "description": [], + "path": "x-pack/plugins/integration_assistant/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.AnalyzeLogsRequestBody", + "type": "Type", + "tags": [], + "label": "AnalyzeLogsRequestBody", + "description": [], + "signature": [ + "{ connectorId: string; logSamples: string[]; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }" + ], + "path": "x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.AnalyzeLogsResponse", + "type": "Type", + "tags": [], + "label": "AnalyzeLogsResponse", + "description": [], + "signature": [ + "{ results: { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; }" + ], + "path": "x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "integrationAssistant", "id": "def-common.BuildIntegrationRequestBody", @@ -188,7 +230,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }; }" + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }; }" ], "path": "x-pack/plugins/integration_assistant/common/api/build_integration/build_integration.ts", "deprecated": false, @@ -353,7 +395,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }" + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -497,7 +539,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }" + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -678,7 +720,7 @@ "\nFormat of the provided log samples." ], "signature": [ - "{ name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }" + "{ name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -687,6 +729,36 @@ } ], "objects": [ + { + "parentPluginId": "integrationAssistant", + "id": "def-common.AnalyzeLogsRequestBody", + "type": "Object", + "tags": [], + "label": "AnalyzeLogsRequestBody", + "description": [], + "signature": [ + "Zod.ZodObject<{ logSamples: Zod.ZodArray; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; logSamples: string[]; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; logSamples: string[]; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }>" + ], + "path": "x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "integrationAssistant", + "id": "def-common.AnalyzeLogsResponse", + "type": "Object", + "tags": [], + "label": "AnalyzeLogsResponse", + "description": [], + "signature": [ + "Zod.ZodObject<{ results: Zod.ZodObject<{ samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; parsedSamples: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }, { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }>; }, \"strip\", Zod.ZodTypeAny, { results: { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; }, { results: { samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; }>" + ], + "path": "x-pack/plugins/integration_assistant/common/api/analyze_logs/analyze_logs_route.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "integrationAssistant", "id": "def-common.BuildIntegrationRequestBody", @@ -759,7 +831,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -775,7 +847,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -791,7 +863,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -807,7 +879,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -823,7 +895,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -839,7 +911,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }; }, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }; }, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -855,7 +927,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }; }>" + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/build_integration/build_integration.ts", "deprecated": false, @@ -1314,7 +1386,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1330,7 +1402,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1346,7 +1418,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }>" + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -1644,7 +1716,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1660,7 +1732,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1676,7 +1748,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1692,7 +1764,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http-endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1708,7 +1780,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }>" + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodTypeAny, \"passthrough\">[]; samplesFormat: { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }; }[]; logo?: string | undefined; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, @@ -2056,7 +2128,7 @@ "label": "SamplesFormat", "description": [], "signature": [ - "Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>" + "Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\"]>; multiline: Zod.ZodOptional; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\"; multiline?: boolean | undefined; json_path?: string[] | undefined; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.ts", "deprecated": false, diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 2812e63061be9..aa2b5d0c87c5f 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-scalability](https://github.com/orgs/elastic/teams/se | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 49 | 0 | 41 | 3 | +| 54 | 0 | 46 | 3 | ## Client diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 4200b4df55f6d..5353dba14cdf3 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index e9fa8ccba29e8..5f62ee48d6443 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 2348c5fcb711b..1ab92fa69605d 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 36a873aa0aa93..de5e39c7a3ad4 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 2b22f5d6fc202..1beeb6a838961 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 879e63ec94b52..742f36ccd0f26 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index be52419021093..ef0e8fea377c3 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 4eddc3c8f1588..fe40906305405 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index f4a1536f13765..51d3e65739266 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index 7fb32ced0de89..e2818b7937d79 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 7429ff247175c..6b70acc648945 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index ca1cc6be7b68c..f354c3efa6cd5 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index f4446f2c69f3d..11ab9d08f9152 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 0870d46f2715d..2edda489ca650 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index f4ae83ee2bb5d..a7c54fe669152 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index b1116871df3d5..7215c53eed90c 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 9d2cf63cd98a9..2b9cfcf48a28c 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index baab52fcd0c72..216d465b69d09 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 5bd1bdf21cf2c..d8e3b48cac082 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index f2cd1fc825be9..99d3578a0cbfa 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index cd6976985d516..4c68b9025e77b 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 7e25637a0387f..cc910fd4d0b62 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 4a5c5681ea201..6512c394b8aa9 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 81e4caa4db02e..bccc73f21eab4 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 83ffe3d48c656..3e765df2a5f24 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 0e695ad07bcff..a56a82b88e691 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 56a0eec50a8f2..3cd65e1a3d508 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 91398cbf372ed..d13474b5cff20 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 83fef34dce621..d099dbb1513ab 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 5720f6996dfdf..ed03c93296b6d 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index a07787f1fbc3a..48e186669c5fc 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.devdocs.json b/api_docs/kbn_chart_expressions_common.devdocs.json index cf8c8c64ccfcc..d5271d494e0a0 100644 --- a/api_docs/kbn_chart_expressions_common.devdocs.json +++ b/api_docs/kbn_chart_expressions_common.devdocs.json @@ -133,7 +133,7 @@ "section": "def-common.DatatableRow", "text": "DatatableRow" }, - "[], accessor: string | undefined) => (string | string[])[]" + "[], accessor: string | undefined, isTransposed: boolean | undefined, exclude: any[] | undefined) => (string | string[])[]" ], "path": "src/plugins/chart_expressions/common/color_categories.ts", "deprecated": false, @@ -175,6 +175,36 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "@kbn/chart-expressions-common", + "id": "def-common.getColorCategories.$3", + "type": "CompoundType", + "tags": [], + "label": "isTransposed", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/chart_expressions/common/color_categories.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/chart-expressions-common", + "id": "def-common.getColorCategories.$4", + "type": "Array", + "tags": [], + "label": "exclude", + "description": [], + "signature": [ + "any[] | undefined" + ], + "path": "src/plugins/chart_expressions/common/color_categories.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [], diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 56b27d69fcece..7d37cdc3253e3 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 23 | 0 | 19 | 0 | +| 25 | 0 | 21 | 0 | ## Common diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 795e67895a493..f9258aa18adb7 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 3e7cdf023bff6..b974643792385 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 80e3fe3bef8b4..0fa4c5c5408d1 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 6f6944f783e90..cb5c932b0fbed 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 622447bc9ecd5..bd560513b1f95 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.devdocs.json b/api_docs/kbn_cloud_security_posture.devdocs.json new file mode 100644 index 0000000000000..9f42159f69001 --- /dev/null +++ b/api_docs/kbn_cloud_security_posture.devdocs.json @@ -0,0 +1,500 @@ +{ + "id": "@kbn/cloud-security-posture", + "client": { + "classes": [], + "functions": [], + "interfaces": [ + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps", + "type": "Interface", + "tags": [], + "label": "CspClientPluginStartDeps", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.data", + "type": "Object", + "tags": [], + "label": "data", + "description": [], + "signature": [ + { + "pluginId": "data", + "scope": "public", + "docId": "kibDataPluginApi", + "section": "def-public.DataPublicPluginStart", + "text": "DataPublicPluginStart" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.dataViews", + "type": "Object", + "tags": [], + "label": "dataViews", + "description": [], + "signature": [ + { + "pluginId": "dataViews", + "scope": "public", + "docId": "kibDataViewsPluginApi", + "section": "def-public.DataViewsServicePublic", + "text": "DataViewsServicePublic" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.dataViewFieldEditor", + "type": "Object", + "tags": [], + "label": "dataViewFieldEditor", + "description": [], + "signature": [ + { + "pluginId": "dataViewFieldEditor", + "scope": "public", + "docId": "kibDataViewFieldEditorPluginApi", + "section": "def-public.PluginStart", + "text": "PluginStart" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.unifiedSearch", + "type": "Object", + "tags": [], + "label": "unifiedSearch", + "description": [], + "signature": [ + { + "pluginId": "unifiedSearch", + "scope": "public", + "docId": "kibUnifiedSearchPluginApi", + "section": "def-public.UnifiedSearchPublicPluginStart", + "text": "UnifiedSearchPublicPluginStart" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.uiActions", + "type": "Object", + "tags": [], + "label": "uiActions", + "description": [], + "signature": [ + "{ readonly registerTrigger: (trigger: ", + { + "pluginId": "@kbn/ui-actions-browser", + "scope": "common", + "docId": "kibKbnUiActionsBrowserPluginApi", + "section": "def-common.Trigger", + "text": "Trigger" + }, + ") => void; readonly hasTrigger: (triggerId: string) => boolean; readonly getTrigger: (triggerId: string) => ", + "TriggerContract", + "; readonly registerAction: (definition: ", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.ActionDefinition", + "text": "ActionDefinition" + }, + ") => ", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.Action", + "text": "Action" + }, + "; readonly unregisterAction: (actionId: string) => void; readonly hasAction: (actionId: string) => boolean; readonly attachAction: (triggerId: string, actionId: string) => void; readonly detachAction: (triggerId: string, actionId: string) => void; readonly addTriggerAction: (triggerId: string, action: ", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.ActionDefinition", + "text": "ActionDefinition" + }, + ") => void; readonly getAction: (id: string) => ", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.Action", + "text": "Action" + }, + "; readonly getTriggerActions: (triggerId: string) => ", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.Action", + "text": "Action" + }, + "[]; readonly getTriggerCompatibleActions: (triggerId: string, context: object) => Promise<", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.Action", + "text": "Action" + }, + "[]>; readonly getFrequentlyChangingActionsForTrigger: (triggerId: string, context: object) => ", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.FrequentCompatibilityChangeAction", + "text": "FrequentCompatibilityChangeAction" + }, + "[]; readonly executeTriggerActions: (triggerId: string, context: object) => Promise; readonly clear: () => void; readonly fork: () => ", + { + "pluginId": "uiActions", + "scope": "public", + "docId": "kibUiActionsPluginApi", + "section": "def-public.UiActionsService", + "text": "UiActionsService" + }, + "; }" + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.fieldFormats", + "type": "CompoundType", + "tags": [], + "label": "fieldFormats", + "description": [], + "signature": [ + "Omit<", + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.FieldFormatsRegistry", + "text": "FieldFormatsRegistry" + }, + ", \"init\" | \"register\"> & { deserialize: ", + { + "pluginId": "fieldFormats", + "scope": "common", + "docId": "kibFieldFormatsPluginApi", + "section": "def-common.FormatFactory", + "text": "FormatFactory" + }, + "; }" + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.toastNotifications", + "type": "Object", + "tags": [], + "label": "toastNotifications", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-notifications-browser", + "scope": "public", + "docId": "kibKbnCoreNotificationsBrowserPluginApi", + "section": "def-public.IToasts", + "text": "IToasts" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.charts", + "type": "CompoundType", + "tags": [], + "label": "charts", + "description": [], + "signature": [ + { + "pluginId": "charts", + "scope": "public", + "docId": "kibChartsPluginApi", + "section": "def-public.ChartsPluginSetup", + "text": "ChartsPluginSetup" + }, + " & { activeCursor: ", + "ActiveCursor", + "; }" + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.discover", + "type": "Object", + "tags": [], + "label": "discover", + "description": [], + "signature": [ + { + "pluginId": "discover", + "scope": "public", + "docId": "kibDiscoverPluginApi", + "section": "def-public.DiscoverStart", + "text": "DiscoverStart" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.fleet", + "type": "Object", + "tags": [], + "label": "fleet", + "description": [], + "signature": [ + { + "pluginId": "fleet", + "scope": "public", + "docId": "kibFleetPluginApi", + "section": "def-public.FleetStart", + "text": "FleetStart" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.licensing", + "type": "Object", + "tags": [], + "label": "licensing", + "description": [], + "signature": [ + { + "pluginId": "licensing", + "scope": "public", + "docId": "kibLicensingPluginApi", + "section": "def-public.LicensingPluginStart", + "text": "LicensingPluginStart" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.share", + "type": "CompoundType", + "tags": [], + "label": "share", + "description": [], + "signature": [ + "{ toggleShareContextMenu: (options: ", + { + "pluginId": "share", + "scope": "public", + "docId": "kibSharePluginApi", + "section": "def-public.ShowShareMenuOptions", + "text": "ShowShareMenuOptions" + }, + ") => void; } & { url: ", + { + "pluginId": "share", + "scope": "public", + "docId": "kibSharePluginApi", + "section": "def-public.BrowserUrlService", + "text": "BrowserUrlService" + }, + "; navigate(options: ", + "RedirectOptions", + "<", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + }, + ">): void; }" + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.storage", + "type": "Object", + "tags": [], + "label": "storage", + "description": [], + "signature": [ + { + "pluginId": "kibanaUtils", + "scope": "public", + "docId": "kibKibanaUtilsPluginApi", + "section": "def-public.Storage", + "text": "Storage" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.spaces", + "type": "Object", + "tags": [], + "label": "spaces", + "description": [], + "signature": [ + { + "pluginId": "spaces", + "scope": "public", + "docId": "kibSpacesPluginApi", + "section": "def-public.SpacesApi", + "text": "SpacesApi" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.cloud", + "type": "Object", + "tags": [], + "label": "cloud", + "description": [], + "signature": [ + { + "pluginId": "cloud", + "scope": "public", + "docId": "kibCloudPluginApi", + "section": "def-public.CloudSetup", + "text": "CloudSetup" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.CspClientPluginStartDeps.usageCollection", + "type": "Object", + "tags": [], + "label": "usageCollection", + "description": [], + "signature": [ + { + "pluginId": "usageCollection", + "scope": "public", + "docId": "kibUsageCollectionPluginApi", + "section": "def-public.UsageCollectionStart", + "text": "UsageCollectionStart" + }, + " | undefined" + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.FindingsBaseEsQuery", + "type": "Interface", + "tags": [], + "label": "FindingsBaseEsQuery", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.FindingsBaseEsQuery.query", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + "{ bool: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.BoolQuery", + "text": "BoolQuery" + }, + "; } | undefined" + ], + "path": "x-pack/packages/kbn-cloud-security-posture/type.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx new file mode 100644 index 0000000000000..cf41b91d3ac27 --- /dev/null +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -0,0 +1,30 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnCloudSecurityPosturePluginApi +slug: /kibana-dev-docs/api/kbn-cloud-security-posture +title: "@kbn/cloud-security-posture" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/cloud-security-posture plugin +date: 2024-08-28 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] +--- +import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; + + + +Contact [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 19 | 0 | 19 | 0 | + +## Client + +### Interfaces + + diff --git a/api_docs/kbn_cloud_security_posture_common.devdocs.json b/api_docs/kbn_cloud_security_posture_common.devdocs.json new file mode 100644 index 0000000000000..99c75826461c2 --- /dev/null +++ b/api_docs/kbn_cloud_security_posture_common.devdocs.json @@ -0,0 +1,685 @@ +{ + "id": "@kbn/cloud-security-posture-common", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupBothPolicy", + "type": "Interface", + "tags": [], + "label": "BaseCspSetupBothPolicy", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupBothPolicy.status", + "type": "CompoundType", + "tags": [], + "label": "status", + "description": [], + "signature": [ + "\"indexed\" | \"unprivileged\" | \"indexing\" | \"index-timeout\" | \"not-deployed\" | \"not-installed\" | \"waiting_for_results\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupBothPolicy.installedPackagePolicies", + "type": "number", + "tags": [], + "label": "installedPackagePolicies", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupBothPolicy.healthyAgents", + "type": "number", + "tags": [], + "label": "healthyAgents", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus", + "type": "Interface", + "tags": [], + "label": "BaseCspSetupStatus", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus.indicesDetails", + "type": "Array", + "tags": [], + "label": "indicesDetails", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cloud-security-posture-common", + "scope": "common", + "docId": "kibKbnCloudSecurityPostureCommonPluginApi", + "section": "def-common.IndexDetails", + "text": "IndexDetails" + }, + "[]" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus.latestPackageVersion", + "type": "string", + "tags": [], + "label": "latestPackageVersion", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus.cspm", + "type": "Object", + "tags": [], + "label": "cspm", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cloud-security-posture-common", + "scope": "common", + "docId": "kibKbnCloudSecurityPostureCommonPluginApi", + "section": "def-common.BaseCspSetupBothPolicy", + "text": "BaseCspSetupBothPolicy" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus.kspm", + "type": "Object", + "tags": [], + "label": "kspm", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cloud-security-posture-common", + "scope": "common", + "docId": "kibKbnCloudSecurityPostureCommonPluginApi", + "section": "def-common.BaseCspSetupBothPolicy", + "text": "BaseCspSetupBothPolicy" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus.vuln_mgmt", + "type": "Object", + "tags": [], + "label": "vuln_mgmt", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cloud-security-posture-common", + "scope": "common", + "docId": "kibKbnCloudSecurityPostureCommonPluginApi", + "section": "def-common.BaseCspSetupBothPolicy", + "text": "BaseCspSetupBothPolicy" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus.isPluginInitialized", + "type": "boolean", + "tags": [], + "label": "isPluginInitialized", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus.installedPackageVersion", + "type": "string", + "tags": [], + "label": "installedPackageVersion", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BaseCspSetupStatus.hasMisconfigurationsFindings", + "type": "CompoundType", + "tags": [], + "label": "hasMisconfigurationsFindings", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding", + "type": "Interface", + "tags": [], + "label": "CspFinding", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.timestamp", + "type": "string", + "tags": [], + "label": "'@timestamp'", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.cluster_id", + "type": "string", + "tags": [], + "label": "cluster_id", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.orchestrator", + "type": "Object", + "tags": [], + "label": "orchestrator", + "description": [], + "signature": [ + "CspFindingOrchestrator | undefined" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.cloud", + "type": "Object", + "tags": [], + "label": "cloud", + "description": [], + "signature": [ + "CspFindingCloud | undefined" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.result", + "type": "Object", + "tags": [], + "label": "result", + "description": [], + "signature": [ + "CspFindingResult" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.resource", + "type": "Object", + "tags": [], + "label": "resource", + "description": [], + "signature": [ + "CspFindingResource" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.rule", + "type": "Object", + "tags": [], + "label": "rule", + "description": [], + "signature": [ + "{ readonly impact?: string | undefined; readonly references?: string | undefined; readonly default_value?: string | undefined; readonly id: string; readonly version: string; readonly name: string; readonly tags: string[]; readonly description: string; readonly section: string; readonly audit: string; readonly benchmark: Readonly<{ posture_type?: \"kspm\" | \"cspm\" | undefined; rule_number?: string | undefined; } & { id: string; version: string; name: string; }>; readonly profile_applicability: string; readonly rationale: string; readonly rego_rule_id: string; readonly remediation: string; }" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.host", + "type": "Object", + "tags": [], + "label": "host", + "description": [], + "signature": [ + "CspFindingHost" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.event", + "type": "Object", + "tags": [], + "label": "event", + "description": [], + "signature": [ + "EcsEvent" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.data_stream", + "type": "Object", + "tags": [], + "label": "data_stream", + "description": [], + "signature": [ + "EcsDataStream" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.agent", + "type": "Object", + "tags": [], + "label": "agent", + "description": [], + "signature": [ + "CspFindingAgent" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspFinding.ecs", + "type": "Object", + "tags": [], + "label": "ecs", + "description": [], + "signature": [ + "{ version: string; }" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.IndexDetails", + "type": "Interface", + "tags": [], + "label": "IndexDetails", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.IndexDetails.index", + "type": "string", + "tags": [], + "label": "index", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.IndexDetails.status", + "type": "CompoundType", + "tags": [], + "label": "status", + "description": [], + "signature": [ + "\"empty\" | \"not-empty\" | \"unprivileged\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CDR_LATEST_NATIVE_MISCONFIGURATIONS_INDEX_PATTERN", + "type": "string", + "tags": [], + "label": "CDR_LATEST_NATIVE_MISCONFIGURATIONS_INDEX_PATTERN", + "description": [], + "signature": [ + "\"logs-cloud_security_posture.findings_latest-default\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CDR_LATEST_THIRD_PARTY_MISCONFIGURATIONS_INDEX_PATTERN", + "type": "string", + "tags": [], + "label": "CDR_LATEST_THIRD_PARTY_MISCONFIGURATIONS_INDEX_PATTERN", + "description": [], + "signature": [ + "\"logs-*_latest_misconfigurations_cdr\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CDR_MISCONFIGURATIONS_INDEX_PATTERN", + "type": "string", + "tags": [], + "label": "CDR_MISCONFIGURATIONS_INDEX_PATTERN", + "description": [], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CSP_GET_BENCHMARK_RULES_STATE_API_CURRENT_VERSION", + "type": "string", + "tags": [], + "label": "CSP_GET_BENCHMARK_RULES_STATE_API_CURRENT_VERSION", + "description": [], + "signature": [ + "\"1\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CSP_GET_BENCHMARK_RULES_STATE_ROUTE_PATH", + "type": "string", + "tags": [], + "label": "CSP_GET_BENCHMARK_RULES_STATE_ROUTE_PATH", + "description": [], + "signature": [ + "\"/internal/cloud_security_posture/rules/_get_states\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspBenchmarkRuleMetadata", + "type": "Type", + "tags": [], + "label": "CspBenchmarkRuleMetadata", + "description": [], + "signature": [ + "{ readonly impact?: string | undefined; readonly references?: string | undefined; readonly default_value?: string | undefined; readonly id: string; readonly version: string; readonly name: string; readonly tags: string[]; readonly description: string; readonly section: string; readonly audit: string; readonly benchmark: Readonly<{ posture_type?: \"kspm\" | \"cspm\" | undefined; rule_number?: string | undefined; } & { id: string; version: string; name: string; }>; readonly profile_applicability: string; readonly rationale: string; readonly rego_rule_id: string; readonly remediation: string; }" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/schema/rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspBenchmarkRulesStates", + "type": "Type", + "tags": [], + "label": "CspBenchmarkRulesStates", + "description": [], + "signature": [ + "{ [x: string]: Readonly<{} & { muted: boolean; rule_id: string; rule_number: string; benchmark_id: string; benchmark_version: string; }>; }" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/schema/rules.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CSPM_POLICY_TEMPLATE", + "type": "string", + "tags": [], + "label": "CSPM_POLICY_TEMPLATE", + "description": [], + "signature": [ + "\"cspm\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspSetupStatus", + "type": "Type", + "tags": [], + "label": "CspSetupStatus", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cloud-security-posture-common", + "scope": "common", + "docId": "kibKbnCloudSecurityPostureCommonPluginApi", + "section": "def-common.BaseCspSetupStatus", + "text": "BaseCspSetupStatus" + } + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspStatusCode", + "type": "Type", + "tags": [], + "label": "CspStatusCode", + "description": [], + "signature": [ + "\"indexed\" | \"unprivileged\" | \"indexing\" | \"index-timeout\" | \"not-deployed\" | \"not-installed\" | \"waiting_for_results\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.IndexStatus", + "type": "Type", + "tags": [], + "label": "IndexStatus", + "description": [], + "signature": [ + "\"empty\" | \"not-empty\" | \"unprivileged\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.KSPM_POLICY_TEMPLATE", + "type": "string", + "tags": [], + "label": "KSPM_POLICY_TEMPLATE", + "description": [], + "signature": [ + "\"kspm\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.LATEST_FINDINGS_RETENTION_POLICY", + "type": "string", + "tags": [], + "label": "LATEST_FINDINGS_RETENTION_POLICY", + "description": [], + "signature": [ + "\"26h\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.MAX_FINDINGS_TO_LOAD", + "type": "number", + "tags": [], + "label": "MAX_FINDINGS_TO_LOAD", + "description": [], + "signature": [ + "500" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.STATUS_API_CURRENT_VERSION", + "type": "string", + "tags": [], + "label": "STATUS_API_CURRENT_VERSION", + "description": [], + "signature": [ + "\"1\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.STATUS_ROUTE_PATH", + "type": "string", + "tags": [], + "label": "STATUS_ROUTE_PATH", + "description": [], + "signature": [ + "\"/internal/cloud_security_posture/status\"" + ], + "path": "x-pack/packages/kbn-cloud-security-posture-common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx new file mode 100644 index 0000000000000..10c54c1447aa8 --- /dev/null +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnCloudSecurityPostureCommonPluginApi +slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common +title: "@kbn/cloud-security-posture-common" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/cloud-security-posture-common plugin +date: 2024-08-28 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] +--- +import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; + + + +Contact [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 45 | 0 | 45 | 0 | + +## Common + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 85f1b3317f0f0..62ed02d3c381b 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index ee54ac976c335..0c8788a384f3e 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index b284131e2e21a..faa1944b75ae4 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.devdocs.json b/api_docs/kbn_coloring.devdocs.json index 16719bc0c8a0e..a1d23178234a6 100644 --- a/api_docs/kbn_coloring.devdocs.json +++ b/api_docs/kbn_coloring.devdocs.json @@ -1297,6 +1297,41 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.getSpecialString", + "type": "Function", + "tags": [], + "label": "getSpecialString", + "description": [ + "\nReturns special string for sake of color mapping/syncing" + ], + "signature": [ + "(value: string) => string" + ], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.getSpecialString.$1", + "type": "string", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/color/rule_matching.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/coloring", "id": "def-common.getStepValue", @@ -1817,6 +1852,111 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.ColorMappingInputCategoricalData", + "type": "Interface", + "tags": [], + "label": "ColorMappingInputCategoricalData", + "description": [], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.ColorMappingInputCategoricalData.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"categories\"" + ], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.ColorMappingInputCategoricalData.categories", + "type": "Array", + "tags": [], + "label": "categories", + "description": [ + "an ORDERED array of categories rendered in the visualization" + ], + "signature": [ + "(string | string[])[]" + ], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.ColorMappingInputContinuousData", + "type": "Interface", + "tags": [], + "label": "ColorMappingInputContinuousData", + "description": [], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.ColorMappingInputContinuousData.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"ranges\"" + ], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.ColorMappingInputContinuousData.min", + "type": "number", + "tags": [], + "label": "min", + "description": [], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.ColorMappingInputContinuousData.max", + "type": "number", + "tags": [], + "label": "max", + "description": [], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/coloring", + "id": "def-common.ColorMappingInputContinuousData.bins", + "type": "number", + "tags": [], + "label": "bins", + "description": [], + "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/coloring", "id": "def-common.ColorMappingProps", @@ -1874,7 +2014,21 @@ "A data description of what needs to be colored" ], "signature": [ - "{ type: \"categories\"; categories: (string | string[])[]; } | { type: \"ranges\"; min: number; max: number; bins: number; }" + { + "pluginId": "@kbn/coloring", + "scope": "common", + "docId": "kibKbnColoringPluginApi", + "section": "def-common.ColorMappingInputCategoricalData", + "text": "ColorMappingInputCategoricalData" + }, + " | ", + { + "pluginId": "@kbn/coloring", + "scope": "common", + "docId": "kibKbnColoringPluginApi", + "section": "def-common.ColorMappingInputContinuousData", + "text": "ColorMappingInputContinuousData" + } ], "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", "deprecated": false, @@ -2790,7 +2944,21 @@ "\nA configuration object that is required to populate correctly the visible categories\nor the ranges in the CategoricalColorMapping component" ], "signature": [ - "{ type: \"categories\"; categories: (string | string[])[]; } | { type: \"ranges\"; min: number; max: number; bins: number; }" + { + "pluginId": "@kbn/coloring", + "scope": "common", + "docId": "kibKbnColoringPluginApi", + "section": "def-common.ColorMappingInputCategoricalData", + "text": "ColorMappingInputCategoricalData" + }, + " | ", + { + "pluginId": "@kbn/coloring", + "scope": "common", + "docId": "kibKbnColoringPluginApi", + "section": "def-common.ColorMappingInputContinuousData", + "text": "ColorMappingInputContinuousData" + } ], "path": "packages/kbn-coloring/src/shared_components/color_mapping/categorical_color_mapping.tsx", "deprecated": false, @@ -3686,10 +3854,10 @@ }, { "parentPluginId": "@kbn/coloring", - "id": "def-common.SPECIAL_TOKENS_STRING_CONVERTION", + "id": "def-common.SPECIAL_TOKENS_STRING_CONVERSION", "type": "Object", "tags": [], - "label": "SPECIAL_TOKENS_STRING_CONVERTION", + "label": "SPECIAL_TOKENS_STRING_CONVERSION", "description": [], "signature": [ "Map" diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index acd67820e9cbf..eb66728a27466 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 217 | 0 | 180 | 9 | +| 227 | 0 | 188 | 9 | ## Common diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 2fbfe5daa0121..23751f1965a81 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 8520b4bb8e954..1e4b15907da3f 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index ab0b8b39b7997..901bc860d5cf7 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 35107047deb46..62671abae5ab8 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 25b8de8994840..15c52f3c06369 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index a91bfa36b7375..ec24a2c668e05 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 6c125110686fe..f2b866913d784 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index c61ad339ebc0b..ad6b103873fa2 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 6999daa312b6d..5d7a5e6b667d8 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index 76046ecedaef1..9acb9721a2ea7 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index e37e79687ed42..debbdd550bdef 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 3681ee8831136..64618a4838360 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index 8da1564b81135..f8ffe314ab93f 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 4cb63afb92a40..2351ec22cc7e2 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 78f7eb84efd71..fadef02f4ccde 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index abbefe10b46a9..d170328b64b0a 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index 9b231d77175e5..8ced9f563d0f0 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index a45480f32cc93..b8b05bc6e6cc7 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 9ac1416eb37b8..95cd78b2ae7de 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 5bc9d9db9e7e8..69bd249d910c4 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 81748a4eaf9da..18a88e2a8fd38 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index 99e6f7ed95a38..d4276bf3cd40b 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index 4ff1b45d2732a..a34d9c3af2ee2 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 90369a003db04..d5cc5a16dd78d 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 8b18bdd944c3b..f6e69dba3ddd1 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index b80bddb5b128c..c5b2b2c6c10aa 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 0c2868074529e..cbee46a3e00d3 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index b235d092cd2bd..a5b484780c408 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 64dfef98a4f3e..96f70839a1a8e 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index 86ec2b57b7b67..d6aeb02f3a9ea 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 4f2e8d28523ff..ecdbe0a8a97b9 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 52767b383d9c8..b858fbc32c251 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 6b5767a496834..c7384cdde37b0 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 6c0a063c27065..f7a56267feff8 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index a1419417c6872..f175b99844757 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 54eac3381fa00..c6aff68efc4bf 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index caa80ce744939..551f13ffe589b 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 82991cfd78825..d0275aff929cb 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index 850127c0c6951..25a536421f593 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 4a7a8dd051701..92be11ce0d9dd 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index b3271d594ffe6..6b615965140c1 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index 300f618e11429..dd39797af0fe1 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index 343244e747a0b..ec55701cc8320 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 4423046fa5028..7a23d03de9c64 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index 4dd709e997aaf..684cda6b45772 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index af8c1e840fe65..91cd495540d8d 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index f970fd5519df1..d16cbfb4f9cef 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index 5bc6fab00131a..6112b74587ea8 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index f34c100d033d2..65800834b7f79 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 8efa9cc15b783..b6957c01d34d0 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index bd58da2512681..7d96305a8f5bf 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index fd91a5d75ddcf..f43997f0850d9 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index b3952c730cbd7..bf99f2c0d51b8 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index 4dc289ee83060..eafad11cc83e5 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index a45de1f50f75c..3357cbaf9f988 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 25e1837f73ebe..0c66904878682 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index 7dcb66bdfb339..14a7a3ffe8ffa 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index f0873aeae9a46..34fcaff619ff4 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index 5ffef6d967286..27cc50177e1df 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 1210c31594e05..81edbcc14d5eb 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index 47b6947eaa2c9..cfcd48173846d 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index fc49467aa290c..b25665a358f93 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 1ea2637231f60..a4c1281764377 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index 6615011e3671e..018111bdbeec5 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index 8e08648a5df1e..dfce0734fc32c 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 43f43eb6e7c92..2e16db121bf9c 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 0756d85c34738..7159ffb2b590d 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 1af4fbadbb98b..badd2648e2737 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 3537972f3b5b9..f0896078c197c 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index f6018a8997841..530318b669614 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index 98c5b513b4ad7..74854dd8be46e 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index ebbe78fb88e75..20833b44877f0 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 12684496d21aa..aa38aafffd78b 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index b67b829b28626..7a5463bc654ee 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index 2856c722ac306..e05a0d767aab1 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index 877056537d0e1..d24999c5e06c4 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 40305d4076732..370f456d1ef4d 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index 72f125b8ea29d..be8f171967154 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index ed5ca78ddc8e8..cf2672ba84ed2 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index e5947d81fd6c6..418dea7be93b6 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index 1f8db0d8a5648..a8558849d2124 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 87de6afc3b871..14ea14ec33ba3 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index 0ff64e5fb2d77..ffdbc1cb5a46a 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 8e5138f237f33..ee12ebb0eb77c 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -3506,6 +3506,18 @@ "plugin": "usageCollection", "path": "src/plugins/usage_collection/server/routes/stats/stats.ts" }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/routes/health.ts" + }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/routes/background_task_utilization.ts" + }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/routes/metrics.ts" + }, { "plugin": "licensing", "path": "x-pack/plugins/licensing/server/routes/info.ts" @@ -3550,18 +3562,6 @@ "plugin": "spaces", "path": "x-pack/plugins/spaces/server/routes/api/internal/get_content_summary.ts" }, - { - "plugin": "taskManager", - "path": "x-pack/plugins/task_manager/server/routes/health.ts" - }, - { - "plugin": "taskManager", - "path": "x-pack/plugins/task_manager/server/routes/background_task_utilization.ts" - }, - { - "plugin": "taskManager", - "path": "x-pack/plugins/task_manager/server/routes/metrics.ts" - }, { "plugin": "security", "path": "x-pack/plugins/security/server/routes/api_keys/enabled.ts" @@ -16176,6 +16176,10 @@ "plugin": "integrationAssistant", "path": "x-pack/plugins/integration_assistant/server/routes/pipeline_routes.ts" }, + { + "plugin": "integrationAssistant", + "path": "x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts" + }, { "plugin": "lists", "path": "x-pack/plugins/lists/server/routes/create_endpoint_list_item_route.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 55da7f47659f9..1ab540db53133 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index c5bac179c2545..6e3426b9afaec 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 334266aa40623..bad8c03b5fa44 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 219e972879623..792de43642544 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index 410e09d20f712..79270343d061c 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index e842d03d48211..9e5c988cb7f50 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index 1f1016f813882..4dd628e1e5b57 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index b4f5d3f18ba56..0107a156f9e6e 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index b331240f986c8..8287f47530d1c 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index 4abfafaac0fa8..e21a74a1ddfe0 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 3d16fb52525e7..b4fce5aad0e41 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 2ac6ec6eec448..9c98f40a98cd3 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 18faa4d7ee048..95271a5c086d4 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index 4c178de68c5eb..37f2666a44707 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index d1274781df178..1931130826a60 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 42ef59d4e8fe9..6e8e8642252be 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 77b4a8b95e19e..406edf672dce4 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 2cc392c023c13..f029973afd55b 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 8ab79b655f46a..3efcdea2d87d5 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index 5a7b43608a23d..80c1e7654b05b 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index 256b5c47368e7..dc5818edcd5bb 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index 53b94f64191be..41efb9f3d3a76 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index aed7cfbfdc30e..bd38cd17ab9a5 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index d6b34efb368a3..82095bc095b67 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index a14d996e88b08..d6dbc2971be62 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index 4424eec6d6d88..48e0dac8b4476 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 38e3dec36efdf..d614a588d382d 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 7ba63fc4e4015..5bcc9d4855eea 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 1d768b6e2654d..c496e437ddd65 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index dd6fa5f7be57e..b3ee49e96ec2f 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index d74667afb522d..a3428555aa936 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 64fd700def2a2..a854d85a867c4 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 4134abee4f1ef..da9425adf1225 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index ac0db52af91fa..3a325e1c71072 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index b890ce90ed3a0..9fc84b65ede4f 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 8dd9ac49ed57c..f0bdb14aeb912 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 3890cf2b4f21f..6955802612659 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index cecf2378392fb..57faa07885c9b 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index d26af5c3ff7fb..692bb2c15fac8 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index a4268ddcaf062..77dd91fbbf0ce 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index f8c9730625e84..7c72b16ca068a 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index cd0e0b68a49dc..d2ded3b722ac9 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 26ebc2421a387..af404bd221e93 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 25a90fdc8d227..997a326429ff9 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 4ff5c77ce916e..b46fba7edecde 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index ca449f755492b..5165aaf21edab 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index fc30ca847bfd4..dac44ca6f75d9 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index ec1da87fb3620..198bfbbe24fa6 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index e9b0377c3c715..f317acd39957d 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index ccc6a504fb80e..21a5ddd714a57 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index d02f91af0efc3..9ca4a2de768ce 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index d6de68dec8b87..a0a75df94966f 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index e925f5c58a09d..cd14eaf5026e5 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index bb5cdd9673a52..fb5fdb17d80e8 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index 859044161ee5d..b72be56ff0060 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.devdocs.json b/api_docs/kbn_core_saved_objects_common.devdocs.json index 12f98a813006b..aaef3b4e30c50 100644 --- a/api_docs/kbn_core_saved_objects_common.devdocs.json +++ b/api_docs/kbn_core_saved_objects_common.devdocs.json @@ -2004,19 +2004,19 @@ }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/utils.ts" + "path": "x-pack/plugins/lens/public/datasources/form_based/loader.ts" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/utils.ts" + "path": "x-pack/plugins/lens/public/datasources/form_based/loader.ts" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/utils.ts" + "path": "x-pack/plugins/lens/public/datasources/form_based/loader.ts" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/utils.ts" + "path": "x-pack/plugins/lens/public/datasources/form_based/loader.ts" }, { "plugin": "lens", @@ -2024,35 +2024,35 @@ }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/datasources/form_based/loader.ts" + "path": "x-pack/plugins/lens/public/datasources/form_based/form_based.tsx" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/datasources/form_based/loader.ts" + "path": "x-pack/plugins/lens/public/datasources/form_based/form_based.tsx" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/datasources/form_based/loader.ts" + "path": "x-pack/plugins/lens/public/datasources/form_based/form_based.tsx" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/datasources/form_based/loader.ts" + "path": "x-pack/plugins/lens/public/datasources/form_based/form_based.tsx" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/datasources/form_based/form_based.tsx" + "path": "x-pack/plugins/lens/public/utils.ts" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/datasources/form_based/form_based.tsx" + "path": "x-pack/plugins/lens/public/utils.ts" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/datasources/form_based/form_based.tsx" + "path": "x-pack/plugins/lens/public/utils.ts" }, { "plugin": "lens", - "path": "x-pack/plugins/lens/public/datasources/form_based/form_based.tsx" + "path": "x-pack/plugins/lens/public/utils.ts" }, { "plugin": "lens", diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index f11258261cb8d..b1380792df973 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index b18c1ef66575a..aa88cbc634c2d 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index a6287689c0aa9..97673afabbad8 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 601ada984a49f..b3b6e12ba7b14 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index a84384a614463..5f579232e2d39 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.devdocs.json b/api_docs/kbn_core_saved_objects_server.devdocs.json index e4e1ef0784aeb..9ebfadee68a64 100644 --- a/api_docs/kbn_core_saved_objects_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server.devdocs.json @@ -10594,16 +10594,16 @@ "path": "packages/core/usage-data/core-usage-data-server-internal/src/saved_objects/core_usage_stats.ts" }, { - "plugin": "spaces", - "path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts" + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/saved_objects/index.ts" }, { "plugin": "spaces", "path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts" }, { - "plugin": "taskManager", - "path": "x-pack/plugins/task_manager/server/saved_objects/index.ts" + "plugin": "spaces", + "path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts" }, { "plugin": "actions", diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 623d97858eee7..7653479ad1ecb 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index ecd587fa487bb..e425bfa55ac34 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 6500015899b6c..e2fb3ec740594 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index 7fb5702fe6d79..88b6f36cc6946 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 0c27a8397688a..2a3aebc435581 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 8bc3c7ed935e8..cc26fd8c73631 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 0d58383363544..3297057acc7c7 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index c70b857db551a..543524b63305d 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 45100b7f7459d..584f329b21ec4 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 4b74c9a28a5d9..9472c1f24457b 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index fddd1940b8528..bf264bdc7e0e6 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 1add8c563cd14..d172e33dcafe2 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index 977a119ee22dd..288a424afa3f8 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index f14a21281cd55..6f68ff77ea38f 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 7f933cef04d0f..ce320e5f20d56 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index 0e1040e88f886..c992a9c235b41 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 3c230369dabc6..2da48e25be7cf 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index d548b5b3f6950..c0e734d159b5f 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 5864ba9c263ef..45292df02aca0 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 310c13b531f52..b6c4739e27ad8 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index 9ad53365f8f8f..1a4deebdb378f 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 480af28046991..224723cdcbb6c 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 89401bbaf4f88..3cc640b4c08eb 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index c2dc85da0bc2a..9099b3d43e893 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index a4daf6a03b792..a5d2a8ec33bbd 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 2fb4050563b21..d17aebd70db2b 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 8fe61a5fd852d..9485653394f53 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 8ac665cc00b13..1b969d568a59a 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index b960f54080fa8..5597c2c209f6b 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index 0909823486fd3..20c024e2febd2 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index d45fa251ca54a..29a179c899e31 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index abc774274415d..662bf78ad8465 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index bc200cc7e5a5a..f0f322c51d730 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 2eb282d66a231..3d5f8fa2fcaf8 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index f3b23040adfa2..654726bd50325 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 3dbf7eadf3636..2336420fa4dad 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 19f9c984b80a0..7951a3ae07da1 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index ff4289de5ba4c..9193181fad1af 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index 5e94d232e6e0a..b0b5242c25ec9 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 243cce4ec3906..6ae08b4be8463 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 2afc049d4af3a..4b7b54ea394de 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 2a99a186eb1e2..8a3a8025000eb 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 1e21317615285..764276d27b8db 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index feca7186f57ab..39d96d1757ba9 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 2727940f5d96a..ed996e09acc1a 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 7effa5043c39e..9e2004b524340 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 1d813af16a080..416223d95dff9 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index f5cf1e2c93a31..1951970a4e600 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 3a34ca782dbd0..b2cdf90117c4d 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 9b8a9c6d92707..7545675daa5d1 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index ea492b42c41c9..d977297f068dd 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index eb5f327efbba4..397ca58e9b5e1 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index b3dee69a77a3c..cd49dfc2bbbf1 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index b2cc0651c36fd..7ec3a5111d5e2 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index 8f87c878d9210..7650db8eced29 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 36a785292f177..53e10c7ad8b6a 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 403e1f990da63..04273d2e74009 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index 3daff33862051..e910162389382 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.devdocs.json b/api_docs/kbn_deeplinks_observability.devdocs.json index 7379ba1cbcfca..8f071974422c8 100644 --- a/api_docs/kbn_deeplinks_observability.devdocs.json +++ b/api_docs/kbn_deeplinks_observability.devdocs.json @@ -22,18 +22,18 @@ "interfaces": [ { "parentPluginId": "@kbn/deeplinks-observability", - "id": "def-common.DataQualityLocatorParams", + "id": "def-common.DataQualityDetailsLocatorParams", "type": "Interface", "tags": [], - "label": "DataQualityLocatorParams", + "label": "DataQualityDetailsLocatorParams", "description": [], "signature": [ { "pluginId": "@kbn/deeplinks-observability", "scope": "common", "docId": "kibKbnDeeplinksObservabilityPluginApi", - "section": "def-common.DataQualityLocatorParams", - "text": "DataQualityLocatorParams" + "section": "def-common.DataQualityDetailsLocatorParams", + "text": "DataQualityDetailsLocatorParams" }, " extends ", { @@ -44,33 +44,103 @@ "text": "SerializableRecord" } ], - "path": "packages/deeplinks/observability/locators/dataset_quality.ts", + "path": "packages/deeplinks/observability/locators/dataset_quality_details.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/deeplinks-observability", - "id": "def-common.DataQualityLocatorParams.filters", + "id": "def-common.DataQualityDetailsLocatorParams.dataStream", + "type": "string", + "tags": [], + "label": "dataStream", + "description": [], + "path": "packages/deeplinks/observability/locators/dataset_quality_details.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/deeplinks-observability", + "id": "def-common.DataQualityDetailsLocatorParams.timeRange", "type": "Object", "tags": [], - "label": "filters", + "label": "timeRange", "description": [], "signature": [ - "Filters | undefined" + "TimeRangeConfig | undefined" ], - "path": "packages/deeplinks/observability/locators/dataset_quality.ts", + "path": "packages/deeplinks/observability/locators/dataset_quality_details.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/deeplinks-observability", - "id": "def-common.DataQualityLocatorParams.flyout", + "id": "def-common.DataQualityDetailsLocatorParams.breakdownField", + "type": "string", + "tags": [], + "label": "breakdownField", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/deeplinks/observability/locators/dataset_quality_details.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/deeplinks-observability", + "id": "def-common.DataQualityDetailsLocatorParams.degradedFields", "type": "Object", "tags": [], - "label": "flyout", + "label": "degradedFields", "description": [], "signature": [ - "{ dataset: DatasetConfig; } | undefined" + "{ table?: DegradedFieldsTable | undefined; } | undefined" + ], + "path": "packages/deeplinks/observability/locators/dataset_quality_details.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/deeplinks-observability", + "id": "def-common.DataQualityLocatorParams", + "type": "Interface", + "tags": [], + "label": "DataQualityLocatorParams", + "description": [], + "signature": [ + { + "pluginId": "@kbn/deeplinks-observability", + "scope": "common", + "docId": "kibKbnDeeplinksObservabilityPluginApi", + "section": "def-common.DataQualityLocatorParams", + "text": "DataQualityLocatorParams" + }, + " extends ", + { + "pluginId": "@kbn/utility-types", + "scope": "common", + "docId": "kibKbnUtilityTypesPluginApi", + "section": "def-common.SerializableRecord", + "text": "SerializableRecord" + } + ], + "path": "packages/deeplinks/observability/locators/dataset_quality.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/deeplinks-observability", + "id": "def-common.DataQualityLocatorParams.filters", + "type": "Object", + "tags": [], + "label": "filters", + "description": [], + "signature": [ + "Filters | undefined" ], "path": "packages/deeplinks/observability/locators/dataset_quality.ts", "deprecated": false, @@ -766,6 +836,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/deeplinks-observability", + "id": "def-common.DATA_QUALITY_DETAILS_LOCATOR_ID", + "type": "string", + "tags": [], + "label": "DATA_QUALITY_DETAILS_LOCATOR_ID", + "description": [], + "signature": [ + "\"DATA_QUALITY_DETAILS_LOCATOR\"" + ], + "path": "packages/deeplinks/observability/locators/dataset_quality_details.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/deeplinks-observability", "id": "def-common.DATA_QUALITY_LOCATOR_ID", diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index 8b1f3f5648581..fbcccee7c5578 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 56 | 0 | 44 | 0 | +| 61 | 0 | 49 | 0 | ## Common diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index be9ae071f666a..2f28908786484 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 07313929d2152..781756df9673a 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 98f500d49629e..51a32ec8b9f9b 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 0046e85e69576..8ccd219a8d75c 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index e163e5e835c3c..168b999260a3e 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index db8e105b37cf5..33fbe27177d4f 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index e129fa1a192da..62c60440adc52 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index c832a66dda064..b475ba870854b 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 9d17daf67d863..d18a98a759d93 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 064fdc1dba74d..3d6a525ce7811 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 5a25941f17f75..42ad7434be3b3 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index 6fdce1d53b5e2..1e985acf20643 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -817,6 +817,68 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getFieldValue", + "type": "Function", + "tags": [], + "label": "getFieldValue", + "description": [], + "signature": [ + "(record: ", + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableRecord", + "text": "DataTableRecord" + }, + ", field: string) => any" + ], + "path": "packages/kbn-discover-utils/src/utils/get_field_value.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getFieldValue.$1", + "type": "Object", + "tags": [], + "label": "record", + "description": [], + "signature": [ + { + "pluginId": "@kbn/discover-utils", + "scope": "common", + "docId": "kibKbnDiscoverUtilsPluginApi", + "section": "def-common.DataTableRecord", + "text": "DataTableRecord" + } + ], + "path": "packages/kbn-discover-utils/src/utils/get_field_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/discover-utils", + "id": "def-common.getFieldValue.$2", + "type": "string", + "tags": [], + "label": "field", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-discover-utils/src/utils/get_field_value.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.getIgnoredReason", diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index e9e7da44ba4f7..92d0ab87171df 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 133 | 0 | 106 | 1 | +| 136 | 0 | 109 | 1 | ## Common diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 727523f24632e..e556d035ffccf 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index af9b82a99ccca..c7a6c2354032e 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index c37c010bc0f0b..9e18a8b293bd6 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 78bb449ad9c28..0a4a2b0f68df2 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 116ac314da649..0ee7b804eccd6 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index ecb8be31b9bb9..e562d4ef205bd 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 7b70f3b376749..20c093d04b03f 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 7af819c876f97..8e3c9ddee6d9a 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 92dc7af7432dc..b89d5148b988b 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index f59d42a818657..245ea9bf73a0e 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index a85cb56faac7e..86e8b70002c49 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 66b96f0831e53..e1d296b7125c3 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 39290298bbf43..30af1ba231576 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 7defc402c73ae..4c30b942444ec 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 4682902de18c0..22c59b964d8a6 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 37f59971731b8..36beadace825e 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index ceff3fc8ccc09..7fa5810114eb6 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index 64858bc5fa7f7..11b9a155e213d 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -3193,7 +3193,7 @@ "label": "type", "description": [], "signature": [ - "\"boolean\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\" | \"date_nanos\" | \"version\" | \"integer\" | \"long\" | \"double\" | \"unsigned_long\" | \"cartesian_point\" | \"cartesian_shape\" | \"counter_integer\" | \"counter_long\" | \"counter_double\" | \"unsupported\"" + "\"boolean\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\" | \"date_nanos\" | \"version\" | \"integer\" | \"long\" | \"double\" | \"unsigned_long\" | \"unsupported\" | \"cartesian_point\" | \"cartesian_shape\" | \"counter_integer\" | \"counter_long\" | \"counter_double\"" ], "path": "packages/kbn-esql-validation-autocomplete/src/validation/types.ts", "deprecated": false, diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 2ac95c4c555f1..4971ec6172e76 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index efac234b0c359..7bfe45b1a9535 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index c6d229e10c886..854949d74dfa2 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.devdocs.json b/api_docs/kbn_expandable_flyout.devdocs.json index 88d40c2acec00..79c990355a921 100644 --- a/api_docs/kbn_expandable_flyout.devdocs.json +++ b/api_docs/kbn_expandable_flyout.devdocs.json @@ -140,6 +140,57 @@ "children": [], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/expandable-flyout", + "id": "def-public.withExpandableFlyoutProvider", + "type": "Function", + "tags": [], + "label": "withExpandableFlyoutProvider", + "description": [], + "signature": [ + "(Component: React.ComponentType, expandableProviderProps?: ", + "ExpandableFlyoutContextProviderProps", + " | undefined) => (props: Props) => JSX.Element" + ], + "path": "packages/kbn-expandable-flyout/src/with_provider.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/expandable-flyout", + "id": "def-public.withExpandableFlyoutProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "Component", + "description": [], + "signature": [ + "React.ComponentType" + ], + "path": "packages/kbn-expandable-flyout/src/with_provider.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/expandable-flyout", + "id": "def-public.withExpandableFlyoutProvider.$2", + "type": "Object", + "tags": [], + "label": "expandableProviderProps", + "description": [], + "signature": [ + "ExpandableFlyoutContextProviderProps", + " | undefined" + ], + "path": "packages/kbn-expandable-flyout/src/with_provider.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 3b3bc618408ac..9b62929ad6548 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-threat-hunting-investigations](https://github.com/org | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 39 | 0 | 14 | 1 | +| 42 | 0 | 17 | 2 | ## Client diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 6f95154559c0f..5c1883bbac54e 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 840b94c6099f2..94f9fc46a637b 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index c6792527501e6..b2ce9bbaec8c2 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 975f0d8b3d26c..42a98d9c2eb22 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 9c4ce7cd1354f..4272125d080fb 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index cfebddd016b50..dfd28c9c395ad 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index b2e6edad7e89d..59c49ff53845e 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index c6d1d68f7a327..afafdb650f309 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index 1464998937fe7..ed72548c5bf7b 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index d0c7b1be21c63..e2f8c291f1d1b 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index e7e86425d091f..c2c45ba88a575 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 84fda653e2328..58df0ed970eb1 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index f94a968bc8644..0a1b39f4a0c60 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 43784a2c1d056..65c871a13d134 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 79395e0977fd1..efd824d1811f8 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 0ee681a28e023..3d3305b11f6af 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 42732c51a4ffb..83a2889828c12 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 28004f413df58..c7ca6f32453b2 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index a48990ffc2fa5..5f0b7eb29c69f 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index d139435df3ccf..bb7124a658f55 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index b09f55a9e5f97..c87426cbfa4d4 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index f8aca0a66b844..32e76aaf49895 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 7163a7ed32568..d2ec413ca47f7 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index 1fc1c9353910c..7eb1d0ce6bc67 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index ac1933bb3dd1b..bc725fc8ba945 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index d0f6f93a36eac..b6b728142c185 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 8cec6e84ef1ba..3644c047e8d7a 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index df2e9c7a23301..0c9f7549fb4f4 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 1d5b84f2a194e..bc842d5b5931e 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index 7d3fafdc2db73..49282c5befd30 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 79935fd0d6a0f..9d437d6b3d236 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index fe033bedeb821..dff948d56b4b8 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index d0946f8d0e8ac..7ad27185d0640 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index d8aef714d9841..2437576a6d4e3 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 7a747c70900fa..ac963e9749806 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index e486986a1d1b1..d4c2ad797da0d 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 6df141252cea5..dafd29a97ea2b 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 1068a46bdf200..e8672860dce40 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index a86b9da564a60..25857ead0fad2 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 482a1affe0697..4474c7101f61d 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index b8b07cc1545ad..42e4b918c52b8 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 8c96d2c16a813..f2e8353db741a 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index 154e4bc028289..39ea4c5a1e312 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 32813dd411a99..07bd3d35ce99e 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 33e21f4205d2f..ee8e2262ca80d 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index ad0c52760082f..096ea02ad9ebb 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 980f56f1f6bb2..7a7c86fcb6fdd 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index e4bd5c7f40094..e6c29dacc4fcf 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 89444186dd490..f56ca9d3c561c 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 6fa1f251b0fc7..54264135d310c 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 7f6fab807b5f6..d81421aba1281 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 5baf3af31bdb0..564e59112f0ee 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index caf901e9b2adf..a091fdb7e41e0 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 0788af076a72c..cbe1e1c0af1ab 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 37b3106e80804..5d3a83e5563e6 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index 84d5d09e14d3b..df71ebb892bd6 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 21643d9c482c1..32536b3792a71 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 8e5cbb35a5dbc..6c98a8c60d713 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 55b4bc658e837..a3fec03d57387 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index bbaf79051310f..04a12e7eb6f3a 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index d199168f0da7d..fd0fbcd3359f5 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index e48ca364a2e2d..7f1420777a610 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index 91f4f290961ad..0b7322aa6957a 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index a28085aa353b4..be2652de764d4 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index af6d69d9c079c..728e505bf033f 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index b62cc5822b671..3248f4218d496 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 422e5c60201a6..bbe6ab71bb25f 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index cc204d9d961ec..5a9b9911c0a97 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 85197b205df74..9a7e9107eccd1 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index a431ba883a067..58e2c8ccfeb4f 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 6e1b48a2118d9..726077f8bf453 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index def110412a8da..ddd9855680645 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 52b74aed2dcf2..92fce1f01b0bc 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index ef36e23dff982..dec7fa04f8c2b 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index cb20c7911f56e..fc061e53cebff 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index a442b83f178de..1e46208acf9b0 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 58bf4daeca916..f174c04706f87 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 411ec82b9b901..a511bfb4b9557 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index ea636c6b29a2a..0e1acddb2d491 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 71c861ce26287..2d0c5758996ed 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 952cea5ca675a..467256380277a 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 5a9b39313757f..e53829eda2611 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 22424f19ffeec..8245c9b225fb0 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index a7f3bfdfc78de..46d1df2d60a85 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 45b4e9439fab2..86127b23e01a1 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 8765cfb145649..1cd9c498f10b0 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 49b07d4e68f06..9d00620e54806 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 310ce0e970f3e..daa593a6bc8f0 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index ca28901736540..d9a8a1ed81360 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 8374769babe61..c5dd4ebf331d7 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index c623a747d1f92..49655964b09e0 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 561225ef84ba3..fefad63e9500e 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index d5f9db4ad3c1f..22eb106ebce83 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 01125bfede9ef..9677d7c4e0b6a 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 8452e5b00c94b..c03e59f82e7e3 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index fb46a0911997f..de188dc6f5e75 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 09aca35c8c683..5e4d0a1550ed6 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 6cdbb1935fb7f..a646cbae1bc14 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 437c50eb2858e..14c46d779abbd 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 5d9f7f858bf04..7d4ea6b3dc3d3 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index c5f428f42e982..696c51f91898e 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index b86335808cbff..1a75de8247a40 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 99051444ed653..ddb1ee3b0da95 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index a85b1ebcff194..425a712fa40eb 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 445f551fc2abd..116f7ed6726be 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 0ae9eb3256543..db0b8503c182e 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 115d877788967..15cc1d688931e 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 9efcf620e87fc..49c4f5567a09b 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index acc96f83709d1..fb1c13fd4fd5f 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 8844145592be1..19fe57c20e901 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 7b82fde6b2d1a..bf7572451ec18 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index 31c062c852f83..4841acebe063b 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 87aba75095c4d..f7e6d41c4c335 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 007843217d3cc..efa822fe2219f 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index e9a64666f306e..76b2ecfcd4511 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.devdocs.json b/api_docs/kbn_reporting_export_types_csv.devdocs.json index 42fd45ce66450..8fe9f3243962b 100644 --- a/api_docs/kbn_reporting_export_types_csv.devdocs.json +++ b/api_docs/kbn_reporting_export_types_csv.devdocs.json @@ -168,7 +168,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -176,7 +176,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -192,7 +192,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -200,7 +200,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/csv/csv_searchsource.ts", "deprecated": false, @@ -569,7 +569,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -577,7 +577,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -593,7 +593,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -601,7 +601,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/csv/csv_searchsource_immediate.ts", "deprecated": false, @@ -917,7 +917,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -925,7 +925,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -941,7 +941,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -949,7 +949,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/csv/csv_v2.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index ef16397fb63c5..e75f689adbce9 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 84bf57f43d8f9..00b23ddc218d5 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.devdocs.json b/api_docs/kbn_reporting_export_types_pdf.devdocs.json index 3a4986f51971f..b6c461c57acfa 100644 --- a/api_docs/kbn_reporting_export_types_pdf.devdocs.json +++ b/api_docs/kbn_reporting_export_types_pdf.devdocs.json @@ -176,7 +176,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -184,7 +184,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -200,7 +200,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -208,7 +208,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/pdf/printable_pdf_v2.ts", "deprecated": false, @@ -597,7 +597,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -605,7 +605,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -621,7 +621,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -629,7 +629,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/pdf/printable_pdf.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 7ffb4afa20566..2a38a2be017d2 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 13c7b558aecc9..336b6850b9a6e 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.devdocs.json b/api_docs/kbn_reporting_export_types_png.devdocs.json index aba2f914b2974..f8c2e8f045ec2 100644 --- a/api_docs/kbn_reporting_export_types_png.devdocs.json +++ b/api_docs/kbn_reporting_export_types_png.devdocs.json @@ -176,7 +176,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -184,7 +184,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -200,7 +200,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -208,7 +208,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/png/png_v2.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index c7df4f2a35bda..069b3011f9c28 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 439f54983a057..446047b2edd80 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.devdocs.json b/api_docs/kbn_reporting_mocks_server.devdocs.json index 008248db99552..e347bc511219a 100644 --- a/api_docs/kbn_reporting_mocks_server.devdocs.json +++ b/api_docs/kbn_reporting_mocks_server.devdocs.json @@ -29,7 +29,7 @@ "signature": [ "(overrides?: ", "_DeepPartialObject", - "; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -37,7 +37,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>) => Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>) => Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -45,7 +45,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" ], "path": "packages/kbn-reporting/mocks_server/index.ts", "deprecated": false, @@ -60,7 +60,7 @@ "description": [], "signature": [ "_DeepPartialObject", - "; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -68,7 +68,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" ], "path": "packages/kbn-reporting/mocks_server/index.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 527ef257e206f..4bcb450459413 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index b0740c1f0780f..d2de17e88adaf 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.devdocs.json b/api_docs/kbn_reporting_server.devdocs.json index e9786a2dc0459..ecd948e6f0478 100644 --- a/api_docs/kbn_reporting_server.devdocs.json +++ b/api_docs/kbn_reporting_server.devdocs.json @@ -416,7 +416,7 @@ "label": "config", "description": [], "signature": [ - "Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -424,7 +424,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" ], "path": "packages/kbn-reporting/server/export_type.ts", "deprecated": false, @@ -467,7 +467,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -475,7 +475,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" ], "path": "packages/kbn-reporting/server/export_type.ts", "deprecated": false, @@ -949,7 +949,7 @@ "label": "getFullRedirectAppUrl", "description": [], "signature": [ - "(config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "(config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -957,7 +957,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, serverInfo: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, serverInfo: ", "ReportingServerInfo", ", spaceId: string | undefined, forceNow: string | undefined) => string" ], @@ -973,7 +973,7 @@ "label": "config", "description": [], "signature": [ - "Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -981,7 +981,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" ], "path": "packages/kbn-reporting/server/get_full_redirect_app_url.ts", "deprecated": false, @@ -1661,7 +1661,7 @@ "label": "ReportingConfigType", "description": [], "signature": [ - "{ readonly encryptionKey?: string | undefined; readonly enabled: boolean; readonly capture: Readonly<{} & { maxAttempts: number; }>; readonly roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; readonly kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; readonly queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; readonly csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", + "{ readonly encryptionKey?: string | undefined; readonly enabled: boolean; readonly csv: Readonly<{} & { scroll: Readonly<{} & { duration: string; size: number; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; enablePanelActionDownload: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -1669,7 +1669,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; readonly poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; readonly export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; readonly statefulSettings: Readonly<{} & { enabled: boolean; }>; }" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; readonly capture: Readonly<{} & { maxAttempts: number; }>; readonly roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; readonly kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; readonly queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; readonly poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; readonly export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; readonly statefulSettings: Readonly<{} & { enabled: boolean; }>; }" ], "path": "packages/kbn-reporting/server/types.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 04ab2e2a811e6..749622b7c9813 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 6f0c3bb8d8142..01f636db753af 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index a52fa8da91fcc..879eba9c1caf0 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index e46de85c77888..9f4fc1d369293 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 60b97a50a443a..a5bb28db8146f 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index d3f48e8d7d757..8de6dc083b628 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 4ecb903b21904..c94c86a32115c 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index e5b9399563b7b..35646980aa812 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 49957d43bb9f5..0256d43f04337 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 7bfc27355d592..3463fa6f1f56c 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index a01abd70ab52a..a7d58f69236c9 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 652436cc2dc9d..51d4960797a15 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 22640dd1b1273..cadd97e362ac5 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 573a1a2d7198c..1a8fd3247af3f 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 2c623dd2691c8..7247729be7e97 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index f33aed11984d7..a41342bccd72a 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 4ac282e8ebca1..d86973669c29f 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index f6189b9954646..a0b6107bce761 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 593238d47cb2c..2543ce0b567d7 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index d8387aec6dcb2..696dc86bd2146 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 02b95af23522a..9fe7388164be0 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index 998678024f3fd..ba3ac531fdbec 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.devdocs.json b/api_docs/kbn_security_plugin_types_public.devdocs.json index 03955b2029ad2..3dee61c995c96 100644 --- a/api_docs/kbn_security_plugin_types_public.devdocs.json +++ b/api_docs/kbn_security_plugin_types_public.devdocs.json @@ -1,7 +1,76 @@ { "id": "@kbn/security-plugin-types-public", "client": { - "classes": [], + "classes": [ + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.PrivilegesAPIClientPublicContract", + "type": "Class", + "tags": [], + "label": "PrivilegesAPIClientPublicContract", + "description": [], + "path": "x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.PrivilegesAPIClientPublicContract.getAll", + "type": "Function", + "tags": [], + "label": "getAll", + "description": [], + "signature": [ + "(args: ", + { + "pluginId": "@kbn/security-plugin-types-public", + "scope": "public", + "docId": "kibKbnSecurityPluginTypesPublicPluginApi", + "section": "def-public.PrivilegesAPIClientGetAllArgs", + "text": "PrivilegesAPIClientGetAllArgs" + }, + ") => Promise<", + { + "pluginId": "@kbn/security-authorization-core", + "scope": "server", + "docId": "kibKbnSecurityAuthorizationCorePluginApi", + "section": "def-server.RawKibanaPrivileges", + "text": "RawKibanaPrivileges" + }, + ">" + ], + "path": "x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.PrivilegesAPIClientPublicContract.getAll.$1", + "type": "Object", + "tags": [], + "label": "args", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-plugin-types-public", + "scope": "public", + "docId": "kibKbnSecurityPluginTypesPublicPluginApi", + "section": "def-public.PrivilegesAPIClientGetAllArgs", + "text": "PrivilegesAPIClientGetAllArgs" + } + ], + "path": "x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], "functions": [], "interfaces": [ { @@ -112,6 +181,28 @@ "path": "x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.AuthorizationServiceSetup.privileges", + "type": "Object", + "tags": [], + "label": "privileges", + "description": [ + "\nA set of methods to work with Kibana role privileges" + ], + "signature": [ + { + "pluginId": "@kbn/security-plugin-types-public", + "scope": "public", + "docId": "kibKbnSecurityPluginTypesPublicPluginApi", + "section": "def-public.PrivilegesAPIClientPublicContract", + "text": "PrivilegesAPIClientPublicContract" + } + ], + "path": "x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -187,6 +278,42 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.PrivilegesAPIClientGetAllArgs", + "type": "Interface", + "tags": [], + "label": "PrivilegesAPIClientGetAllArgs", + "description": [], + "path": "x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.PrivilegesAPIClientGetAllArgs.includeActions", + "type": "boolean", + "tags": [], + "label": "includeActions", + "description": [], + "path": "x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-plugin-types-public", + "id": "def-public.PrivilegesAPIClientGetAllArgs.respectLicenseLevel", + "type": "boolean", + "tags": [], + "label": "respectLicenseLevel", + "description": [], + "path": "x-pack/packages/security/plugin_types_public/src/privileges/privileges_api_client.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/security-plugin-types-public", "id": "def-public.RolePutPayload", diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 07ec6782f80ed..6a241f764216f 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; @@ -21,10 +21,13 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 51 | 0 | 25 | 0 | +| 58 | 0 | 31 | 0 | ## Client +### Classes + + ### Interfaces diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index a06bff9ce2b9e..29a3d250e1be8 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index f71acbae2bc64..e89f82becfc8f 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_common.devdocs.json b/api_docs/kbn_security_solution_common.devdocs.json new file mode 100644 index 0000000000000..18ebfccd424ad --- /dev/null +++ b/api_docs/kbn_security_solution_common.devdocs.json @@ -0,0 +1,1025 @@ +{ + "id": "@kbn/security-solution-common", + "client": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_CONTENT_TEST_ID", + "type": "Function", + "tags": [], + "label": "EXPANDABLE_PANEL_CONTENT_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_CONTENT_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID", + "type": "Function", + "tags": [], + "label": "EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_LEFT_SECTION_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_RIGHT_SECTION_TEST_ID", + "type": "Function", + "tags": [], + "label": "EXPANDABLE_PANEL_HEADER_RIGHT_SECTION_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_RIGHT_SECTION_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID", + "type": "Function", + "tags": [], + "label": "EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID", + "type": "Function", + "tags": [], + "label": "EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_TITLE_LINK_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID", + "type": "Function", + "tags": [], + "label": "EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_HEADER_TITLE_TEXT_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_LOADING_TEST_ID", + "type": "Function", + "tags": [], + "label": "EXPANDABLE_PANEL_LOADING_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_LOADING_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID", + "type": "Function", + "tags": [], + "label": "EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.ExpandablePanel", + "type": "Function", + "tags": [], + "label": "ExpandablePanel", + "description": [ + "\nWrapper component that is composed of a header section and a content section.\nThe header can display an icon, a title (that can be a link), and an optional content section on the right.\nThe content section can display a loading spinner, an error message, or any other content.\nThe component can be expanded or collapsed by clicking on the chevron icon on the left of the title." + ], + "signature": [ + "{ ({ header: { title, link, iconType, headerContent }, content: { loading, error }, expand: { expandable, expandedOnFirstRender }, \"data-test-subj\": dataTestSubj, children, }: React.PropsWithChildren>): JSX.Element; displayName: string | undefined; }" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.ExpandablePanel.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n header: { title, link, iconType, headerContent },\n content: { loading, error } = { loading: false, error: false },\n expand: { expandable, expandedOnFirstRender } = {\n expandable: false,\n expandedOnFirstRender: false,\n },\n 'data-test-subj': dataTestSubj,\n children,\n}", + "description": [], + "signature": [ + "React.PropsWithChildren>" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/expandable_panel.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutBody", + "type": "Function", + "tags": [], + "label": "FlyoutBody", + "description": [ + "\nWrapper of `EuiFlyoutBody`, setting the recommended `16px` padding using a EuiPanel." + ], + "signature": [ + "React.FunctionComponent" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/flyout_body.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutBody.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutBody.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutError", + "type": "Function", + "tags": [], + "label": "FlyoutError", + "description": [ + "\nUse this when you need to show an error state in the flyout" + ], + "signature": [ + "{ (): JSX.Element; displayName: string | undefined; }" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/flyout_error.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutFooter", + "type": "Function", + "tags": [], + "label": "FlyoutFooter", + "description": [ + "\nWrapper of `EuiFlyoutFooter`, setting the recommended `16px` padding using a EuiPanel." + ], + "signature": [ + "React.FunctionComponent" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/flyout_footer.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutFooter.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutFooter.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutHeader", + "type": "Function", + "tags": [], + "label": "FlyoutHeader", + "description": [ + "\nWrapper of `EuiFlyoutHeader`, setting the recommended `16px` padding using a EuiPanel." + ], + "signature": [ + "React.FunctionComponent" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutHeader.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutHeader.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutHeaderTabs", + "type": "Function", + "tags": [], + "label": "FlyoutHeaderTabs", + "description": [ + "\nWrapper of `EuiTabs`, setting bottom margin to align with the flyout header divider" + ], + "signature": [ + "React.FunctionComponent" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/flyout_header_tabs.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutHeaderTabs.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutHeaderTabs.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutLoading", + "type": "Function", + "tags": [], + "label": "FlyoutLoading", + "description": [ + "\nUse this when you need to show a loading state in the flyout" + ], + "signature": [ + "({ \"data-test-subj\": dataTestSubj, }: React.PropsWithChildren<", + "FlyoutLoadingProps", + ">) => JSX.Element" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutLoading.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n 'data-test-subj': dataTestSubj = FLYOUT_LOADING_TEST_ID,\n}", + "description": [], + "signature": [ + "React.PropsWithChildren<", + "FlyoutLoadingProps", + ">" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/flyout_loading.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutNavigation", + "type": "Function", + "tags": [], + "label": "FlyoutNavigation", + "description": [ + "\nNavigation menu on the right panel only, with expand/collapse button and option to\npass in a list of actions to be displayed on top." + ], + "signature": [ + "React.FunctionComponent<", + "FlyoutNavigationProps", + ">" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/flyout_navigation.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutNavigation.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutNavigation.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutTitle", + "type": "Function", + "tags": [], + "label": "FlyoutTitle", + "description": [ + "\nTitle component with optional icon to indicate the type of document, can be used for text or a link" + ], + "signature": [ + "React.FunctionComponent<", + "FlyoutTitleProps", + ">" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/components/flyout_title.tsx", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutTitle.$1", + "type": "CompoundType", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "P & { children?: React.ReactNode; }" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FlyoutTitle.$2", + "type": "Any", + "tags": [], + "label": "context", + "description": [], + "signature": [ + "any" + ], + "path": "node_modules/@types/react/index.d.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.getDiscoverCellRenderer", + "type": "Function", + "tags": [], + "label": "getDiscoverCellRenderer", + "description": [], + "signature": [ + "({ fieldName }: GetRendererArgs) => ", + { + "pluginId": "@kbn/security-solution-common", + "scope": "public", + "docId": "kibKbnSecuritySolutionCommonPluginApi", + "section": "def-public.DiscoverCellRenderer", + "text": "DiscoverCellRenderer" + } + ], + "path": "x-pack/packages/security-solution/common/src/cells/renderers/discover.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.getDiscoverCellRenderer.$1", + "type": "Object", + "tags": [], + "label": "{ fieldName }", + "description": [], + "signature": [ + "GetRendererArgs" + ], + "path": "x-pack/packages/security-solution/common/src/cells/renderers/discover.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.HostDetailsButton", + "type": "Function", + "tags": [], + "label": "HostDetailsButton", + "description": [], + "signature": [ + "({ children, onClick, title, }: React.PropsWithChildren) => JSX.Element" + ], + "path": "x-pack/packages/security-solution/common/src/cells/renderers/host/button.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.HostDetailsButton.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n children,\n onClick,\n title,\n}", + "description": [], + "signature": [ + "React.PropsWithChildren" + ], + "path": "x-pack/packages/security-solution/common/src/cells/renderers/host/button.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.HostRightPanel", + "type": "Function", + "tags": [], + "label": "HostRightPanel", + "description": [], + "signature": [ + "(props: ", + "HostRightPanelParamProps", + ") => JSX.Element" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/panels/host/right/index.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.HostRightPanel.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "HostRightPanelParamProps" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/panels/host/right/index.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.TITLE_HEADER_ICON_TEST_ID", + "type": "Function", + "tags": [], + "label": "TITLE_HEADER_ICON_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.TITLE_HEADER_ICON_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.TITLE_HEADER_TEXT_TEST_ID", + "type": "Function", + "tags": [], + "label": "TITLE_HEADER_TEXT_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.TITLE_HEADER_TEXT_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.TITLE_LINK_ICON_TEST_ID", + "type": "Function", + "tags": [], + "label": "TITLE_LINK_ICON_TEST_ID", + "description": [], + "signature": [ + "(dataTestSubj: string) => string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.TITLE_LINK_ICON_TEST_ID.$1", + "type": "string", + "tags": [], + "label": "dataTestSubj", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.COLLAPSE_DETAILS_BUTTON_TEST_ID", + "type": "string", + "tags": [], + "label": "COLLAPSE_DETAILS_BUTTON_TEST_ID", + "description": [], + "signature": [ + "\"securitySolutionFlyoutNavigationCollapseDetailButton\"" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.DiscoverCellRenderer", + "type": "Type", + "tags": [], + "label": "DiscoverCellRenderer", + "description": [], + "signature": [ + "React.ComponentClass, any> | React.FunctionComponent>" + ], + "path": "x-pack/packages/security-solution/common/src/cells/renderers/discover.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.EXPAND_DETAILS_BUTTON_TEST_ID", + "type": "string", + "tags": [], + "label": "EXPAND_DETAILS_BUTTON_TEST_ID", + "description": [], + "signature": [ + "\"securitySolutionFlyoutNavigationExpandDetailButton\"" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FLYOUT_ERROR_TEST_ID", + "type": "string", + "tags": [], + "label": "FLYOUT_ERROR_TEST_ID", + "description": [], + "signature": [ + "\"securitySolutionFlyoutError\"" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.FLYOUT_LOADING_TEST_ID", + "type": "string", + "tags": [], + "label": "FLYOUT_LOADING_TEST_ID", + "description": [], + "signature": [ + "\"securitySolutionFlyoutLoading\"" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.HEADER_ACTIONS_TEST_ID", + "type": "string", + "tags": [], + "label": "HEADER_ACTIONS_TEST_ID", + "description": [], + "signature": [ + "\"securitySolutionFlyoutNavigationActions\"" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.HEADER_NAVIGATION_BUTTON_TEST_ID", + "type": "string", + "tags": [], + "label": "HEADER_NAVIGATION_BUTTON_TEST_ID", + "description": [], + "signature": [ + "\"securitySolutionFlyoutNavigationButton\"" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-solution-common", + "id": "def-public.PREFIX", + "type": "string", + "tags": [], + "label": "PREFIX", + "description": [], + "signature": [ + "\"securitySolutionFlyout\"" + ], + "path": "x-pack/packages/security-solution/common/src/flyout/common/test_ids.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_security_solution_common.mdx b/api_docs/kbn_security_solution_common.mdx new file mode 100644 index 0000000000000..4e2e8d5f4a8e9 --- /dev/null +++ b/api_docs/kbn_security_solution_common.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnSecuritySolutionCommonPluginApi +slug: /kibana-dev-docs/api/kbn-security-solution-common +title: "@kbn/security-solution-common" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/security-solution-common plugin +date: 2024-08-28 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-common'] +--- +import kbnSecuritySolutionCommonObj from './kbn_security_solution_common.devdocs.json'; + + + +Contact [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 59 | 0 | 38 | 5 | + +## Client + +### Functions + + +### Consts, variables and types + + diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 5bf0cd8b907ae..80cfbae5f048b 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 88581262f9d03..f7f19a91a2745 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index d73e565c2d382..335066f088fb6 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index d55725ff48879..07ad76da0c47f 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index 7511ee792f431..994132ec7b060 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.devdocs.json b/api_docs/kbn_security_ui_components.devdocs.json new file mode 100644 index 0000000000000..9a0cd5098d114 --- /dev/null +++ b/api_docs/kbn_security_ui_components.devdocs.json @@ -0,0 +1,880 @@ +{ + "id": "@kbn/security-ui-components", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTable", + "type": "Class", + "tags": [], + "label": "FeatureTable", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-ui-components", + "scope": "common", + "docId": "kibKbnSecurityUiComponentsPluginApi", + "section": "def-common.FeatureTable", + "text": "FeatureTable" + }, + " extends React.Component" + ], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTable.defaultProps", + "type": "Object", + "tags": [], + "label": "defaultProps", + "description": [], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTable.defaultProps.privilegeIndex", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTable.defaultProps.showLocks", + "type": "boolean", + "tags": [], + "label": "showLocks", + "description": [], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTable.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTable.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTable.render", + "type": "Function", + "tags": [], + "label": "render", + "description": [], + "signature": [ + "() => JSX.Element" + ], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/feature_table.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator", + "type": "Class", + "tags": [], + "label": "PrivilegeFormCalculator", + "description": [ + "\nCalculator responsible for determining the displayed and effective privilege values for the following interfaces:\n- and children\n- and children" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "kibanaPrivileges", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivileges", + "text": "KibanaPrivileges" + } + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "role", + "description": [], + "signature": [ + { + "pluginId": "@kbn/security-plugin-types-common", + "scope": "common", + "docId": "kibKbnSecurityPluginTypesCommonPluginApi", + "section": "def-common.Role", + "text": "Role" + } + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getBasePrivilege", + "type": "Function", + "tags": [], + "label": "getBasePrivilege", + "description": [ + "\nReturns the assigned base privilege.\nIf more than one base privilege is assigned, the most permissive privilege will be returned.\nIf no base privileges are assigned, then this will return `undefined`.\n" + ], + "signature": [ + "(privilegeIndex: number) => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.KibanaPrivilege", + "text": "KibanaPrivilege" + }, + " | undefined" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getBasePrivilege.$1", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.isWildcardBasePrivilege", + "type": "Function", + "tags": [], + "label": "isWildcardBasePrivilege", + "description": [ + "\nReturns true if it is base wildcard (*) privilege.\n" + ], + "signature": [ + "(privilegeIndex: number) => boolean" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.isWildcardBasePrivilege.$1", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getDisplayedPrimaryFeaturePrivilegeId", + "type": "Function", + "tags": [], + "label": "getDisplayedPrimaryFeaturePrivilegeId", + "description": [ + "\nReturns the ID of the *displayed* Primary Feature Privilege for the indicated feature and privilege index.\nIf the effective primary feature privilege is a \"minimal\" version, then this returns the corresponding non-minimal version.\n" + ], + "signature": [ + "(featureId: string, privilegeIndex: number, allSpacesSelected: boolean) => string | undefined" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getDisplayedPrimaryFeaturePrivilegeId.$1", + "type": "string", + "tags": [], + "label": "featureId", + "description": [ + "the feature id to get the Primary Feature KibanaPrivilege for." + ], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getDisplayedPrimaryFeaturePrivilegeId.$2", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getDisplayedPrimaryFeaturePrivilegeId.$3", + "type": "boolean", + "tags": [], + "label": "allSpacesSelected", + "description": [ + "indicates if the privilege form is configured to grant access to all spaces." + ], + "signature": [ + "boolean" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.hasCustomizedSubFeaturePrivileges", + "type": "Function", + "tags": [], + "label": "hasCustomizedSubFeaturePrivileges", + "description": [ + "\nDetermines if the indicated feature has sub-feature privilege assignments which differ from the \"displayed\" primary feature privilege.\n" + ], + "signature": [ + "(featureId: string, privilegeIndex: number, allSpacesSelected: boolean) => boolean" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.hasCustomizedSubFeaturePrivileges.$1", + "type": "string", + "tags": [], + "label": "featureId", + "description": [ + "the feature id" + ], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.hasCustomizedSubFeaturePrivileges.$2", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.hasCustomizedSubFeaturePrivileges.$3", + "type": "boolean", + "tags": [], + "label": "allSpacesSelected", + "description": [ + "indicates if the privilege form is configured to grant access to all spaces." + ], + "signature": [ + "boolean" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getEffectivePrimaryFeaturePrivilege", + "type": "Function", + "tags": [], + "label": "getEffectivePrimaryFeaturePrivilege", + "description": [ + "\nReturns the most permissive effective Primary Feature KibanaPrivilege, including the minimal versions.\n" + ], + "signature": [ + "(featureId: string, privilegeIndex: number, allSpacesSelected?: boolean | undefined) => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.PrimaryFeaturePrivilege", + "text": "PrimaryFeaturePrivilege" + }, + " | undefined" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getEffectivePrimaryFeaturePrivilege.$1", + "type": "string", + "tags": [], + "label": "featureId", + "description": [ + "the feature id" + ], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getEffectivePrimaryFeaturePrivilege.$2", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getEffectivePrimaryFeaturePrivilege.$3", + "type": "CompoundType", + "tags": [], + "label": "allSpacesSelected", + "description": [ + "indicates if the privilege form is configured to grant access to all spaces." + ], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.isIndependentSubFeaturePrivilegeGranted", + "type": "Function", + "tags": [], + "label": "isIndependentSubFeaturePrivilegeGranted", + "description": [ + "\nDetermines if the indicated sub-feature privilege is granted.\n" + ], + "signature": [ + "(featureId: string, privilegeId: string, privilegeIndex: number) => boolean" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.isIndependentSubFeaturePrivilegeGranted.$1", + "type": "string", + "tags": [], + "label": "featureId", + "description": [ + "the feature id" + ], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.isIndependentSubFeaturePrivilegeGranted.$2", + "type": "string", + "tags": [], + "label": "privilegeId", + "description": [ + "the sub feature privilege id" + ], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.isIndependentSubFeaturePrivilegeGranted.$3", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getSelectedMutuallyExclusiveSubFeaturePrivilege", + "type": "Function", + "tags": [], + "label": "getSelectedMutuallyExclusiveSubFeaturePrivilege", + "description": [ + "\nReturns the most permissive effective privilege within the indicated mutually-exclusive sub feature privilege group.\n" + ], + "signature": [ + "(featureId: string, subFeatureGroup: ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilegeGroup", + "text": "SubFeaturePrivilegeGroup" + }, + ", privilegeIndex: number) => ", + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilege", + "text": "SubFeaturePrivilege" + }, + " | undefined" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getSelectedMutuallyExclusiveSubFeaturePrivilege.$1", + "type": "string", + "tags": [], + "label": "featureId", + "description": [ + "the feature id" + ], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getSelectedMutuallyExclusiveSubFeaturePrivilege.$2", + "type": "Object", + "tags": [], + "label": "subFeatureGroup", + "description": [ + "the mutually-exclusive sub feature group" + ], + "signature": [ + { + "pluginId": "@kbn/security-role-management-model", + "scope": "common", + "docId": "kibKbnSecurityRoleManagementModelPluginApi", + "section": "def-common.SubFeaturePrivilegeGroup", + "text": "SubFeaturePrivilegeGroup" + } + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.getSelectedMutuallyExclusiveSubFeaturePrivilege.$3", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.canCustomizeSubFeaturePrivileges", + "type": "Function", + "tags": [], + "label": "canCustomizeSubFeaturePrivileges", + "description": [ + "\nDetermines if the indicated feature is capable of having its sub-feature privileges customized.\n" + ], + "signature": [ + "(featureId: string, privilegeIndex: number) => boolean" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.canCustomizeSubFeaturePrivileges.$1", + "type": "string", + "tags": [], + "label": "featureId", + "description": [ + "the feature id" + ], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.canCustomizeSubFeaturePrivileges.$2", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.updateSelectedFeaturePrivilegesForCustomization", + "type": "Function", + "tags": [], + "label": "updateSelectedFeaturePrivilegesForCustomization", + "description": [ + "\nReturns an updated set of feature privileges based on the toggling of the \"Customize sub-feature privileges\" control.\n" + ], + "signature": [ + "(featureId: string, privilegeIndex: number, willBeCustomizing: boolean, allSpacesSelected: boolean) => string[]" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.updateSelectedFeaturePrivilegesForCustomization.$1", + "type": "string", + "tags": [], + "label": "featureId", + "description": [ + "the feature id" + ], + "signature": [ + "string" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.updateSelectedFeaturePrivilegesForCustomization.$2", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.updateSelectedFeaturePrivilegesForCustomization.$3", + "type": "boolean", + "tags": [], + "label": "willBeCustomizing", + "description": [ + "flag indicating if this feature is about to have its sub-feature privileges customized or not" + ], + "signature": [ + "boolean" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.updateSelectedFeaturePrivilegesForCustomization.$4", + "type": "boolean", + "tags": [], + "label": "allSpacesSelected", + "description": [ + "indicates if the privilege form is configured to grant access to all spaces." + ], + "signature": [ + "boolean" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.hasSupersededInheritedPrivileges", + "type": "Function", + "tags": [], + "label": "hasSupersededInheritedPrivileges", + "description": [ + "\nDetermines if the indicated privilege entry is less permissive than the configured \"global\" entry for the role." + ], + "signature": [ + "(privilegeIndex: number) => boolean" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.PrivilegeFormCalculator.hasSupersededInheritedPrivileges.$1", + "type": "number", + "tags": [], + "label": "privilegeIndex", + "description": [ + "the index of the kibana privileges role component" + ], + "signature": [ + "number" + ], + "path": "x-pack/packages/security/ui_components/src/privilege_form_calculator/privilege_form_calculator.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTableCell", + "type": "Function", + "tags": [], + "label": "FeatureTableCell", + "description": [], + "signature": [ + "({ feature, className }: Props) => JSX.Element" + ], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/components/feature_table_cell.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/security-ui-components", + "id": "def-common.FeatureTableCell.$1", + "type": "Object", + "tags": [], + "label": "{ feature, className }", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/packages/security/ui_components/src/kibana_privilege_table/components/feature_table_cell.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx new file mode 100644 index 0000000000000..de423841172ae --- /dev/null +++ b/api_docs/kbn_security_ui_components.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibKbnSecurityUiComponentsPluginApi +slug: /kibana-dev-docs/api/kbn-security-ui-components +title: "@kbn/security-ui-components" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/security-ui-components plugin +date: 2024-08-28 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] +--- +import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; + + + +Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 47 | 0 | 12 | 0 | + +## Common + +### Functions + + +### Classes + + diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 973abe9ee9af1..392439ab86f74 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 8bafe23e3c1d5..38a9306ad8fba 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index f927981e3c76f..3188323210d8a 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 7144772c9980e..618d715969b7b 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 7c6f79c3c27f9..ebab6af4c6553 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 534121d95f21b..bb7b633082e79 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index a358d827360c1..e438d16a8743d 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index b8398b5a0ded0..582ab143f575c 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 425198e68fa64..01821273c545f 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 318da48ddaa26..044279b527da7 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index 65e5148a9331d..7c576fd694c8a 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 6d573f6f5cc89..0cf28234cc2ca 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 1eab2bc0ed216..a215e3ffca228 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 3468d526df5e8..1a57e4d3b2dc0 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 05a4daffe5c6a..d314868c3cf14 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index b1ed44e073df3..901ae7160665a 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index b51cc183606cf..b478c534900d9 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 5100bf9f97a93..51a32a2ca88e5 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index 0d11189a3ef25..bb5122f7abdf2 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 1d83cb20af3b9..9ffd326e5cfac 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 23891106ad167..9d11f7a675c2c 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 61dafac929b27..6afe8a6caa672 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index c1e8df59b84d8..b80830d0a7746 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index f70c33f9b8247..b39ec89439e4d 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 442c12f67f7f2..4102878c1dafb 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 45be2d441bb8a..b5c75b3edf236 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 324655fc2323d..8738d9092302d 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 2d3e2564915ef..461ffad53cd7f 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index aae967f68a3f6..189b5f10dbdfb 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index 094a565d51d2d..e88646f12a685 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 7640ea9e3ca91..e981ec63d809a 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index f5c6d7eea87cb..9b926dd6f6d66 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 73601f7cdaddd..dc9444b3fc6ed 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index a377faa46c293..401cca5de77b4 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index e32610fbef5e1..3150368de084a 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index f57e2086cebd6..395befc767e90 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index b5a4e93b87331..78e45743f559f 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index 77c95a810948c..8fd1f660b25df 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index 917b5b2333728..2d5d3155e6597 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 5ab094f0c0998..6d1fd8cff6ea0 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index 09de63ec5b353..aad5143245e45 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index a374a425114b1..f516ddc516879 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 1bdf08c90ee82..83df896d4bfe9 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index 9c5ac68c6c303..92500688ecbe4 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index bcf34b6ef3392..a2d33c5befd32 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index d0aed0b2316a7..e8973df69791e 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index 5b70a207847bd..3dc055ee56c21 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 7a21b8493ca77..9b07bfb9015f5 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 0d1cf5386c1ca..2476235127e5c 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index b5fac87442b4a..6d8093b953ab1 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index 68321851bfd22..31fa48ba6773c 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index 710fde66a173c..c62098c797c77 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index 8ee8c50122e85..b630a1d2ad453 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index dc2d925b0b96f..75aa7e44715ac 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index 85b6a53f72741..b6473375de073 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index 560c9d0489351..eb80e8070785d 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 428b867b21446..0b9dde4788335 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index 7ffa3ea4574ff..c326ab825e1d7 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index d5c6199d4cc4c..8c224d1031519 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index c9cdda33b1e55..b87be238fc5f9 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 331eb2df1de59..8732bb53f8147 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 422fe9392d236..cd9ea02f81c80 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 68881e7842119..fccd6157b7d03 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index 5a6daa4d86af3..38143aabb9b44 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index fb7e548678b19..08c681285d4a4 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 122ff503d0dd4..c9edcb8fd2c5e 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 24d4af745e4de..d60c8fd98efc4 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 2856cf3fc5f1a..46721989cd733 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index de90e78bbe94b..b5a9ae92cbb8e 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 634de2e778da3..0f84969365045 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 5605e34172e00..70198997a27dd 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 7d4509c2d6574..b1e085fd2c419 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index f4db0b702a9ea..fdbeaf1fcd583 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index 891f3a4febf4c..ae371d34082d8 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 1e145f1a18644..e3ee59596a8c3 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 84664ce4602b8..caaa1271bec03 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 2eb6cc14c7264..116f954cc7937 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index a753af4adf4ba..514df724c6a9b 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 2bd09dcd13d06..c644b6ec1d3cd 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index ab7d1a7acb987..f7626947f5939 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index e7f8d05bea5f8..7cce6277312d2 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 7915972645781..91b540ffb4a54 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index c4e829ee77482..eabe1744d761d 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index df8071ff2bae3..0c7a93f771338 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 784c136482a24..bc50abb4dcade 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 56f7693e17141..6c0a7f3604f88 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 01370ca6bc79c..4151d6f35af9a 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 37b85246847fe..b2d099f1515c6 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index 24885548ccb26..51b85042d9172 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 4745ae503988a..83fee146195a6 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 32a3ec515d213..9f0a70a4d90e4 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index c913eec4ea995..e948a7643e194 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 6645b4a75c39e..98881bbf5ed56 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 6dda726eb2f67..7e82f80f410b0 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 8038c5607f6f2..5e196681c3126 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 3a8e0c8bc43de..56ecb24e81450 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 3730028bc7038..d958fd2a39eac 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 6e23bd09e9281..f3d3e63678737 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index b5360f7bb8a9b..e862edc4ef89d 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index eba9cbe479837..f988df9018b4d 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index d6ea70a2aed24..48607ddc047b5 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 6e44040dfdee4..62937260ebc20 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 31ad7698725dd..d2bf83d048f9a 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 00b688c24559a..c4f5ba2a2089a 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 957417d1279bd..638e43b6b07e7 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 5ff1f59317f45..55704223fde70 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 6d577c60ef430..39bc770f0acf0 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index c875f0cbc61de..4bb33e1657aeb 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 5b84c0375f740..ecf089c261f12 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 0645ecabf59f2..43523892ee230 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 1f6abaa25bc29..fa1ce78f6d3dc 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index a08955b55f968..5606127fce12c 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -8634,6 +8634,56 @@ ], "returnComment": [] }, + { + "parentPluginId": "lens", + "id": "def-public.Visualization.onDatasourceUpdate", + "type": "Function", + "tags": [], + "label": "onDatasourceUpdate", + "description": [], + "signature": [ + "((state: T, frame?: ", + "FramePublicAPI", + " | undefined) => T) | undefined" + ], + "path": "x-pack/plugins/lens/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "lens", + "id": "def-public.Visualization.onDatasourceUpdate.$1", + "type": "Uncategorized", + "tags": [], + "label": "state", + "description": [], + "signature": [ + "T" + ], + "path": "x-pack/plugins/lens/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "lens", + "id": "def-public.Visualization.onDatasourceUpdate.$2", + "type": "Object", + "tags": [], + "label": "frame", + "description": [], + "signature": [ + "FramePublicAPI", + " | undefined" + ], + "path": "x-pack/plugins/lens/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + }, { "parentPluginId": "lens", "id": "def-public.Visualization.onIndexPatternChange", diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index c43741ded505e..0c704b62488b5 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 685 | 0 | 583 | 62 | +| 688 | 0 | 586 | 62 | ## Client diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 570168a8dd2b8..6593d92ac0cf2 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 82902a4f786e4..c897708732ac2 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 1f5315779511a..9def421b2bd58 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 72b49df0783f8..c2c599f2ef56f 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 53a054d43fb22..8f8f41940eef0 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 512a59d0cf859..f20babe54895f 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 0973459c59bba..b34e18e99fb6a 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 2eb3bc8027c02..6667c5cb456c2 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index da12ff0f537aa..4398bccb7e260 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index d8a4b185e9580..cba8b57ab112e 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 65ae1ecf2b5d3..e37260e03bb95 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 21983f6f07d17..1358223a09b61 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 5c00beaa1f2f0..97bdd17abc551 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 6df6f57ef01ab..2bc70fc829358 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 12bef159b0c21..b38e1bf50ed8a 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index 9db57429f5cfd..07722a96d5724 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index 7e06a0834bf6d..9b36411f3a1ac 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 1eb4d22046907..765b5b88bb15f 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 8d474055489c5..ec7d7f8cfcc90 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 6651a704fce86..ac4feed3fbfe6 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 0061af2708ea7..557f7183d05e9 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index e39ad294021e9..0ba82e35e65d9 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 8cbaaa872d4cb..d847dce6c890d 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 9441612794ad0..5a7011f5060ec 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 2740655f8fa99..a72c932c61e4b 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index f9dfd904a907b..54238022c6ba4 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index df83c7a009637..d2e0c684198f8 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index d28a5118490df..068b9d44fde19 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 2ce6c1982def4..9e005ff8a25fa 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 908398da629f7..c2adadb526038 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,19 +15,19 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 846 | 719 | 46 | +| 848 | 723 | 46 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 52632 | 243 | 39544 | 1932 | +| 52848 | 243 | 39700 | 1939 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 307 | 0 | 301 | 32 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 314 | 0 | 308 | 33 | | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 74 | 0 | 9 | 2 | @@ -119,7 +119,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | | inputControlVis | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Input Control visualization to Kibana | 0 | 0 | 0 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 127 | 2 | 100 | 4 | -| | [@elastic/security-scalability](https://github.com/orgs/elastic/teams/security-scalability) | Plugin implementing the Integration Assistant API and UI | 49 | 0 | 41 | 3 | +| | [@elastic/security-scalability](https://github.com/orgs/elastic/teams/security-scalability) | Plugin implementing the Integration Assistant API and UI | 54 | 0 | 46 | 3 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides UI and APIs for the interactive setup mode. | 28 | 0 | 18 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 92 | 0 | 92 | 5 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 5 | 0 | 5 | 2 | @@ -128,7 +128,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | kibanaUsageCollection | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 610 | 3 | 417 | 9 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 5 | 0 | 5 | 1 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 685 | 0 | 583 | 62 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 688 | 0 | 586 | 62 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 117 | 0 | 42 | 10 | @@ -184,7 +184,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Plugin to provide access to and rendering of python notebooks for use in the persistent developer console. | 10 | 0 | 10 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 17 | 0 | 11 | 1 | | searchprofiler | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 447 | 0 | 231 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides authentication and authorization features, and exposes functionality to understand the capabilities of the currently authenticated user. | 448 | 0 | 231 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 192 | 0 | 123 | 33 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | ESS customizations for Security Solution. | 6 | 0 | 6 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | Serverless customizations for security. | 7 | 0 | 7 | 0 | @@ -268,16 +268,18 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 19 | 0 | 16 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 9 | 2 | 9 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 44 | 1 | 30 | 1 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 23 | 0 | 19 | 0 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 25 | 0 | 21 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 84 | 0 | 84 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 7 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 62 | 0 | 17 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | +| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 19 | 0 | 19 | 0 | +| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 45 | 0 | 45 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 41 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 8 | 0 | 4 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 217 | 0 | 180 | 9 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 227 | 0 | 188 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 79 | 0 | 50 | 9 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 24 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 149 | 2 | 143 | 20 | @@ -479,7 +481,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 3 | 0 | 3 | 0 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 56 | 0 | 44 | 0 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 61 | 0 | 49 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 17 | 0 | 17 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 5 | 0 | 5 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | @@ -491,7 +493,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 102 | 0 | 86 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 15 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 38 | 2 | 33 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 133 | 0 | 106 | 1 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 136 | 0 | 109 | 1 | | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 78 | 0 | 78 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 41 | 0 | 27 | 6 | @@ -512,7 +514,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 196 | 0 | 184 | 10 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 40 | 0 | 40 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 0 | 52 | 1 | -| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 39 | 0 | 14 | 1 | +| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 42 | 0 | 17 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 18 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 49 | 0 | 40 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 0 | 0 | @@ -658,14 +660,16 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 35 | 0 | 25 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 7 | 0 | 7 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 118 | 0 | 59 | 0 | -| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 51 | 0 | 25 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 58 | 0 | 31 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 275 | 1 | 154 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 75 | 0 | 74 | 0 | +| | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 59 | 0 | 38 | 5 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 6 | 0 | 0 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 15 | 0 | 15 | 7 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 54 | 0 | 49 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 30 | 0 | 24 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 2 | 0 | 0 | 0 | +| | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 47 | 0 | 12 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 56 | 1 | 41 | 1 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 92 | 0 | 70 | 6 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 341 | 1 | 337 | 32 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 26d7c9c969ddc..641d47c9f5f0a 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 923fe76dbc464..37b03269293b4 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index c30d5f49f61ce..fab60ef7c5701 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 5e0fc31881f4b..dcfd28d4a0535 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index e3aecf65ea502..d37284be9f650 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index 719d6340a68cc..561e75b4a4f7f 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 093bf4409da7f..c86ffe56c7f06 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 8558cf0f6e0aa..c696e1b9651f8 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 524d0519041a4..686d81b3734b0 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 55ffba4f93e71..ec2ba5e1605ea 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 7835452fc8e1b..42c589b751b8a 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 66a83f84b9ae8..b41376c144f9d 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index da2d0665bab32..8e7c4db956a56 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index ce9d137330667..f0bbac608a7f7 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 6493c183bf1d7..f0b5bd593ea82 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 7c9f3dac7cf17..6ec4860b983ef 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index de3a94a7d7cd9..3c66d7b67beb7 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index 91e578291858c..d3bc6c216225e 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index e906c5523870a..4a782fa961bbd 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index d14cd8e67279f..33ed9eed870a6 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index 1812f60b5c8b9..3d2f25a400883 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index f2ace37c453c9..f15f737461be9 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 96eeb74884b60..e0cfc03bd96ad 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 831135e7c8899..1633a0077152a 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index bc5c1ffbd6fc9..b48e22603274b 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -253,6 +253,28 @@ "path": "x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "security", + "id": "def-public.AuthorizationServiceSetup.privileges", + "type": "Object", + "tags": [], + "label": "privileges", + "description": [ + "\nA set of methods to work with Kibana role privileges" + ], + "signature": [ + { + "pluginId": "@kbn/security-plugin-types-public", + "scope": "public", + "docId": "kibKbnSecurityPluginTypesPublicPluginApi", + "section": "def-public.PrivilegesAPIClientPublicContract", + "text": "PrivilegesAPIClientPublicContract" + } + ], + "path": "x-pack/packages/security/plugin_types_public/src/authorization/authorization_service.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/security.mdx b/api_docs/security.mdx index e289d2ade1afa..51b59312d28e5 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 447 | 0 | 231 | 0 | +| 448 | 0 | 231 | 0 | ## Client diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 77b452878fa70..12cd0747f67ac 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 3d9049b43d2c2..26eb75c5676b4 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 7f401033ab837..420deaf4a6864 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 3a66ca3ae8c1b..1bcd97986334a 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 7507c218b3ad9..a7b8f5fbb8d9a 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 25f8e60fcd4bf..3a1698808326f 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 81fa8b0bd5ccd..d3c2558fd1029 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 8840b6fe9b7cf..93db70c39645e 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 44d6d76eec612..77c13ac9e65c6 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 7866c061cf7be..d107e897cdead 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 07eff2e32f515..4c6dae13f492d 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index b8475bcdf867f..07095a9d37e6c 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 82ebcf572b38c..100a1342a360d 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 9975a683c2fc6..47d4c81556bbe 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 0092af0da949f..6a89c9363e756 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 50b7b81a75760..29c532db3381d 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index 08d7f118d0da8..fde7860d2974a 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 750e14de23137..b740ca5fcf99c 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index ace667e6e035d..eebe89ad28f57 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 7d2ca3e44137f..ab5f57767a04a 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 4182ee2d921a7..a741c06ba4c99 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index dd0573a7dad31..05ae581989ff5 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 147415a02455d..0fcd854f8b472 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index bc047abd77f93..f6e2e3d249f0f 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 6e9dc36957bab..4c8980d2bffa6 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 28ebf3b09f032..ef4a00301e7c6 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 71c9f28b32724..684a46155f78f 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 47c6345975227..dbd401d44f6b9 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index ddddde515e257..9a8fe08952691 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index fe41ec1fa440d..0a51fdc440508 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 1986d4cc93a16..bdfcd7bade60b 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 52db8bff35a05..ce91ab22ef575 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 9bc6e6e6365ad..affa5bd958368 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 7b5e9d38452bd..2ac3e643a0008 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 0922ed4326778..37db7b74be776 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index ff203dbd3293b..c31a6f4836327 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 99d6c80770730..4a42084571360 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 1e4c96030615c..804d2b4324435 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 8400a667f3f2f..0b513eb4a3bf2 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index b00f3eb7627c8..b1dcc17d4229c 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index a1abd27f4405a..359438120c029 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 23bbfa5922da0..adba8af347c80 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 4e0c973ce0fb9..d2b803eb7d02b 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-08-27 +date: 2024-08-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 7f22ca5cf31a266157d250cf4ae5d42628a92993 Mon Sep 17 00:00:00 2001 From: Karen Grigoryan Date: Wed, 28 Aug 2024 10:12:08 +0200 Subject: [PATCH 29/74] [Security Solution][DQD][Tech Debt] Refactor lower level helpers (#191245) addresses https://github.com/elastic/kibana/issues/190964 Fourth in the series of PRs to address general DQD tech debt This one builds on previous 3 PRs https://github.com/elastic/kibana/pull/190970 https://github.com/elastic/kibana/pull/190978 https://github.com/elastic/kibana/pull/191233 Gist of changes: split lower level helpers into series of utils/* files each utils/ file is named after common behavior it export or works with. cleanup dead code --- .../impl/data_quality_panel/constants.ts | 17 +- .../indices_details/pattern/constants.ts | 8 + .../indices_details/pattern/helpers.test.ts | 1017 ----------------- .../indices_details/pattern/helpers.ts | 258 ----- .../indices_details/pattern/index.tsx | 18 +- .../pattern/index_check_flyout/index.tsx | 3 +- .../index_properties/helpers.test.ts | 249 ---- .../index_properties/helpers.ts | 92 -- .../index_properties/index.tsx | 2 +- .../index_check_fields/constants.ts | 12 + .../index_check_fields/index.tsx | 3 +- .../index_check_fields/tabs/helpers.tsx | 2 +- .../index_properties/markdown/helpers.ts | 2 +- .../get_index_properties_container_id.test.ts | 19 + .../get_index_properties_container_id.ts | 14 + .../pattern/index_result_badge/index.tsx | 3 +- .../get_index_result_badge_color.test.ts | 22 + .../utils/get_index_result_badge_color.ts | 16 + .../pattern_label/helpers.test.ts | 97 -- .../ilm_phase_counts/index.test.tsx | 2 +- .../pattern_summary/pattern_label/index.tsx | 7 +- .../utils/get_pattern_result_tooltip.test.ts | 25 + .../utils/get_pattern_result_tooltip.ts | 18 + .../pattern_label/utils/show_result.test.ts | 80 ++ .../{helpers.ts => utils/show_result.ts} | 11 - .../pattern/summary_table/index.test.tsx | 6 +- .../pattern/summary_table/index.tsx | 8 +- .../pattern/summary_table/translations.ts | 21 - .../columns.test.tsx} | 97 +- .../{helpers.tsx => utils/columns.tsx} | 56 +- .../utils/get_show_pagination.test.ts | 37 + .../utils/get_show_pagination.ts | 14 + .../indices_details/pattern/translations.ts | 21 + .../get_index_result_tooltip.test.ts} | 18 +- .../get_index_result_tooltip.ts} | 12 +- .../pattern/utils/get_page_index.test.ts | 360 ++++++ .../pattern/utils/get_page_index.ts | 26 + .../pattern/utils/ilm_explain.test.ts | 173 +++ .../pattern/utils/ilm_explain.ts | 87 ++ .../utils/should_create_index_names.test.ts | 103 ++ .../utils/should_create_index_names.ts | 30 + .../should_create_pattern_rollup.test.ts | 139 +++ .../utils/should_create_pattern_rollup.ts | 36 + .../pattern/utils/stats.test.ts | 38 +- .../indices_details/pattern/utils/stats.ts | 19 +- .../storage_details/helpers.test.ts | 516 --------- .../storage_details/helpers.ts | 241 ---- .../storage_details/index.tsx | 2 +- .../storage_treemap/constants.ts | 10 + .../storage_treemap/index.test.tsx | 4 +- .../storage_details/storage_treemap/index.tsx | 10 +- .../utils/get_fill_color.test.ts | 31 + .../storage_treemap/utils/get_fill_color.ts | 18 + .../get_layers_multi_dimensional.test.ts | 90 ++ .../utils/get_layers_multi_dimensional.ts | 60 + .../utils/get_legend_items.test.ts | 196 ++++ .../storage_treemap/utils/get_legend_items.ts | 67 ++ .../get_path_to_flattened_bucket_map.test.ts | 82 ++ .../utils/get_path_to_flattened_bucket_map.ts | 19 + .../storage_treemap/utils/stats.test.ts | 61 + .../storage_treemap/utils/stats.ts | 36 + .../pattern => storage_details}/types.ts | 19 +- .../utils/get_flattened_buckets.test.ts | 135 +++ .../utils/get_flattened_buckets.ts | 65 ++ .../summary_actions/check_all/helpers.test.ts | 107 -- .../summary_actions/check_all/index.tsx | 2 +- .../summary_actions/check_all/translations.ts | 17 - .../utils/get_all_indices_to_check.test.ts | 79 ++ .../get_all_indices_to_check.ts} | 18 +- .../summary_actions/index.tsx | 6 +- .../hooks/use_results_rollup/index.tsx | 7 +- ...attern_rollups_with_latest_check_result.ts | 4 +- .../use_results_rollup/utils/stats.test.ts | 26 + .../hooks/use_results_rollup/utils/stats.ts | 21 +- .../stub/get_check_state/index.ts | 5 +- .../impl/data_quality_panel/translations.ts | 9 + .../impl/data_quality_panel/types.ts | 11 + .../utils/check_index.test.ts | 5 +- .../data_quality_panel/utils/check_index.ts | 7 +- .../utils/get_ilm_phase.test.ts | 88 ++ .../data_quality_panel/utils/get_ilm_phase.ts | 37 + .../utils/get_summary_table_items.test.ts | 230 ++++ .../utils/get_summary_table_items.ts | 51 + .../utils/metadata.test.ts | 251 +++- .../index_properties => }/utils/metadata.ts | 69 +- .../impl/data_quality_panel/utils/stats.ts | 14 + .../translations/translations/fr-FR.json | 3 - .../translations/translations/ja-JP.json | 3 - .../translations/translations/zh-CN.json | 3 - 89 files changed, 3135 insertions(+), 2898 deletions(-) create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/constants.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/helpers.test.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/helpers.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers.test.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/constants.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/get_index_properties_container_id.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/get_index_properties_container_id.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/utils/get_index_result_badge_color.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/utils/get_index_result_badge_color.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/helpers.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/get_pattern_result_tooltip.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/get_pattern_result_tooltip.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/show_result.test.ts rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/{helpers.ts => utils/show_result.ts} (66%) rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/{helpers.test.tsx => utils/columns.test.tsx} (88%) rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/{helpers.tsx => utils/columns.tsx} (80%) create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/get_show_pagination.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/get_show_pagination.ts rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/{index_result_badge/helpers.test.ts => utils/get_index_result_tooltip.test.ts} (58%) rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/{index_result_badge/helpers.ts => utils/get_index_result_tooltip.ts} (67%) create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_page_index.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_page_index.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/ilm_explain.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/ilm_explain.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_index_names.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_index_names.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_pattern_rollup.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_pattern_rollup.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/helpers.test.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/helpers.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/constants.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_path_to_flattened_bucket_map.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_path_to_flattened_bucket_map.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/stats.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/stats.ts rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/{indices_details/pattern => storage_details}/types.ts (56%) create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/utils/get_flattened_buckets.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/utils/get_flattened_buckets.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/helpers.test.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/translations.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/utils/get_all_indices_to_check.test.ts rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/{helpers.ts => utils/get_all_indices_to_check.ts} (73%) create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_ilm_phase.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_ilm_phase.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_summary_table_items.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_summary_table_items.ts rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/{data_quality_details/indices_details/pattern/index_check_flyout/index_properties => }/utils/metadata.test.ts (66%) rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/{data_quality_details/indices_details/pattern/index_check_flyout/index_properties => }/utils/metadata.ts (68%) diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/constants.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/constants.ts index 26fe2698f077c..6e4649e9e8e74 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/constants.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/constants.ts @@ -8,7 +8,7 @@ import { EcsFlat } from '@elastic/ecs'; import { EuiComboBoxOptionOption } from '@elastic/eui'; -import { EcsFieldMetadata } from './types'; +import { EcsFieldMetadata, PartitionedFieldMetadata, SortConfig } from './types'; import * as i18n from './translations'; export const EcsFlatTyped = EcsFlat as unknown as Record; @@ -42,3 +42,18 @@ export const ilmPhaseOptionsStatic: EuiComboBoxOptionOption[] = [ export const EMPTY_STAT = '--'; export const INTERNAL_API_VERSION = '1'; + +export const defaultSort: SortConfig = { + sort: { + direction: 'desc', + field: 'docsCount', + }, +}; + +export const EMPTY_METADATA: PartitionedFieldMetadata = { + all: [], + ecsCompliant: [], + custom: [], + incompatible: [], + sameFamily: [], +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/constants.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/constants.ts new file mode 100644 index 0000000000000..634f2cd8f59cc --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/constants.ts @@ -0,0 +1,8 @@ +/* + * 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. + */ + +export const MIN_PAGE_SIZE = 10; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/helpers.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/helpers.test.ts deleted file mode 100644 index 56dc6364ba845..0000000000000 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/helpers.test.ts +++ /dev/null @@ -1,1017 +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 { - IlmExplainLifecycleLifecycleExplain, - IlmExplainLifecycleLifecycleExplainManaged, - IlmExplainLifecycleLifecycleExplainUnmanaged, -} from '@elastic/elasticsearch/lib/api/types'; - -import { - defaultSort, - getIlmPhase, - getIndexPropertiesContainerId, - getIlmExplainPhaseCounts, - getIndexIncompatible, - getPageIndex, - getPhaseCount, - getSummaryTableItems, - isManaged, - shouldCreateIndexNames, - shouldCreatePatternRollup, -} from './helpers'; -import { mockIlmExplain } from '../../../mock/ilm_explain/mock_ilm_explain'; -import { mockDataQualityCheckResult } from '../../../mock/data_quality_check_result/mock_index'; -import { auditbeatWithAllResults } from '../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; -import { mockStats } from '../../../mock/stats/mock_stats'; -import { DataQualityCheckResult } from '../../../types'; -import { IndexSummaryTableItem } from './types'; -import { getIndexNames, getPatternDocsCount } from './utils/stats'; - -const hot: IlmExplainLifecycleLifecycleExplainManaged = { - index: '.ds-packetbeat-8.6.1-2023.02.04-000001', - managed: true, - policy: 'packetbeat', - index_creation_date_millis: 1675536751379, - time_since_index_creation: '3.98d', - lifecycle_date_millis: 1675536751379, - age: '3.98d', - phase: 'hot', - phase_time_millis: 1675536751809, - action: 'rollover', - action_time_millis: 1675536751809, - step: 'check-rollover-ready', - step_time_millis: 1675536751809, - phase_execution: { - policy: 'packetbeat', - version: 1, - modified_date_in_millis: 1675536751205, - }, -}; -const warm = { - ...hot, - phase: 'warm', -}; -const cold = { - ...hot, - phase: 'cold', -}; -const frozen = { - ...hot, - phase: 'frozen', -}; -const other = { - ...hot, - phase: 'other', // not a valid phase -}; - -const managed: Record = { - hot, - warm, - cold, - frozen, -}; - -const unmanaged: IlmExplainLifecycleLifecycleExplainUnmanaged = { - index: 'michael', - managed: false, -}; - -describe('helpers', () => { - const indexName = '.ds-packetbeat-8.6.1-2023.02.04-000001'; - - describe('isManaged', () => { - test('it returns true when the `ilmExplainRecord` `managed` property is true', () => { - const ilmExplain = mockIlmExplain[indexName]; - - expect(isManaged(ilmExplain)).toBe(true); - }); - - test('it returns false when the `ilmExplainRecord` is undefined', () => { - expect(isManaged(undefined)).toBe(false); - }); - }); - - describe('getPhaseCount', () => { - test('it returns the expected count when an index with the specified `ilmPhase` exists in the `IlmExplainLifecycleLifecycleExplain` record', () => { - expect( - getPhaseCount({ - ilmExplain: mockIlmExplain, - ilmPhase: 'hot', // this phase is in the record - indexName, // valid index name - }) - ).toEqual(1); - }); - - test('it returns zero when `ilmPhase` is null', () => { - expect( - getPhaseCount({ - ilmExplain: null, - ilmPhase: 'hot', - indexName, - }) - ).toEqual(0); - }); - - test('it returns zero when the `indexName` does NOT exist in the `IlmExplainLifecycleLifecycleExplain` record', () => { - expect( - getPhaseCount({ - ilmExplain: mockIlmExplain, - ilmPhase: 'hot', - indexName: 'invalid', // this index does NOT exist - }) - ).toEqual(0); - }); - - test('it returns zero when the specified `ilmPhase` does NOT exist in the `IlmExplainLifecycleLifecycleExplain` record', () => { - expect( - getPhaseCount({ - ilmExplain: mockIlmExplain, - ilmPhase: 'warm', // this phase is NOT in the record - indexName, // valid index name - }) - ).toEqual(0); - }); - - describe('when `ilmPhase` is `unmanaged`', () => { - test('it returns the expected count for an `unmanaged` index', () => { - const index = 'auditbeat-custom-index-1'; - const ilmExplainRecord: IlmExplainLifecycleLifecycleExplain = { - index, - managed: false, - }; - const ilmExplain = { - [index]: ilmExplainRecord, - }; - - expect( - getPhaseCount({ - ilmExplain, - ilmPhase: 'unmanaged', // ilmPhase is unmanaged - indexName: index, // an unmanaged index - }) - ).toEqual(1); - }); - - test('it returns zero for a managed index', () => { - expect( - getPhaseCount({ - ilmExplain: mockIlmExplain, - ilmPhase: 'unmanaged', // ilmPhase is unmanaged - indexName, // a managed (`hot`) index - }) - ).toEqual(0); - }); - }); - }); - - describe('getIlmPhase', () => { - const isILMAvailable = true; - test('it returns undefined when the `ilmExplainRecord` is undefined', () => { - expect(getIlmPhase(undefined, isILMAvailable)).toBeUndefined(); - }); - - describe('when the `ilmExplainRecord` is a `IlmExplainLifecycleLifecycleExplainManaged` record', () => { - Object.keys(managed).forEach((phase) => - test(`it returns the expected phase when 'phase' is '${phase}'`, () => { - expect(getIlmPhase(managed[phase], isILMAvailable)).toEqual(phase); - }) - ); - - test(`it returns undefined when the 'phase' is unknown`, () => { - expect(getIlmPhase(other, isILMAvailable)).toBeUndefined(); - }); - }); - - describe('when the `ilmExplainRecord` is a `IlmExplainLifecycleLifecycleExplainUnmanaged` record', () => { - test('it returns `unmanaged`', () => { - expect(getIlmPhase(unmanaged, isILMAvailable)).toEqual('unmanaged'); - }); - }); - }); - - describe('getIlmExplainPhaseCounts', () => { - test('it returns the expected counts (all zeros) when `ilmExplain` is null', () => { - expect(getIlmExplainPhaseCounts(null)).toEqual({ - cold: 0, - frozen: 0, - hot: 0, - unmanaged: 0, - warm: 0, - }); - }); - - test('it returns the expected counts', () => { - const ilmExplain: Record = { - ...managed, - [unmanaged.index]: unmanaged, - }; - - expect(getIlmExplainPhaseCounts(ilmExplain)).toEqual({ - cold: 1, - frozen: 1, - hot: 1, - unmanaged: 1, - warm: 1, - }); - }); - }); - - describe('getIndexIncompatible', () => { - test('it returns undefined when `results` is undefined', () => { - expect( - getIndexIncompatible({ - indexName, - results: undefined, // <-- - }) - ).toBeUndefined(); - }); - - test('it returns undefined when `indexName` is not in the `results`', () => { - expect( - getIndexIncompatible({ - indexName: 'not_in_the_results', // <-- - results: mockDataQualityCheckResult, - }) - ).toBeUndefined(); - }); - - test('it returns the expected count', () => { - expect( - getIndexIncompatible({ - indexName: 'auditbeat-custom-index-1', - results: mockDataQualityCheckResult, - }) - ).toEqual(3); - }); - }); - - describe('getSummaryTableItems', () => { - const indexNames = [ - '.ds-packetbeat-8.6.1-2023.02.04-000001', - '.ds-packetbeat-8.5.3-2023.02.04-000001', - 'auditbeat-custom-index-1', - ]; - const pattern = 'auditbeat-*'; - const patternDocsCount = 4; - const results: Record = { - 'auditbeat-custom-index-1': { - docsCount: 4, - error: null, - ilmPhase: 'unmanaged', - incompatible: 3, - indexName: 'auditbeat-custom-index-1', - markdownComments: [ - '### auditbeat-custom-index-1\n', - '| Result | Index | Docs | Incompatible fields | ILM Phase |\n|--------|-------|------|---------------------|-----------|\n| ❌ | auditbeat-custom-index-1 | 4 (0.0%) | 3 | `unmanaged` |\n\n', - '### **Incompatible fields** `3` **Custom fields** `4` **ECS compliant fields** `2` **All fields** `9`\n', - "#### 3 incompatible fields, 0 fields with mappings in the same family\n\nFields are incompatible with ECS when index mappings, or the values of the fields in the index, don't conform to the Elastic Common Schema (ECS), version 8.6.1.\n\nIncompatible fields with mappings in the same family have exactly the same search behavior but may have different space usage or performance characteristics.\n\nWhen an incompatible field is not in the same family:\n❌ Detection engine rules referencing these fields may not match them correctly\n❌ Pages may not display some events or fields due to unexpected field mappings or values\n❌ Mappings or field values that don't comply with ECS are not supported\n", - '\n#### Incompatible field mappings - auditbeat-custom-index-1\n\n\n| Field | ECS mapping type (expected) | Index mapping type (actual) | \n|-------|-----------------------------|-----------------------------|\n| host.name | `keyword` | `text` |\n| source.ip | `ip` | `text` |\n\n#### Incompatible field values - auditbeat-custom-index-1\n\n\n| Field | ECS values (expected) | Document values (actual) | \n|-------|-----------------------|--------------------------|\n| event.category | `authentication`, `configuration`, `database`, `driver`, `email`, `file`, `host`, `iam`, `intrusion_detection`, `malware`, `network`, `package`, `process`, `registry`, `session`, `threat`, `vulnerability`, `web` | `an_invalid_category` (2),\n`theory` (1) |\n\n', - ], - pattern: 'auditbeat-*', - sameFamily: 0, - checkedAt: 1706526408000, - }, - }; - const isILMAvailable = true; - - test('it returns the expected summary table items', () => { - expect( - getSummaryTableItems({ - ilmExplain: mockIlmExplain, - indexNames, - isILMAvailable, - pattern, - patternDocsCount, - results, - sortByColumn: defaultSort.sort.field, - sortByDirection: defaultSort.sort.direction, - stats: mockStats, - }) - ).toEqual([ - { - docsCount: 1630289, - ilmPhase: 'hot', - incompatible: undefined, - indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: 733175040, - checkedAt: undefined, - }, - { - docsCount: 1628343, - ilmPhase: 'hot', - incompatible: undefined, - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: 731583142, - checkedAt: undefined, - }, - { - docsCount: 4, - ilmPhase: 'unmanaged', - incompatible: 3, - indexName: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: 28413, - checkedAt: 1706526408000, - }, - ]); - }); - - test('it returns the expected summary table items when isILMAvailable is false', () => { - expect( - getSummaryTableItems({ - ilmExplain: mockIlmExplain, - indexNames, - isILMAvailable: false, - pattern, - patternDocsCount, - results, - sortByColumn: defaultSort.sort.field, - sortByDirection: defaultSort.sort.direction, - stats: mockStats, - }) - ).toEqual([ - { - docsCount: 1630289, - ilmPhase: undefined, - incompatible: undefined, - indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: 733175040, - checkedAt: undefined, - }, - { - docsCount: 1628343, - ilmPhase: undefined, - incompatible: undefined, - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: 731583142, - checkedAt: undefined, - }, - { - docsCount: 4, - ilmPhase: undefined, - incompatible: 3, - indexName: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: 28413, - checkedAt: 1706526408000, - }, - ]); - }); - - test('it returns the expected summary table items when `sortByDirection` is ascending', () => { - expect( - getSummaryTableItems({ - ilmExplain: mockIlmExplain, - indexNames, - isILMAvailable, - pattern, - patternDocsCount, - results, - sortByColumn: defaultSort.sort.field, - sortByDirection: 'asc', // <-- ascending - stats: mockStats, - }) - ).toEqual([ - { - docsCount: 4, - ilmPhase: 'unmanaged', - incompatible: 3, - indexName: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: 28413, - checkedAt: 1706526408000, - }, - { - docsCount: 1628343, - ilmPhase: 'hot', - incompatible: undefined, - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: 731583142, - checkedAt: undefined, - }, - { - docsCount: 1630289, - ilmPhase: 'hot', - incompatible: undefined, - indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: 733175040, - checkedAt: undefined, - }, - ]); - }); - - test('it returns the expected summary table items when data is unavailable', () => { - expect( - getSummaryTableItems({ - ilmExplain: null, // <-- no data - indexNames, - isILMAvailable, - pattern, - patternDocsCount, - results: undefined, // <-- no data - sortByColumn: defaultSort.sort.field, - sortByDirection: defaultSort.sort.direction, - stats: null, // <-- no data - }) - ).toEqual([ - { - docsCount: 0, - ilmPhase: undefined, - incompatible: undefined, - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: undefined, - checkedAt: undefined, - }, - { - docsCount: 0, - ilmPhase: undefined, - incompatible: undefined, - indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: undefined, - checkedAt: undefined, - }, - { - docsCount: 0, - ilmPhase: undefined, - incompatible: undefined, - indexName: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - patternDocsCount: 4, - sizeInBytes: undefined, - checkedAt: undefined, - }, - ]); - }); - }); - - describe('shouldCreateIndexNames', () => { - const indexNames = [ - '.ds-packetbeat-8.6.1-2023.02.04-000001', - '.ds-packetbeat-8.5.3-2023.02.04-000001', - 'auditbeat-custom-index-1', - ]; - const isILMAvailable = true; - - test('returns true when `indexNames` does NOT exist, and the required `stats` and `ilmExplain` are available', () => { - expect( - shouldCreateIndexNames({ - ilmExplain: mockIlmExplain, - indexNames: undefined, - isILMAvailable, - newIndexNames: [], - stats: mockStats, - }) - ).toBe(true); - }); - - test('returns true when `isILMAvailable` is false, and the required `stats` is available, and `ilmExplain` is not available', () => { - expect( - shouldCreateIndexNames({ - ilmExplain: null, - indexNames: undefined, - isILMAvailable: false, - newIndexNames: [], - stats: mockStats, - }) - ).toBe(true); - }); - - test('returns false when `indexNames` exists, and the required `stats` and `ilmExplain` are available', () => { - expect( - shouldCreateIndexNames({ - ilmExplain: mockIlmExplain, - indexNames, - isILMAvailable, - newIndexNames: indexNames, - stats: mockStats, - }) - ).toBe(false); - }); - - test('returns false when `indexNames` does NOT exist, `stats` is NOT available, and `ilmExplain` is available', () => { - expect( - shouldCreateIndexNames({ - ilmExplain: mockIlmExplain, - indexNames: undefined, - isILMAvailable, - newIndexNames: [], - stats: null, - }) - ).toBe(false); - }); - - test('returns false when `indexNames` does NOT exist, `stats` is available, and `ilmExplain` is NOT available', () => { - expect( - shouldCreateIndexNames({ - ilmExplain: null, - indexNames: undefined, - isILMAvailable, - newIndexNames: [], - stats: mockStats, - }) - ).toBe(false); - }); - - test('returns false when `indexNames` does NOT exist, `stats` is NOT available, and `ilmExplain` is NOT available', () => { - expect( - shouldCreateIndexNames({ - ilmExplain: null, - indexNames: undefined, - isILMAvailable, - newIndexNames: [], - stats: null, - }) - ).toBe(false); - }); - - test('returns false when `indexNames` exists, `stats` is NOT available, and `ilmExplain` is NOT available', () => { - expect( - shouldCreateIndexNames({ - ilmExplain: null, - indexNames, - isILMAvailable, - newIndexNames: [], - stats: null, - }) - ).toBe(false); - }); - }); - - describe('shouldCreatePatternRollup', () => { - const isILMAvailable = true; - const newIndexNames = getIndexNames({ - stats: mockStats, - ilmExplain: mockIlmExplain, - ilmPhases: ['hot', 'unmanaged'], - isILMAvailable, - }); - const newDocsCount = getPatternDocsCount({ indexNames: newIndexNames, stats: mockStats }); - test('it returns false when the `patternRollup.docsCount` equals newDocsCount', () => { - expect( - shouldCreatePatternRollup({ - error: null, - ilmExplain: mockIlmExplain, - isILMAvailable, - newDocsCount: auditbeatWithAllResults.docsCount as number, - patternRollup: auditbeatWithAllResults, - stats: mockStats, - }) - ).toBe(false); - }); - - test('it returns true when all data and ILMExplain were loaded', () => { - expect( - shouldCreatePatternRollup({ - error: null, - ilmExplain: mockIlmExplain, - isILMAvailable, - newDocsCount, - patternRollup: undefined, - stats: mockStats, - }) - ).toBe(true); - }); - - test('it returns true when all data was loaded and ILM is not available', () => { - expect( - shouldCreatePatternRollup({ - error: null, - ilmExplain: null, - isILMAvailable: false, - newDocsCount, - patternRollup: undefined, - stats: mockStats, - }) - ).toBe(true); - }); - - test('it returns false when `stats`, but NOT `ilmExplain` was loaded', () => { - expect( - shouldCreatePatternRollup({ - error: null, - ilmExplain: null, - isILMAvailable, - newDocsCount, - patternRollup: undefined, - stats: mockStats, - }) - ).toBe(false); - }); - - test('it returns false when `stats` was NOT loaded, and `ilmExplain` was loaded', () => { - expect( - shouldCreatePatternRollup({ - error: null, - ilmExplain: mockIlmExplain, - isILMAvailable, - newDocsCount, - patternRollup: undefined, - stats: null, - }) - ).toBe(false); - }); - - test('it returns true if an error occurred, and NO data was loaded', () => { - expect( - shouldCreatePatternRollup({ - error: 'whoops', - ilmExplain: null, - isILMAvailable, - newDocsCount, - patternRollup: undefined, - stats: null, - }) - ).toBe(true); - }); - - test('it returns true if an error occurred, and just `stats` was loaded', () => { - expect( - shouldCreatePatternRollup({ - error: 'something went', - ilmExplain: null, - isILMAvailable, - newDocsCount, - patternRollup: undefined, - stats: mockStats, - }) - ).toBe(true); - }); - - test('it returns true if an error occurred, and just `ilmExplain` was loaded', () => { - expect( - shouldCreatePatternRollup({ - error: 'horribly wrong', - ilmExplain: mockIlmExplain, - isILMAvailable, - newDocsCount, - patternRollup: undefined, - stats: null, - }) - ).toBe(true); - }); - - test('it returns true if an error occurred, and all data was loaded', () => { - expect( - shouldCreatePatternRollup({ - error: 'over here', - ilmExplain: mockIlmExplain, - isILMAvailable, - newDocsCount, - patternRollup: undefined, - stats: mockStats, - }) - ).toBe(true); - }); - }); - - describe('getIndexPropertiesContainerId', () => { - const pattern = 'auditbeat-*'; - - test('it returns the expected id', () => { - expect(getIndexPropertiesContainerId({ indexName, pattern })).toEqual( - 'index-properties-container-auditbeat-*.ds-packetbeat-8.6.1-2023.02.04-000001' - ); - }); - }); - - describe('getPageIndex', () => { - const getPageIndexArgs: { - indexName: string; - items: IndexSummaryTableItem[]; - pageSize: number; - } = { - indexName: 'auditbeat-7.17.9-2023.04.09-000001', // <-- on page 2 of 3 (page index 1) - items: [ - { - docsCount: 48077, - incompatible: undefined, - indexName: 'auditbeat-7.14.2-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 43357342, - checkedAt: 1706526408000, - }, - { - docsCount: 48068, - incompatible: undefined, - indexName: 'auditbeat-7.3.2-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 32460397, - checkedAt: 1706526408000, - }, - { - docsCount: 48064, - incompatible: undefined, - indexName: 'auditbeat-7.11.2-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 42782794, - checkedAt: 1706526408000, - }, - { - docsCount: 47868, - incompatible: undefined, - indexName: 'auditbeat-7.6.2-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 31575964, - checkedAt: 1706526408000, - }, - { - docsCount: 47827, - incompatible: 20, - indexName: 'auditbeat-7.15.2-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 44130657, - checkedAt: 1706526408000, - }, - { - docsCount: 47642, - incompatible: undefined, - indexName: '.ds-auditbeat-8.4.3-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 42412521, - checkedAt: 1706526408000, - }, - { - docsCount: 47545, - incompatible: undefined, - indexName: 'auditbeat-7.16.3-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 41423244, - checkedAt: 1706526408000, - }, - { - docsCount: 47531, - incompatible: undefined, - indexName: 'auditbeat-7.5.2-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 32394133, - checkedAt: 1706526408000, - }, - { - docsCount: 47530, - incompatible: undefined, - indexName: 'auditbeat-7.12.1-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 43015519, - checkedAt: 1706526408000, - }, - { - docsCount: 47520, - incompatible: undefined, - indexName: '.ds-auditbeat-8.0.1-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 42230604, - checkedAt: 1706526408000, - }, - { - docsCount: 47496, - incompatible: undefined, - indexName: '.ds-auditbeat-8.2.3-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 41710968, - checkedAt: 1706526408000, - }, - { - docsCount: 47486, - incompatible: undefined, - indexName: '.ds-auditbeat-8.5.3-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 42295944, - checkedAt: 1706526408000, - }, - { - docsCount: 47486, - incompatible: undefined, - indexName: '.ds-auditbeat-8.3.3-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 41761321, - checkedAt: 1706526408000, - }, - { - docsCount: 47460, - incompatible: undefined, - indexName: 'auditbeat-7.2.1-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 30481198, - checkedAt: 1706526408000, - }, - { - docsCount: 47439, - incompatible: undefined, - indexName: 'auditbeat-7.17.9-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 41554041, - checkedAt: 1706526408000, - }, - { - docsCount: 47395, - incompatible: undefined, - indexName: 'auditbeat-7.9.3-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 42815907, - checkedAt: 1706526408000, - }, - { - docsCount: 47394, - incompatible: undefined, - indexName: '.ds-auditbeat-8.7.0-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 41157112, - checkedAt: 1706526408000, - }, - { - docsCount: 47372, - incompatible: undefined, - indexName: 'auditbeat-7.4.2-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 31626792, - checkedAt: 1706526408000, - }, - { - docsCount: 47369, - incompatible: undefined, - indexName: 'auditbeat-7.13.4-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 41828969, - checkedAt: 1706526408000, - }, - { - docsCount: 47348, - incompatible: undefined, - indexName: 'auditbeat-7.7.1-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 40010773, - checkedAt: 1706526408000, - }, - { - docsCount: 47339, - incompatible: undefined, - indexName: 'auditbeat-7.10.2-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 43480570, - checkedAt: 1706526408000, - }, - { - docsCount: 47325, - incompatible: undefined, - indexName: '.ds-auditbeat-8.1.3-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 41822475, - checkedAt: 1706526408000, - }, - { - docsCount: 47294, - incompatible: undefined, - indexName: 'auditbeat-7.8.0-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 43018490, - checkedAt: 1706526408000, - }, - { - docsCount: 24276, - incompatible: undefined, - indexName: '.ds-auditbeat-8.6.1-2023.04.09-000001', - ilmPhase: 'hot', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 23579440, - checkedAt: 1706526408000, - }, - { - docsCount: 4, - incompatible: undefined, - indexName: 'auditbeat-custom-index-1', - ilmPhase: 'unmanaged', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 28409, - checkedAt: 1706526408000, - }, - { - docsCount: 0, - incompatible: undefined, - indexName: 'auditbeat-custom-empty-index-1', - ilmPhase: 'unmanaged', - pattern: 'auditbeat-*', - patternDocsCount: 1118155, - sizeInBytes: 247, - checkedAt: 1706526408000, - }, - ], - pageSize: 10, - }; - - test('it returns the expected page index', () => { - expect(getPageIndex(getPageIndexArgs)).toEqual(1); - }); - - test('it returns the expected page index for the first item', () => { - const firstItemIndexName = 'auditbeat-7.14.2-2023.04.09-000001'; - - expect( - getPageIndex({ - ...getPageIndexArgs, - indexName: firstItemIndexName, - }) - ).toEqual(0); - }); - - test('it returns the expected page index for the last item', () => { - const lastItemIndexName = 'auditbeat-custom-empty-index-1'; - - expect( - getPageIndex({ - ...getPageIndexArgs, - indexName: lastItemIndexName, - }) - ).toEqual(2); - }); - - test('it returns null when the index cannot be found', () => { - expect( - getPageIndex({ - ...getPageIndexArgs, - indexName: 'does_not_exist', // <-- this index is not in the items - }) - ).toBeNull(); - }); - - test('it returns null when `pageSize` is zero', () => { - expect( - getPageIndex({ - ...getPageIndexArgs, - pageSize: 0, // <-- invalid - }) - ).toBeNull(); - }); - }); -}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/helpers.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/helpers.ts deleted file mode 100644 index 5470854fd2ff0..0000000000000 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/helpers.ts +++ /dev/null @@ -1,258 +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 { IlmExplainLifecycleLifecycleExplain } from '@elastic/elasticsearch/lib/api/types'; -import { isEqual, orderBy } from 'lodash/fp'; - -import type { - IlmPhase, - IlmExplainPhaseCounts, - DataQualityCheckResult, - PatternRollup, - SortConfig, - MeteringStatsIndex, -} from '../../../types'; -import { IndexSummaryTableItem } from './types'; -import { getDocsCount, getSizeInBytes } from '../../../utils/stats'; - -export const isManaged = ( - ilmExplainRecord: IlmExplainLifecycleLifecycleExplain | undefined -): boolean => ilmExplainRecord?.managed === true; - -export const getPhaseCount = ({ - ilmExplain, - ilmPhase, - indexName, -}: { - ilmExplain: Record | null; - ilmPhase: IlmPhase; - indexName: string; -}): number => { - const ilmExplainRecord = ilmExplain != null ? ilmExplain[indexName] : undefined; - - if (ilmPhase === 'unmanaged') { - return isManaged(ilmExplainRecord) ? 0 : 1; - } else if (ilmExplainRecord != null && 'phase' in ilmExplainRecord) { - return ilmExplainRecord.phase === ilmPhase ? 1 : 0; - } - - return 0; -}; - -export const getIlmPhase = ( - ilmExplainRecord: IlmExplainLifecycleLifecycleExplain | undefined, - isILMAvailable: boolean -): IlmPhase | undefined => { - if (ilmExplainRecord == null || !isILMAvailable) { - return undefined; - } - - if ('phase' in ilmExplainRecord) { - const phase = ilmExplainRecord.phase; - - switch (phase) { - case 'hot': - return 'hot'; - case 'warm': - return 'warm'; - case 'cold': - return 'cold'; - case 'frozen': - return 'frozen'; - default: - return undefined; - } - } else { - return 'unmanaged'; - } -}; - -export const getIlmExplainPhaseCounts = ( - ilmExplain: Record | null -): IlmExplainPhaseCounts => { - const indexNames = ilmExplain != null ? Object.keys(ilmExplain) : []; - - return indexNames.reduce( - (acc, indexName) => ({ - hot: - acc.hot + - getPhaseCount({ - ilmExplain, - ilmPhase: 'hot', - indexName, - }), - warm: - acc.warm + - getPhaseCount({ - ilmExplain, - ilmPhase: 'warm', - indexName, - }), - cold: - acc.cold + - getPhaseCount({ - ilmExplain, - ilmPhase: 'cold', - indexName, - }), - frozen: - acc.frozen + - getPhaseCount({ - ilmExplain, - ilmPhase: 'frozen', - indexName, - }), - unmanaged: - acc.unmanaged + - getPhaseCount({ - ilmExplain, - ilmPhase: 'unmanaged', - indexName, - }), - }), - { - hot: 0, - warm: 0, - cold: 0, - frozen: 0, - unmanaged: 0, - } - ); -}; - -export const getIndexIncompatible = ({ - indexName, - results, -}: { - indexName: string; - results: Record | undefined; -}): number | undefined => { - if (results == null || results[indexName] == null) { - return undefined; - } - - return results[indexName].incompatible; -}; - -export const getSummaryTableItems = ({ - ilmExplain, - indexNames, - isILMAvailable, - pattern, - patternDocsCount, - results, - sortByColumn, - sortByDirection, - stats, -}: { - ilmExplain: Record | null; - indexNames: string[]; - isILMAvailable: boolean; - pattern: string; - patternDocsCount: number; - results: Record | undefined; - sortByColumn: string; - sortByDirection: 'desc' | 'asc'; - stats: Record | null; -}): IndexSummaryTableItem[] => { - const summaryTableItems = indexNames.map((indexName) => ({ - docsCount: getDocsCount({ stats, indexName }), - incompatible: getIndexIncompatible({ indexName, results }), - indexName, - ilmPhase: - isILMAvailable && ilmExplain != null - ? getIlmPhase(ilmExplain[indexName], isILMAvailable) - : undefined, - pattern, - patternDocsCount, - sizeInBytes: getSizeInBytes({ stats, indexName }), - checkedAt: results?.[indexName]?.checkedAt, - })); - - return orderBy([sortByColumn], [sortByDirection], summaryTableItems); -}; - -export const shouldCreateIndexNames = ({ - ilmExplain, - indexNames, - isILMAvailable, - newIndexNames, - stats, -}: { - ilmExplain: Record | null; - indexNames: string[] | undefined; - isILMAvailable: boolean; - newIndexNames: string[]; - stats: Record | null; -}): boolean => { - return ( - !isEqual(newIndexNames, indexNames) && - stats != null && - ((isILMAvailable && ilmExplain != null) || !isILMAvailable) - ); -}; - -export const shouldCreatePatternRollup = ({ - error, - ilmExplain, - isILMAvailable, - newDocsCount, - patternRollup, - stats, -}: { - error: string | null; - ilmExplain: Record | null; - isILMAvailable: boolean; - newDocsCount: number; - patternRollup: PatternRollup | undefined; - stats: Record | null; -}): boolean => { - if (patternRollup?.docsCount === newDocsCount) { - return false; - } - - const allDataLoaded: boolean = - stats != null && ((isILMAvailable && ilmExplain != null) || !isILMAvailable); - const errorOccurred: boolean = error != null; - - return allDataLoaded || errorOccurred; -}; - -export const getIndexPropertiesContainerId = ({ - indexName, - pattern, -}: { - indexName: string; - pattern: string; -}): string => `index-properties-container-${pattern}${indexName}`; - -export const defaultSort: SortConfig = { - sort: { - direction: 'desc', - field: 'docsCount', - }, -}; - -export const MIN_PAGE_SIZE = 10; - -export const getPageIndex = ({ - indexName, - items, - pageSize, -}: { - indexName: string; - items: IndexSummaryTableItem[]; - pageSize: number; -}): number | null => { - const index = items.findIndex((x) => x.indexName === indexName); - - if (index !== -1 && pageSize !== 0) { - return Math.floor(index / pageSize); - } else { - return null; - } -}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index.tsx index a59fe7f87d3a5..fc3c698c7a460 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index.tsx @@ -9,22 +9,13 @@ import { EuiSpacer, useGeneratedHtmlId } from '@elastic/eui'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { ErrorEmptyPrompt } from './error_empty_prompt'; -import { - defaultSort, - getIlmExplainPhaseCounts, - getPageIndex, - getSummaryTableItems, - MIN_PAGE_SIZE, - shouldCreateIndexNames, - shouldCreatePatternRollup, -} from './helpers'; import { getTotalPatternIncompatible, getTotalPatternIndicesChecked } from '../../../utils/stats'; import { getIndexNames, getPatternDocsCount, getPatternSizeInBytes } from './utils/stats'; import { LoadingEmptyPrompt } from './loading_empty_prompt'; import { PatternSummary } from './pattern_summary'; import { RemoteClustersCallout } from './remote_clusters_callout'; import { SummaryTable } from './summary_table'; -import { getSummaryTableColumns } from './summary_table/helpers'; +import { getSummaryTableColumns } from './summary_table/utils/columns'; import * as i18n from './translations'; import type { PatternRollup, SelectedIndex, SortConfig } from '../../../types'; import { useIlmExplain } from './hooks/use_ilm_explain'; @@ -34,6 +25,13 @@ import { PatternAccordion, PatternAccordionChildren } from './styles'; import { IndexCheckFlyout } from './index_check_flyout'; import { useResultsRollupContext } from '../../../contexts/results_rollup_context'; import { useIndicesCheckContext } from '../../../contexts/indices_check_context'; +import { getSummaryTableItems } from '../../../utils/get_summary_table_items'; +import { defaultSort } from '../../../constants'; +import { MIN_PAGE_SIZE } from './constants'; +import { getIlmExplainPhaseCounts } from './utils/ilm_explain'; +import { shouldCreateIndexNames } from './utils/should_create_index_names'; +import { shouldCreatePatternRollup } from './utils/should_create_pattern_rollup'; +import { getPageIndex } from './utils/get_page_index'; const EMPTY_INDEX_NAMES: string[] = []; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index.tsx index 6748fd0651799..0ae749a216856 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index.tsx @@ -21,6 +21,8 @@ import { } from '@elastic/eui'; import React, { useCallback, useEffect } from 'react'; import moment from 'moment'; + +import { getIlmPhase } from '../../../../utils/get_ilm_phase'; import { getDocsCount, getSizeInBytes } from '../../../../utils/stats'; import { useIndicesCheckContext } from '../../../../contexts/indices_check_context'; @@ -28,7 +30,6 @@ import { EMPTY_STAT } from '../../../../constants'; import { MeteringStatsIndex, PatternRollup } from '../../../../types'; import { useDataQualityContext } from '../../../../data_quality_context'; import { IndexProperties } from './index_properties'; -import { getIlmPhase } from '../helpers'; import { IndexResultBadge } from '../index_result_badge'; import { useCurrentWindowWidth } from './hooks/use_current_window_width'; import { CHECK_NOW } from './translations'; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers.test.ts deleted file mode 100644 index 962fa7a825714..0000000000000 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers.test.ts +++ /dev/null @@ -1,249 +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 { getMappingsProperties, getSortedPartitionedFieldMetadata } from './helpers'; -import { mockIndicesGetMappingIndexMappingRecords } from '../../../../../mock/indices_get_mapping_index_mapping_record/mock_indices_get_mapping_index_mapping_record'; -import { mockMappingsProperties } from '../../../../../mock/mappings_properties/mock_mappings_properties'; -import { EcsFlatTyped } from '../../../../../constants'; - -describe('helpers', () => { - describe('getSortedPartitionedFieldMetadata', () => { - test('it returns null when mappings are loading', () => { - expect( - getSortedPartitionedFieldMetadata({ - ecsMetadata: EcsFlatTyped, - loadingMappings: true, // <-- - mappingsProperties: mockMappingsProperties, - unallowedValues: {}, - }) - ).toBeNull(); - }); - - test('it returns null when `unallowedValues` is null', () => { - expect( - getSortedPartitionedFieldMetadata({ - ecsMetadata: EcsFlatTyped, - loadingMappings: false, - mappingsProperties: mockMappingsProperties, - unallowedValues: null, // <-- - }) - ).toBeNull(); - }); - - describe('when `mappingsProperties` is unknown', () => { - const incompatibleFieldMetadata = { - ...EcsFlatTyped['@timestamp'], - hasEcsMetadata: true, - indexFieldName: '@timestamp', - indexFieldType: '-', - indexInvalidValues: [], - isEcsCompliant: false, - isInSameFamily: false, - }; - const expected = { - all: [incompatibleFieldMetadata], - custom: [], - ecsCompliant: [], - incompatible: [incompatibleFieldMetadata], - sameFamily: [], - }; - - test('it returns a `PartitionedFieldMetadata` with an `incompatible` `@timestamp` when `mappingsProperties` is undefined', () => { - expect( - getSortedPartitionedFieldMetadata({ - ecsMetadata: EcsFlatTyped, - loadingMappings: false, - mappingsProperties: undefined, // <-- - unallowedValues: {}, - }) - ).toEqual(expected); - }); - - test('it returns a `PartitionedFieldMetadata` with an `incompatible` `@timestamp` when `mappingsProperties` is null', () => { - expect( - getSortedPartitionedFieldMetadata({ - ecsMetadata: EcsFlatTyped, - loadingMappings: false, - mappingsProperties: null, // <-- - unallowedValues: {}, - }) - ).toEqual(expected); - }); - }); - - test('it returns the expected sorted field metadata', () => { - const unallowedValues = { - 'event.category': [ - { - count: 2, - fieldName: 'an_invalid_category', - }, - { - count: 1, - fieldName: 'theory', - }, - ], - 'event.kind': [], - 'event.outcome': [], - 'event.type': [], - }; - - expect( - getSortedPartitionedFieldMetadata({ - ecsMetadata: EcsFlatTyped, - loadingMappings: false, - mappingsProperties: mockMappingsProperties, - unallowedValues, - }) - ).toMatchObject({ - all: expect.arrayContaining([ - expect.objectContaining({ - name: expect.any(String), - flat_name: expect.any(String), - dashed_name: expect.any(String), - description: expect.any(String), - hasEcsMetadata: true, - isEcsCompliant: expect.any(Boolean), - isInSameFamily: expect.any(Boolean), - }), - ]), - ecsCompliant: expect.arrayContaining([ - expect.objectContaining({ - name: expect.any(String), - flat_name: expect.any(String), - dashed_name: expect.any(String), - description: expect.any(String), - hasEcsMetadata: true, - isEcsCompliant: true, - isInSameFamily: false, - }), - ]), - custom: expect.arrayContaining([ - expect.objectContaining({ - indexFieldName: expect.any(String), - indexFieldType: expect.any(String), - indexInvalidValues: expect.any(Array), - hasEcsMetadata: expect.any(Boolean), - isEcsCompliant: expect.any(Boolean), - isInSameFamily: expect.any(Boolean), - }), - ]), - incompatible: expect.arrayContaining([ - expect.objectContaining({ - name: expect.any(String), - flat_name: expect.any(String), - dashed_name: expect.any(String), - description: expect.any(String), - hasEcsMetadata: expect.any(Boolean), - isEcsCompliant: false, - isInSameFamily: false, - }), - ]), - sameFamily: [], - }); - }); - }); - - describe('getMappingsProperties', () => { - test('it returns the expected mapping properties', () => { - expect( - getMappingsProperties({ - indexes: mockIndicesGetMappingIndexMappingRecords, - indexName: 'auditbeat-custom-index-1', - }) - ).toEqual({ - '@timestamp': { - type: 'date', - }, - event: { - properties: { - category: { - ignore_above: 1024, - type: 'keyword', - }, - }, - }, - host: { - properties: { - name: { - fields: { - keyword: { - ignore_above: 256, - type: 'keyword', - }, - }, - type: 'text', - }, - }, - }, - some: { - properties: { - field: { - fields: { - keyword: { - ignore_above: 256, - type: 'keyword', - }, - }, - type: 'text', - }, - }, - }, - source: { - properties: { - ip: { - fields: { - keyword: { - ignore_above: 256, - type: 'keyword', - }, - }, - type: 'text', - }, - port: { - type: 'long', - }, - }, - }, - }); - }); - - test('it returns null when `indexes` is null', () => { - expect( - getMappingsProperties({ - indexes: null, // <-- - indexName: 'auditbeat-custom-index-1', - }) - ).toBeNull(); - }); - - test('it returns null when `indexName` does not exist in `indexes`', () => { - expect( - getMappingsProperties({ - indexes: mockIndicesGetMappingIndexMappingRecords, - indexName: 'does-not-exist', // <-- - }) - ).toBeNull(); - }); - - test('it returns null when `properties` does not exist in the mappings', () => { - const missingProperties = { - ...mockIndicesGetMappingIndexMappingRecords, - foozle: { - mappings: {}, // <-- does not have a `properties` - }, - }; - - expect( - getMappingsProperties({ - indexes: missingProperties, - indexName: 'foozle', - }) - ).toBeNull(); - }); - }); -}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers.ts deleted file mode 100644 index cf4ae6562b8ed..0000000000000 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers.ts +++ /dev/null @@ -1,92 +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 { - IndicesGetMappingIndexMappingRecord, - MappingProperty, -} from '@elastic/elasticsearch/lib/api/types'; -import { sortBy } from 'lodash/fp'; - -import { EcsFlatTyped } from '../../../../../constants'; -import type { PartitionedFieldMetadata, UnallowedValueCount } from '../../../../../types'; -import { - getEnrichedFieldMetadata, - getFieldTypes, - getMissingTimestampFieldMetadata, - getPartitionedFieldMetadata, -} from './utils/metadata'; - -export const ALL_TAB_ID = 'allTab'; -export const ECS_COMPLIANT_TAB_ID = 'ecsCompliantTab'; -export const CUSTOM_TAB_ID = 'customTab'; -export const INCOMPATIBLE_TAB_ID = 'incompatibleTab'; -export const SAME_FAMILY_TAB_ID = 'sameFamilyTab'; - -export const EMPTY_METADATA: PartitionedFieldMetadata = { - all: [], - ecsCompliant: [], - custom: [], - incompatible: [], - sameFamily: [], -}; - -export const getSortedPartitionedFieldMetadata = ({ - ecsMetadata, - loadingMappings, - mappingsProperties, - unallowedValues, -}: { - ecsMetadata: EcsFlatTyped; - loadingMappings: boolean; - mappingsProperties: Record | null | undefined; - unallowedValues: Record | null; -}): PartitionedFieldMetadata | null => { - if (loadingMappings || unallowedValues == null) { - return null; - } - - // this covers scenario when we try to check an empty index - // or index without required @timestamp field in the mapping - // - // we create an artifical incompatible timestamp field metadata - // so that we can signal to user that the incompatibility is due to missing timestamp - if (mappingsProperties == null) { - const missingTimestampFieldMetadata = getMissingTimestampFieldMetadata(); - return { - ...EMPTY_METADATA, - all: [missingTimestampFieldMetadata], - incompatible: [missingTimestampFieldMetadata], - }; - } - - const fieldTypes = getFieldTypes(mappingsProperties); - - const enrichedFieldMetadata = sortBy( - 'indexFieldName', - fieldTypes.map((fieldMetadata) => - getEnrichedFieldMetadata({ ecsMetadata, fieldMetadata, unallowedValues }) - ) - ); - - const partitionedFieldMetadata = getPartitionedFieldMetadata(enrichedFieldMetadata); - - return partitionedFieldMetadata; -}; - -export const getMappingsProperties = ({ - indexes, - indexName, -}: { - indexes: Record | null; - indexName: string; -}): Record | null => { - if (indexes != null && indexes[indexName] != null) { - return indexes[indexName].mappings.properties ?? null; - } - - return null; -}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index.tsx index f28d506cda0fa..03d293a02e69a 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index.tsx @@ -10,13 +10,13 @@ import React from 'react'; import { EuiSpacer } from '@elastic/eui'; import { ErrorEmptyPrompt } from '../../error_empty_prompt'; import { LoadingEmptyPrompt } from '../../loading_empty_prompt'; -import { getIndexPropertiesContainerId } from '../../helpers'; import * as i18n from './translations'; import type { IlmPhase, PatternRollup } from '../../../../../types'; import { useIndicesCheckContext } from '../../../../../contexts/indices_check_context'; import { IndexCheckFields } from './index_check_fields'; import { IndexStatsPanel } from './index_stats_panel'; import { useDataQualityContext } from '../../../../../data_quality_context'; +import { getIndexPropertiesContainerId } from './utils/get_index_properties_container_id'; export interface Props { docsCount: number; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/constants.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/constants.ts new file mode 100644 index 0000000000000..889f014a66f1b --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/constants.ts @@ -0,0 +1,12 @@ +/* + * 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. + */ + +export const ALL_TAB_ID = 'allTab'; +export const ECS_COMPLIANT_TAB_ID = 'ecsCompliantTab'; +export const CUSTOM_TAB_ID = 'customTab'; +export const INCOMPATIBLE_TAB_ID = 'incompatibleTab'; +export const SAME_FAMILY_TAB_ID = 'sameFamilyTab'; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/index.tsx index db6696e36212a..7e69a906c42ad 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/index.tsx @@ -9,9 +9,10 @@ import React, { useMemo, useState } from 'react'; import { EuiButtonGroup, EuiFlexGroup, EuiSpacer } from '@elastic/eui'; import styled from 'styled-components'; +import { EMPTY_METADATA } from '../../../../../../constants'; import { useDataQualityContext } from '../../../../../../data_quality_context'; import { useIndicesCheckContext } from '../../../../../../contexts/indices_check_context'; -import { EMPTY_METADATA, INCOMPATIBLE_TAB_ID } from '../helpers'; +import { INCOMPATIBLE_TAB_ID } from './constants'; import { IlmPhase, PatternRollup } from '../../../../../../types'; import { getTabs } from './tabs/helpers'; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/tabs/helpers.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/tabs/helpers.tsx index fa4e63afc6f3b..149697dc3a741 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/tabs/helpers.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/tabs/helpers.tsx @@ -21,7 +21,7 @@ import { ECS_COMPLIANT_TAB_ID, INCOMPATIBLE_TAB_ID, SAME_FAMILY_TAB_ID, -} from '../../helpers'; +} from '../constants'; import { getMarkdownComment } from '../../markdown/helpers'; import * as i18n from '../../translations'; import { SameFamilyTab } from './same_family_tab'; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/markdown/helpers.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/markdown/helpers.ts index cc32fab713881..ece1636cbad5f 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/markdown/helpers.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/markdown/helpers.ts @@ -41,7 +41,6 @@ import type { PatternRollup, UnallowedValueCount, } from '../../../../../../types'; -import { getDocsCountPercent } from '../../../summary_table/helpers'; import { DOCS, ILM_PHASE, @@ -53,6 +52,7 @@ import { SIZE, } from '../../../summary_table/translations'; import { DATA_QUALITY_TITLE } from '../../../../../../translations'; +import { getDocsCountPercent } from '../../../utils/stats'; export const EMPTY_PLACEHOLDER = '--'; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/get_index_properties_container_id.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/get_index_properties_container_id.test.ts new file mode 100644 index 0000000000000..68f4414a624a0 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/get_index_properties_container_id.test.ts @@ -0,0 +1,19 @@ +/* + * 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 { getIndexPropertiesContainerId } from './get_index_properties_container_id'; + +describe('getIndexPropertiesContainerId', () => { + const pattern = 'auditbeat-*'; + const indexName = '.ds-packetbeat-8.6.1-2023.02.04-000001'; + + test('it returns the expected id', () => { + expect(getIndexPropertiesContainerId({ indexName, pattern })).toEqual( + 'index-properties-container-auditbeat-*.ds-packetbeat-8.6.1-2023.02.04-000001' + ); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/get_index_properties_container_id.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/get_index_properties_container_id.ts new file mode 100644 index 0000000000000..2a7172d58a7b4 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/get_index_properties_container_id.ts @@ -0,0 +1,14 @@ +/* + * 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. + */ + +export const getIndexPropertiesContainerId = ({ + indexName, + pattern, +}: { + indexName: string; + pattern: string; +}): string => `index-properties-container-${pattern}${indexName}`; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/index.tsx index 9dcd3ca18e729..5128130971b09 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/index.tsx @@ -9,7 +9,8 @@ import { EuiBadge, EuiToolTip } from '@elastic/eui'; import React from 'react'; import styled from 'styled-components'; -import { getIndexResultBadgeColor, getIndexResultToolTip } from './helpers'; +import { getIndexResultToolTip } from '../utils/get_index_result_tooltip'; +import { getIndexResultBadgeColor } from './utils/get_index_result_badge_color'; import * as i18n from './translations'; const StyledBadge = styled(EuiBadge)` diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/utils/get_index_result_badge_color.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/utils/get_index_result_badge_color.test.ts new file mode 100644 index 0000000000000..68a5da877da9a --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/utils/get_index_result_badge_color.test.ts @@ -0,0 +1,22 @@ +/* + * 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 { getIndexResultBadgeColor } from './get_index_result_badge_color'; + +describe('getIndexResultBadgeColor', () => { + test('it returns `ghost` when `incompatible` is undefined', () => { + expect(getIndexResultBadgeColor(undefined)).toEqual('ghost'); + }); + + test('it returns `success` when `incompatible` is zero', () => { + expect(getIndexResultBadgeColor(0)).toEqual('#6dcbb1'); + }); + + test('it returns `danger` when `incompatible` is NOT zero', () => { + expect(getIndexResultBadgeColor(1)).toEqual('danger'); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/utils/get_index_result_badge_color.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/utils/get_index_result_badge_color.ts new file mode 100644 index 0000000000000..61f3aaa89a372 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/utils/get_index_result_badge_color.ts @@ -0,0 +1,16 @@ +/* + * 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. + */ + +export const getIndexResultBadgeColor = (incompatible: number | undefined): string => { + if (incompatible == null) { + return 'ghost'; + } else if (incompatible === 0) { + return '#6dcbb1'; + } else { + return 'danger'; + } +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/helpers.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/helpers.test.ts deleted file mode 100644 index c00dac59be3c0..0000000000000 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/helpers.test.ts +++ /dev/null @@ -1,97 +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 { getPatternResultTooltip, showResult } from './helpers'; -import { ALL_PASSED, SOME_FAILED, SOME_UNCHECKED } from './translations'; - -describe('helpers', () => { - describe('getPatternResultTooltip', () => { - test('it returns the expected tool tip when `incompatible` is undefined', () => { - expect(getPatternResultTooltip(undefined)).toEqual(SOME_UNCHECKED); - }); - - test('it returns the expected tool tip when `incompatible` is zero', () => { - expect(getPatternResultTooltip(0)).toEqual(ALL_PASSED); - }); - - test('it returns the expected tool tip when `incompatible` is non-zero', () => { - expect(getPatternResultTooltip(1)).toEqual(SOME_FAILED); - }); - }); - - describe('showResult', () => { - test('it returns true when `incompatible` is defined, and `indicesChecked` equals `indices`', () => { - const incompatible = 0; // none of the indices checked had incompatible fields - const indicesChecked = 2; // all indices were checked - const indices = 2; // total indices - - expect( - showResult({ - incompatible, - indices, - indicesChecked, - }) - ).toBe(true); - }); - - test('it returns false when `incompatible` is defined, and `indices` does NOT equal `indicesChecked`', () => { - const incompatible = 0; // the one index checked (so far) didn't have any incompatible fields - const indicesChecked = 1; // only one index has been checked so far - const indices = 2; // total indices - - expect( - showResult({ - incompatible, - indices, - indicesChecked, - }) - ).toBe(false); - }); - - test('it returns false when `incompatible` is undefined', () => { - const incompatible = undefined; // a state of undefined indicates there are no results - const indicesChecked = 1; // all indices were checked - const indices = 1; // total indices - - expect( - showResult({ - incompatible, - indices, - indicesChecked, - }) - ).toBe(false); - }); - - test('it returns false when `indices` is undefined', () => { - const incompatible = 0; // none of the indices checked had incompatible fields - const indicesChecked = 2; // all indices were checked - const indices = undefined; // the total number of indices is unknown - - expect( - showResult({ - incompatible, - indices, - indicesChecked, - }) - ).toBe(false); - }); - - test('it returns false when `indicesChecked` is undefined', () => { - const incompatible = 0; // none of the indices checked had incompatible fields - const indicesChecked = undefined; // no indices were checked - const indices = 2; // total indices - - expect( - showResult({ - incompatible, - indices, - indicesChecked, - }) - ).toBe(false); - }); - }); -}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/ilm_phase_counts/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/ilm_phase_counts/index.test.tsx index f9e04fc707b01..5de02814fd5cd 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/ilm_phase_counts/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/ilm_phase_counts/index.test.tsx @@ -15,7 +15,7 @@ import React from 'react'; import { TestExternalProviders } from '../../../../../../mock/test_providers/test_providers'; import { IlmPhaseCounts } from '.'; -import { getIlmExplainPhaseCounts } from '../../../helpers'; +import { getIlmExplainPhaseCounts } from '../../../utils/ilm_explain'; const hot: IlmExplainLifecycleLifecycleExplainManaged = { index: '.ds-packetbeat-8.6.1-2023.02.04-000001', diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/index.tsx index 03fede1fb7675..f88c9b8f977b0 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/index.tsx @@ -8,11 +8,12 @@ import { EuiTitle, EuiToolTip, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; -import { getPatternResultTooltip, showResult } from './helpers'; -import { IlmPhaseCounts } from './ilm_phase_counts'; -import * as i18n from '../translations'; import type { IlmExplainPhaseCounts } from '../../../../../types'; import { IndexResultBadge } from '../../index_result_badge'; +import * as i18n from '../translations'; +import { IlmPhaseCounts } from './ilm_phase_counts'; +import { getPatternResultTooltip } from './utils/get_pattern_result_tooltip'; +import { showResult } from './utils/show_result'; interface Props { incompatible: number | undefined; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/get_pattern_result_tooltip.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/get_pattern_result_tooltip.test.ts new file mode 100644 index 0000000000000..525eaab098ba6 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/get_pattern_result_tooltip.test.ts @@ -0,0 +1,25 @@ +/* + * 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 { getPatternResultTooltip } from './get_pattern_result_tooltip'; +import { ALL_PASSED, SOME_FAILED, SOME_UNCHECKED } from '../translations'; + +describe('helpers', () => { + describe('getPatternResultTooltip', () => { + test('it returns the expected tool tip when `incompatible` is undefined', () => { + expect(getPatternResultTooltip(undefined)).toEqual(SOME_UNCHECKED); + }); + + test('it returns the expected tool tip when `incompatible` is zero', () => { + expect(getPatternResultTooltip(0)).toEqual(ALL_PASSED); + }); + + test('it returns the expected tool tip when `incompatible` is non-zero', () => { + expect(getPatternResultTooltip(1)).toEqual(SOME_FAILED); + }); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/get_pattern_result_tooltip.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/get_pattern_result_tooltip.ts new file mode 100644 index 0000000000000..2bb51c19ced31 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/get_pattern_result_tooltip.ts @@ -0,0 +1,18 @@ +/* + * 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 * as i18n from '../translations'; + +export const getPatternResultTooltip = (incompatible: number | undefined): string => { + if (incompatible == null) { + return i18n.SOME_UNCHECKED; + } else if (incompatible === 0) { + return i18n.ALL_PASSED; + } else { + return i18n.SOME_FAILED; + } +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/show_result.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/show_result.test.ts new file mode 100644 index 0000000000000..4957f8c65c2da --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/show_result.test.ts @@ -0,0 +1,80 @@ +/* + * 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 { showResult } from './show_result'; + +describe('showResult', () => { + test('it returns true when `incompatible` is defined, and `indicesChecked` equals `indices`', () => { + const incompatible = 0; // none of the indices checked had incompatible fields + const indicesChecked = 2; // all indices were checked + const indices = 2; // total indices + + expect( + showResult({ + incompatible, + indices, + indicesChecked, + }) + ).toBe(true); + }); + + test('it returns false when `incompatible` is defined, and `indices` does NOT equal `indicesChecked`', () => { + const incompatible = 0; // the one index checked (so far) didn't have any incompatible fields + const indicesChecked = 1; // only one index has been checked so far + const indices = 2; // total indices + + expect( + showResult({ + incompatible, + indices, + indicesChecked, + }) + ).toBe(false); + }); + + test('it returns false when `incompatible` is undefined', () => { + const incompatible = undefined; // a state of undefined indicates there are no results + const indicesChecked = 1; // all indices were checked + const indices = 1; // total indices + + expect( + showResult({ + incompatible, + indices, + indicesChecked, + }) + ).toBe(false); + }); + + test('it returns false when `indices` is undefined', () => { + const incompatible = 0; // none of the indices checked had incompatible fields + const indicesChecked = 2; // all indices were checked + const indices = undefined; // the total number of indices is unknown + + expect( + showResult({ + incompatible, + indices, + indicesChecked, + }) + ).toBe(false); + }); + + test('it returns false when `indicesChecked` is undefined', () => { + const incompatible = 0; // none of the indices checked had incompatible fields + const indicesChecked = undefined; // no indices were checked + const indices = 2; // total indices + + expect( + showResult({ + incompatible, + indices, + indicesChecked, + }) + ).toBe(false); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/helpers.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/show_result.ts similarity index 66% rename from x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/helpers.ts rename to x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/show_result.ts index bce8098e963fc..df7be212f4bc0 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/helpers.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/pattern_summary/pattern_label/utils/show_result.ts @@ -5,17 +5,6 @@ * 2.0. */ -import * as i18n from './translations'; - -export const getPatternResultTooltip = (incompatible: number | undefined): string => { - if (incompatible == null) { - return i18n.SOME_UNCHECKED; - } else if (incompatible === 0) { - return i18n.ALL_PASSED; - } else { - return i18n.SOME_FAILED; - } -}; interface ShowResultProps { incompatible: T; indices: T; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.test.tsx index 01d45a3784a5f..223eaf29dd469 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.test.tsx @@ -10,7 +10,7 @@ import { render, screen } from '@testing-library/react'; import React from 'react'; import { EMPTY_STAT } from '../../../../constants'; -import { getSummaryTableColumns } from './helpers'; +import { getSummaryTableColumns } from './utils/columns'; import { mockIlmExplain } from '../../../../mock/ilm_explain/mock_ilm_explain'; import { auditbeatWithAllResults } from '../../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; import { mockStats } from '../../../../mock/stats/mock_stats'; @@ -18,9 +18,9 @@ import { TestDataQualityProviders, TestExternalProviders, } from '../../../../mock/test_providers/test_providers'; -import { getSummaryTableItems } from '../helpers'; import { SortConfig } from '../../../../types'; import { Props, SummaryTable } from '.'; +import { getSummaryTableItems } from '../../../../utils/get_summary_table_items'; const defaultBytesFormat = '0,0.[0]b'; const formatBytes = (value: number | undefined) => @@ -39,7 +39,7 @@ const indexNames = [ '.ds-packetbeat-8.6.1-2023.02.04-000001', ]; -export const defaultSort: SortConfig = { +const defaultSort: SortConfig = { sort: { direction: 'desc', field: 'docsCount', diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.tsx index fad209fb29e54..bc4e572e892fa 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/index.tsx @@ -9,12 +9,12 @@ import type { CriteriaWithPagination, EuiBasicTableColumn, Pagination } from '@e import { EuiInMemoryTable } from '@elastic/eui'; import React, { useCallback, useMemo } from 'react'; -import { getShowPagination } from './helpers'; -import { defaultSort, MIN_PAGE_SIZE } from '../helpers'; -import { SortConfig } from '../../../../types'; +import { defaultSort } from '../../../../constants'; +import { IndexSummaryTableItem, SortConfig } from '../../../../types'; import { useDataQualityContext } from '../../../../data_quality_context'; -import { IndexSummaryTableItem } from '../types'; import { UseIndicesCheckCheckState } from '../../../../hooks/use_indices_check/types'; +import { MIN_PAGE_SIZE } from '../constants'; +import { getShowPagination } from './utils/get_show_pagination'; export interface Props { getTableColumns: ({ diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/translations.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/translations.ts index 7e005ba659c1d..88f14c0fa98d6 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/translations.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/translations.ts @@ -35,13 +35,6 @@ export const EXPAND_ROWS = i18n.translate( } ); -export const FAILED = i18n.translate( - 'securitySolutionPackages.ecsDataQualityDashboard.summaryTable.failedTooltip', - { - defaultMessage: 'Failed', - } -); - export const ILM_PHASE = i18n.translate( 'securitySolutionPackages.ecsDataQualityDashboard.summaryTable.ilmPhaseColumn', { @@ -90,13 +83,6 @@ export const INDEX_TOOL_TIP = (pattern: string) => defaultMessage: 'This index matches the pattern or index name: {pattern}', }); -export const PASSED = i18n.translate( - 'securitySolutionPackages.ecsDataQualityDashboard.summaryTable.passedTooltip', - { - defaultMessage: 'Passed', - } -); - export const RESULT = i18n.translate( 'securitySolutionPackages.ecsDataQualityDashboard.summaryTable.resultColumn', { @@ -118,13 +104,6 @@ export const LAST_CHECK = i18n.translate( } ); -export const THIS_INDEX_HAS_NOT_BEEN_CHECKED = i18n.translate( - 'securitySolutionPackages.ecsDataQualityDashboard.summaryTable.thisIndexHasNotBeenCheckedTooltip', - { - defaultMessage: 'This index has not been checked', - } -); - export const ACTIONS = i18n.translate( 'securitySolutionPackages.ecsDataQualityDashboard.summaryTable.actionsColumn', { diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/helpers.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.test.tsx similarity index 88% rename from x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/helpers.test.tsx rename to x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.test.tsx index 1efaa01d36f9e..930b2a6bfbf96 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/helpers.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.test.tsx @@ -16,20 +16,17 @@ import userEvent from '@testing-library/user-event'; import { omit } from 'lodash/fp'; import React from 'react'; -import { TestExternalProviders } from '../../../../mock/test_providers/test_providers'; -import { EMPTY_STAT } from '../../../../constants'; +import { TestExternalProviders } from '../../../../../mock/test_providers/test_providers'; +import { EMPTY_STAT } from '../../../../../constants'; import { - getDocsCountPercent, getIncompatibleStatColor, - getShowPagination, getSummaryTableColumns, getSummaryTableILMPhaseColumn, getSummaryTableSizeInBytesColumn, - getToggleButtonId, -} from './helpers'; -import { CHECK_INDEX, VIEW_CHECK_DETAILS } from './translations'; -import { IndexSummaryTableItem } from '../types'; -import { getCheckState } from '../../../../stub/get_check_state'; +} from './columns'; +import { CHECK_INDEX, VIEW_CHECK_DETAILS } from '../translations'; +import { IndexSummaryTableItem } from '../../../../../types'; +import { getCheckState } from '../../../../../stub/get_check_state'; const defaultBytesFormat = '0,0.[0]b'; const formatBytes = (value: number | undefined) => @@ -40,59 +37,6 @@ const formatNumber = (value: number | undefined) => value != null ? numeral(value).format(defaultNumberFormat) : EMPTY_STAT; describe('helpers', () => { - describe('getDocsCountPercent', () => { - test('it returns an empty string when `patternDocsCount` is zero', () => { - expect( - getDocsCountPercent({ - docsCount: 0, - patternDocsCount: 0, - }) - ).toEqual(''); - }); - - test('it returns the expected format when when `patternDocsCount` is non-zero, and `locales` is undefined', () => { - expect( - getDocsCountPercent({ - docsCount: 2904, - locales: undefined, - patternDocsCount: 57410, - }) - ).toEqual('5.1%'); - }); - - test('it returns the expected format when when `patternDocsCount` is non-zero, and `locales` is provided', () => { - expect( - getDocsCountPercent({ - docsCount: 2904, - locales: 'en-US', - patternDocsCount: 57410, - }) - ).toEqual('5.1%'); - }); - }); - - describe('getToggleButtonId', () => { - test('it returns the expected id when the button is expanded', () => { - expect( - getToggleButtonId({ - indexName: 'auditbeat-custom-index-1', - isExpanded: true, - pattern: 'auditbeat-*', - }) - ).toEqual('collapseauditbeat-custom-index-1auditbeat-*'); - }); - - test('it returns the expected id when the button is collapsed', () => { - expect( - getToggleButtonId({ - indexName: 'auditbeat-custom-index-1', - isExpanded: false, - pattern: 'auditbeat-*', - }) - ).toEqual('expandauditbeat-custom-index-1auditbeat-*'); - }); - }); - describe('getSummaryTableColumns', () => { const indexName = '.ds-auditbeat-8.6.1-2023.02.07-000001'; const isILMAvailable = true; @@ -638,35 +582,6 @@ describe('helpers', () => { }); }); - describe('getShowPagination', () => { - test('it returns true when `totalItemCount` is greater than `minPageSize`', () => { - expect( - getShowPagination({ - minPageSize: 10, - totalItemCount: 11, - }) - ).toBe(true); - }); - - test('it returns false when `totalItemCount` equals `minPageSize`', () => { - expect( - getShowPagination({ - minPageSize: 10, - totalItemCount: 10, - }) - ).toBe(false); - }); - - test('it returns false when `totalItemCount` is less than `minPageSize`', () => { - expect( - getShowPagination({ - minPageSize: 10, - totalItemCount: 9, - }) - ).toBe(false); - }); - }); - describe('getIncompatibleStatColor', () => { test('it returns the expected color when incompatible is greater than zero', () => { const incompatible = 123; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/helpers.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx similarity index 80% rename from x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/helpers.tsx rename to x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx index 327c5b5e46667..09d8187390a9b 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/helpers.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/columns.tsx @@ -18,48 +18,22 @@ import moment from 'moment'; import styled from 'styled-components'; import { euiThemeVars } from '@kbn/ui-theme'; -import { EMPTY_STAT } from '../../../../constants'; -import { getIlmPhaseDescription } from '../../../../utils/get_ilm_phase_description'; -import { INCOMPATIBLE_INDEX_TOOL_TIP } from '../../../../stat_label/translations'; -import { INDEX_SIZE_TOOLTIP } from '../../../../translations'; -import * as i18n from './translations'; -import { IndexSummaryTableItem } from '../types'; -import { UseIndicesCheckCheckState } from '../../../../hooks/use_indices_check/types'; -import { IndexResultBadge } from '../index_result_badge'; -import { getIndexResultToolTip } from '../index_result_badge/helpers'; -import { Stat } from '../../../../stat'; +import { IndexSummaryTableItem } from '../../../../../types'; +import { EMPTY_STAT } from '../../../../../constants'; +import { getIlmPhaseDescription } from '../../../../../utils/get_ilm_phase_description'; +import { INCOMPATIBLE_INDEX_TOOL_TIP } from '../../../../../stat_label/translations'; +import { INDEX_SIZE_TOOLTIP } from '../../../../../translations'; +import * as i18n from '../translations'; +import { UseIndicesCheckCheckState } from '../../../../../hooks/use_indices_check/types'; +import { IndexResultBadge } from '../../index_result_badge'; +import { Stat } from '../../../../../stat'; +import { getDocsCountPercent } from '../../utils/stats'; +import { getIndexResultToolTip } from '../../utils/get_index_result_tooltip'; const ProgressContainer = styled.div` width: 150px; `; -export const getDocsCountPercent = ({ - docsCount, - locales, - patternDocsCount, -}: { - docsCount: number; - locales?: string | string[]; - patternDocsCount: number; -}): string => - patternDocsCount !== 0 - ? Number(docsCount / patternDocsCount).toLocaleString(locales, { - style: 'percent', - maximumFractionDigits: 1, - minimumFractionDigits: 1, - }) - : ''; - -export const getToggleButtonId = ({ - indexName, - isExpanded, - pattern, -}: { - indexName: string; - isExpanded: boolean; - pattern: string; -}): string => (isExpanded ? `collapse${indexName}${pattern}` : `expand${indexName}${pattern}`); - export const getSummaryTableILMPhaseColumn = ( isILMAvailable: boolean ): Array> => @@ -247,11 +221,3 @@ export const getSummaryTableColumns = ({ width: '120px', }, ]; - -export const getShowPagination = ({ - minPageSize, - totalItemCount, -}: { - minPageSize: number; - totalItemCount: number; -}): boolean => totalItemCount > minPageSize; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/get_show_pagination.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/get_show_pagination.test.ts new file mode 100644 index 0000000000000..7438431e85535 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/get_show_pagination.test.ts @@ -0,0 +1,37 @@ +/* + * 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 { getShowPagination } from './get_show_pagination'; + +describe('getShowPagination', () => { + test('it returns true when `totalItemCount` is greater than `minPageSize`', () => { + expect( + getShowPagination({ + minPageSize: 10, + totalItemCount: 11, + }) + ).toBe(true); + }); + + test('it returns false when `totalItemCount` equals `minPageSize`', () => { + expect( + getShowPagination({ + minPageSize: 10, + totalItemCount: 10, + }) + ).toBe(false); + }); + + test('it returns false when `totalItemCount` is less than `minPageSize`', () => { + expect( + getShowPagination({ + minPageSize: 10, + totalItemCount: 9, + }) + ).toBe(false); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/get_show_pagination.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/get_show_pagination.ts new file mode 100644 index 0000000000000..5cf90b3f7a712 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/summary_table/utils/get_show_pagination.ts @@ -0,0 +1,14 @@ +/* + * 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. + */ + +export const getShowPagination = ({ + minPageSize, + totalItemCount, +}: { + minPageSize: number; + totalItemCount: number; +}): boolean => totalItemCount > minPageSize; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/translations.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/translations.ts index aaf11b1ad405c..8e13a4be4cc30 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/translations.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/translations.ts @@ -22,3 +22,24 @@ export const LOADING_STATS = i18n.translate( defaultMessage: 'Loading stats', } ); + +export const PASSED = i18n.translate( + 'securitySolutionPackages.ecsDataQualityDashboard.passedTooltip', + { + defaultMessage: 'Passed', + } +); + +export const FAILED = i18n.translate( + 'securitySolutionPackages.ecsDataQualityDashboard.failedTooltip', + { + defaultMessage: 'Failed', + } +); + +export const THIS_INDEX_HAS_NOT_BEEN_CHECKED = i18n.translate( + 'securitySolutionPackages.ecsDataQualityDashboard.thisIndexHasNotBeenCheckedTooltip', + { + defaultMessage: 'This index has not been checked', + } +); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/helpers.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_index_result_tooltip.test.ts similarity index 58% rename from x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/helpers.test.ts rename to x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_index_result_tooltip.test.ts index 2f85a6e0ce692..4869aed07941b 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/helpers.test.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_index_result_tooltip.test.ts @@ -5,22 +5,8 @@ * 2.0. */ -import { FAILED, PASSED, THIS_INDEX_HAS_NOT_BEEN_CHECKED } from '../summary_table/translations'; -import { getIndexResultBadgeColor, getIndexResultToolTip } from './helpers'; - -describe('getIndexResultBadgeColor', () => { - test('it returns `ghost` when `incompatible` is undefined', () => { - expect(getIndexResultBadgeColor(undefined)).toEqual('ghost'); - }); - - test('it returns `success` when `incompatible` is zero', () => { - expect(getIndexResultBadgeColor(0)).toEqual('#6dcbb1'); - }); - - test('it returns `danger` when `incompatible` is NOT zero', () => { - expect(getIndexResultBadgeColor(1)).toEqual('danger'); - }); -}); +import { FAILED, PASSED, THIS_INDEX_HAS_NOT_BEEN_CHECKED } from '../translations'; +import { getIndexResultToolTip } from './get_index_result_tooltip'; describe('getIndexResultToolTip', () => { test('it returns "this index has not been checked" when `incompatible` is undefined', () => { diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/helpers.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_index_result_tooltip.ts similarity index 67% rename from x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/helpers.ts rename to x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_index_result_tooltip.ts index f9f1c69733059..7b2bb9fb0507e 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_result_badge/helpers.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_index_result_tooltip.ts @@ -5,17 +5,7 @@ * 2.0. */ -import { FAILED, PASSED, THIS_INDEX_HAS_NOT_BEEN_CHECKED } from '../summary_table/translations'; - -export const getIndexResultBadgeColor = (incompatible: number | undefined): string => { - if (incompatible == null) { - return 'ghost'; - } else if (incompatible === 0) { - return '#6dcbb1'; - } else { - return 'danger'; - } -}; +import { FAILED, PASSED, THIS_INDEX_HAS_NOT_BEEN_CHECKED } from '../translations'; export const getIndexResultToolTip = (incompatible: number | undefined): string => { if (incompatible == null) { diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_page_index.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_page_index.test.ts new file mode 100644 index 0000000000000..b2746c830b6de --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_page_index.test.ts @@ -0,0 +1,360 @@ +/* + * 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 { mockDataQualityCheckResult } from '../../../../mock/data_quality_check_result/mock_index'; +import { IndexSummaryTableItem } from '../../../../types'; +import { getIndexIncompatible } from '../../../../utils/stats'; +import { getPageIndex } from './get_page_index'; + +describe('helpers', () => { + const indexName = '.ds-packetbeat-8.6.1-2023.02.04-000001'; + describe('getIndexIncompatible', () => { + test('it returns undefined when `results` is undefined', () => { + expect( + getIndexIncompatible({ + indexName, + results: undefined, // <-- + }) + ).toBeUndefined(); + }); + + test('it returns undefined when `indexName` is not in the `results`', () => { + expect( + getIndexIncompatible({ + indexName: 'not_in_the_results', // <-- + results: mockDataQualityCheckResult, + }) + ).toBeUndefined(); + }); + + test('it returns the expected count', () => { + expect( + getIndexIncompatible({ + indexName: 'auditbeat-custom-index-1', + results: mockDataQualityCheckResult, + }) + ).toEqual(3); + }); + }); + + describe('getPageIndex', () => { + const getPageIndexArgs: { + indexName: string; + items: IndexSummaryTableItem[]; + pageSize: number; + } = { + indexName: 'auditbeat-7.17.9-2023.04.09-000001', // <-- on page 2 of 3 (page index 1) + items: [ + { + docsCount: 48077, + incompatible: undefined, + indexName: 'auditbeat-7.14.2-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 43357342, + checkedAt: 1706526408000, + }, + { + docsCount: 48068, + incompatible: undefined, + indexName: 'auditbeat-7.3.2-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 32460397, + checkedAt: 1706526408000, + }, + { + docsCount: 48064, + incompatible: undefined, + indexName: 'auditbeat-7.11.2-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 42782794, + checkedAt: 1706526408000, + }, + { + docsCount: 47868, + incompatible: undefined, + indexName: 'auditbeat-7.6.2-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 31575964, + checkedAt: 1706526408000, + }, + { + docsCount: 47827, + incompatible: 20, + indexName: 'auditbeat-7.15.2-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 44130657, + checkedAt: 1706526408000, + }, + { + docsCount: 47642, + incompatible: undefined, + indexName: '.ds-auditbeat-8.4.3-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 42412521, + checkedAt: 1706526408000, + }, + { + docsCount: 47545, + incompatible: undefined, + indexName: 'auditbeat-7.16.3-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 41423244, + checkedAt: 1706526408000, + }, + { + docsCount: 47531, + incompatible: undefined, + indexName: 'auditbeat-7.5.2-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 32394133, + checkedAt: 1706526408000, + }, + { + docsCount: 47530, + incompatible: undefined, + indexName: 'auditbeat-7.12.1-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 43015519, + checkedAt: 1706526408000, + }, + { + docsCount: 47520, + incompatible: undefined, + indexName: '.ds-auditbeat-8.0.1-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 42230604, + checkedAt: 1706526408000, + }, + { + docsCount: 47496, + incompatible: undefined, + indexName: '.ds-auditbeat-8.2.3-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 41710968, + checkedAt: 1706526408000, + }, + { + docsCount: 47486, + incompatible: undefined, + indexName: '.ds-auditbeat-8.5.3-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 42295944, + checkedAt: 1706526408000, + }, + { + docsCount: 47486, + incompatible: undefined, + indexName: '.ds-auditbeat-8.3.3-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 41761321, + checkedAt: 1706526408000, + }, + { + docsCount: 47460, + incompatible: undefined, + indexName: 'auditbeat-7.2.1-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 30481198, + checkedAt: 1706526408000, + }, + { + docsCount: 47439, + incompatible: undefined, + indexName: 'auditbeat-7.17.9-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 41554041, + checkedAt: 1706526408000, + }, + { + docsCount: 47395, + incompatible: undefined, + indexName: 'auditbeat-7.9.3-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 42815907, + checkedAt: 1706526408000, + }, + { + docsCount: 47394, + incompatible: undefined, + indexName: '.ds-auditbeat-8.7.0-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 41157112, + checkedAt: 1706526408000, + }, + { + docsCount: 47372, + incompatible: undefined, + indexName: 'auditbeat-7.4.2-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 31626792, + checkedAt: 1706526408000, + }, + { + docsCount: 47369, + incompatible: undefined, + indexName: 'auditbeat-7.13.4-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 41828969, + checkedAt: 1706526408000, + }, + { + docsCount: 47348, + incompatible: undefined, + indexName: 'auditbeat-7.7.1-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 40010773, + checkedAt: 1706526408000, + }, + { + docsCount: 47339, + incompatible: undefined, + indexName: 'auditbeat-7.10.2-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 43480570, + checkedAt: 1706526408000, + }, + { + docsCount: 47325, + incompatible: undefined, + indexName: '.ds-auditbeat-8.1.3-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 41822475, + checkedAt: 1706526408000, + }, + { + docsCount: 47294, + incompatible: undefined, + indexName: 'auditbeat-7.8.0-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 43018490, + checkedAt: 1706526408000, + }, + { + docsCount: 24276, + incompatible: undefined, + indexName: '.ds-auditbeat-8.6.1-2023.04.09-000001', + ilmPhase: 'hot', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 23579440, + checkedAt: 1706526408000, + }, + { + docsCount: 4, + incompatible: undefined, + indexName: 'auditbeat-custom-index-1', + ilmPhase: 'unmanaged', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 28409, + checkedAt: 1706526408000, + }, + { + docsCount: 0, + incompatible: undefined, + indexName: 'auditbeat-custom-empty-index-1', + ilmPhase: 'unmanaged', + pattern: 'auditbeat-*', + patternDocsCount: 1118155, + sizeInBytes: 247, + checkedAt: 1706526408000, + }, + ], + pageSize: 10, + }; + + test('it returns the expected page index', () => { + expect(getPageIndex(getPageIndexArgs)).toEqual(1); + }); + + test('it returns the expected page index for the first item', () => { + const firstItemIndexName = 'auditbeat-7.14.2-2023.04.09-000001'; + + expect( + getPageIndex({ + ...getPageIndexArgs, + indexName: firstItemIndexName, + }) + ).toEqual(0); + }); + + test('it returns the expected page index for the last item', () => { + const lastItemIndexName = 'auditbeat-custom-empty-index-1'; + + expect( + getPageIndex({ + ...getPageIndexArgs, + indexName: lastItemIndexName, + }) + ).toEqual(2); + }); + + test('it returns null when the index cannot be found', () => { + expect( + getPageIndex({ + ...getPageIndexArgs, + indexName: 'does_not_exist', // <-- this index is not in the items + }) + ).toBeNull(); + }); + + test('it returns null when `pageSize` is zero', () => { + expect( + getPageIndex({ + ...getPageIndexArgs, + pageSize: 0, // <-- invalid + }) + ).toBeNull(); + }); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_page_index.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_page_index.ts new file mode 100644 index 0000000000000..3aff52ca9d3f8 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/get_page_index.ts @@ -0,0 +1,26 @@ +/* + * 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 { IndexSummaryTableItem } from '../../../../types'; + +export const getPageIndex = ({ + indexName, + items, + pageSize, +}: { + indexName: string; + items: IndexSummaryTableItem[]; + pageSize: number; +}): number | null => { + const index = items.findIndex((x) => x.indexName === indexName); + + if (index !== -1 && pageSize !== 0) { + return Math.floor(index / pageSize); + } else { + return null; + } +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/ilm_explain.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/ilm_explain.test.ts new file mode 100644 index 0000000000000..ad588af866c88 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/ilm_explain.test.ts @@ -0,0 +1,173 @@ +/* + * 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 { + IlmExplainLifecycleLifecycleExplain, + IlmExplainLifecycleLifecycleExplainManaged, + IlmExplainLifecycleLifecycleExplainUnmanaged, +} from '@elastic/elasticsearch/lib/api/types'; +import { mockIlmExplain } from '../../../../mock/ilm_explain/mock_ilm_explain'; +import { getIlmExplainPhaseCounts, getPhaseCount, isManaged } from './ilm_explain'; + +const indexName = '.ds-packetbeat-8.6.1-2023.02.04-000001'; + +const hot: IlmExplainLifecycleLifecycleExplainManaged = { + index: '.ds-packetbeat-8.6.1-2023.02.04-000001', + managed: true, + policy: 'packetbeat', + index_creation_date_millis: 1675536751379, + time_since_index_creation: '3.98d', + lifecycle_date_millis: 1675536751379, + age: '3.98d', + phase: 'hot', + phase_time_millis: 1675536751809, + action: 'rollover', + action_time_millis: 1675536751809, + step: 'check-rollover-ready', + step_time_millis: 1675536751809, + phase_execution: { + policy: 'packetbeat', + version: 1, + modified_date_in_millis: 1675536751205, + }, +}; +const warm = { + ...hot, + phase: 'warm', +}; +const cold = { + ...hot, + phase: 'cold', +}; +const frozen = { + ...hot, + phase: 'frozen', +}; + +const managed: Record = { + hot, + warm, + cold, + frozen, +}; + +const unmanaged: IlmExplainLifecycleLifecycleExplainUnmanaged = { + index: 'michael', + managed: false, +}; + +describe('isManaged', () => { + test('it returns true when the `ilmExplainRecord` `managed` property is true', () => { + const ilmExplain = mockIlmExplain[indexName]; + + expect(isManaged(ilmExplain)).toBe(true); + }); + + test('it returns false when the `ilmExplainRecord` is undefined', () => { + expect(isManaged(undefined)).toBe(false); + }); +}); + +describe('getPhaseCount', () => { + test('it returns the expected count when an index with the specified `ilmPhase` exists in the `IlmExplainLifecycleLifecycleExplain` record', () => { + expect( + getPhaseCount({ + ilmExplain: mockIlmExplain, + ilmPhase: 'hot', // this phase is in the record + indexName, // valid index name + }) + ).toEqual(1); + }); + + test('it returns zero when `ilmPhase` is null', () => { + expect( + getPhaseCount({ + ilmExplain: null, + ilmPhase: 'hot', + indexName, + }) + ).toEqual(0); + }); + + test('it returns zero when the `indexName` does NOT exist in the `IlmExplainLifecycleLifecycleExplain` record', () => { + expect( + getPhaseCount({ + ilmExplain: mockIlmExplain, + ilmPhase: 'hot', + indexName: 'invalid', // this index does NOT exist + }) + ).toEqual(0); + }); + + test('it returns zero when the specified `ilmPhase` does NOT exist in the `IlmExplainLifecycleLifecycleExplain` record', () => { + expect( + getPhaseCount({ + ilmExplain: mockIlmExplain, + ilmPhase: 'warm', // this phase is NOT in the record + indexName, // valid index name + }) + ).toEqual(0); + }); + + describe('when `ilmPhase` is `unmanaged`', () => { + test('it returns the expected count for an `unmanaged` index', () => { + const index = 'auditbeat-custom-index-1'; + const ilmExplainRecord: IlmExplainLifecycleLifecycleExplain = { + index, + managed: false, + }; + const ilmExplain = { + [index]: ilmExplainRecord, + }; + + expect( + getPhaseCount({ + ilmExplain, + ilmPhase: 'unmanaged', // ilmPhase is unmanaged + indexName: index, // an unmanaged index + }) + ).toEqual(1); + }); + + test('it returns zero for a managed index', () => { + expect( + getPhaseCount({ + ilmExplain: mockIlmExplain, + ilmPhase: 'unmanaged', // ilmPhase is unmanaged + indexName, // a managed (`hot`) index + }) + ).toEqual(0); + }); + }); +}); + +describe('getIlmExplainPhaseCounts', () => { + test('it returns the expected counts (all zeros) when `ilmExplain` is null', () => { + expect(getIlmExplainPhaseCounts(null)).toEqual({ + cold: 0, + frozen: 0, + hot: 0, + unmanaged: 0, + warm: 0, + }); + }); + + test('it returns the expected counts', () => { + const ilmExplain: Record = { + ...managed, + [unmanaged.index]: unmanaged, + }; + + expect(getIlmExplainPhaseCounts(ilmExplain)).toEqual({ + cold: 1, + frozen: 1, + hot: 1, + unmanaged: 1, + warm: 1, + }); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/ilm_explain.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/ilm_explain.ts new file mode 100644 index 0000000000000..c47353162b003 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/ilm_explain.ts @@ -0,0 +1,87 @@ +/* + * 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 { IlmExplainLifecycleLifecycleExplain } from '@elastic/elasticsearch/lib/api/types'; + +import { IlmExplainPhaseCounts, IlmPhase } from '../../../../types'; + +export const isManaged = ( + ilmExplainRecord: IlmExplainLifecycleLifecycleExplain | undefined +): boolean => ilmExplainRecord?.managed === true; + +export const getPhaseCount = ({ + ilmExplain, + ilmPhase, + indexName, +}: { + ilmExplain: Record | null; + ilmPhase: IlmPhase; + indexName: string; +}): number => { + const ilmExplainRecord = ilmExplain != null ? ilmExplain[indexName] : undefined; + + if (ilmPhase === 'unmanaged') { + return isManaged(ilmExplainRecord) ? 0 : 1; + } else if (ilmExplainRecord != null && 'phase' in ilmExplainRecord) { + return ilmExplainRecord.phase === ilmPhase ? 1 : 0; + } + + return 0; +}; + +export const getIlmExplainPhaseCounts = ( + ilmExplain: Record | null +): IlmExplainPhaseCounts => { + const indexNames = ilmExplain != null ? Object.keys(ilmExplain) : []; + + return indexNames.reduce( + (acc, indexName) => ({ + hot: + acc.hot + + getPhaseCount({ + ilmExplain, + ilmPhase: 'hot', + indexName, + }), + warm: + acc.warm + + getPhaseCount({ + ilmExplain, + ilmPhase: 'warm', + indexName, + }), + cold: + acc.cold + + getPhaseCount({ + ilmExplain, + ilmPhase: 'cold', + indexName, + }), + frozen: + acc.frozen + + getPhaseCount({ + ilmExplain, + ilmPhase: 'frozen', + indexName, + }), + unmanaged: + acc.unmanaged + + getPhaseCount({ + ilmExplain, + ilmPhase: 'unmanaged', + indexName, + }), + }), + { + hot: 0, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 0, + } + ); +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_index_names.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_index_names.test.ts new file mode 100644 index 0000000000000..7d663b82fc1ff --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_index_names.test.ts @@ -0,0 +1,103 @@ +/* + * 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 { mockIlmExplain } from '../../../../mock/ilm_explain/mock_ilm_explain'; +import { shouldCreateIndexNames } from './should_create_index_names'; +import { mockStats } from '../../../../mock/stats/mock_stats'; + +describe('shouldCreateIndexNames', () => { + const indexNames = [ + '.ds-packetbeat-8.6.1-2023.02.04-000001', + '.ds-packetbeat-8.5.3-2023.02.04-000001', + 'auditbeat-custom-index-1', + ]; + const isILMAvailable = true; + + test('returns true when `indexNames` does NOT exist, and the required `stats` and `ilmExplain` are available', () => { + expect( + shouldCreateIndexNames({ + ilmExplain: mockIlmExplain, + indexNames: undefined, + isILMAvailable, + newIndexNames: [], + stats: mockStats, + }) + ).toBe(true); + }); + + test('returns true when `isILMAvailable` is false, and the required `stats` is available, and `ilmExplain` is not available', () => { + expect( + shouldCreateIndexNames({ + ilmExplain: null, + indexNames: undefined, + isILMAvailable: false, + newIndexNames: [], + stats: mockStats, + }) + ).toBe(true); + }); + + test('returns false when `indexNames` exists, and the required `stats` and `ilmExplain` are available', () => { + expect( + shouldCreateIndexNames({ + ilmExplain: mockIlmExplain, + indexNames, + isILMAvailable, + newIndexNames: indexNames, + stats: mockStats, + }) + ).toBe(false); + }); + + test('returns false when `indexNames` does NOT exist, `stats` is NOT available, and `ilmExplain` is available', () => { + expect( + shouldCreateIndexNames({ + ilmExplain: mockIlmExplain, + indexNames: undefined, + isILMAvailable, + newIndexNames: [], + stats: null, + }) + ).toBe(false); + }); + + test('returns false when `indexNames` does NOT exist, `stats` is available, and `ilmExplain` is NOT available', () => { + expect( + shouldCreateIndexNames({ + ilmExplain: null, + indexNames: undefined, + isILMAvailable, + newIndexNames: [], + stats: mockStats, + }) + ).toBe(false); + }); + + test('returns false when `indexNames` does NOT exist, `stats` is NOT available, and `ilmExplain` is NOT available', () => { + expect( + shouldCreateIndexNames({ + ilmExplain: null, + indexNames: undefined, + isILMAvailable, + newIndexNames: [], + stats: null, + }) + ).toBe(false); + }); + + test('returns false when `indexNames` exists, `stats` is NOT available, and `ilmExplain` is NOT available', () => { + expect( + shouldCreateIndexNames({ + ilmExplain: null, + indexNames, + isILMAvailable, + newIndexNames: [], + stats: null, + }) + ).toBe(false); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_index_names.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_index_names.ts new file mode 100644 index 0000000000000..25a6038ae9078 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_index_names.ts @@ -0,0 +1,30 @@ +/* + * 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 { IlmExplainLifecycleLifecycleExplain } from '@elastic/elasticsearch/lib/api/types'; + +import { isEqual } from 'lodash/fp'; +import { MeteringStatsIndex } from '../../../../types'; + +export const shouldCreateIndexNames = ({ + ilmExplain, + indexNames, + isILMAvailable, + newIndexNames, + stats, +}: { + ilmExplain: Record | null; + indexNames: string[] | undefined; + isILMAvailable: boolean; + newIndexNames: string[]; + stats: Record | null; +}): boolean => { + return ( + !isEqual(newIndexNames, indexNames) && + stats != null && + ((isILMAvailable && ilmExplain != null) || !isILMAvailable) + ); +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_pattern_rollup.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_pattern_rollup.test.ts new file mode 100644 index 0000000000000..1adb851d8aafc --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_pattern_rollup.test.ts @@ -0,0 +1,139 @@ +/* + * 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 { mockStats } from '../../../../mock/stats/mock_stats'; +import { shouldCreatePatternRollup } from './should_create_pattern_rollup'; +import { mockIlmExplain } from '../../../../mock/ilm_explain/mock_ilm_explain'; +import { auditbeatWithAllResults } from '../../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; +import { getIndexNames, getPatternDocsCount } from './stats'; + +describe('shouldCreatePatternRollup', () => { + const isILMAvailable = true; + const newIndexNames = getIndexNames({ + stats: mockStats, + ilmExplain: mockIlmExplain, + ilmPhases: ['hot', 'unmanaged'], + isILMAvailable, + }); + const newDocsCount = getPatternDocsCount({ indexNames: newIndexNames, stats: mockStats }); + test('it returns false when the `patternRollup.docsCount` equals newDocsCount', () => { + expect( + shouldCreatePatternRollup({ + error: null, + ilmExplain: mockIlmExplain, + isILMAvailable, + newDocsCount: auditbeatWithAllResults.docsCount as number, + patternRollup: auditbeatWithAllResults, + stats: mockStats, + }) + ).toBe(false); + }); + + test('it returns true when all data and ILMExplain were loaded', () => { + expect( + shouldCreatePatternRollup({ + error: null, + ilmExplain: mockIlmExplain, + isILMAvailable, + newDocsCount, + patternRollup: undefined, + stats: mockStats, + }) + ).toBe(true); + }); + + test('it returns true when all data was loaded and ILM is not available', () => { + expect( + shouldCreatePatternRollup({ + error: null, + ilmExplain: null, + isILMAvailable: false, + newDocsCount, + patternRollup: undefined, + stats: mockStats, + }) + ).toBe(true); + }); + + test('it returns false when `stats`, but NOT `ilmExplain` was loaded', () => { + expect( + shouldCreatePatternRollup({ + error: null, + ilmExplain: null, + isILMAvailable, + newDocsCount, + patternRollup: undefined, + stats: mockStats, + }) + ).toBe(false); + }); + + test('it returns false when `stats` was NOT loaded, and `ilmExplain` was loaded', () => { + expect( + shouldCreatePatternRollup({ + error: null, + ilmExplain: mockIlmExplain, + isILMAvailable, + newDocsCount, + patternRollup: undefined, + stats: null, + }) + ).toBe(false); + }); + + test('it returns true if an error occurred, and NO data was loaded', () => { + expect( + shouldCreatePatternRollup({ + error: 'whoops', + ilmExplain: null, + isILMAvailable, + newDocsCount, + patternRollup: undefined, + stats: null, + }) + ).toBe(true); + }); + + test('it returns true if an error occurred, and just `stats` was loaded', () => { + expect( + shouldCreatePatternRollup({ + error: 'something went', + ilmExplain: null, + isILMAvailable, + newDocsCount, + patternRollup: undefined, + stats: mockStats, + }) + ).toBe(true); + }); + + test('it returns true if an error occurred, and just `ilmExplain` was loaded', () => { + expect( + shouldCreatePatternRollup({ + error: 'horribly wrong', + ilmExplain: mockIlmExplain, + isILMAvailable, + newDocsCount, + patternRollup: undefined, + stats: null, + }) + ).toBe(true); + }); + + test('it returns true if an error occurred, and all data was loaded', () => { + expect( + shouldCreatePatternRollup({ + error: 'over here', + ilmExplain: mockIlmExplain, + isILMAvailable, + newDocsCount, + patternRollup: undefined, + stats: mockStats, + }) + ).toBe(true); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_pattern_rollup.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_pattern_rollup.ts new file mode 100644 index 0000000000000..87773ac01de17 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/should_create_pattern_rollup.ts @@ -0,0 +1,36 @@ +/* + * 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 { IlmExplainLifecycleLifecycleExplain } from '@elastic/elasticsearch/lib/api/types'; + +import { MeteringStatsIndex, PatternRollup } from '../../../../types'; + +export const shouldCreatePatternRollup = ({ + error, + ilmExplain, + isILMAvailable, + newDocsCount, + patternRollup, + stats, +}: { + error: string | null; + ilmExplain: Record | null; + isILMAvailable: boolean; + newDocsCount: number; + patternRollup: PatternRollup | undefined; + stats: Record | null; +}): boolean => { + if (patternRollup?.docsCount === newDocsCount) { + return false; + } + + const allDataLoaded: boolean = + stats != null && ((isILMAvailable && ilmExplain != null) || !isILMAvailable); + const errorOccurred: boolean = error != null; + + return allDataLoaded || errorOccurred; +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/stats.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/stats.test.ts index 306c9f93d83b6..01e649ebf6bc9 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/stats.test.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/stats.test.ts @@ -10,7 +10,12 @@ import { mockStatsAuditbeatIndex } from '../../../../mock/stats/mock_stats_packe import { mockStatsPacketbeatIndex } from '../../../../mock/stats/mock_stats_auditbeat_index'; import { mockIlmExplain } from '../../../../mock/ilm_explain/mock_ilm_explain'; import { mockStats } from '../../../../mock/stats/mock_stats'; -import { getIndexNames, getPatternDocsCount, getPatternSizeInBytes } from './stats'; +import { + getDocsCountPercent, + getIndexNames, + getPatternDocsCount, + getPatternSizeInBytes, +} from './stats'; import { IlmExplainLifecycleLifecycleExplain } from '@elastic/elasticsearch/lib/api/types'; describe('getIndexNames', () => { @@ -232,3 +237,34 @@ describe('getPatternSizeInBytes', () => { ).toEqual(expectedCount); }); }); + +describe('getDocsCountPercent', () => { + test('it returns an empty string when `patternDocsCount` is zero', () => { + expect( + getDocsCountPercent({ + docsCount: 0, + patternDocsCount: 0, + }) + ).toEqual(''); + }); + + test('it returns the expected format when when `patternDocsCount` is non-zero, and `locales` is undefined', () => { + expect( + getDocsCountPercent({ + docsCount: 2904, + locales: undefined, + patternDocsCount: 57410, + }) + ).toEqual('5.1%'); + }); + + test('it returns the expected format when when `patternDocsCount` is non-zero, and `locales` is provided', () => { + expect( + getDocsCountPercent({ + docsCount: 2904, + locales: 'en-US', + patternDocsCount: 57410, + }) + ).toEqual('5.1%'); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/stats.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/stats.ts index 83e2b592dc079..83ece4d3194c3 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/stats.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/utils/stats.ts @@ -7,9 +7,9 @@ import { IlmExplainLifecycleLifecycleExplain } from '@elastic/elasticsearch/lib/api/types'; +import { getIlmPhase } from '../../../../utils/get_ilm_phase'; import { getDocsCount, getSizeInBytes } from '../../../../utils/stats'; import { MeteringStatsIndex } from '../../../../types'; -import { getIlmPhase } from '../helpers'; export const getPatternDocsCount = ({ indexNames, @@ -70,3 +70,20 @@ export const getIndexNames = ({ return EMPTY_INDEX_NAMES; } }; + +export const getDocsCountPercent = ({ + docsCount, + locales, + patternDocsCount, +}: { + docsCount: number; + locales?: string | string[]; + patternDocsCount: number; +}): string => + patternDocsCount !== 0 + ? Number(docsCount / patternDocsCount).toLocaleString(locales, { + style: 'percent', + maximumFractionDigits: 1, + minimumFractionDigits: 1, + }) + : ''; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/helpers.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/helpers.test.ts deleted file mode 100644 index da46cd2b40f33..0000000000000 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/helpers.test.ts +++ /dev/null @@ -1,516 +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 numeral from '@elastic/numeral'; -import { euiThemeVars } from '@kbn/ui-theme'; - -import { EMPTY_STAT } from '../../constants'; -import { - DEFAULT_INDEX_COLOR, - getFillColor, - getFlattenedBuckets, - getGroupFromPath, - getLayersMultiDimensional, - getLegendItems, - getLegendItemsForPattern, - getPathToFlattenedBucketMap, - getPatternLegendItem, - getPatternSizeInBytes, -} from './helpers'; -import { alertIndexWithAllResults } from '../../mock/pattern_rollup/mock_alerts_pattern_rollup'; -import { auditbeatWithAllResults } from '../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; -import { packetbeatNoResults } from '../../mock/pattern_rollup/mock_packetbeat_pattern_rollup'; -import { PatternRollup } from '../../types'; - -const defaultBytesFormat = '0,0.[0]b'; -const formatBytes = (value: number | undefined) => - value != null ? numeral(value).format(defaultBytesFormat) : EMPTY_STAT; - -const ilmPhases = ['hot', 'warm', 'unmanaged']; -const patterns = ['.alerts-security.alerts-default', 'auditbeat-*', 'packetbeat-*']; - -const patternRollups: Record = { - '.alerts-security.alerts-default': alertIndexWithAllResults, - 'auditbeat-*': auditbeatWithAllResults, - 'packetbeat-*': packetbeatNoResults, -}; - -/** a valid `PatternRollup` that has an undefined `sizeInBytes` */ -const noSizeInBytes: Record = { - 'valid-*': { - docsCount: 19127, - error: null, - ilmExplain: null, - ilmExplainPhaseCounts: { - hot: 1, - warm: 0, - cold: 0, - frozen: 0, - unmanaged: 2, - }, - indices: 3, - pattern: 'valid-*', - results: undefined, - sizeInBytes: undefined, // <-- - stats: null, - }, -}; - -describe('helpers', () => { - describe('getPatternSizeInBytes', () => { - test('it returns the expected size when the pattern exists in the rollup', () => { - const pattern = 'auditbeat-*'; - - expect(getPatternSizeInBytes({ pattern, patternRollups })).toEqual( - auditbeatWithAllResults.sizeInBytes - ); - }); - - test('it returns undefined when the pattern exists in the rollup, but does not have a sizeInBytes', () => { - const pattern = 'valid-*'; - - expect(getPatternSizeInBytes({ pattern, patternRollups: noSizeInBytes })).toBeUndefined(); - }); - - test('it returns undefined when the pattern does NOT exist in the rollup', () => { - const pattern = 'does-not-exist-*'; - - expect(getPatternSizeInBytes({ pattern, patternRollups })).toBeUndefined(); - }); - }); - - describe('getPatternLegendItem', () => { - test('it returns the expected legend item', () => { - const pattern = 'auditbeat-*'; - - expect(getPatternLegendItem({ pattern, patternRollups })).toEqual({ - color: null, - ilmPhase: null, - index: null, - pattern, - sizeInBytes: auditbeatWithAllResults.sizeInBytes, - docsCount: auditbeatWithAllResults.docsCount, - }); - }); - }); - - describe('getLegendItemsForPattern', () => { - test('it returns the expected legend items', () => { - const pattern = 'auditbeat-*'; - const flattenedBuckets = getFlattenedBuckets({ - ilmPhases, - isILMAvailable: true, - patternRollups, - }); - - expect(getLegendItemsForPattern({ pattern, flattenedBuckets })).toEqual([ - { - color: euiThemeVars.euiColorSuccess, - ilmPhase: 'hot', - index: '.ds-auditbeat-8.6.1-2023.02.07-000001', - pattern: 'auditbeat-*', - sizeInBytes: 18791790, - docsCount: 19123, - }, - { - color: euiThemeVars.euiColorDanger, - ilmPhase: 'unmanaged', - index: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 28409, - docsCount: 4, - }, - { - color: euiThemeVars.euiColorDanger, - ilmPhase: 'unmanaged', - index: 'auditbeat-custom-empty-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 247, - docsCount: 0, - }, - ]); - }); - - test('it returns the expected legend items when isILMAvailable is false', () => { - const pattern = 'auditbeat-*'; - const flattenedBuckets = getFlattenedBuckets({ - ilmPhases, - isILMAvailable: false, - patternRollups, - }); - expect(getLegendItemsForPattern({ pattern, flattenedBuckets })).toEqual([ - { - color: euiThemeVars.euiColorSuccess, - ilmPhase: null, - index: '.ds-auditbeat-8.6.1-2023.02.07-000001', - pattern: 'auditbeat-*', - sizeInBytes: 18791790, - docsCount: 19123, - }, - { - color: euiThemeVars.euiColorDanger, - ilmPhase: null, - index: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 28409, - docsCount: 4, - }, - { - color: euiThemeVars.euiColorDanger, - ilmPhase: null, - index: 'auditbeat-custom-empty-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 247, - docsCount: 0, - }, - ]); - }); - }); - - describe('getLegendItems', () => { - test('it returns the expected legend items', () => { - const flattenedBuckets = getFlattenedBuckets({ - ilmPhases, - isILMAvailable: true, - patternRollups, - }); - - expect(getLegendItems({ flattenedBuckets, patterns, patternRollups })).toEqual([ - { - color: null, - ilmPhase: null, - index: null, - pattern: '.alerts-security.alerts-default', - sizeInBytes: 29717961631, - docsCount: 26093, - }, - { - color: euiThemeVars.euiColorSuccess, - ilmPhase: 'hot', - index: '.internal.alerts-security.alerts-default-000001', - pattern: '.alerts-security.alerts-default', - sizeInBytes: 0, - docsCount: 26093, - }, - { - color: null, - ilmPhase: null, - index: null, - pattern: 'auditbeat-*', - sizeInBytes: 18820446, - docsCount: 19127, - }, - { - color: euiThemeVars.euiColorSuccess, - ilmPhase: 'hot', - index: '.ds-auditbeat-8.6.1-2023.02.07-000001', - pattern: 'auditbeat-*', - sizeInBytes: 18791790, - docsCount: 19123, - }, - { - color: euiThemeVars.euiColorDanger, - ilmPhase: 'unmanaged', - index: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 28409, - docsCount: 4, - }, - { - color: euiThemeVars.euiColorDanger, - ilmPhase: 'unmanaged', - index: 'auditbeat-custom-empty-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 247, - docsCount: 0, - }, - { - color: null, - ilmPhase: null, - index: null, - pattern: 'packetbeat-*', - sizeInBytes: 1096520898, - docsCount: 3258632, - }, - { - color: euiThemeVars.euiColorPrimary, - ilmPhase: 'hot', - index: '.ds-packetbeat-8.5.3-2023.02.04-000001', - pattern: 'packetbeat-*', - sizeInBytes: 584326147, - docsCount: 1630289, - }, - { - color: euiThemeVars.euiColorPrimary, - ilmPhase: 'hot', - index: '.ds-packetbeat-8.6.1-2023.02.04-000001', - pattern: 'packetbeat-*', - sizeInBytes: 512194751, - docsCount: 1628343, - }, - ]); - }); - }); - - describe('getFlattenedBuckets', () => { - test('it returns the expected flattened buckets', () => { - expect( - getFlattenedBuckets({ - ilmPhases, - isILMAvailable: true, - patternRollups, - }) - ).toEqual([ - { - ilmPhase: 'hot', - incompatible: 0, - indexName: '.internal.alerts-security.alerts-default-000001', - pattern: '.alerts-security.alerts-default', - sizeInBytes: 0, - docsCount: 26093, - }, - { - ilmPhase: 'hot', - incompatible: 0, - indexName: '.ds-auditbeat-8.6.1-2023.02.07-000001', - pattern: 'auditbeat-*', - sizeInBytes: 18791790, - docsCount: 19123, - }, - { - ilmPhase: 'unmanaged', - incompatible: 1, - indexName: 'auditbeat-custom-empty-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 247, - docsCount: 0, - }, - { - ilmPhase: 'unmanaged', - incompatible: 3, - indexName: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 28409, - docsCount: 4, - }, - { - ilmPhase: 'hot', - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - pattern: 'packetbeat-*', - sizeInBytes: 512194751, - docsCount: 1628343, - }, - { - ilmPhase: 'hot', - indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', - pattern: 'packetbeat-*', - sizeInBytes: 584326147, - docsCount: 1630289, - }, - ]); - }); - - test('it returns the expected flattened buckets when isILMAvailable is false', () => { - expect( - getFlattenedBuckets({ - ilmPhases, - isILMAvailable: false, - patternRollups, - }) - ).toEqual([ - { - docsCount: 26093, - ilmPhase: undefined, - incompatible: 0, - indexName: '.internal.alerts-security.alerts-default-000001', - pattern: '.alerts-security.alerts-default', - sizeInBytes: 0, - }, - { - docsCount: 19123, - ilmPhase: undefined, - incompatible: 0, - indexName: '.ds-auditbeat-8.6.1-2023.02.07-000001', - pattern: 'auditbeat-*', - sizeInBytes: 18791790, - }, - { - docsCount: 0, - ilmPhase: undefined, - incompatible: 1, - indexName: 'auditbeat-custom-empty-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 247, - }, - { - docsCount: 4, - ilmPhase: undefined, - incompatible: 3, - indexName: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - sizeInBytes: 28409, - }, - { - docsCount: 1628343, - ilmPhase: undefined, - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - pattern: 'packetbeat-*', - sizeInBytes: 512194751, - }, - { - docsCount: 1630289, - ilmPhase: undefined, - indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', - pattern: 'packetbeat-*', - sizeInBytes: 584326147, - }, - ]); - }); - }); - - describe('getFillColor', () => { - test('it returns success when `incompatible` is zero', () => { - const incompatible = 0; - - expect(getFillColor(incompatible)).toEqual(euiThemeVars.euiColorSuccess); - }); - - test('it returns danger when `incompatible` is greater than 0', () => { - const incompatible = 1; - - expect(getFillColor(incompatible)).toEqual(euiThemeVars.euiColorDanger); - }); - - test('it returns the default color when `incompatible` is undefined', () => { - const incompatible = undefined; - - expect(getFillColor(incompatible)).toEqual(DEFAULT_INDEX_COLOR); - }); - }); - - describe('getPathToFlattenedBucketMap', () => { - test('it returns the expected map', () => { - const flattenedBuckets = getFlattenedBuckets({ - ilmPhases, - isILMAvailable: true, - patternRollups, - }); - - expect(getPathToFlattenedBucketMap(flattenedBuckets)).toEqual({ - '.alerts-security.alerts-default.internal.alerts-security.alerts-default-000001': { - pattern: '.alerts-security.alerts-default', - indexName: '.internal.alerts-security.alerts-default-000001', - ilmPhase: 'hot', - incompatible: 0, - sizeInBytes: 0, - docsCount: 26093, - }, - 'auditbeat-*.ds-auditbeat-8.6.1-2023.02.07-000001': { - pattern: 'auditbeat-*', - indexName: '.ds-auditbeat-8.6.1-2023.02.07-000001', - ilmPhase: 'hot', - incompatible: 0, - sizeInBytes: 18791790, - docsCount: 19123, - }, - 'auditbeat-*auditbeat-custom-empty-index-1': { - pattern: 'auditbeat-*', - indexName: 'auditbeat-custom-empty-index-1', - ilmPhase: 'unmanaged', - incompatible: 1, - sizeInBytes: 247, - docsCount: 0, - }, - 'auditbeat-*auditbeat-custom-index-1': { - pattern: 'auditbeat-*', - indexName: 'auditbeat-custom-index-1', - ilmPhase: 'unmanaged', - incompatible: 3, - sizeInBytes: 28409, - docsCount: 4, - }, - 'packetbeat-*.ds-packetbeat-8.6.1-2023.02.04-000001': { - pattern: 'packetbeat-*', - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - ilmPhase: 'hot', - sizeInBytes: 512194751, - docsCount: 1628343, - }, - 'packetbeat-*.ds-packetbeat-8.5.3-2023.02.04-000001': { - docsCount: 1630289, - pattern: 'packetbeat-*', - indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', - ilmPhase: 'hot', - sizeInBytes: 584326147, - }, - }); - }); - }); - - describe('getGroupFromPath', () => { - it('returns the expected group from the path', () => { - expect( - getGroupFromPath([ - { - index: 0, - value: '__null_small_multiples_key__', - }, - { - index: 0, - value: '__root_key__', - }, - { - index: 0, - value: 'auditbeat-*', - }, - { - index: 1, - value: 'auditbeat-custom-empty-index-1', - }, - ]) - ).toEqual('auditbeat-*'); - }); - - it('returns undefined when path is an empty array', () => { - expect(getGroupFromPath([])).toBeUndefined(); - }); - - it('returns undefined when path is an array with only one value', () => { - expect( - getGroupFromPath([{ index: 0, value: '__null_small_multiples_key__' }]) - ).toBeUndefined(); - }); - }); - - describe('getLayersMultiDimensional', () => { - const layer0FillColor = 'transparent'; - const flattenedBuckets = getFlattenedBuckets({ - ilmPhases, - isILMAvailable: true, - patternRollups, - }); - const pathToFlattenedBucketMap = getPathToFlattenedBucketMap(flattenedBuckets); - - it('returns the expected number of layers', () => { - expect( - getLayersMultiDimensional({ - valueFormatter: formatBytes, - layer0FillColor, - pathToFlattenedBucketMap, - }).length - ).toEqual(2); - }); - - it('returns the expected fillLabel valueFormatter function', () => { - getLayersMultiDimensional({ - valueFormatter: formatBytes, - layer0FillColor, - pathToFlattenedBucketMap, - }).forEach((x) => expect(x.fillLabel.valueFormatter(123)).toEqual('123B')); - }); - }); -}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/helpers.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/helpers.ts deleted file mode 100644 index 283854a62acf2..0000000000000 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/helpers.ts +++ /dev/null @@ -1,241 +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 { Datum, Key, ArrayNode } from '@elastic/charts'; -import { euiThemeVars } from '@kbn/ui-theme'; -import { orderBy } from 'lodash/fp'; - -import { getIlmPhase } from '../indices_details/pattern/helpers'; -import { PatternRollup } from '../../types'; -import { getDocsCount, getSizeInBytes } from '../../utils/stats'; - -export interface LegendItem { - color: string | null; - ilmPhase: string | null; - index: string | null; - pattern: string; - sizeInBytes: number | undefined; - docsCount: number; -} - -export interface FlattenedBucket { - ilmPhase: string | undefined; - incompatible: number | undefined; - indexName: string | undefined; - pattern: string; - sizeInBytes: number | undefined; - docsCount: number; -} - -export const getPatternSizeInBytes = ({ - pattern, - patternRollups, -}: { - pattern: string; - patternRollups: Record; -}): number | undefined => { - if (patternRollups[pattern] != null) { - return patternRollups[pattern].sizeInBytes; - } else { - return undefined; - } -}; - -export const getPatternDocsCount = ({ - pattern, - patternRollups, -}: { - pattern: string; - patternRollups: Record; -}): number => { - if (patternRollups[pattern] != null) { - return patternRollups[pattern].docsCount ?? 0; - } else { - return 0; - } -}; - -export const getPatternLegendItem = ({ - pattern, - patternRollups, -}: { - pattern: string; - patternRollups: Record; -}): LegendItem => ({ - color: null, - ilmPhase: null, - index: null, - pattern, - sizeInBytes: getPatternSizeInBytes({ pattern, patternRollups }), - docsCount: getPatternDocsCount({ pattern, patternRollups }), -}); - -export const getLegendItemsForPattern = ({ - pattern, - flattenedBuckets, -}: { - pattern: string; - flattenedBuckets: FlattenedBucket[]; -}): LegendItem[] => - orderBy( - ['sizeInBytes'], - ['desc'], - flattenedBuckets - .filter((x) => x.pattern === pattern) - .map((flattenedBucket) => ({ - color: getFillColor(flattenedBucket.incompatible), - ilmPhase: flattenedBucket.ilmPhase ?? null, - index: flattenedBucket.indexName ?? null, - pattern: flattenedBucket.pattern, - sizeInBytes: flattenedBucket.sizeInBytes, - docsCount: flattenedBucket.docsCount, - })) - ); - -export const getLegendItems = ({ - patterns, - flattenedBuckets, - patternRollups, -}: { - patterns: string[]; - flattenedBuckets: FlattenedBucket[]; - patternRollups: Record; -}): LegendItem[] => - patterns.reduce( - (acc, pattern) => [ - ...acc, - getPatternLegendItem({ pattern, patternRollups }), - ...getLegendItemsForPattern({ pattern, flattenedBuckets }), - ], - [] - ); - -export const getFlattenedBuckets = ({ - ilmPhases, - isILMAvailable, - patternRollups, -}: { - ilmPhases: string[]; - isILMAvailable: boolean; - patternRollups: Record; -}): FlattenedBucket[] => - Object.values(patternRollups).reduce((acc, patternRollup) => { - // enables fast lookup of valid phase names: - const ilmPhasesMap = ilmPhases.reduce>( - (phasesMap, phase) => ({ ...phasesMap, [phase]: 0 }), - {} - ); - const { ilmExplain, pattern, results, stats } = patternRollup; - - if (((isILMAvailable && ilmExplain != null) || !isILMAvailable) && stats != null) { - return [ - ...acc, - ...Object.entries(stats).reduce((validStats, [indexName]) => { - const ilmPhase = getIlmPhase(ilmExplain?.[indexName], isILMAvailable); - const isSelectedPhase = - (isILMAvailable && ilmPhase != null && ilmPhasesMap[ilmPhase] != null) || - !isILMAvailable; - - if (isSelectedPhase) { - const incompatible = - results != null && results[indexName] != null - ? results[indexName].incompatible - : undefined; - const sizeInBytes = getSizeInBytes({ indexName, stats }); - const docsCount = getDocsCount({ stats, indexName }); - return [ - ...validStats, - { - ilmPhase, - incompatible, - indexName, - pattern, - sizeInBytes, - docsCount, - }, - ]; - } else { - return validStats; - } - }, []), - ]; - } - - return acc; - }, []); - -const groupByRollup = (d: Datum) => d.pattern; // the treemap is grouped by this field - -export const DEFAULT_INDEX_COLOR = euiThemeVars.euiColorPrimary; - -export const getFillColor = (incompatible: number | undefined): string => { - if (incompatible === 0) { - return euiThemeVars.euiColorSuccess; - } else if (incompatible != null && incompatible > 0) { - return euiThemeVars.euiColorDanger; - } else { - return DEFAULT_INDEX_COLOR; - } -}; - -export const getPathToFlattenedBucketMap = ( - flattenedBuckets: FlattenedBucket[] -): Record => - flattenedBuckets.reduce>( - (acc, { pattern, indexName, ...remaining }) => ({ - ...acc, - [`${pattern}${indexName}`]: { pattern, indexName, ...remaining }, - }), - {} - ); - -/** - * Extracts the first group name from the data representing the second group - */ -export const getGroupFromPath = (path: ArrayNode['path']): string | undefined => { - const OFFSET_FROM_END = 2; // The offset from the end of the path array containing the group - const groupIndex = path.length - OFFSET_FROM_END; - return groupIndex > 0 ? path[groupIndex].value : undefined; -}; - -export const getLayersMultiDimensional = ({ - valueFormatter, - layer0FillColor, - pathToFlattenedBucketMap, -}: { - valueFormatter: (value: number) => string; - layer0FillColor: string; - pathToFlattenedBucketMap: Record; -}) => { - return [ - { - fillLabel: { - valueFormatter, - }, - groupByRollup, - nodeLabel: (ilmPhase: Datum) => ilmPhase, - shape: { - fillColor: layer0FillColor, - }, - }, - { - fillLabel: { - valueFormatter, - }, - groupByRollup: (d: Datum) => d.indexName, - nodeLabel: (indexName: Datum) => indexName, - shape: { - fillColor: (indexName: Key, _sortIndex: number, node: Pick) => { - const pattern = getGroupFromPath(node.path) ?? ''; - const flattenedBucket = pathToFlattenedBucketMap[`${pattern}${indexName}`]; - - return getFillColor(flattenedBucket?.incompatible); - }, - }, - }, - ]; -}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/index.tsx index cfde7c0342585..23a4fc46f6ad4 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/index.tsx @@ -8,12 +8,12 @@ import React, { useCallback, useMemo } from 'react'; import { useResultsRollupContext } from '../../contexts/results_rollup_context'; -import { getFlattenedBuckets } from './helpers'; import { StorageTreemap } from './storage_treemap'; import { DEFAULT_MAX_CHART_HEIGHT } from '../indices_details/pattern/index_check_flyout/index_properties/index_check_fields/tabs/styles'; import { SelectedIndex } from '../../types'; import { useDataQualityContext } from '../../data_quality_context'; import { DOCS_UNIT } from './translations'; +import { getFlattenedBuckets } from './utils/get_flattened_buckets'; export interface Props { onIndexSelected: ({ indexName, pattern }: SelectedIndex) => void; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/constants.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/constants.ts new file mode 100644 index 0000000000000..c67b052fbf2b5 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/constants.ts @@ -0,0 +1,10 @@ +/* + * 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 { euiThemeVars } from '@kbn/ui-theme'; + +export const DEFAULT_INDEX_COLOR = euiThemeVars.euiColorPrimary; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.test.tsx index a8998a134416f..7e1834e05ed4c 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.test.tsx @@ -11,7 +11,6 @@ import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; -import { FlattenedBucket, getFlattenedBuckets, getLegendItems } from '../helpers'; import { EMPTY_STAT } from '../../../constants'; import { alertIndexWithAllResults } from '../../../mock/pattern_rollup/mock_alerts_pattern_rollup'; import { auditbeatWithAllResults } from '../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; @@ -25,6 +24,9 @@ import { StorageTreemap } from '.'; import { DEFAULT_MAX_CHART_HEIGHT } from '../../indices_details/pattern/index_check_flyout/index_properties/index_check_fields/tabs/styles'; import { NO_DATA_LABEL } from './translations'; import { PatternRollup } from '../../../types'; +import { FlattenedBucket } from '../types'; +import { getFlattenedBuckets } from '../utils/get_flattened_buckets'; +import { getLegendItems } from './utils/get_legend_items'; const defaultBytesFormat = '0,0.[0]b'; const formatBytes = (value: number | undefined) => diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.tsx index fbabe4412e493..5a0a7be5bab3d 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/index.tsx @@ -22,12 +22,6 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React, { useCallback, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; -import { - FlattenedBucket, - getLayersMultiDimensional, - getLegendItems, - getPathToFlattenedBucketMap, -} from '../helpers'; import { ChartLegendItem } from './chart_legend_item'; import { NoData } from './no_data'; import { @@ -36,6 +30,10 @@ import { } from '../../indices_details/pattern/index_check_flyout/index_properties/index_check_fields/tabs/styles'; import { PatternRollup, SelectedIndex } from '../../../types'; import { useDataQualityContext } from '../../../data_quality_context'; +import { FlattenedBucket } from '../types'; +import { getPathToFlattenedBucketMap } from './utils/get_path_to_flattened_bucket_map'; +import { getLayersMultiDimensional } from './utils/get_layers_multi_dimensional'; +import { getLegendItems } from './utils/get_legend_items'; export const DEFAULT_MIN_CHART_HEIGHT = 240; // px export const LEGEND_WIDTH = 220; // px diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.test.ts new file mode 100644 index 0000000000000..41ce95e50cfbd --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.test.ts @@ -0,0 +1,31 @@ +/* + * 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 { euiThemeVars } from '@kbn/ui-theme'; + +import { getFillColor } from './get_fill_color'; +import { DEFAULT_INDEX_COLOR } from '../constants'; + +describe('getFillColor', () => { + test('it returns success when `incompatible` is zero', () => { + const incompatible = 0; + + expect(getFillColor(incompatible)).toEqual(euiThemeVars.euiColorSuccess); + }); + + test('it returns danger when `incompatible` is greater than 0', () => { + const incompatible = 1; + + expect(getFillColor(incompatible)).toEqual(euiThemeVars.euiColorDanger); + }); + + test('it returns the default color when `incompatible` is undefined', () => { + const incompatible = undefined; + + expect(getFillColor(incompatible)).toEqual(DEFAULT_INDEX_COLOR); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.ts new file mode 100644 index 0000000000000..5c2d43a66ee15 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_fill_color.ts @@ -0,0 +1,18 @@ +/* + * 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 { euiThemeVars } from '@kbn/ui-theme'; +import { DEFAULT_INDEX_COLOR } from '../constants'; + +export const getFillColor = (incompatible: number | undefined): string => { + if (incompatible === 0) { + return euiThemeVars.euiColorSuccess; + } else if (incompatible != null && incompatible > 0) { + return euiThemeVars.euiColorDanger; + } else { + return DEFAULT_INDEX_COLOR; + } +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.test.ts new file mode 100644 index 0000000000000..aa6aee9fafc29 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.test.ts @@ -0,0 +1,90 @@ +/* + * 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 numeral from '@elastic/numeral'; + +import { auditbeatWithAllResults } from '../../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; +import { getFlattenedBuckets } from '../../utils/get_flattened_buckets'; +import { getGroupFromPath, getLayersMultiDimensional } from './get_layers_multi_dimensional'; +import { getPathToFlattenedBucketMap } from './get_path_to_flattened_bucket_map'; +import { alertIndexWithAllResults } from '../../../../mock/pattern_rollup/mock_alerts_pattern_rollup'; +import { packetbeatNoResults } from '../../../../mock/pattern_rollup/mock_packetbeat_pattern_rollup'; +import { PatternRollup } from '../../../../types'; +import { EMPTY_STAT } from '../../../../constants'; + +const defaultBytesFormat = '0,0.[0]b'; +const formatBytes = (value: number | undefined) => + value != null ? numeral(value).format(defaultBytesFormat) : EMPTY_STAT; + +const ilmPhases = ['hot', 'warm', 'unmanaged']; + +const patternRollups: Record = { + '.alerts-security.alerts-default': alertIndexWithAllResults, + 'auditbeat-*': auditbeatWithAllResults, + 'packetbeat-*': packetbeatNoResults, +}; + +describe('getGroupFromPath', () => { + it('returns the expected group from the path', () => { + expect( + getGroupFromPath([ + { + index: 0, + value: '__null_small_multiples_key__', + }, + { + index: 0, + value: '__root_key__', + }, + { + index: 0, + value: 'auditbeat-*', + }, + { + index: 1, + value: 'auditbeat-custom-empty-index-1', + }, + ]) + ).toEqual('auditbeat-*'); + }); + + it('returns undefined when path is an empty array', () => { + expect(getGroupFromPath([])).toBeUndefined(); + }); + + it('returns undefined when path is an array with only one value', () => { + expect(getGroupFromPath([{ index: 0, value: '__null_small_multiples_key__' }])).toBeUndefined(); + }); +}); + +describe('getLayersMultiDimensional', () => { + const layer0FillColor = 'transparent'; + const flattenedBuckets = getFlattenedBuckets({ + ilmPhases, + isILMAvailable: true, + patternRollups, + }); + const pathToFlattenedBucketMap = getPathToFlattenedBucketMap(flattenedBuckets); + + it('returns the expected number of layers', () => { + expect( + getLayersMultiDimensional({ + valueFormatter: formatBytes, + layer0FillColor, + pathToFlattenedBucketMap, + }).length + ).toEqual(2); + }); + + it('returns the expected fillLabel valueFormatter function', () => { + getLayersMultiDimensional({ + valueFormatter: formatBytes, + layer0FillColor, + pathToFlattenedBucketMap, + }).forEach((x) => expect(x.fillLabel.valueFormatter(123)).toEqual('123B')); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.ts new file mode 100644 index 0000000000000..da5947f742138 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_layers_multi_dimensional.ts @@ -0,0 +1,60 @@ +/* + * 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 { ArrayNode, Datum, Key } from '@elastic/charts'; + +import { FlattenedBucket } from '../../types'; +import { getFillColor } from './get_fill_color'; + +const groupByRollup = (d: Datum) => d.pattern; // the treemap is grouped by this field + +/** + * Extracts the first group name from the data representing the second group + */ +export const getGroupFromPath = (path: ArrayNode['path']): string | undefined => { + const OFFSET_FROM_END = 2; // The offset from the end of the path array containing the group + const groupIndex = path.length - OFFSET_FROM_END; + return groupIndex > 0 ? path[groupIndex].value : undefined; +}; + +export const getLayersMultiDimensional = ({ + valueFormatter, + layer0FillColor, + pathToFlattenedBucketMap, +}: { + valueFormatter: (value: number) => string; + layer0FillColor: string; + pathToFlattenedBucketMap: Record; +}) => { + return [ + { + fillLabel: { + valueFormatter, + }, + groupByRollup, + nodeLabel: (ilmPhase: Datum) => ilmPhase, + shape: { + fillColor: layer0FillColor, + }, + }, + { + fillLabel: { + valueFormatter, + }, + groupByRollup: (d: Datum) => d.indexName, + nodeLabel: (indexName: Datum) => indexName, + shape: { + fillColor: (indexName: Key, _sortIndex: number, node: Pick) => { + const pattern = getGroupFromPath(node.path) ?? ''; + const flattenedBucket = pathToFlattenedBucketMap[`${pattern}${indexName}`]; + + return getFillColor(flattenedBucket?.incompatible); + }, + }, + }, + ]; +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.test.ts new file mode 100644 index 0000000000000..eee30b2d974cf --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.test.ts @@ -0,0 +1,196 @@ +/* + * 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 { euiThemeVars } from '@kbn/ui-theme'; + +import { getFlattenedBuckets } from '../../utils/get_flattened_buckets'; +import { alertIndexWithAllResults } from '../../../../mock/pattern_rollup/mock_alerts_pattern_rollup'; +import { auditbeatWithAllResults } from '../../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; +import { packetbeatNoResults } from '../../../../mock/pattern_rollup/mock_packetbeat_pattern_rollup'; +import { PatternRollup } from '../../../../types'; +import { getLegendItems, getLegendItemsForPattern, getPatternLegendItem } from './get_legend_items'; + +const ilmPhases = ['hot', 'warm', 'unmanaged']; +const patterns = ['.alerts-security.alerts-default', 'auditbeat-*', 'packetbeat-*']; +const patternRollups: Record = { + '.alerts-security.alerts-default': alertIndexWithAllResults, + 'auditbeat-*': auditbeatWithAllResults, + 'packetbeat-*': packetbeatNoResults, +}; + +describe('getPatternLegendItem', () => { + test('it returns the expected legend item', () => { + const pattern = 'auditbeat-*'; + + expect(getPatternLegendItem({ pattern, patternRollups })).toEqual({ + color: null, + ilmPhase: null, + index: null, + pattern, + sizeInBytes: auditbeatWithAllResults.sizeInBytes, + docsCount: auditbeatWithAllResults.docsCount, + }); + }); +}); + +describe('getLegendItemsForPattern', () => { + test('it returns the expected legend items', () => { + const pattern = 'auditbeat-*'; + const flattenedBuckets = getFlattenedBuckets({ + ilmPhases, + isILMAvailable: true, + patternRollups, + }); + + expect(getLegendItemsForPattern({ pattern, flattenedBuckets })).toEqual([ + { + color: euiThemeVars.euiColorSuccess, + ilmPhase: 'hot', + index: '.ds-auditbeat-8.6.1-2023.02.07-000001', + pattern: 'auditbeat-*', + sizeInBytes: 18791790, + docsCount: 19123, + }, + { + color: euiThemeVars.euiColorDanger, + ilmPhase: 'unmanaged', + index: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 28409, + docsCount: 4, + }, + { + color: euiThemeVars.euiColorDanger, + ilmPhase: 'unmanaged', + index: 'auditbeat-custom-empty-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 247, + docsCount: 0, + }, + ]); + }); + + test('it returns the expected legend items when isILMAvailable is false', () => { + const pattern = 'auditbeat-*'; + const flattenedBuckets = getFlattenedBuckets({ + ilmPhases, + isILMAvailable: false, + patternRollups, + }); + expect(getLegendItemsForPattern({ pattern, flattenedBuckets })).toEqual([ + { + color: euiThemeVars.euiColorSuccess, + ilmPhase: null, + index: '.ds-auditbeat-8.6.1-2023.02.07-000001', + pattern: 'auditbeat-*', + sizeInBytes: 18791790, + docsCount: 19123, + }, + { + color: euiThemeVars.euiColorDanger, + ilmPhase: null, + index: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 28409, + docsCount: 4, + }, + { + color: euiThemeVars.euiColorDanger, + ilmPhase: null, + index: 'auditbeat-custom-empty-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 247, + docsCount: 0, + }, + ]); + }); +}); + +describe('getLegendItems', () => { + test('it returns the expected legend items', () => { + const flattenedBuckets = getFlattenedBuckets({ + ilmPhases, + isILMAvailable: true, + patternRollups, + }); + + expect(getLegendItems({ flattenedBuckets, patterns, patternRollups })).toEqual([ + { + color: null, + ilmPhase: null, + index: null, + pattern: '.alerts-security.alerts-default', + sizeInBytes: 29717961631, + docsCount: 26093, + }, + { + color: euiThemeVars.euiColorSuccess, + ilmPhase: 'hot', + index: '.internal.alerts-security.alerts-default-000001', + pattern: '.alerts-security.alerts-default', + sizeInBytes: 0, + docsCount: 26093, + }, + { + color: null, + ilmPhase: null, + index: null, + pattern: 'auditbeat-*', + sizeInBytes: 18820446, + docsCount: 19127, + }, + { + color: euiThemeVars.euiColorSuccess, + ilmPhase: 'hot', + index: '.ds-auditbeat-8.6.1-2023.02.07-000001', + pattern: 'auditbeat-*', + sizeInBytes: 18791790, + docsCount: 19123, + }, + { + color: euiThemeVars.euiColorDanger, + ilmPhase: 'unmanaged', + index: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 28409, + docsCount: 4, + }, + { + color: euiThemeVars.euiColorDanger, + ilmPhase: 'unmanaged', + index: 'auditbeat-custom-empty-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 247, + docsCount: 0, + }, + { + color: null, + ilmPhase: null, + index: null, + pattern: 'packetbeat-*', + sizeInBytes: 1096520898, + docsCount: 3258632, + }, + { + color: euiThemeVars.euiColorPrimary, + ilmPhase: 'hot', + index: '.ds-packetbeat-8.5.3-2023.02.04-000001', + pattern: 'packetbeat-*', + sizeInBytes: 584326147, + docsCount: 1630289, + }, + { + color: euiThemeVars.euiColorPrimary, + ilmPhase: 'hot', + index: '.ds-packetbeat-8.6.1-2023.02.04-000001', + pattern: 'packetbeat-*', + sizeInBytes: 512194751, + docsCount: 1628343, + }, + ]); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.ts new file mode 100644 index 0000000000000..16816dcf2a3c6 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_legend_items.ts @@ -0,0 +1,67 @@ +/* + * 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 { orderBy } from 'lodash/fp'; + +import { PatternRollup } from '../../../../types'; +import { FlattenedBucket, LegendItem } from '../../types'; +import { getFillColor } from './get_fill_color'; +import { getPatternDocsCount, getPatternSizeInBytes } from './stats'; + +export const getLegendItemsForPattern = ({ + pattern, + flattenedBuckets, +}: { + pattern: string; + flattenedBuckets: FlattenedBucket[]; +}): LegendItem[] => + orderBy( + ['sizeInBytes'], + ['desc'], + flattenedBuckets + .filter((x) => x.pattern === pattern) + .map((flattenedBucket) => ({ + color: getFillColor(flattenedBucket.incompatible), + ilmPhase: flattenedBucket.ilmPhase ?? null, + index: flattenedBucket.indexName ?? null, + pattern: flattenedBucket.pattern, + sizeInBytes: flattenedBucket.sizeInBytes, + docsCount: flattenedBucket.docsCount, + })) + ); + +export const getPatternLegendItem = ({ + pattern, + patternRollups, +}: { + pattern: string; + patternRollups: Record; +}): LegendItem => ({ + color: null, + ilmPhase: null, + index: null, + pattern, + sizeInBytes: getPatternSizeInBytes({ pattern, patternRollups }), + docsCount: getPatternDocsCount({ pattern, patternRollups }), +}); + +export const getLegendItems = ({ + patterns, + flattenedBuckets, + patternRollups, +}: { + patterns: string[]; + flattenedBuckets: FlattenedBucket[]; + patternRollups: Record; +}): LegendItem[] => + patterns.reduce( + (acc, pattern) => [ + ...acc, + getPatternLegendItem({ pattern, patternRollups }), + ...getLegendItemsForPattern({ pattern, flattenedBuckets }), + ], + [] + ); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_path_to_flattened_bucket_map.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_path_to_flattened_bucket_map.test.ts new file mode 100644 index 0000000000000..f7a3be93fcc85 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_path_to_flattened_bucket_map.test.ts @@ -0,0 +1,82 @@ +/* + * 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 { PatternRollup } from '../../../../types'; +import { getFlattenedBuckets } from '../../utils/get_flattened_buckets'; +import { getPathToFlattenedBucketMap } from './get_path_to_flattened_bucket_map'; +import { alertIndexWithAllResults } from '../../../../mock/pattern_rollup/mock_alerts_pattern_rollup'; +import { auditbeatWithAllResults } from '../../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; +import { packetbeatNoResults } from '../../../../mock/pattern_rollup/mock_packetbeat_pattern_rollup'; + +const ilmPhases = ['hot', 'warm', 'unmanaged']; + +const patternRollups: Record = { + '.alerts-security.alerts-default': alertIndexWithAllResults, + 'auditbeat-*': auditbeatWithAllResults, + 'packetbeat-*': packetbeatNoResults, +}; + +describe('helpers', () => { + describe('getPathToFlattenedBucketMap', () => { + test('it returns the expected map', () => { + const flattenedBuckets = getFlattenedBuckets({ + ilmPhases, + isILMAvailable: true, + patternRollups, + }); + + expect(getPathToFlattenedBucketMap(flattenedBuckets)).toEqual({ + '.alerts-security.alerts-default.internal.alerts-security.alerts-default-000001': { + pattern: '.alerts-security.alerts-default', + indexName: '.internal.alerts-security.alerts-default-000001', + ilmPhase: 'hot', + incompatible: 0, + sizeInBytes: 0, + docsCount: 26093, + }, + 'auditbeat-*.ds-auditbeat-8.6.1-2023.02.07-000001': { + pattern: 'auditbeat-*', + indexName: '.ds-auditbeat-8.6.1-2023.02.07-000001', + ilmPhase: 'hot', + incompatible: 0, + sizeInBytes: 18791790, + docsCount: 19123, + }, + 'auditbeat-*auditbeat-custom-empty-index-1': { + pattern: 'auditbeat-*', + indexName: 'auditbeat-custom-empty-index-1', + ilmPhase: 'unmanaged', + incompatible: 1, + sizeInBytes: 247, + docsCount: 0, + }, + 'auditbeat-*auditbeat-custom-index-1': { + pattern: 'auditbeat-*', + indexName: 'auditbeat-custom-index-1', + ilmPhase: 'unmanaged', + incompatible: 3, + sizeInBytes: 28409, + docsCount: 4, + }, + 'packetbeat-*.ds-packetbeat-8.6.1-2023.02.04-000001': { + pattern: 'packetbeat-*', + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + ilmPhase: 'hot', + sizeInBytes: 512194751, + docsCount: 1628343, + }, + 'packetbeat-*.ds-packetbeat-8.5.3-2023.02.04-000001': { + docsCount: 1630289, + pattern: 'packetbeat-*', + indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', + ilmPhase: 'hot', + sizeInBytes: 584326147, + }, + }); + }); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_path_to_flattened_bucket_map.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_path_to_flattened_bucket_map.ts new file mode 100644 index 0000000000000..4afbe4c1b73cd --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/get_path_to_flattened_bucket_map.ts @@ -0,0 +1,19 @@ +/* + * 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 { FlattenedBucket } from '../../types'; + +export const getPathToFlattenedBucketMap = ( + flattenedBuckets: FlattenedBucket[] +): Record => + flattenedBuckets.reduce>( + (acc, { pattern, indexName, ...remaining }) => ({ + ...acc, + [`${pattern}${indexName}`]: { pattern, indexName, ...remaining }, + }), + {} + ); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/stats.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/stats.test.ts new file mode 100644 index 0000000000000..b2b31eac00ab0 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/stats.test.ts @@ -0,0 +1,61 @@ +/* + * 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 { PatternRollup } from '../../../../types'; +import { alertIndexWithAllResults } from '../../../../mock/pattern_rollup/mock_alerts_pattern_rollup'; +import { auditbeatWithAllResults } from '../../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; +import { packetbeatNoResults } from '../../../../mock/pattern_rollup/mock_packetbeat_pattern_rollup'; +import { getPatternSizeInBytes } from './stats'; + +const patternRollups: Record = { + '.alerts-security.alerts-default': alertIndexWithAllResults, + 'auditbeat-*': auditbeatWithAllResults, + 'packetbeat-*': packetbeatNoResults, +}; + +/** a valid `PatternRollup` that has an undefined `sizeInBytes` */ +const noSizeInBytes: Record = { + 'valid-*': { + docsCount: 19127, + error: null, + ilmExplain: null, + ilmExplainPhaseCounts: { + hot: 1, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 2, + }, + indices: 3, + pattern: 'valid-*', + results: undefined, + sizeInBytes: undefined, // <-- + stats: null, + }, +}; + +describe('getPatternSizeInBytes', () => { + test('it returns the expected size when the pattern exists in the rollup', () => { + const pattern = 'auditbeat-*'; + + expect(getPatternSizeInBytes({ pattern, patternRollups })).toEqual( + auditbeatWithAllResults.sizeInBytes + ); + }); + + test('it returns undefined when the pattern exists in the rollup, but does not have a sizeInBytes', () => { + const pattern = 'valid-*'; + + expect(getPatternSizeInBytes({ pattern, patternRollups: noSizeInBytes })).toBeUndefined(); + }); + + test('it returns undefined when the pattern does NOT exist in the rollup', () => { + const pattern = 'does-not-exist-*'; + + expect(getPatternSizeInBytes({ pattern, patternRollups })).toBeUndefined(); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/stats.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/stats.ts new file mode 100644 index 0000000000000..9d999266a40f5 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/storage_treemap/utils/stats.ts @@ -0,0 +1,36 @@ +/* + * 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 { PatternRollup } from '../../../../types'; + +export const getPatternSizeInBytes = ({ + pattern, + patternRollups, +}: { + pattern: string; + patternRollups: Record; +}): number | undefined => { + if (patternRollups[pattern] != null) { + return patternRollups[pattern].sizeInBytes; + } else { + return undefined; + } +}; + +export const getPatternDocsCount = ({ + pattern, + patternRollups, +}: { + pattern: string; + patternRollups: Record; +}): number => { + if (patternRollups[pattern] != null) { + return patternRollups[pattern].docsCount ?? 0; + } else { + return 0; + } +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/types.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/types.ts similarity index 56% rename from x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/types.ts rename to x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/types.ts index e44300859bffd..a1507d1ad9bcb 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/types.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/types.ts @@ -5,15 +5,20 @@ * 2.0. */ -import { IlmPhase } from '../../../types'; - -export interface IndexSummaryTableItem { +export interface LegendItem { + color: string | null; + ilmPhase: string | null; + index: string | null; + pattern: string; + sizeInBytes: number | undefined; docsCount: number; +} + +export interface FlattenedBucket { + ilmPhase: string | undefined; incompatible: number | undefined; - indexName: string; - ilmPhase: IlmPhase | undefined; + indexName: string | undefined; pattern: string; - patternDocsCount: number; sizeInBytes: number | undefined; - checkedAt: number | undefined; + docsCount: number; } diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/utils/get_flattened_buckets.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/utils/get_flattened_buckets.test.ts new file mode 100644 index 0000000000000..7aaff4888186a --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/utils/get_flattened_buckets.test.ts @@ -0,0 +1,135 @@ +/* + * 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 { alertIndexWithAllResults } from '../../../mock/pattern_rollup/mock_alerts_pattern_rollup'; +import { auditbeatWithAllResults } from '../../../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; +import { packetbeatNoResults } from '../../../mock/pattern_rollup/mock_packetbeat_pattern_rollup'; +import { PatternRollup } from '../../../types'; +import { getFlattenedBuckets } from './get_flattened_buckets'; + +const ilmPhases = ['hot', 'warm', 'unmanaged']; +const patternRollups: Record = { + '.alerts-security.alerts-default': alertIndexWithAllResults, + 'auditbeat-*': auditbeatWithAllResults, + 'packetbeat-*': packetbeatNoResults, +}; + +describe('getFlattenedBuckets', () => { + test('it returns the expected flattened buckets', () => { + expect( + getFlattenedBuckets({ + ilmPhases, + isILMAvailable: true, + patternRollups, + }) + ).toEqual([ + { + ilmPhase: 'hot', + incompatible: 0, + indexName: '.internal.alerts-security.alerts-default-000001', + pattern: '.alerts-security.alerts-default', + sizeInBytes: 0, + docsCount: 26093, + }, + { + ilmPhase: 'hot', + incompatible: 0, + indexName: '.ds-auditbeat-8.6.1-2023.02.07-000001', + pattern: 'auditbeat-*', + sizeInBytes: 18791790, + docsCount: 19123, + }, + { + ilmPhase: 'unmanaged', + incompatible: 1, + indexName: 'auditbeat-custom-empty-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 247, + docsCount: 0, + }, + { + ilmPhase: 'unmanaged', + incompatible: 3, + indexName: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 28409, + docsCount: 4, + }, + { + ilmPhase: 'hot', + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + pattern: 'packetbeat-*', + sizeInBytes: 512194751, + docsCount: 1628343, + }, + { + ilmPhase: 'hot', + indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', + pattern: 'packetbeat-*', + sizeInBytes: 584326147, + docsCount: 1630289, + }, + ]); + }); + + test('it returns the expected flattened buckets when isILMAvailable is false', () => { + expect( + getFlattenedBuckets({ + ilmPhases, + isILMAvailable: false, + patternRollups, + }) + ).toEqual([ + { + docsCount: 26093, + ilmPhase: undefined, + incompatible: 0, + indexName: '.internal.alerts-security.alerts-default-000001', + pattern: '.alerts-security.alerts-default', + sizeInBytes: 0, + }, + { + docsCount: 19123, + ilmPhase: undefined, + incompatible: 0, + indexName: '.ds-auditbeat-8.6.1-2023.02.07-000001', + pattern: 'auditbeat-*', + sizeInBytes: 18791790, + }, + { + docsCount: 0, + ilmPhase: undefined, + incompatible: 1, + indexName: 'auditbeat-custom-empty-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 247, + }, + { + docsCount: 4, + ilmPhase: undefined, + incompatible: 3, + indexName: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + sizeInBytes: 28409, + }, + { + docsCount: 1628343, + ilmPhase: undefined, + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + pattern: 'packetbeat-*', + sizeInBytes: 512194751, + }, + { + docsCount: 1630289, + ilmPhase: undefined, + indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', + pattern: 'packetbeat-*', + sizeInBytes: 584326147, + }, + ]); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/utils/get_flattened_buckets.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/utils/get_flattened_buckets.ts new file mode 100644 index 0000000000000..7363ae1df2c33 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/storage_details/utils/get_flattened_buckets.ts @@ -0,0 +1,65 @@ +/* + * 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 { PatternRollup } from '../../../types'; +import { getIlmPhase } from '../../../utils/get_ilm_phase'; +import { getDocsCount, getSizeInBytes } from '../../../utils/stats'; +import { FlattenedBucket } from '../types'; + +export const getFlattenedBuckets = ({ + ilmPhases, + isILMAvailable, + patternRollups, +}: { + ilmPhases: string[]; + isILMAvailable: boolean; + patternRollups: Record; +}): FlattenedBucket[] => + Object.values(patternRollups).reduce((acc, patternRollup) => { + // enables fast lookup of valid phase names: + const ilmPhasesMap = ilmPhases.reduce>( + (phasesMap, phase) => ({ ...phasesMap, [phase]: 0 }), + {} + ); + const { ilmExplain, pattern, results, stats } = patternRollup; + + if (((isILMAvailable && ilmExplain != null) || !isILMAvailable) && stats != null) { + return [ + ...acc, + ...Object.entries(stats).reduce((validStats, [indexName]) => { + const ilmPhase = getIlmPhase(ilmExplain?.[indexName], isILMAvailable); + const isSelectedPhase = + (isILMAvailable && ilmPhase != null && ilmPhasesMap[ilmPhase] != null) || + !isILMAvailable; + + if (isSelectedPhase) { + const incompatible = + results != null && results[indexName] != null + ? results[indexName].incompatible + : undefined; + const sizeInBytes = getSizeInBytes({ indexName, stats }); + const docsCount = getDocsCount({ stats, indexName }); + return [ + ...validStats, + { + ilmPhase, + incompatible, + indexName, + pattern, + sizeInBytes, + docsCount, + }, + ]; + } else { + return validStats; + } + }, []), + ]; + } + + return acc; + }, []); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/helpers.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/helpers.test.ts deleted file mode 100644 index 2b37622baa655..0000000000000 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/helpers.test.ts +++ /dev/null @@ -1,107 +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 { getAllIndicesToCheck, getIndexDocsCountFromRollup, getIndexToCheck } from './helpers'; -import { mockPacketbeatPatternRollup } from '../../../mock/pattern_rollup/mock_packetbeat_pattern_rollup'; - -const patternIndexNames: Record = { - 'packetbeat-*': [ - '.ds-packetbeat-8.6.1-2023.02.04-000001', - '.ds-packetbeat-8.5.3-2023.02.04-000001', - ], - 'auditbeat-*': [ - 'auditbeat-7.17.9-2023.02.13-000001', - 'auditbeat-custom-index-1', - '.ds-auditbeat-8.6.1-2023.02.13-000001', - ], - 'logs-*': [ - '.ds-logs-endpoint.alerts-default-2023.02.24-000001', - '.ds-logs-endpoint.events.process-default-2023.02.24-000001', - ], - 'remote:*': [], - '.alerts-security.alerts-default': ['.internal.alerts-security.alerts-default-000001'], -}; - -describe('helpers', () => { - describe('getIndexToCheck', () => { - test('it returns the expected `IndexToCheck`', () => { - expect( - getIndexToCheck({ - indexName: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - }) - ).toEqual({ - indexName: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - }); - }); - }); - - describe('getAllIndicesToCheck', () => { - test('it returns the sorted collection of `IndexToCheck`', () => { - expect(getAllIndicesToCheck(patternIndexNames)).toEqual([ - { - indexName: '.internal.alerts-security.alerts-default-000001', - pattern: '.alerts-security.alerts-default', - }, - { - indexName: 'auditbeat-custom-index-1', - pattern: 'auditbeat-*', - }, - { - indexName: 'auditbeat-7.17.9-2023.02.13-000001', - pattern: 'auditbeat-*', - }, - { - indexName: '.ds-auditbeat-8.6.1-2023.02.13-000001', - pattern: 'auditbeat-*', - }, - { - indexName: '.ds-logs-endpoint.events.process-default-2023.02.24-000001', - pattern: 'logs-*', - }, - { - indexName: '.ds-logs-endpoint.alerts-default-2023.02.24-000001', - pattern: 'logs-*', - }, - { - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - pattern: 'packetbeat-*', - }, - { - indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', - pattern: 'packetbeat-*', - }, - ]); - }); - }); - - describe('getIndexDocsCountFromRollup', () => { - test('it returns the expected count when the `patternRollup` has `stats`', () => { - expect( - getIndexDocsCountFromRollup({ - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - patternRollup: mockPacketbeatPatternRollup, - }) - ).toEqual(1628343); - }); - - test('it returns zero when the `patternRollup` `stats` is null', () => { - const patternRollup = { - ...mockPacketbeatPatternRollup, - stats: null, // <-- - }; - - expect( - getIndexDocsCountFromRollup({ - indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', - patternRollup, - }) - ).toEqual(0); - }); - }); -}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/index.tsx index e2851ee4b3761..9e90b28e71a9e 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/index.tsx @@ -10,7 +10,7 @@ import React, { useCallback, useEffect, useRef, useState } from 'react'; import styled from 'styled-components'; import { v4 as uuidv4 } from 'uuid'; -import { getAllIndicesToCheck } from './helpers'; +import { getAllIndicesToCheck } from './utils/get_all_indices_to_check'; import { useResultsRollupContext } from '../../../contexts/results_rollup_context'; import { checkIndex } from '../../../utils/check_index'; import { useDataQualityContext } from '../../../data_quality_context'; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/translations.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/translations.ts deleted file mode 100644 index 219d1039ac290..0000000000000 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/translations.ts +++ /dev/null @@ -1,17 +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 { i18n } from '@kbn/i18n'; - -export const AN_ERROR_OCCURRED_CHECKING_INDEX = (indexName: string) => - i18n.translate( - 'securitySolutionPackages.ecsDataQualityDashboard.checkAllErrorCheckingIndexMessage', - { - values: { indexName }, - defaultMessage: 'An error occurred checking index {indexName}', - } - ); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/utils/get_all_indices_to_check.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/utils/get_all_indices_to_check.test.ts new file mode 100644 index 0000000000000..3a3bbf5880455 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/utils/get_all_indices_to_check.test.ts @@ -0,0 +1,79 @@ +/* + * 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 { getAllIndicesToCheck, getIndexToCheck } from './get_all_indices_to_check'; + +const patternIndexNames: Record = { + 'packetbeat-*': [ + '.ds-packetbeat-8.6.1-2023.02.04-000001', + '.ds-packetbeat-8.5.3-2023.02.04-000001', + ], + 'auditbeat-*': [ + 'auditbeat-7.17.9-2023.02.13-000001', + 'auditbeat-custom-index-1', + '.ds-auditbeat-8.6.1-2023.02.13-000001', + ], + 'logs-*': [ + '.ds-logs-endpoint.alerts-default-2023.02.24-000001', + '.ds-logs-endpoint.events.process-default-2023.02.24-000001', + ], + 'remote:*': [], + '.alerts-security.alerts-default': ['.internal.alerts-security.alerts-default-000001'], +}; + +describe('getIndexToCheck', () => { + test('it returns the expected `IndexToCheck`', () => { + expect( + getIndexToCheck({ + indexName: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + }) + ).toEqual({ + indexName: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + }); + }); +}); + +describe('getAllIndicesToCheck', () => { + test('it returns the sorted collection of `IndexToCheck`', () => { + expect(getAllIndicesToCheck(patternIndexNames)).toEqual([ + { + indexName: '.internal.alerts-security.alerts-default-000001', + pattern: '.alerts-security.alerts-default', + }, + { + indexName: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + }, + { + indexName: 'auditbeat-7.17.9-2023.02.13-000001', + pattern: 'auditbeat-*', + }, + { + indexName: '.ds-auditbeat-8.6.1-2023.02.13-000001', + pattern: 'auditbeat-*', + }, + { + indexName: '.ds-logs-endpoint.events.process-default-2023.02.24-000001', + pattern: 'logs-*', + }, + { + indexName: '.ds-logs-endpoint.alerts-default-2023.02.24-000001', + pattern: 'logs-*', + }, + { + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + pattern: 'packetbeat-*', + }, + { + indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', + pattern: 'packetbeat-*', + }, + ]); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/helpers.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/utils/get_all_indices_to_check.ts similarity index 73% rename from x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/helpers.ts rename to x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/utils/get_all_indices_to_check.ts index dfbc0f69f82aa..dbe1b113bc9aa 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/helpers.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/check_all/utils/get_all_indices_to_check.ts @@ -7,8 +7,7 @@ import { orderBy } from 'lodash/fp'; -import type { IndexToCheck, MeteringStatsIndex, PatternRollup } from '../../../types'; -import { getDocsCount } from '../../../utils/stats'; +import type { IndexToCheck } from '../../../../types'; export const getIndexToCheck = ({ indexName, @@ -45,18 +44,3 @@ export const getAllIndicesToCheck = ( return [...acc, ...sortedIndicesToCheck]; }, []); }; - -export const getIndexDocsCountFromRollup = ({ - indexName, - patternRollup, -}: { - indexName: string; - patternRollup: PatternRollup; -}): number => { - const stats: Record | null = patternRollup?.stats ?? null; - - return getDocsCount({ - indexName, - stats, - }); -}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/index.tsx index d0037032172c3..20fbd0b2478b0 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/index.tsx @@ -22,16 +22,14 @@ import { getSummaryTableMarkdownHeader, getSummaryTableMarkdownRow, } from '../../data_quality_details/indices_details/pattern/index_check_flyout/index_properties/markdown/helpers'; -import { - defaultSort, - getSummaryTableItems, -} from '../../data_quality_details/indices_details/pattern/helpers'; import type { DataQualityCheckResult, IndexToCheck, PatternRollup } from '../../types'; import { useDataQualityContext } from '../../data_quality_context'; import { useResultsRollupContext } from '../../contexts/results_rollup_context'; import { Actions } from '../../actions'; import { getErrorSummaries } from './utils/get_error_summaries'; import { getSizeInBytes } from '../../utils/stats'; +import { getSummaryTableItems } from '../../utils/get_summary_table_items'; +import { defaultSort } from '../../constants'; const StyledActionsContainerFlexItem = styled(EuiFlexItem)` margin-top: auto; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.tsx index eb8cd670d70c5..e2571b5d0a75c 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.tsx @@ -34,10 +34,6 @@ import type { PatternRollup, TelemetryEvents, } from '../../types'; -import { - getIlmPhase, - getIndexIncompatible, -} from '../../data_quality_details/indices_details/pattern/helpers'; import { getIncompatibleMappingsFields, getIncompatibleValuesFields, @@ -45,7 +41,8 @@ import { } from '../../data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/tabs/incompatible_tab/helpers'; import { UseResultsRollupReturnValue } from './types'; import { useIsMounted } from '../use_is_mounted'; -import { getDocsCount, getSizeInBytes } from '../../utils/stats'; +import { getDocsCount, getIndexIncompatible, getSizeInBytes } from '../../utils/stats'; +import { getIlmPhase } from '../../utils/get_ilm_phase'; interface Props { ilmPhases: string[]; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/get_pattern_rollups_with_latest_check_result.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/get_pattern_rollups_with_latest_check_result.ts index 22b7eb6db4d8d..e826730df89cc 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/get_pattern_rollups_with_latest_check_result.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/get_pattern_rollups_with_latest_check_result.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { getIndexDocsCountFromRollup } from '../../../data_quality_summary/summary_actions/check_all/helpers'; -import { getIlmPhase } from '../../../data_quality_details/indices_details/pattern/helpers'; import { getAllIncompatibleMarkdownComments } from '../../../data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/tabs/incompatible_tab/helpers'; import { getSizeInBytes } from '../../../utils/stats'; import type { IlmPhase, PartitionedFieldMetadata, PatternRollup } from '../../../types'; +import { getIndexDocsCountFromRollup } from './stats'; +import { getIlmPhase } from '../../../utils/get_ilm_phase'; export const getPatternRollupsWithLatestCheckResult = ({ error, diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/stats.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/stats.test.ts index 7f28c6bcd1727..0d48a794670d5 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/stats.test.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/stats.test.ts @@ -15,6 +15,7 @@ import { import { mockStats } from '../../../mock/stats/mock_stats'; import { DataQualityCheckResult, PatternRollup } from '../../../types'; import { + getIndexDocsCountFromRollup, getIndexId, getTotalDocsCount, getTotalIncompatible, @@ -229,3 +230,28 @@ describe('getIndexId', () => { ); }); }); + +describe('getIndexDocsCountFromRollup', () => { + test('it returns the expected count when the `patternRollup` has `stats`', () => { + expect( + getIndexDocsCountFromRollup({ + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + patternRollup: mockPacketbeatPatternRollup, + }) + ).toEqual(1628343); + }); + + test('it returns zero when the `patternRollup` `stats` is null', () => { + const patternRollup = { + ...mockPacketbeatPatternRollup, + stats: null, // <-- + }; + + expect( + getIndexDocsCountFromRollup({ + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + patternRollup, + }) + ).toEqual(0); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/stats.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/stats.ts index c3a44f04471ea..80965c706d9f3 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/stats.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/utils/stats.ts @@ -6,7 +6,11 @@ */ import { DataQualityCheckResult, MeteringStatsIndex, PatternRollup } from '../../../types'; -import { getTotalPatternIncompatible, getTotalPatternIndicesChecked } from '../../../utils/stats'; +import { + getDocsCount, + getTotalPatternIncompatible, + getTotalPatternIndicesChecked, +} from '../../../utils/stats'; export const getTotalPatternSameFamily = ( results: Record | undefined @@ -98,3 +102,18 @@ export const getIndexId = ({ indexName: string; stats: Record | null; }): string | null | undefined => stats && stats[indexName]?.uuid; + +export const getIndexDocsCountFromRollup = ({ + indexName, + patternRollup, +}: { + indexName: string; + patternRollup: PatternRollup; +}): number => { + const stats: Record | null = patternRollup?.stats ?? null; + + return getDocsCount({ + indexName, + stats, + }); +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/stub/get_check_state/index.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/stub/get_check_state/index.ts index 12f45c192aa25..1c56d25367e3a 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/stub/get_check_state/index.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/stub/get_check_state/index.ts @@ -7,10 +7,6 @@ import { IndicesGetMappingIndexMappingRecord } from '@elastic/elasticsearch/lib/api/types'; -import { - getMappingsProperties, - getSortedPartitionedFieldMetadata, -} from '../../data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers'; import { mockMappingsResponse } from '../../mock/mappings_response/mock_mappings_response'; import { UseIndicesCheckCheckState } from '../../hooks/use_indices_check/types'; import { getUnallowedValues } from '../../utils/fetch_unallowed_values'; @@ -18,6 +14,7 @@ import { getUnallowedValueRequestItems } from '../../utils/get_unallowed_value_r import { EcsFlatTyped } from '../../constants'; import { mockUnallowedValuesResponse } from '../../mock/unallowed_values/mock_unallowed_values'; import { UnallowedValueSearchResult } from '../../types'; +import { getMappingsProperties, getSortedPartitionedFieldMetadata } from '../../utils/metadata'; export const getCheckState = ( indexName: string, diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/translations.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/translations.ts index 3497aa89d97ee..904ab05a77007 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/translations.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/translations.ts @@ -296,3 +296,12 @@ export const DATA_QUALITY_DASHBOARD_CONVERSATION_ID = i18n.translate( defaultMessage: 'Data Quality dashboard', } ); + +export const AN_ERROR_OCCURRED_CHECKING_INDEX = (indexName: string) => + i18n.translate( + 'securitySolutionPackages.ecsDataQualityDashboard.checkAllErrorCheckingIndexMessage', + { + values: { indexName }, + defaultMessage: 'An error occurred checking index {indexName}', + } + ); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/types.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/types.ts index 916d0f377bf85..08c964d423101 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/types.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/types.ts @@ -276,3 +276,14 @@ export interface TelemetryEvents { reportDataQualityIndexChecked?: ReportDataQualityIndexChecked; reportDataQualityCheckAllCompleted?: ReportDataQualityCheckAllCompleted; } + +export interface IndexSummaryTableItem { + docsCount: number; + incompatible: number | undefined; + indexName: string; + ilmPhase: IlmPhase | undefined; + pattern: string; + patternDocsCount: number; + sizeInBytes: number | undefined; + checkedAt: number | undefined; +} diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/check_index.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/check_index.test.ts index 2b90f67966c77..77538a60c65c1 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/check_index.test.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/check_index.test.ts @@ -9,14 +9,11 @@ import { checkIndex, EMPTY_PARTITIONED_FIELD_METADATA } from './check_index'; import { mockMappingsResponse } from '../mock/mappings_response/mock_mappings_response'; import { mockUnallowedValuesResponse } from '../mock/unallowed_values/mock_unallowed_values'; import { UnallowedValueRequestItem, UnallowedValueSearchResult } from '../types'; -import { - getMappingsProperties, - getSortedPartitionedFieldMetadata, -} from '../data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers'; import { IndicesGetMappingIndexMappingRecord } from '@elastic/elasticsearch/lib/api/types'; import { getUnallowedValues } from './fetch_unallowed_values'; import { getUnallowedValueRequestItems } from './get_unallowed_value_request_items'; import { EcsFlatTyped, EMPTY_STAT } from '../constants'; +import { getMappingsProperties, getSortedPartitionedFieldMetadata } from './metadata'; let mockFetchMappings = jest.fn( (_: { abortController: AbortController; patternOrIndexName: string }) => diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/check_index.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/check_index.ts index 76094c97f5667..a577ca15d0ad8 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/check_index.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/check_index.ts @@ -13,11 +13,7 @@ import { import { v4 as uuidv4 } from 'uuid'; import { getUnallowedValueRequestItems } from './get_unallowed_value_request_items'; -import { - getMappingsProperties, - getSortedPartitionedFieldMetadata, -} from '../data_quality_details/indices_details/pattern/index_check_flyout/index_properties/helpers'; -import * as i18n from '../data_quality_summary/summary_actions/check_all/translations'; +import * as i18n from '../translations'; import type { OnCheckCompleted, PartitionedFieldMetadata, @@ -27,6 +23,7 @@ import type { import { fetchMappings } from './fetch_mappings'; import { fetchUnallowedValues, getUnallowedValues } from './fetch_unallowed_values'; import { EcsFlatTyped } from '../constants'; +import { getMappingsProperties, getSortedPartitionedFieldMetadata } from './metadata'; export const EMPTY_PARTITIONED_FIELD_METADATA: PartitionedFieldMetadata = { all: [], diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_ilm_phase.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_ilm_phase.test.ts new file mode 100644 index 0000000000000..dd92e3700c18a --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_ilm_phase.test.ts @@ -0,0 +1,88 @@ +/* + * 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 { + IlmExplainLifecycleLifecycleExplainManaged, + IlmExplainLifecycleLifecycleExplainUnmanaged, +} from '@elastic/elasticsearch/lib/api/types'; + +import { getIlmPhase } from './get_ilm_phase'; + +const hot: IlmExplainLifecycleLifecycleExplainManaged = { + index: '.ds-packetbeat-8.6.1-2023.02.04-000001', + managed: true, + policy: 'packetbeat', + index_creation_date_millis: 1675536751379, + time_since_index_creation: '3.98d', + lifecycle_date_millis: 1675536751379, + age: '3.98d', + phase: 'hot', + phase_time_millis: 1675536751809, + action: 'rollover', + action_time_millis: 1675536751809, + step: 'check-rollover-ready', + step_time_millis: 1675536751809, + phase_execution: { + policy: 'packetbeat', + version: 1, + modified_date_in_millis: 1675536751205, + }, +}; + +const warm = { + ...hot, + phase: 'warm', +}; +const cold = { + ...hot, + phase: 'cold', +}; +const frozen = { + ...hot, + phase: 'frozen', +}; +const other = { + ...hot, + phase: 'other', // not a valid phase +}; + +const managed: Record = { + hot, + warm, + cold, + frozen, +}; + +const unmanaged: IlmExplainLifecycleLifecycleExplainUnmanaged = { + index: 'michael', + managed: false, +}; + +describe('getIlmPhase', () => { + const isILMAvailable = true; + test('it returns undefined when the `ilmExplainRecord` is undefined', () => { + expect(getIlmPhase(undefined, isILMAvailable)).toBeUndefined(); + }); + + describe('when the `ilmExplainRecord` is a `IlmExplainLifecycleLifecycleExplainManaged` record', () => { + Object.keys(managed).forEach((phase) => + test(`it returns the expected phase when 'phase' is '${phase}'`, () => { + expect(getIlmPhase(managed[phase], isILMAvailable)).toEqual(phase); + }) + ); + + test(`it returns undefined when the 'phase' is unknown`, () => { + expect(getIlmPhase(other, isILMAvailable)).toBeUndefined(); + }); + }); + + describe('when the `ilmExplainRecord` is a `IlmExplainLifecycleLifecycleExplainUnmanaged` record', () => { + test('it returns `unmanaged`', () => { + expect(getIlmPhase(unmanaged, isILMAvailable)).toEqual('unmanaged'); + }); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_ilm_phase.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_ilm_phase.ts new file mode 100644 index 0000000000000..78e9bfb98f2d6 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_ilm_phase.ts @@ -0,0 +1,37 @@ +/* + * 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 { IlmExplainLifecycleLifecycleExplain } from '@elastic/elasticsearch/lib/api/types'; +import { IlmPhase } from '../types'; + +export const getIlmPhase = ( + ilmExplainRecord: IlmExplainLifecycleLifecycleExplain | undefined, + isILMAvailable: boolean +): IlmPhase | undefined => { + if (ilmExplainRecord == null || !isILMAvailable) { + return undefined; + } + + if ('phase' in ilmExplainRecord) { + const phase = ilmExplainRecord.phase; + + switch (phase) { + case 'hot': + return 'hot'; + case 'warm': + return 'warm'; + case 'cold': + return 'cold'; + case 'frozen': + return 'frozen'; + default: + return undefined; + } + } else { + return 'unmanaged'; + } +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_summary_table_items.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_summary_table_items.test.ts new file mode 100644 index 0000000000000..7bfde1d8d7844 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_summary_table_items.test.ts @@ -0,0 +1,230 @@ +/* + * 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 { defaultSort } from '../constants'; +import { mockIlmExplain } from '../mock/ilm_explain/mock_ilm_explain'; +import { mockStats } from '../mock/stats/mock_stats'; +import { DataQualityCheckResult } from '../types'; +import { getSummaryTableItems } from './get_summary_table_items'; + +describe('getSummaryTableItems', () => { + const indexNames = [ + '.ds-packetbeat-8.6.1-2023.02.04-000001', + '.ds-packetbeat-8.5.3-2023.02.04-000001', + 'auditbeat-custom-index-1', + ]; + const pattern = 'auditbeat-*'; + const patternDocsCount = 4; + const results: Record = { + 'auditbeat-custom-index-1': { + docsCount: 4, + error: null, + ilmPhase: 'unmanaged', + incompatible: 3, + indexName: 'auditbeat-custom-index-1', + markdownComments: [ + '### auditbeat-custom-index-1\n', + '| Result | Index | Docs | Incompatible fields | ILM Phase |\n|--------|-------|------|---------------------|-----------|\n| ❌ | auditbeat-custom-index-1 | 4 (0.0%) | 3 | `unmanaged` |\n\n', + '### **Incompatible fields** `3` **Custom fields** `4` **ECS compliant fields** `2` **All fields** `9`\n', + "#### 3 incompatible fields, 0 fields with mappings in the same family\n\nFields are incompatible with ECS when index mappings, or the values of the fields in the index, don't conform to the Elastic Common Schema (ECS), version 8.6.1.\n\nIncompatible fields with mappings in the same family have exactly the same search behavior but may have different space usage or performance characteristics.\n\nWhen an incompatible field is not in the same family:\n❌ Detection engine rules referencing these fields may not match them correctly\n❌ Pages may not display some events or fields due to unexpected field mappings or values\n❌ Mappings or field values that don't comply with ECS are not supported\n", + '\n#### Incompatible field mappings - auditbeat-custom-index-1\n\n\n| Field | ECS mapping type (expected) | Index mapping type (actual) | \n|-------|-----------------------------|-----------------------------|\n| host.name | `keyword` | `text` |\n| source.ip | `ip` | `text` |\n\n#### Incompatible field values - auditbeat-custom-index-1\n\n\n| Field | ECS values (expected) | Document values (actual) | \n|-------|-----------------------|--------------------------|\n| event.category | `authentication`, `configuration`, `database`, `driver`, `email`, `file`, `host`, `iam`, `intrusion_detection`, `malware`, `network`, `package`, `process`, `registry`, `session`, `threat`, `vulnerability`, `web` | `an_invalid_category` (2),\n`theory` (1) |\n\n', + ], + pattern: 'auditbeat-*', + sameFamily: 0, + checkedAt: 1706526408000, + }, + }; + const isILMAvailable = true; + + test('it returns the expected summary table items', () => { + expect( + getSummaryTableItems({ + ilmExplain: mockIlmExplain, + indexNames, + isILMAvailable, + pattern, + patternDocsCount, + results, + sortByColumn: defaultSort.sort.field, + sortByDirection: defaultSort.sort.direction, + stats: mockStats, + }) + ).toEqual([ + { + docsCount: 1630289, + ilmPhase: 'hot', + incompatible: undefined, + indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: 733175040, + checkedAt: undefined, + }, + { + docsCount: 1628343, + ilmPhase: 'hot', + incompatible: undefined, + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: 731583142, + checkedAt: undefined, + }, + { + docsCount: 4, + ilmPhase: 'unmanaged', + incompatible: 3, + indexName: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: 28413, + checkedAt: 1706526408000, + }, + ]); + }); + + test('it returns the expected summary table items when isILMAvailable is false', () => { + expect( + getSummaryTableItems({ + ilmExplain: mockIlmExplain, + indexNames, + isILMAvailable: false, + pattern, + patternDocsCount, + results, + sortByColumn: defaultSort.sort.field, + sortByDirection: defaultSort.sort.direction, + stats: mockStats, + }) + ).toEqual([ + { + docsCount: 1630289, + ilmPhase: undefined, + incompatible: undefined, + indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: 733175040, + checkedAt: undefined, + }, + { + docsCount: 1628343, + ilmPhase: undefined, + incompatible: undefined, + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: 731583142, + checkedAt: undefined, + }, + { + docsCount: 4, + ilmPhase: undefined, + incompatible: 3, + indexName: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: 28413, + checkedAt: 1706526408000, + }, + ]); + }); + + test('it returns the expected summary table items when `sortByDirection` is ascending', () => { + expect( + getSummaryTableItems({ + ilmExplain: mockIlmExplain, + indexNames, + isILMAvailable, + pattern, + patternDocsCount, + results, + sortByColumn: defaultSort.sort.field, + sortByDirection: 'asc', // <-- ascending + stats: mockStats, + }) + ).toEqual([ + { + docsCount: 4, + ilmPhase: 'unmanaged', + incompatible: 3, + indexName: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: 28413, + checkedAt: 1706526408000, + }, + { + docsCount: 1628343, + ilmPhase: 'hot', + incompatible: undefined, + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: 731583142, + checkedAt: undefined, + }, + { + docsCount: 1630289, + ilmPhase: 'hot', + incompatible: undefined, + indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: 733175040, + checkedAt: undefined, + }, + ]); + }); + + test('it returns the expected summary table items when data is unavailable', () => { + expect( + getSummaryTableItems({ + ilmExplain: null, // <-- no data + indexNames, + isILMAvailable, + pattern, + patternDocsCount, + results: undefined, // <-- no data + sortByColumn: defaultSort.sort.field, + sortByDirection: defaultSort.sort.direction, + stats: null, // <-- no data + }) + ).toEqual([ + { + docsCount: 0, + ilmPhase: undefined, + incompatible: undefined, + indexName: '.ds-packetbeat-8.6.1-2023.02.04-000001', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: undefined, + checkedAt: undefined, + }, + { + docsCount: 0, + ilmPhase: undefined, + incompatible: undefined, + indexName: '.ds-packetbeat-8.5.3-2023.02.04-000001', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: undefined, + checkedAt: undefined, + }, + { + docsCount: 0, + ilmPhase: undefined, + incompatible: undefined, + indexName: 'auditbeat-custom-index-1', + pattern: 'auditbeat-*', + patternDocsCount: 4, + sizeInBytes: undefined, + checkedAt: undefined, + }, + ]); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_summary_table_items.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_summary_table_items.ts new file mode 100644 index 0000000000000..7e518a739b251 --- /dev/null +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/get_summary_table_items.ts @@ -0,0 +1,51 @@ +/* + * 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 { IlmExplainLifecycleLifecycleExplain } from '@elastic/elasticsearch/lib/api/types'; +import { orderBy } from 'lodash/fp'; + +import { DataQualityCheckResult, IndexSummaryTableItem, MeteringStatsIndex } from '../types'; +import { getIlmPhase } from './get_ilm_phase'; +import { getDocsCount, getIndexIncompatible, getSizeInBytes } from './stats'; + +export const getSummaryTableItems = ({ + ilmExplain, + indexNames, + isILMAvailable, + pattern, + patternDocsCount, + results, + sortByColumn, + sortByDirection, + stats, +}: { + ilmExplain: Record | null; + indexNames: string[]; + isILMAvailable: boolean; + pattern: string; + patternDocsCount: number; + results: Record | undefined; + sortByColumn: string; + sortByDirection: 'desc' | 'asc'; + stats: Record | null; +}): IndexSummaryTableItem[] => { + const summaryTableItems = indexNames.map((indexName) => ({ + docsCount: getDocsCount({ stats, indexName }), + incompatible: getIndexIncompatible({ indexName, results }), + indexName, + ilmPhase: + isILMAvailable && ilmExplain != null + ? getIlmPhase(ilmExplain[indexName], isILMAvailable) + : undefined, + pattern, + patternDocsCount, + sizeInBytes: getSizeInBytes({ stats, indexName }), + checkedAt: results?.[indexName]?.checkedAt, + })); + + return orderBy([sortByColumn], [sortByDirection], summaryTableItems); +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/metadata.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/metadata.test.ts similarity index 66% rename from x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/metadata.test.ts rename to x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/metadata.test.ts index d59e4821ed1c8..b85f4a7516dbb 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/metadata.test.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/metadata.test.ts @@ -6,21 +6,19 @@ */ import { omit } from 'lodash/fp'; -import { - EnrichedFieldMetadata, - PartitionedFieldMetadata, - UnallowedValueCount, -} from '../../../../../../types'; -import { mockMappingsProperties } from '../../../../../../mock/mappings_properties/mock_mappings_properties'; +import { EnrichedFieldMetadata, PartitionedFieldMetadata, UnallowedValueCount } from '../types'; +import { mockMappingsProperties } from '../mock/mappings_properties/mock_mappings_properties'; import { FieldType, getEnrichedFieldMetadata, getFieldTypes, + getMappingsProperties, getMissingTimestampFieldMetadata, getPartitionedFieldMetadata, + getSortedPartitionedFieldMetadata, isMappingCompatible, } from './metadata'; -import { EcsFlatTyped } from '../../../../../../constants'; +import { EcsFlatTyped } from '../constants'; import { hostNameWithTextMapping, hostNameKeyword, @@ -31,7 +29,8 @@ import { sourcePort, timestamp, eventCategoryWithUnallowedValues, -} from '../../../../../../mock/enriched_field_metadata/mock_enriched_field_metadata'; +} from '../mock/enriched_field_metadata/mock_enriched_field_metadata'; +import { mockIndicesGetMappingIndexMappingRecords } from '../mock/indices_get_mapping_index_mapping_record/mock_indices_get_mapping_index_mapping_record'; describe('getFieldTypes', () => { const expected = [ @@ -400,3 +399,239 @@ describe('getPartitionedFieldMetadata', () => { expect(getPartitionedFieldMetadata(enrichedFieldMetadata)).toEqual(expected); }); }); + +describe('getSortedPartitionedFieldMetadata', () => { + test('it returns null when mappings are loading', () => { + expect( + getSortedPartitionedFieldMetadata({ + ecsMetadata: EcsFlatTyped, + loadingMappings: true, // <-- + mappingsProperties: mockMappingsProperties, + unallowedValues: {}, + }) + ).toBeNull(); + }); + + test('it returns null when `unallowedValues` is null', () => { + expect( + getSortedPartitionedFieldMetadata({ + ecsMetadata: EcsFlatTyped, + loadingMappings: false, + mappingsProperties: mockMappingsProperties, + unallowedValues: null, // <-- + }) + ).toBeNull(); + }); + + describe('when `mappingsProperties` is unknown', () => { + const incompatibleFieldMetadata = { + ...EcsFlatTyped['@timestamp'], + hasEcsMetadata: true, + indexFieldName: '@timestamp', + indexFieldType: '-', + indexInvalidValues: [], + isEcsCompliant: false, + isInSameFamily: false, + }; + const expected = { + all: [incompatibleFieldMetadata], + custom: [], + ecsCompliant: [], + incompatible: [incompatibleFieldMetadata], + sameFamily: [], + }; + + test('it returns a `PartitionedFieldMetadata` with an `incompatible` `@timestamp` when `mappingsProperties` is undefined', () => { + expect( + getSortedPartitionedFieldMetadata({ + ecsMetadata: EcsFlatTyped, + loadingMappings: false, + mappingsProperties: undefined, // <-- + unallowedValues: {}, + }) + ).toEqual(expected); + }); + + test('it returns a `PartitionedFieldMetadata` with an `incompatible` `@timestamp` when `mappingsProperties` is null', () => { + expect( + getSortedPartitionedFieldMetadata({ + ecsMetadata: EcsFlatTyped, + loadingMappings: false, + mappingsProperties: null, // <-- + unallowedValues: {}, + }) + ).toEqual(expected); + }); + }); + + test('it returns the expected sorted field metadata', () => { + const unallowedValues = { + 'event.category': [ + { + count: 2, + fieldName: 'an_invalid_category', + }, + { + count: 1, + fieldName: 'theory', + }, + ], + 'event.kind': [], + 'event.outcome': [], + 'event.type': [], + }; + + expect( + getSortedPartitionedFieldMetadata({ + ecsMetadata: EcsFlatTyped, + loadingMappings: false, + mappingsProperties: mockMappingsProperties, + unallowedValues, + }) + ).toMatchObject({ + all: expect.arrayContaining([ + expect.objectContaining({ + name: expect.any(String), + flat_name: expect.any(String), + dashed_name: expect.any(String), + description: expect.any(String), + hasEcsMetadata: true, + isEcsCompliant: expect.any(Boolean), + isInSameFamily: expect.any(Boolean), + }), + ]), + ecsCompliant: expect.arrayContaining([ + expect.objectContaining({ + name: expect.any(String), + flat_name: expect.any(String), + dashed_name: expect.any(String), + description: expect.any(String), + hasEcsMetadata: true, + isEcsCompliant: true, + isInSameFamily: false, + }), + ]), + custom: expect.arrayContaining([ + expect.objectContaining({ + indexFieldName: expect.any(String), + indexFieldType: expect.any(String), + indexInvalidValues: expect.any(Array), + hasEcsMetadata: expect.any(Boolean), + isEcsCompliant: expect.any(Boolean), + isInSameFamily: expect.any(Boolean), + }), + ]), + incompatible: expect.arrayContaining([ + expect.objectContaining({ + name: expect.any(String), + flat_name: expect.any(String), + dashed_name: expect.any(String), + description: expect.any(String), + hasEcsMetadata: expect.any(Boolean), + isEcsCompliant: false, + isInSameFamily: false, + }), + ]), + sameFamily: [], + }); + }); +}); + +describe('getMappingsProperties', () => { + test('it returns the expected mapping properties', () => { + expect( + getMappingsProperties({ + indexes: mockIndicesGetMappingIndexMappingRecords, + indexName: 'auditbeat-custom-index-1', + }) + ).toEqual({ + '@timestamp': { + type: 'date', + }, + event: { + properties: { + category: { + ignore_above: 1024, + type: 'keyword', + }, + }, + }, + host: { + properties: { + name: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + }, + }, + some: { + properties: { + field: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + }, + }, + source: { + properties: { + ip: { + fields: { + keyword: { + ignore_above: 256, + type: 'keyword', + }, + }, + type: 'text', + }, + port: { + type: 'long', + }, + }, + }, + }); + }); + + test('it returns null when `indexes` is null', () => { + expect( + getMappingsProperties({ + indexes: null, // <-- + indexName: 'auditbeat-custom-index-1', + }) + ).toBeNull(); + }); + + test('it returns null when `indexName` does not exist in `indexes`', () => { + expect( + getMappingsProperties({ + indexes: mockIndicesGetMappingIndexMappingRecords, + indexName: 'does-not-exist', // <-- + }) + ).toBeNull(); + }); + + test('it returns null when `properties` does not exist in the mappings', () => { + const missingProperties = { + ...mockIndicesGetMappingIndexMappingRecords, + foozle: { + mappings: {}, // <-- does not have a `properties` + }, + }; + + expect( + getMappingsProperties({ + indexes: missingProperties, + indexName: 'foozle', + }) + ).toBeNull(); + }); +}); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/metadata.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/metadata.ts similarity index 68% rename from x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/metadata.ts rename to x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/metadata.ts index 87adf1e2314e1..c2fb750e4f0a8 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/metadata.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/metadata.ts @@ -5,16 +5,20 @@ * 2.0. */ -import { has } from 'lodash/fp'; +import { + IndicesGetMappingIndexMappingRecord, + MappingProperty, +} from '@elastic/elasticsearch/lib/api/types'; +import { has, sortBy } from 'lodash/fp'; -import { EcsFlatTyped } from '../../../../../../constants'; +import { EMPTY_METADATA, EcsFlatTyped } from '../constants'; import { EcsBasedFieldMetadata, EnrichedFieldMetadata, PartitionedFieldMetadata, UnallowedValueCount, -} from '../../../../../../types'; -import { getIsInSameFamily } from './get_is_in_same_family'; +} from '../types'; +import { getIsInSameFamily } from '../data_quality_details/indices_details/pattern/index_check_flyout/index_properties/utils/get_is_in_same_family'; export const getPartitionedFieldMetadata = ( enrichedFieldMetadata: EnrichedFieldMetadata[] @@ -156,6 +160,49 @@ export const getEnrichedFieldMetadata = ({ } }; +export const getSortedPartitionedFieldMetadata = ({ + ecsMetadata, + loadingMappings, + mappingsProperties, + unallowedValues, +}: { + ecsMetadata: EcsFlatTyped; + loadingMappings: boolean; + mappingsProperties: Record | null | undefined; + unallowedValues: Record | null; +}): PartitionedFieldMetadata | null => { + if (loadingMappings || unallowedValues == null) { + return null; + } + + // this covers scenario when we try to check an empty index + // or index without required @timestamp field in the mapping + // + // we create an artifical incompatible timestamp field metadata + // so that we can signal to user that the incompatibility is due to missing timestamp + if (mappingsProperties == null) { + const missingTimestampFieldMetadata = getMissingTimestampFieldMetadata(); + return { + ...EMPTY_METADATA, + all: [missingTimestampFieldMetadata], + incompatible: [missingTimestampFieldMetadata], + }; + } + + const fieldTypes = getFieldTypes(mappingsProperties); + + const enrichedFieldMetadata = sortBy( + 'indexFieldName', + fieldTypes.map((fieldMetadata) => + getEnrichedFieldMetadata({ ecsMetadata, fieldMetadata, unallowedValues }) + ) + ); + + const partitionedFieldMetadata = getPartitionedFieldMetadata(enrichedFieldMetadata); + + return partitionedFieldMetadata; +}; + export const getMissingTimestampFieldMetadata = (): EcsBasedFieldMetadata => ({ ...EcsFlatTyped['@timestamp'], hasEcsMetadata: true, @@ -165,3 +212,17 @@ export const getMissingTimestampFieldMetadata = (): EcsBasedFieldMetadata => ({ isEcsCompliant: false, isInSameFamily: false, // `date` is not a member of any families }); + +export const getMappingsProperties = ({ + indexes, + indexName, +}: { + indexes: Record | null; + indexName: string; +}): Record | null => { + if (indexes != null && indexes[indexName] != null) { + return indexes[indexName].mappings.properties ?? null; + } + + return null; +}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/stats.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/stats.ts index b8f60be24a87c..503edf5c230cf 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/stats.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/stats.ts @@ -7,6 +7,20 @@ import { DataQualityCheckResult, MeteringStatsIndex, PatternRollup } from '../types'; +export const getIndexIncompatible = ({ + indexName, + results, +}: { + indexName: string; + results: Record | undefined; +}): number | undefined => { + if (results == null || results[indexName] == null) { + return undefined; + } + + return results[indexName].incompatible; +}; + export const getSizeInBytes = ({ indexName, stats, diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index ff2f7c500b177..9e93abc0a6b86 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -6963,7 +6963,6 @@ "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.collapseLabel": "Réduire", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.docsColumn": "Documents", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.expandRowsColumn": "Développer les lignes", - "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.failedTooltip": "Échoué", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.ilmPhaseColumn": "Phase ILM", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.incompatibleFieldsColumn": "Champs incompatibles", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.indexColumn": "Index", @@ -6972,10 +6971,8 @@ "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.indicesCheckedColumn": "Index vérifiés", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.indicesColumn": "Index", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.lastCheckColumn": "Dernière vérification", - "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.passedTooltip": "Approuvé", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.resultColumn": "Résultat", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.sizeColumn": "Taille", - "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.thisIndexHasNotBeenCheckedTooltip": "Cet index n'a pas été vérifié", "securitySolutionPackages.ecsDataQualityDashboard.timestampDescriptionLabel": "Date/heure d'origine de l'événement. Il s'agit des date et heure extraites de l'événement, représentant généralement le moment auquel l'événement a été généré par la source. Si la source de l'événement ne comporte pas d'horodatage original, cette valeur est habituellement remplie la première fois que l'événement a été reçu par le pipeline. Champs requis pour tous les événements.", "securitySolutionPackages.ecsDataQualityDashboard.toasts.copiedErrorsToastTitle": "Erreurs copiées dans le presse-papiers", "securitySolutionPackages.ecsDataQualityDashboard.toasts.copiedResultsToastTitle": "Résultats copiés dans le presse-papiers", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index c72e9d555ddf2..9ca9978c7e299 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -6959,7 +6959,6 @@ "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.collapseLabel": "縮小", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.docsColumn": "ドキュメント", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.expandRowsColumn": "行を展開", - "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.failedTooltip": "失敗", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.ilmPhaseColumn": "ILMフェーズ", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.incompatibleFieldsColumn": "非互換フィールド", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.indexColumn": "インデックス", @@ -6968,10 +6967,8 @@ "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.indicesCheckedColumn": "確認されたインデックス", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.indicesColumn": "インデックス", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.lastCheckColumn": "最終確認", - "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.passedTooltip": "合格", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.resultColumn": "結果", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.sizeColumn": "サイズ", - "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.thisIndexHasNotBeenCheckedTooltip": "このインデックスは確認されていません", "securitySolutionPackages.ecsDataQualityDashboard.timestampDescriptionLabel": "イベントが生成された日時これはイベントから抽出された日時で、一般的にはイベントがソースから生成された日時を表します。イベントソースに元のタイムスタンプがない場合は、通常、この値はイベントがパイプラインによって受信された最初の日時が入力されます。すべてのイベントの必須フィールドです。", "securitySolutionPackages.ecsDataQualityDashboard.toasts.copiedErrorsToastTitle": "エラーをクリップボードにコピーしました", "securitySolutionPackages.ecsDataQualityDashboard.toasts.copiedResultsToastTitle": "結果をクリップボードにコピーしました", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 14c23084fd8c7..cd9ccb59d81bb 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -6970,7 +6970,6 @@ "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.collapseLabel": "折叠", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.docsColumn": "文档", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.expandRowsColumn": "展开行", - "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.failedTooltip": "失败", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.ilmPhaseColumn": "ILM 阶段", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.incompatibleFieldsColumn": "不兼容的字段", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.indexColumn": "索引", @@ -6979,10 +6978,8 @@ "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.indicesCheckedColumn": "已检查索引", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.indicesColumn": "索引", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.lastCheckColumn": "上次检查", - "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.passedTooltip": "通过", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.resultColumn": "结果", "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.sizeColumn": "大小", - "securitySolutionPackages.ecsDataQualityDashboard.summaryTable.thisIndexHasNotBeenCheckedTooltip": "尚未检查此索引", "securitySolutionPackages.ecsDataQualityDashboard.timestampDescriptionLabel": "事件发生时的日期/时间。这是从事件中提取的日期/时间,通常表示源生成事件的时间。如果事件源没有原始时间戳,通常会在管道首次收到事件时填充此值。所有事件的必填字段。", "securitySolutionPackages.ecsDataQualityDashboard.toasts.copiedErrorsToastTitle": "已将错误复制到剪贴板", "securitySolutionPackages.ecsDataQualityDashboard.toasts.copiedResultsToastTitle": "已将结果复制到剪贴板", From 17d5eb55d2bbe7c451f68d510672f7438b402033 Mon Sep 17 00:00:00 2001 From: Lucas Bremgartner Date: Wed, 28 Aug 2024 11:05:14 +0200 Subject: [PATCH 30/74] Update secrets.md (#191180) Fix typos Co-authored-by: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> --- x-pack/plugins/fleet/dev_docs/secrets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/dev_docs/secrets.md b/x-pack/plugins/fleet/dev_docs/secrets.md index 77c5f8521a4c5..a486f4d3b65ce 100644 --- a/x-pack/plugins/fleet/dev_docs/secrets.md +++ b/x-pack/plugins/fleet/dev_docs/secrets.md @@ -99,6 +99,6 @@ Integration secrets are only supported by Fleet server 8.10.0 or greater, output For integration secrets, when performing CRUD on a package policy, we first check the global settings saved object to see if secrets are enabled, if so then secret storage is used. -If secret storage s not enabled, we check all flee tserver versions, if they meet the minimum spec, then we enable secret storage on the global settings saved object and the check is never performed again. +If secret storage is not enabled, we check all fleet server versions, if they meet the minimum spec, then we enable secret storage on the global settings saved object and the check is never performed again. For output secrets, we do not perform this check as outputs offer a plain text alternative for all secret fields. Instead we warn the user about the version requirements and let them decide. From 450f30def151d05cb01911e5d7611a50bbbf1f90 Mon Sep 17 00:00:00 2001 From: Joe McElroy Date: Wed, 28 Aug 2024 10:12:20 +0100 Subject: [PATCH 31/74] [Search] [Playground] fix code example for py lang client (#191547) ## Summary Fix code example where the question is no longer being passed into the `create_openai_prompt` arguments. ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../examples/__snapshots__/py_lang_client.test.tsx.snap | 2 +- .../public/components/view_code/examples/py_lang_client.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/search_playground/public/components/view_code/examples/__snapshots__/py_lang_client.test.tsx.snap b/x-pack/plugins/search_playground/public/components/view_code/examples/__snapshots__/py_lang_client.test.tsx.snap index e8777144ce994..e0815458898ce 100644 --- a/x-pack/plugins/search_playground/public/components/view_code/examples/__snapshots__/py_lang_client.test.tsx.snap +++ b/x-pack/plugins/search_playground/public/components/view_code/examples/__snapshots__/py_lang_client.test.tsx.snap @@ -37,7 +37,7 @@ def get_elasticsearch_results(query): result = es_client.search(index=\\"index1,index2\\", body=es_query) return result[\\"hits\\"][\\"hits\\"] -def create_openai_prompt(question, results): +def create_openai_prompt(results): context = \\"\\" for hit in results: inner_hit_path = f\\"{hit['_index']}.{index_source_fields.get(hit['_index'])[0]}\\" diff --git a/x-pack/plugins/search_playground/public/components/view_code/examples/py_lang_client.tsx b/x-pack/plugins/search_playground/public/components/view_code/examples/py_lang_client.tsx index cfb218afa6d3c..582606a4f6b14 100644 --- a/x-pack/plugins/search_playground/public/components/view_code/examples/py_lang_client.tsx +++ b/x-pack/plugins/search_playground/public/components/view_code/examples/py_lang_client.tsx @@ -37,7 +37,7 @@ def get_elasticsearch_results(query): result = es_client.search(index="${formValues.indices.join(',')}", body=es_query) return result["hits"]["hits"] -def create_openai_prompt(question, results): +def create_openai_prompt(results): context = "" for hit in results: inner_hit_path = f"{hit['_index']}.{index_source_fields.get(hit['_index'])[0]}" From dda6cd9d9e892cb328c40125c00d173ce71e16d4 Mon Sep 17 00:00:00 2001 From: Liam Thompson <32779855+leemthompo@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:33:36 +0100 Subject: [PATCH 32/74] [DOCS] Add known issue for 8.15.0 (fixed in 8.15.1) (#191533) Adds known issue fixed by https://github.com/elastic/kibana/pull/189283 --- docs/CHANGELOG.asciidoc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc index c095b28666d7a..c0c8d6ff5b934 100644 --- a/docs/CHANGELOG.asciidoc +++ b/docs/CHANGELOG.asciidoc @@ -111,6 +111,19 @@ Use the *Workflows* app in Microsoft Teams to create a new webhook URL, as descr Update your Microsoft Teams connector to use the new URL before the end of December 2024. ==== +[discrete] +[[known-189283]] +.Incorrect index errors related to inference endpoints +[%collapsible] +==== +*Details* + +In 8.15.1, we fixed a UI bug where an index error about the `semantic_text` field would be incorrectly displayed when the inference endpoint was configured and available. + +You can ignore this error if you've confirmed that the inference endpoint is configured and the model is deployed. + +This bug is fixed in {kibana-pull}189283[#189283]. +==== + [float] [[deprecations-8.15.0]] === Deprecations From 74ba0b4f54662ca11491d9f834e10da75464653b Mon Sep 17 00:00:00 2001 From: Ash <1849116+ashokaditya@users.noreply.github.com> Date: Wed, 28 Aug 2024 11:54:36 +0200 Subject: [PATCH 33/74] [SecuritySolution][Endpoint][Response Actions] Remove scan feature flag and branch logic. (#190601) --- .../src/security/kibana_sub_features.ts | 8 ++- .../common/experimental_features.ts | 5 -- .../integration_tests/scan_action.test.tsx | 1 - .../lib/console_commands_definition.ts | 71 +++++++++---------- .../console_commands_definition.test.tsx | 1 - .../components/hooks.tsx | 5 -- .../response_actions_log.test.tsx | 31 -------- .../response_console/scan.cy.ts | 12 ++-- .../serverless/feature_access/complete.cy.ts | 12 ++-- .../complete_with_endpoint.cy.ts | 12 ++-- .../feature_access/essentials.cy.ts | 12 ++-- .../essentials_with_endpoint.cy.ts | 12 ++-- .../roles/complete_with_endpoint_roles.cy.ts | 12 ++-- .../view/response_actions_list_page.test.tsx | 61 +--------------- .../security_solution/server/config.mock.ts | 5 +- .../routes/actions/response_actions.test.ts | 10 --- .../routes/actions/response_actions.ts | 39 +++++----- 17 files changed, 102 insertions(+), 207 deletions(-) diff --git a/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts b/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts index 24c8d0a57e772..fe0354b34a558 100644 --- a/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts +++ b/x-pack/packages/security-solution/features/src/security/kibana_sub_features.ts @@ -673,11 +673,13 @@ export const getSecuritySubFeaturesMap = ({ [SecuritySubFeatureId.processOperations, processOperationsSubFeature], [SecuritySubFeatureId.fileOperations, fileOperationsSubFeature], [SecuritySubFeatureId.executeAction, executeActionSubFeature], + [SecuritySubFeatureId.scanAction, scanActionSubFeature], ]; - if (experimentalFeatures.responseActionScanEnabled) { - securitySubFeaturesList.push([SecuritySubFeatureId.scanAction, scanActionSubFeature]); - } + // Use the following code to add feature based on feature flag + // if (experimentalFeatures.featureFlagName) { + // securitySubFeaturesList.push([SecuritySubFeatureId.featureId, featureSubFeature]); + // } const securitySubFeaturesMap = new Map( securitySubFeaturesList diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index fde8e1f4537a7..7d3edafedd1a9 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -83,11 +83,6 @@ export const allowedExperimentalValues = Object.freeze({ */ responseActionsCrowdstrikeManualHostIsolationEnabled: true, - /** - * Enables scan response action on Endpoint - */ - responseActionScanEnabled: true, - /** * Enables new notes */ diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/scan_action.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/scan_action.test.tsx index 4457119128e46..302a97f5aafff 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/scan_action.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/command_render_components/integration_tests/scan_action.test.tsx @@ -58,7 +58,6 @@ describe('When using scan action from response actions console', () => { beforeEach(() => { mockedContext = createAppRootMockRenderer(); - mockedContext.setExperimentalFlag({ responseActionScanEnabled: true }); apiMocks = responseActionsHttpMocks(mockedContext.coreStart.http); endpointPrivileges = { ...getEndpointAuthzInitialStateMock(), diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/console_commands_definition.ts b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/console_commands_definition.ts index 74c43fb535f5f..c81674bd4f7b8 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/console_commands_definition.ts +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/console_commands_definition.ts @@ -164,7 +164,6 @@ export const getEndpointConsoleCommands = ({ const featureFlags = ExperimentalFeaturesService.get(); const isUploadEnabled = featureFlags.responseActionUploadEnabled; - const isScanEnabled = featureFlags.responseActionScanEnabled; const doesEndpointSupportCommand = (commandName: ConsoleResponseActionCommands) => { // Agent capabilities is only validated for Endpoint agent types @@ -486,43 +485,41 @@ export const getEndpointConsoleCommands = ({ }); } - if (isScanEnabled) { - consoleCommands.push({ - name: 'scan', - about: getCommandAboutInfo({ - aboutInfo: CONSOLE_COMMANDS.scan.about, - isSupported: doesEndpointSupportCommand('scan'), - }), - RenderComponent: ScanActionResult, - meta: { - agentType, - endpointId: endpointAgentId, - capabilities: endpointCapabilities, - privileges: endpointPrivileges, - }, - exampleUsage: 'scan --path "/full/path/to/folder" --comment "Scan folder for malware"', - exampleInstruction: ENTER_OR_ADD_COMMENT_ARG_INSTRUCTION, - validate: capabilitiesAndPrivilegesValidator(agentType), - mustHaveArgs: true, - args: { - path: { - required: true, - allowMultiples: false, - mustHaveValue: 'non-empty-string', - about: CONSOLE_COMMANDS.scan.args.path.about, - }, - ...commandCommentArgument(), + consoleCommands.push({ + name: 'scan', + about: getCommandAboutInfo({ + aboutInfo: CONSOLE_COMMANDS.scan.about, + isSupported: doesEndpointSupportCommand('scan'), + }), + RenderComponent: ScanActionResult, + meta: { + agentType, + endpointId: endpointAgentId, + capabilities: endpointCapabilities, + privileges: endpointPrivileges, + }, + exampleUsage: 'scan --path "/full/path/to/folder" --comment "Scan folder for malware"', + exampleInstruction: ENTER_OR_ADD_COMMENT_ARG_INSTRUCTION, + validate: capabilitiesAndPrivilegesValidator(agentType), + mustHaveArgs: true, + args: { + path: { + required: true, + allowMultiples: false, + mustHaveValue: 'non-empty-string', + about: CONSOLE_COMMANDS.scan.args.path.about, }, - helpGroupLabel: HELP_GROUPS.responseActions.label, - helpGroupPosition: HELP_GROUPS.responseActions.position, - helpCommandPosition: 8, - helpDisabled: !doesEndpointSupportCommand('scan'), - helpHidden: !getRbacControl({ - commandName: 'scan', - privileges: endpointPrivileges, - }), - }); - } + ...commandCommentArgument(), + }, + helpGroupLabel: HELP_GROUPS.responseActions.label, + helpGroupPosition: HELP_GROUPS.responseActions.position, + helpCommandPosition: 8, + helpDisabled: !doesEndpointSupportCommand('scan'), + helpHidden: !getRbacControl({ + commandName: 'scan', + privileges: endpointPrivileges, + }), + }); switch (agentType) { case 'sentinel_one': diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/integration_tests/console_commands_definition.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/integration_tests/console_commands_definition.test.tsx index a20aa3bd61a2e..7c1e5cf118df0 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/integration_tests/console_commands_definition.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_responder/lib/integration_tests/console_commands_definition.test.tsx @@ -46,7 +46,6 @@ describe('When displaying Endpoint Response Actions', () => { beforeEach(() => { (ExperimentalFeaturesService.get as jest.Mock).mockReturnValue({ responseActionUploadEnabled: true, - responseActionScanEnabled: true, }); commands = getEndpointConsoleCommands({ agentType: 'endpoint', diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/hooks.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/hooks.tsx index 0fe111965f463..a91c87223e44c 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/hooks.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/components/hooks.tsx @@ -334,11 +334,6 @@ export const useActionsLogFilter = ({ return false; } - // `scan` - v8.15 - if (commandName === 'scan' && !featureFlags.responseActionScanEnabled) { - return false; - } - return true; }).map((commandName) => ({ key: commandName, diff --git a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/integration_tests/response_actions_log.test.tsx b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/integration_tests/response_actions_log.test.tsx index c15e8d1752852..17c15ca46a61b 100644 --- a/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/integration_tests/response_actions_log.test.tsx +++ b/x-pack/plugins/security_solution/public/management/components/endpoint_response_actions_list/integration_tests/response_actions_log.test.tsx @@ -1491,7 +1491,6 @@ describe('Response actions history', () => { beforeEach(() => { featureFlags = { responseActionUploadEnabled: true, - responseActionScanEnabled: false, }; mockedContext.setExperimentalFlag(featureFlags); @@ -1511,37 +1510,7 @@ describe('Response actions history', () => { ); }); - it('should show a list of actions (without `scan`) when opened', () => { - mockedContext.setExperimentalFlag({ - ...featureFlags, - responseActionScanEnabled: false, - }); - render(); - const { getByTestId, getAllByTestId } = renderResult; - - userEvent.click(getByTestId(`${testPrefix}-${filterPrefix}-popoverButton`)); - const filterList = getByTestId(`${testPrefix}-${filterPrefix}-popoverList`); - expect(filterList).toBeTruthy(); - expect(getAllByTestId(`${filterPrefix}-option`).length).toEqual( - RESPONSE_ACTION_API_COMMANDS_NAMES.length - 1 - ); - expect(getAllByTestId(`${filterPrefix}-option`).map((option) => option.textContent)).toEqual([ - 'isolate. To check this option, press Enter.', - 'release. To check this option, press Enter.', - 'kill-process. To check this option, press Enter.', - 'suspend-process. To check this option, press Enter.', - 'processes. To check this option, press Enter.', - 'get-file. To check this option, press Enter.', - 'execute. To check this option, press Enter.', - 'upload. To check this option, press Enter.', - ]); - }); - it('should show a list of actions (with `scan`) when opened', () => { - mockedContext.setExperimentalFlag({ - ...featureFlags, - responseActionScanEnabled: true, - }); render(); const { getByTestId, getAllByTestId } = renderResult; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts index a786a0d682096..04630647ed35f 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts @@ -25,11 +25,13 @@ describe( { env: { ftrConfig: { - kbnServerArgs: [ - `--xpack.securitySolution.enableExperimental=${JSON.stringify([ - 'responseActionScanEnabled', - ])}`, - ], + // This is not needed for this test, but it's a good example of + // how to enable experimental features in the Cypress tests. + // kbnServerArgs: [ + // `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + // 'featureFlagName', + // ])}`, + // ], }, }, tags: ['@ess', '@serverless', '@skipInServerlessMKI'], diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete.cy.ts index 21a7253109d4a..3ff347b320fe7 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete.cy.ts @@ -18,11 +18,13 @@ describe( env: { ftrConfig: { productTypes: [{ product_line: 'security', product_tier: 'complete' }], - kbnServerArgs: [ - `--xpack.securitySolution.enableExperimental=${JSON.stringify([ - 'responseActionScanEnabled', - ])}`, - ], + // This is not needed for this test, but it's a good example of + // how to enable experimental features in the Cypress tests. + // kbnServerArgs: [ + // `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + // 'featureFlagName', + // ])}`, + // ], }, }, }, diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete_with_endpoint.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete_with_endpoint.cy.ts index 54d5b688aa1d1..fa48a2589a9c9 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete_with_endpoint.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/complete_with_endpoint.cy.ts @@ -24,11 +24,13 @@ describe( { product_line: 'security', product_tier: 'complete' }, { product_line: 'endpoint', product_tier: 'complete' }, ], - kbnServerArgs: [ - `--xpack.securitySolution.enableExperimental=${JSON.stringify([ - 'responseActionScanEnabled', - ])}`, - ], + // This is not needed for this test, but it's a good example of + // how to enable experimental features in the Cypress tests. + // kbnServerArgs: [ + // `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + // 'featureFlagName', + // ])}`, + // ], }, }, }, diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials.cy.ts index 7be22d7e7e5b5..ad3c2a3a1bb61 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials.cy.ts @@ -18,11 +18,13 @@ describe( env: { ftrConfig: { productTypes: [{ product_line: 'security', product_tier: 'essentials' }], - kbnServerArgs: [ - `--xpack.securitySolution.enableExperimental=${JSON.stringify([ - 'responseActionScanEnabled', - ])}`, - ], + // This is not needed for this test, but it's a good example of + // how to enable experimental features in the Cypress tests. + // kbnServerArgs: [ + // `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + // 'featureFlagName', + // ])}`, + // ], }, }, }, diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials_with_endpoint.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials_with_endpoint.cy.ts index a57102e7a2b2c..c43acf317bf21 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials_with_endpoint.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/feature_access/essentials_with_endpoint.cy.ts @@ -24,11 +24,13 @@ describe( { product_line: 'security', product_tier: 'essentials' }, { product_line: 'endpoint', product_tier: 'essentials' }, ], - kbnServerArgs: [ - `--xpack.securitySolution.enableExperimental=${JSON.stringify([ - 'responseActionScanEnabled', - ])}`, - ], + // This is not needed for this test, but it's a good example of + // how to enable experimental features in the Cypress tests. + // kbnServerArgs: [ + // `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + // 'featureFlagName', + // ])}`, + // ], }, }, }, diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts index a31ae854aa059..17a378cb95fa8 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/serverless/roles/complete_with_endpoint_roles.cy.ts @@ -40,11 +40,13 @@ describe( { product_line: 'security', product_tier: 'complete' }, { product_line: 'endpoint', product_tier: 'complete' }, ], - kbnServerArgs: [ - `--xpack.securitySolution.enableExperimental=${JSON.stringify([ - 'responseActionScanEnabled', - ])}`, - ], + // This is not needed for this test, but it's a good example of + // how to enable experimental features in the Cypress tests. + // kbnServerArgs: [ + // `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + // 'featureFlagName', + // ])}`, + // ], }, }, }, diff --git a/x-pack/plugins/security_solution/public/management/pages/response_actions/view/response_actions_list_page.test.tsx b/x-pack/plugins/security_solution/public/management/pages/response_actions/view/response_actions_list_page.test.tsx index e49385ccc7eca..f6152733a2254 100644 --- a/x-pack/plugins/security_solution/public/management/pages/response_actions/view/response_actions_list_page.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/response_actions/view/response_actions_list_page.test.tsx @@ -461,33 +461,7 @@ describe('Response actions history page', () => { expect(history.location.search).toEqual('?page=1&pageSize=20'); }); - // TODO: remove this test when responseActionScanEnabled is removed - it('should set selected command filter options to URL params (without `responseActionScanEnabled`)', () => { - mockedContext.setExperimentalFlag({ - responseActionScanEnabled: false, - }); - - const filterPrefix = 'actions-filter'; - render(); - const { getAllByTestId, getByTestId } = renderResult; - userEvent.click(getByTestId(`${testPrefix}-${filterPrefix}-popoverButton`)); - const allFilterOptions = getAllByTestId(`${filterPrefix}-option`); - - allFilterOptions.forEach((option) => { - option.style.pointerEvents = 'all'; - userEvent.click(option); - }); - - expect(history.location.search).toEqual( - '?commands=isolate%2Crelease%2Ckill-process%2Csuspend-process%2Cprocesses%2Cget-file%2Cexecute%2Cupload' - ); - }); - - it('should set selected command filter options to URL params (with `responseActionScanEnabled`)', () => { - mockedContext.setExperimentalFlag({ - responseActionScanEnabled: true, - }); - + it('should set selected command filter options to URL params', () => { const filterPrefix = 'actions-filter'; render(); const { getAllByTestId, getByTestId } = renderResult; @@ -631,38 +605,7 @@ describe('Response actions history page', () => { }); describe('Clear all selected options on a filter', () => { - // TODO: remove this test when responseActionScanEnabled is removed - it('should clear all selected options on `actions` filter (without `responseActionScanEnabled`)', () => { - mockedContext.setExperimentalFlag({ - responseActionScanEnabled: false, - }); - - const filterPrefix = 'actions-filter'; - render(); - const { getAllByTestId, getByTestId } = renderResult; - userEvent.click(getByTestId(`${testPrefix}-${filterPrefix}-popoverButton`)); - const allFilterOptions = getAllByTestId(`${filterPrefix}-option`); - - allFilterOptions.forEach((option) => { - option.style.pointerEvents = 'all'; - userEvent.click(option); - }); - - expect(history.location.search).toEqual( - '?commands=isolate%2Crelease%2Ckill-process%2Csuspend-process%2Cprocesses%2Cget-file%2Cexecute%2Cupload' - ); - - const clearAllButton = getByTestId(`${testPrefix}-${filterPrefix}-clearAllButton`); - clearAllButton.style.pointerEvents = 'all'; - userEvent.click(clearAllButton); - expect(history.location.search).toEqual(''); - }); - - it('should clear all selected options on `actions` filter (with `responseActionScanEnabled`)', () => { - mockedContext.setExperimentalFlag({ - responseActionScanEnabled: true, - }); - + it('should clear all selected options on `actions` filter', () => { const filterPrefix = 'actions-filter'; render(); const { getAllByTestId, getByTestId } = renderResult; diff --git a/x-pack/plugins/security_solution/server/config.mock.ts b/x-pack/plugins/security_solution/server/config.mock.ts index 2db82b039484c..a5b8f404bab47 100644 --- a/x-pack/plugins/security_solution/server/config.mock.ts +++ b/x-pack/plugins/security_solution/server/config.mock.ts @@ -12,10 +12,7 @@ import { getDefaultConfigSettings } from '../common/config_settings'; import type { ConfigType } from './config'; export const createMockConfig = (): ConfigType => { - const enableExperimental: Array = [ - 'responseActionUploadEnabled', - 'responseActionScanEnabled', - ]; + const enableExperimental: Array = ['responseActionUploadEnabled']; return { [SIGNALS_INDEX_KEY]: DEFAULT_SIGNALS_INDEX, diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts index 2fdfa5143cfe2..669d3770be37d 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.test.ts @@ -78,7 +78,6 @@ import type { ActionsApiRequestHandlerContext } from '@kbn/actions-plugin/server import { sentinelOneMock } from '../../services/actions/clients/sentinelone/mocks'; import { ResponseActionsClientError } from '../../services/actions/clients/errors'; import type { EndpointAppContext } from '../../types'; -import type { ExperimentalFeatures } from '../../../../common'; jest.mock('../../services', () => { const realModule = jest.requireActual('../../services'); @@ -135,13 +134,6 @@ describe('Response actions', () => { const docGen = new EndpointDocGenerator(); - const setFeatureFlag = (ff: Partial) => { - endpointContext.experimentalFeatures = { - ...endpointContext.experimentalFeatures, - ...ff, - }; - }; - beforeEach(() => { // instantiate... everything const mockScopedClient = elasticsearchServiceMock.createScopedClusterClient(); @@ -174,8 +166,6 @@ describe('Response actions', () => { licenseService, }); - setFeatureFlag({ responseActionScanEnabled: true }); - // add the host isolation route handlers to routerMock registerResponseActionRoutes(routerMock, endpointContext); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts index 9f40852fec380..16c3ea8ffd427 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/actions/response_actions.ts @@ -286,28 +286,25 @@ export function registerResponseActionRoutes( ) ); - // 8.15 route - if (endpointContext.experimentalFeatures.responseActionScanEnabled) { - router.versioned - .post({ - access: 'public', - path: SCAN_ROUTE, - options: { authRequired: true, tags: ['access:securitySolution'] }, - }) - .addVersion( - { - version: '2023-10-31', - validate: { - request: ScanActionRequestSchema, - }, + router.versioned + .post({ + access: 'public', + path: SCAN_ROUTE, + options: { authRequired: true, tags: ['access:securitySolution'] }, + }) + .addVersion( + { + version: '2023-10-31', + validate: { + request: ScanActionRequestSchema, }, - withEndpointAuthz( - { all: ['canWriteScanOperations'] }, - logger, - responseActionRequestHandler(endpointContext, 'scan') - ) - ); - } + }, + withEndpointAuthz( + { all: ['canWriteScanOperations'] }, + logger, + responseActionRequestHandler(endpointContext, 'scan') + ) + ); } function responseActionRequestHandler( From f7520a6a4325b95498cbe39d8ff8998f7fe85ae6 Mon Sep 17 00:00:00 2001 From: Irene Blanco Date: Wed, 28 Aug 2024 11:58:14 +0200 Subject: [PATCH 34/74] [Infra][Hosts] Remove unnecessary code added for local testing (#191572) ## Summary Small PR to remove code that was mistakenly merged for local testing. --- .../public/pages/metrics/hosts/hooks/use_hosts_table.tsx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx index e881950df570c..dece3437e3e1d 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx @@ -82,14 +82,6 @@ const buildMetricCell = ( }; const buildItemsList = (nodes: InfraAssetMetricsItem[]): HostNodeRow[] => { - nodes.map((node) => { - if (node.name === 'instance') { - node.metrics[0].value = 0; - node.hasSystemMetrics = true; - } - return node; - }); - return nodes.map(({ metrics, metadata, name, alertsCount, hasSystemMetrics }) => { const metadataKeyValue = metadata.reduce( (acc, curr) => ({ From eeed6c8c0716f5b9eabdee51b4fc1d115b305077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Wed, 28 Aug 2024 12:31:51 +0200 Subject: [PATCH 35/74] [Obs AI Assistant] Add `aiAssistant:preferredAIAssistantType` setting to settings page (#190969) This adds the `aiAssistant:preferredAIAssistantType` setting (aka "Observability AI Assistant scope") to the Obs AI Assistant settings page. It was not necessary to re-define the setting definition as it was already declared [here](https://github.com/elastic/kibana/blob/5acd638327e5f22683910d2b97e05bbf4e87b3c9/src/plugins/ai_assistant_management/selection/server/plugin.ts#L48-L89) ![image](https://github.com/user-attachments/assets/96619f37-8835-4f49-8365-80b69f5d4699) --- .../common/ui_settings/settings_keys.ts | 1 + .../observability_ai_assistant/public/index.ts | 1 + .../public/routes/components/settings_tab/ui_settings.tsx | 2 ++ 3 files changed, 4 insertions(+) diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/ui_settings/settings_keys.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/ui_settings/settings_keys.ts index 1f6d4d173cfa8..4685befa9df24 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/ui_settings/settings_keys.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/ui_settings/settings_keys.ts @@ -12,3 +12,4 @@ export const aiAssistantSimulatedFunctionCalling = 'observability:aiAssistantSimulatedFunctionCalling'; export const aiAssistantSearchConnectorIndexPattern = 'observability:aiAssistantSearchConnectorIndexPattern'; +export const aiAssistantPreferredAIAssistantType = 'aiAssistant:preferredAIAssistantType'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts index 7e7ed20de18e3..81cee3036e9c2 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts @@ -100,6 +100,7 @@ export { aiAssistantLogsIndexPattern, aiAssistantSimulatedFunctionCalling, aiAssistantSearchConnectorIndexPattern, + aiAssistantPreferredAIAssistantType, } from '../common/ui_settings/settings_keys'; export const plugin: PluginInitializer< diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/routes/components/settings_tab/ui_settings.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/routes/components/settings_tab/ui_settings.tsx index 5b1f1c36fd3dd..4b30a568bd5e1 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/routes/components/settings_tab/ui_settings.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/routes/components/settings_tab/ui_settings.tsx @@ -12,6 +12,7 @@ import { aiAssistantResponseLanguage, aiAssistantSimulatedFunctionCalling, aiAssistantSearchConnectorIndexPattern, + aiAssistantPreferredAIAssistantType, } from '@kbn/observability-ai-assistant-plugin/public'; import { FieldRow, FieldRowProvider } from '@kbn/management-settings-components-field-row'; import { EuiSpacer } from '@elastic/eui'; @@ -24,6 +25,7 @@ const settingsKeys = [ aiAssistantResponseLanguage, aiAssistantSimulatedFunctionCalling, aiAssistantSearchConnectorIndexPattern, + aiAssistantPreferredAIAssistantType, ]; export function UISettings() { From ecec57ca52a3b00c6a2ab2cf36b2ec9a7c4d1981 Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Wed, 28 Aug 2024 13:03:25 +0200 Subject: [PATCH 36/74] [Obs utils] Add Observability utils package (#189712) Adds a `@kbn/observability-utils` package. ```md # @kbn/observability-utils This package contains utilities for Observability plugins. It's a separate package to get out of dependency hell. You can put anything in here that is stateless and has no dependency on other plugins (either directly or via other packages). The utility functions should be used via direct imports to minimize impact on bundle size and limit the risk on importing browser code to the server and vice versa. ``` Co-authored-by: Elastic Machine --- .eslintrc.js | 6 +- .github/CODEOWNERS | 1 + package.json | 3 +- tsconfig.base.json | 2 + .../observability_utils/README.md | 5 ++ .../client/create_observability_es_client.ts | 66 ++++++++++++++ .../es/queries/kql_query.ts | 17 ++++ .../es/queries/range_query.ts | 25 ++++++ .../es/queries/term_query.ts | 24 +++++ .../hooks/use_abort_controller.ts | 25 ++++++ .../hooks/use_abortable_async.ts | 87 +++++++++++++++++++ .../observability_utils/hooks/use_theme.ts | 12 +++ .../observability_utils/jest.config.js | 12 +++ .../observability_utils/kibana.jsonc | 5 ++ .../object/flatten_object.test.ts | 39 +++++++++ .../object/flatten_object.ts | 37 ++++++++ .../object/merge_plain_object.test.ts | 40 +++++++++ .../object/merge_plain_objects.ts | 84 ++++++++++++++++++ .../observability_utils/package.json | 6 ++ .../observability_utils/tsconfig.json | 25 ++++++ yarn.lock | 6 +- 21 files changed, 524 insertions(+), 3 deletions(-) create mode 100644 x-pack/packages/observability/observability_utils/README.md create mode 100644 x-pack/packages/observability/observability_utils/es/client/create_observability_es_client.ts create mode 100644 x-pack/packages/observability/observability_utils/es/queries/kql_query.ts create mode 100644 x-pack/packages/observability/observability_utils/es/queries/range_query.ts create mode 100644 x-pack/packages/observability/observability_utils/es/queries/term_query.ts create mode 100644 x-pack/packages/observability/observability_utils/hooks/use_abort_controller.ts create mode 100644 x-pack/packages/observability/observability_utils/hooks/use_abortable_async.ts create mode 100644 x-pack/packages/observability/observability_utils/hooks/use_theme.ts create mode 100644 x-pack/packages/observability/observability_utils/jest.config.js create mode 100644 x-pack/packages/observability/observability_utils/kibana.jsonc create mode 100644 x-pack/packages/observability/observability_utils/object/flatten_object.test.ts create mode 100644 x-pack/packages/observability/observability_utils/object/flatten_object.ts create mode 100644 x-pack/packages/observability/observability_utils/object/merge_plain_object.test.ts create mode 100644 x-pack/packages/observability/observability_utils/object/merge_plain_objects.ts create mode 100644 x-pack/packages/observability/observability_utils/package.json create mode 100644 x-pack/packages/observability/observability_utils/tsconfig.json diff --git a/.eslintrc.js b/.eslintrc.js index e8216f62792b2..811676f049158 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -928,7 +928,10 @@ module.exports = { }, }, { - files: ['x-pack/plugins/observability_solution/**/*.{ts,tsx}'], + files: [ + 'x-pack/plugins/observability_solution/**/*.{ts,tsx}', + 'x-pack/packages/observability/**/*.{ts,tsx}', + ], rules: { 'react-hooks/exhaustive-deps': [ 'error', @@ -944,6 +947,7 @@ module.exports = { 'x-pack/plugins/aiops/**/*.tsx', 'x-pack/plugins/observability_solution/**/*.tsx', 'src/plugins/ai_assistant_management/**/*.tsx', + 'x-pack/packages/observability/**/*.{ts,tsx}', ], rules: { '@kbn/telemetry/event_generating_elements_should_be_instrumented': 'error', diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 79a8000fe2f68..faac357fc0a7a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -642,6 +642,7 @@ x-pack/plugins/observability_solution/observability_onboarding/e2e @elastic/obs- x-pack/plugins/observability_solution/observability_onboarding @elastic/obs-ux-logs-team @elastic/obs-ux-onboarding-team x-pack/plugins/observability_solution/observability @elastic/obs-ux-management-team x-pack/plugins/observability_solution/observability_shared @elastic/observability-ui +x-pack/packages/observability/observability_utils @elastic/observability-ui x-pack/test/security_api_integration/plugins/oidc_provider @elastic/kibana-security test/common/plugins/otel_metrics @elastic/obs-ux-infra_services-team packages/kbn-openapi-bundler @elastic/security-detection-rule-management diff --git a/package.json b/package.json index 7ca0a053cf5ff..0d33a390bce5d 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "@dnd-kit/sortable": "^8.0.0", "@dnd-kit/utilities": "^3.2.2", "@elastic/apm-rum": "^5.16.1", - "@elastic/apm-rum-core": "^5.21.0", + "@elastic/apm-rum-core": "^5.21.1", "@elastic/apm-rum-react": "^2.0.3", "@elastic/charts": "66.1.1", "@elastic/datemath": "5.0.3", @@ -674,6 +674,7 @@ "@kbn/observability-onboarding-plugin": "link:x-pack/plugins/observability_solution/observability_onboarding", "@kbn/observability-plugin": "link:x-pack/plugins/observability_solution/observability", "@kbn/observability-shared-plugin": "link:x-pack/plugins/observability_solution/observability_shared", + "@kbn/observability-utils": "link:x-pack/packages/observability/observability_utils", "@kbn/oidc-provider-plugin": "link:x-pack/test/security_api_integration/plugins/oidc_provider", "@kbn/open-telemetry-instrumented-plugin": "link:test/common/plugins/otel_metrics", "@kbn/openapi-common": "link:packages/kbn-openapi-common", diff --git a/tsconfig.base.json b/tsconfig.base.json index 860e8dae3d523..ab942aab15550 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1278,6 +1278,8 @@ "@kbn/observability-plugin/*": ["x-pack/plugins/observability_solution/observability/*"], "@kbn/observability-shared-plugin": ["x-pack/plugins/observability_solution/observability_shared"], "@kbn/observability-shared-plugin/*": ["x-pack/plugins/observability_solution/observability_shared/*"], + "@kbn/observability-utils": ["x-pack/packages/observability/observability_utils"], + "@kbn/observability-utils/*": ["x-pack/packages/observability/observability_utils/*"], "@kbn/oidc-provider-plugin": ["x-pack/test/security_api_integration/plugins/oidc_provider"], "@kbn/oidc-provider-plugin/*": ["x-pack/test/security_api_integration/plugins/oidc_provider/*"], "@kbn/open-telemetry-instrumented-plugin": ["test/common/plugins/otel_metrics"], diff --git a/x-pack/packages/observability/observability_utils/README.md b/x-pack/packages/observability/observability_utils/README.md new file mode 100644 index 0000000000000..bd74c0bdffb47 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/README.md @@ -0,0 +1,5 @@ +# @kbn/observability-utils + +This package contains utilities for Observability plugins. It's a separate package to get out of dependency hell. You can put anything in here that is stateless and has no dependency on other plugins (either directly or via other packages). + +The utility functions should be used via direct imports to minimize impact on bundle size and limit the risk on importing browser code to the server and vice versa. diff --git a/x-pack/packages/observability/observability_utils/es/client/create_observability_es_client.ts b/x-pack/packages/observability/observability_utils/es/client/create_observability_es_client.ts new file mode 100644 index 0000000000000..2e57653365b0b --- /dev/null +++ b/x-pack/packages/observability/observability_utils/es/client/create_observability_es_client.ts @@ -0,0 +1,66 @@ +/* + * 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 { ElasticsearchClient, Logger } from '@kbn/core/server'; +import type { ESSearchRequest, InferSearchResponseOf } from '@kbn/es-types'; +import { withSpan } from '@kbn/apm-utils'; + +type SearchRequest = ESSearchRequest & { + index: string | string[]; + track_total_hits: number | boolean; + size: number | boolean; +}; + +/** + * An Elasticsearch Client with a fully typed `search` method and built-in + * APM instrumentation. + */ +export interface ObservabilityElasticsearchClient { + search( + operationName: string, + parameters: TSearchRequest + ): Promise>; + client: ElasticsearchClient; +} + +export function createObservabilityEsClient({ + client, + logger, + plugin, +}: { + client: ElasticsearchClient; + logger: Logger; + plugin: string; +}): ObservabilityElasticsearchClient { + return { + client, + search( + operationName: string, + parameters: SearchRequest + ) { + logger.trace(() => `Request (${operationName}):\n${JSON.stringify(parameters, null, 2)}`); + // wraps the search operation in a named APM span for better analysis + // (otherwise it would just be a _search span) + return withSpan( + { + name: operationName, + labels: { + plugin, + }, + }, + () => { + return client.search(parameters) as unknown as Promise< + InferSearchResponseOf + >; + } + ).then((response) => { + logger.trace(() => `Response (${operationName}):\n${JSON.stringify(response, null, 2)}`); + return response; + }); + }, + }; +} diff --git a/x-pack/packages/observability/observability_utils/es/queries/kql_query.ts b/x-pack/packages/observability/observability_utils/es/queries/kql_query.ts new file mode 100644 index 0000000000000..2f560157cc8c6 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/es/queries/kql_query.ts @@ -0,0 +1,17 @@ +/* + * 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 { estypes } from '@elastic/elasticsearch'; +import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; + +export function kqlQuery(kql?: string): estypes.QueryDslQueryContainer[] { + if (!kql) { + return []; + } + + const ast = fromKueryExpression(kql); + return [toElasticsearchQuery(ast)]; +} diff --git a/x-pack/packages/observability/observability_utils/es/queries/range_query.ts b/x-pack/packages/observability/observability_utils/es/queries/range_query.ts new file mode 100644 index 0000000000000..d73476354c377 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/es/queries/range_query.ts @@ -0,0 +1,25 @@ +/* + * 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 { estypes } from '@elastic/elasticsearch'; + +export function rangeQuery( + start?: number, + end?: number, + field = '@timestamp' +): estypes.QueryDslQueryContainer[] { + return [ + { + range: { + [field]: { + gte: start, + lte: end, + format: 'epoch_millis', + }, + }, + }, + ]; +} diff --git a/x-pack/packages/observability/observability_utils/es/queries/term_query.ts b/x-pack/packages/observability/observability_utils/es/queries/term_query.ts new file mode 100644 index 0000000000000..dfaeb737bf8b7 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/es/queries/term_query.ts @@ -0,0 +1,24 @@ +/* + * 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 { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; + +interface TermQueryOpts { + queryEmptyString: boolean; +} + +export function termQuery( + field: T, + value: string | boolean | number | undefined | null, + opts: TermQueryOpts = { queryEmptyString: true } +): QueryDslQueryContainer[] { + if (value === null || value === undefined || (!opts.queryEmptyString && value === '')) { + return []; + } + + return [{ term: { [field]: value } }]; +} diff --git a/x-pack/packages/observability/observability_utils/hooks/use_abort_controller.ts b/x-pack/packages/observability/observability_utils/hooks/use_abort_controller.ts new file mode 100644 index 0000000000000..a383e7b81b4d9 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/hooks/use_abort_controller.ts @@ -0,0 +1,25 @@ +/* + * 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 { useEffect, useState } from 'react'; + +export function useAbortController() { + const [controller, setController] = useState(() => new AbortController()); + + useEffect(() => { + return () => { + controller.abort(); + }; + }, [controller]); + + return { + signal: controller.signal, + refresh: () => { + setController(() => new AbortController()); + }, + }; +} diff --git a/x-pack/packages/observability/observability_utils/hooks/use_abortable_async.ts b/x-pack/packages/observability/observability_utils/hooks/use_abortable_async.ts new file mode 100644 index 0000000000000..433ca877b0f62 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/hooks/use_abortable_async.ts @@ -0,0 +1,87 @@ +/* + * 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 { isPromise } from '@kbn/std'; +import { useEffect, useMemo, useRef, useState } from 'react'; + +interface State { + error?: Error; + value?: T; + loading: boolean; +} + +export type AbortableAsyncState = (T extends Promise + ? State + : State) & { refresh: () => void }; + +export function useAbortableAsync( + fn: ({}: { signal: AbortSignal }) => T | Promise, + deps: any[], + options?: { clearValueOnNext?: boolean; defaultValue?: () => T } +): AbortableAsyncState { + const clearValueOnNext = options?.clearValueOnNext; + + const controllerRef = useRef(new AbortController()); + + const [refreshId, setRefreshId] = useState(0); + + const [error, setError] = useState(); + const [loading, setLoading] = useState(false); + const [value, setValue] = useState(options?.defaultValue); + + useEffect(() => { + controllerRef.current.abort(); + + const controller = new AbortController(); + controllerRef.current = controller; + + if (clearValueOnNext) { + setValue(undefined); + setError(undefined); + } + + try { + const response = fn({ signal: controller.signal }); + if (isPromise(response)) { + setLoading(true); + response + .then((nextValue) => { + setError(undefined); + setValue(nextValue); + }) + .catch((err) => { + setValue(undefined); + setError(err); + }) + .finally(() => setLoading(false)); + } else { + setError(undefined); + setValue(response); + setLoading(false); + } + } catch (err) { + setValue(undefined); + setError(err); + setLoading(false); + } + + return () => { + controller.abort(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, deps.concat(refreshId, clearValueOnNext)); + + return useMemo>(() => { + return { + error, + loading, + value, + refresh: () => { + setRefreshId((id) => id + 1); + }, + } as unknown as AbortableAsyncState; + }, [error, value, loading]); +} diff --git a/x-pack/packages/observability/observability_utils/hooks/use_theme.ts b/x-pack/packages/observability/observability_utils/hooks/use_theme.ts new file mode 100644 index 0000000000000..d0b4ce61edef4 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/hooks/use_theme.ts @@ -0,0 +1,12 @@ +/* + * 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 { useEuiTheme } from '@elastic/eui'; + +export function useTheme() { + return useEuiTheme().euiTheme; +} diff --git a/x-pack/packages/observability/observability_utils/jest.config.js b/x-pack/packages/observability/observability_utils/jest.config.js new file mode 100644 index 0000000000000..c9dff28ed6cec --- /dev/null +++ b/x-pack/packages/observability/observability_utils/jest.config.js @@ -0,0 +1,12 @@ +/* + * 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. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: ['/x-pack/packages/observability/observability_utils'], +}; diff --git a/x-pack/packages/observability/observability_utils/kibana.jsonc b/x-pack/packages/observability/observability_utils/kibana.jsonc new file mode 100644 index 0000000000000..096b2565d533f --- /dev/null +++ b/x-pack/packages/observability/observability_utils/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/observability-utils", + "owner": "@elastic/observability-ui" +} diff --git a/x-pack/packages/observability/observability_utils/object/flatten_object.test.ts b/x-pack/packages/observability/observability_utils/object/flatten_object.test.ts new file mode 100644 index 0000000000000..deb7ed998c478 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/object/flatten_object.test.ts @@ -0,0 +1,39 @@ +/* + * 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 { flattenObject } from './flatten_object'; + +describe('flattenObject', () => { + it('flattens deeply nested objects', () => { + expect( + flattenObject({ + first: { + second: { + third: 'third', + }, + }, + }) + ).toEqual({ + 'first.second.third': 'third', + }); + }); + + it('does not flatten arrays', () => { + expect( + flattenObject({ + simpleArray: ['0', '1', '2'], + complexArray: [{ one: 'one', two: 'two', three: 'three' }], + nested: { + array: [0, 1, 2], + }, + }) + ).toEqual({ + simpleArray: ['0', '1', '2'], + complexArray: [{ one: 'one', two: 'two', three: 'three' }], + 'nested.array': [0, 1, 2], + }); + }); +}); diff --git a/x-pack/packages/observability/observability_utils/object/flatten_object.ts b/x-pack/packages/observability/observability_utils/object/flatten_object.ts new file mode 100644 index 0000000000000..c83ae8a102d4a --- /dev/null +++ b/x-pack/packages/observability/observability_utils/object/flatten_object.ts @@ -0,0 +1,37 @@ +/* + * 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. + */ + +type PlainObject = Record; + +/** + * Flattens an object into key-value pairs with dots as separators. + * + * @param obj + * @param prefix + * @param result + * @returns + */ +export function flattenObject( + obj: PlainObject, + prefix: string = '', + result: PlainObject = {} +): PlainObject { + for (const key in obj) { + if (Object.hasOwn(obj, key)) { + const newKey = prefix ? `${prefix}.${key}` : key; + // If the property value is an object and not an array or null, recurse + // (array keys are not flattened because that gets a little weird I think) + if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) { + flattenObject(obj[key], newKey, result); + } else { + // Otherwise, add the value to the result object + result[newKey] = obj[key]; + } + } + } + return result; +} diff --git a/x-pack/packages/observability/observability_utils/object/merge_plain_object.test.ts b/x-pack/packages/observability/observability_utils/object/merge_plain_object.test.ts new file mode 100644 index 0000000000000..02049f1a756c2 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/object/merge_plain_object.test.ts @@ -0,0 +1,40 @@ +/* + * 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 { mergePlainObjects } from './merge_plain_objects'; + +describe('mergePlainObjects', () => { + it('recursively merges plain objects', () => { + expect( + mergePlainObjects({}, { foo: { bar: 'baz' } }, { foo: { baz: 'rab', bar: 'baz' } }) + ).toEqual({ + foo: { + bar: 'baz', + baz: 'rab', + }, + }); + }); + + it('overrides arrays', () => { + expect(mergePlainObjects({ myArray: [0, 1, 2, 3] }, { myArray: [4, 5, 6] })).toEqual({ + myArray: [4, 5, 6], + }); + }); + + it('overrides all primitives', () => { + expect( + mergePlainObjects( + { number: 'number', boolean: 'boolean', string: 'string', null: null }, + { number: 'num', boolean: 'bool', string: 'str' } + ) + ).toEqual({ + number: 'num', + boolean: 'bool', + string: 'str', + null: null, + }); + }); +}); diff --git a/x-pack/packages/observability/observability_utils/object/merge_plain_objects.ts b/x-pack/packages/observability/observability_utils/object/merge_plain_objects.ts new file mode 100644 index 0000000000000..e7c1042ac6581 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/object/merge_plain_objects.ts @@ -0,0 +1,84 @@ +/* + * 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 { RequiredKeys } from 'utility-types'; +import { isPlainObject, mergeWith, MergeWithCustomizer } from 'lodash'; + +type DeepOverwrite = U extends Record + ? Omit> & { + [K in keyof U]: K extends keyof T ? DeepOverwrite : U[K]; + } + : U extends undefined + ? T + : U; + +type DeepPartialPlainObjects = T extends Record + ? Partial> & + Partial<{ + [TKey in keyof T]: DeepPartialPlainObjects; + }> + : T; + +type Mergable = Record; + +type MergeRecursively = TMergables extends [ + infer THead, + ...infer TTail +] + ? TTail extends Mergable[] + ? DeepOverwrite> + : THead + : TMergables extends [infer THead] + ? THead + : TMergables extends [] + ? {} + : {}; + +const customMergeFunction: MergeWithCustomizer = (value, sourceValue) => { + if (isPlainObject(sourceValue)) { + return mergeWith(value, sourceValue, customMergeFunction); + } + return sourceValue; +}; + +function mergePlainObjectsOnly(...sources: Mergable[]) { + return mergeWith({}, ...sources.concat(customMergeFunction)); +} + +export function mergePlainObjects | undefined>(t1: T1): T1; + +export function mergePlainObjects>( + t1: T1, + t2: T2 +): MergeRecursively<[T1, T2]>; + +export function mergePlainObjects< + T1 extends Mergable, + T2 extends DeepPartialPlainObjects, + T3 extends DeepPartialPlainObjects +>(t1: T1, t2: T2, t3: T3): MergeRecursively<[T1, T2, T3]>; + +export function mergePlainObjects< + T1 extends Mergable, + T2 extends DeepPartialPlainObjects, + T3 extends DeepPartialPlainObjects, + T4 extends DeepPartialPlainObjects +>(t1: T1, t2: T2, t3: T4): MergeRecursively<[T1, T2, T3, T4]>; +/** + * Merges plain objects. It does two things over merge: + * + * - it expects the objects to be extensions of the type of + * the source object, to provide type autocompletions + * - arrays are not merged but overridden + * + * @param sources + * @returns + */ +export function mergePlainObjects(...sources: Array>) { + const merged = mergePlainObjectsOnly(...sources); + + return merged; +} diff --git a/x-pack/packages/observability/observability_utils/package.json b/x-pack/packages/observability/observability_utils/package.json new file mode 100644 index 0000000000000..06f6e37858927 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/observability-utils", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/packages/observability/observability_utils/tsconfig.json b/x-pack/packages/observability/observability_utils/tsconfig.json new file mode 100644 index 0000000000000..2ed47d10cfad9 --- /dev/null +++ b/x-pack/packages/observability/observability_utils/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node", + "react" + ] + }, + "include": [ + "**/*.ts", + "**/*.tsx", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/std", + "@kbn/core", + "@kbn/es-types", + "@kbn/apm-utils", + "@kbn/es-query", + ] +} diff --git a/yarn.lock b/yarn.lock index c61a66aeaeebe..85c4c519c17a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1612,7 +1612,7 @@ dependencies: tslib "^2.0.0" -"@elastic/apm-rum-core@^5.21.0", "@elastic/apm-rum-core@^5.21.1": +"@elastic/apm-rum-core@^5.21.1": version "5.21.1" resolved "https://registry.yarnpkg.com/@elastic/apm-rum-core/-/apm-rum-core-5.21.1.tgz#ea6f2268629193962c194ae1d29971e2c5b2e531" integrity sha512-/LyLhVdJ+zcsKogwq2AEYARc//RDXOoTHWPERLay4sCsvvxc4/GkkhhOC40CqI0oMu4kUAoJInQWZuCM7zCZRQ== @@ -5810,6 +5810,10 @@ version "0.0.0" uid "" +"@kbn/observability-utils@link:x-pack/packages/observability/observability_utils": + version "0.0.0" + uid "" + "@kbn/oidc-provider-plugin@link:x-pack/test/security_api_integration/plugins/oidc_provider": version "0.0.0" uid "" From 1344d3b2382cf84108d4f1fe255bd626c0fef523 Mon Sep 17 00:00:00 2001 From: elena-shostak <165678770+elena-shostak@users.noreply.github.com> Date: Wed, 28 Aug 2024 13:05:54 +0200 Subject: [PATCH 37/74] Polished secure random number implementation (#191285) ## Summary Polished secure random number implementation. --------- Co-authored-by: Elastic Machine --- .../server/verification_code.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/plugins/interactive_setup/server/verification_code.ts b/src/plugins/interactive_setup/server/verification_code.ts index d14cdb85e0204..47c3ba73c174d 100644 --- a/src/plugins/interactive_setup/server/verification_code.ts +++ b/src/plugins/interactive_setup/server/verification_code.ts @@ -69,20 +69,24 @@ Your verification code is: ${highlightedCode} /** * Returns a cryptographically secure and random 6-digit code. - * - * Implementation notes: `secureRandomNumber` returns a random number like `0.05505769583xxxx`. To - * turn that into a 6 digit code we multiply it by `10^6` and result is `055057`. */ private static generate(length: number) { - return Math.floor(secureRandomNumber() * Math.pow(10, length)) - .toString() - .padStart(length, '0'); + return secureRandomNumber(length).join(''); } } /** * Cryptographically secure equivalent of `Math.random()`. */ -function secureRandomNumber() { - return crypto.randomBytes(4).readUInt32LE() / 0x100000000; +function secureRandomNumber(length: number) { + const digits = []; + while (digits.length < length) { + const byte = crypto.randomBytes(1)[0]; + if (byte >= 250) { + continue; + } + digits.push(byte % 10); + } + + return digits; } From 3c2ce3c839745ff0ef5eb66e57d7764d5ec8ab4d Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Wed, 28 Aug 2024 13:37:15 +0200 Subject: [PATCH 38/74] [ML] AIOps: Adds log rate analysis to alert details page contextual insight. (#187690) ## Summary Part of #178501. This adds log rate analysis results to the prompt used for contextual insights on alert details pages: image image ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- ...log_rate_analysis_parameters_from_alert.ts | 24 +- .../fetch_log_rate_analysis_for_alert.ts | 213 ++++++++++++++++++ .../ml/aiops_log_rate_analysis/tsconfig.json | 1 + .../get_log_categories/index.ts | 37 +-- .../get_log_rate_analysis_for_alert/index.ts | 63 ++++++ .../index.ts | 37 +++ ..._should_match_or_not_exist_filter.test.ts} | 2 +- .../get_should_match_or_not_exist_filter.ts | 40 ++++ .../observability_solution/apm/tsconfig.json | 3 +- .../alert_details_contextual_insights.tsx | 7 + .../observability/server/services/index.ts | 4 + 11 files changed, 387 insertions(+), 44 deletions(-) create mode 100644 x-pack/packages/ml/aiops_log_rate_analysis/queries/fetch_log_rate_analysis_for_alert.ts create mode 100644 x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_rate_analysis_for_alert/index.ts rename x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/{get_log_categories/index.test.ts => utils/get_should_match_or_not_exist_filter.test.ts} (96%) create mode 100644 x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/utils/get_should_match_or_not_exist_filter.ts diff --git a/x-pack/packages/ml/aiops_log_rate_analysis/get_log_rate_analysis_parameters_from_alert.ts b/x-pack/packages/ml/aiops_log_rate_analysis/get_log_rate_analysis_parameters_from_alert.ts index cfd347324a57f..4de3ca83ce702 100644 --- a/x-pack/packages/ml/aiops_log_rate_analysis/get_log_rate_analysis_parameters_from_alert.ts +++ b/x-pack/packages/ml/aiops_log_rate_analysis/get_log_rate_analysis_parameters_from_alert.ts @@ -11,7 +11,7 @@ export interface GetLogRateAnalysisParametersFromAlertArgs { alertStartedAt: string; alertEndedAt?: string; timeSize?: number; - timeUnit?: moment.unitOfTime.DurationConstructor; + timeUnit?: string; } export const getLogRateAnalysisParametersFromAlert = ({ @@ -20,12 +20,7 @@ export const getLogRateAnalysisParametersFromAlert = ({ timeSize, timeUnit, }: GetLogRateAnalysisParametersFromAlertArgs) => { - // Identify `intervalFactor` to adjust time ranges based on alert settings. - // The default time ranges for `initialAnalysisStart` are suitable for a `1m` lookback. - // If an alert would have a `5m` lookback, this would result in a factor of `5`. - const lookbackDuration = - timeSize && timeUnit ? moment.duration(timeSize, timeUnit) : moment.duration(1, 'm'); - const intervalFactor = Math.max(1, lookbackDuration.asSeconds() / 60); + const intervalFactor = getIntervalFactor(timeSize, timeUnit); const alertStart = moment(alertStartedAt); const alertEnd = alertEndedAt ? moment(alertEndedAt) : undefined; @@ -43,6 +38,21 @@ export const getLogRateAnalysisParametersFromAlert = ({ }; }; +// Identify `intervalFactor` to adjust time ranges based on alert settings. +// The default time ranges for `initialAnalysisStart` are suitable for a `1m` lookback. +// If an alert would have a `5m` lookback, this would result in a factor of `5`. +export const getIntervalFactor = (timeSize?: number, timeUnit?: string) => { + const lookbackDuration = + timeSize && timeUnit + ? moment.duration( + timeSize, + // workaround to cast the string based time unit to moment's format. + timeUnit as unknown as moment.unitOfTime.DurationConstructor | undefined + ) + : moment.duration(1, 'm'); + return Math.max(1, lookbackDuration.asSeconds() / 60); +}; + interface GetParameterHelperArgs { alertStart: Moment; intervalFactor: number; diff --git a/x-pack/packages/ml/aiops_log_rate_analysis/queries/fetch_log_rate_analysis_for_alert.ts b/x-pack/packages/ml/aiops_log_rate_analysis/queries/fetch_log_rate_analysis_for_alert.ts new file mode 100644 index 0000000000000..3ba57139901f8 --- /dev/null +++ b/x-pack/packages/ml/aiops_log_rate_analysis/queries/fetch_log_rate_analysis_for_alert.ts @@ -0,0 +1,213 @@ +/* + * 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 moment from 'moment'; +import { queue } from 'async'; +import { chunk } from 'lodash'; + +import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +import { withSpan } from '@kbn/apm-utils'; +import type { ElasticsearchClient } from '@kbn/core/server'; +import type { SignificantItem } from '@kbn/ml-agg-utils'; +import { getSampleProbability } from '@kbn/ml-random-sampler-utils'; + +import type { AiopsLogRateAnalysisSchema } from '../api/schema'; +import { getIntervalFactor } from '../get_log_rate_analysis_parameters_from_alert'; +import { getSwappedWindowParameters } from '../get_swapped_window_parameters'; +import { getLogRateChange } from '../get_log_rate_change'; +import { getBaselineAndDeviationRates } from '../get_baseline_and_deviation_rates'; +import { getLogRateAnalysisTypeForCounts } from '../get_log_rate_analysis_type_for_counts'; +import { LOG_RATE_ANALYSIS_TYPE } from '../log_rate_analysis_type'; + +import { fetchIndexInfo } from './fetch_index_info'; +import { fetchSignificantCategories } from './fetch_significant_categories'; +import { fetchSignificantTermPValues } from './fetch_significant_term_p_values'; + +const MAX_CONCURRENT_QUERIES = 5; +const CHUNK_SIZE = 50; + +interface QueueItem { + fn: typeof fetchSignificantCategories | typeof fetchSignificantTermPValues; + fieldNames: string[]; +} + +/** + * Runs log rate analysis data on an index given some alert metadata. + */ +export async function fetchLogRateAnalysisForAlert({ + esClient, + abortSignal, + arguments: args, +}: { + esClient: ElasticsearchClient; + abortSignal?: AbortSignal; + arguments: { + index: string; + alertStartedAt: string; + alertRuleParameterTimeSize?: number; + alertRuleParameterTimeUnit?: string; + timefield?: string; + searchQuery?: estypes.QueryDslQueryContainer; + }; +}) { + const { alertStartedAt, timefield = '@timestamp' } = args; + const alertStart = moment(alertStartedAt); + + const intervalFactor = getIntervalFactor( + args.alertRuleParameterTimeSize, + args.alertRuleParameterTimeUnit + ); + + // The deviation time range is 1 lookback duration before the alert start. + // The baseline time range is 2 lookback durations before the deviation time range. + const windowParameters = { + baselineMin: alertStart + .clone() + .subtract(3 * intervalFactor, 'minutes') + .valueOf(), + baselineMax: alertStart + .clone() + .subtract(1 * intervalFactor, 'minutes') + .valueOf(), + deviationMin: alertStart + .clone() + .subtract(1 * intervalFactor, 'minutes') + .valueOf(), + deviationMax: alertStart.valueOf(), + }; + + const { searchQuery = { match_all: {} } } = args; + + // Step 1: Get field candidates and total doc counts. + const indexInfoParams: AiopsLogRateAnalysisSchema = { + index: args.index, + start: windowParameters.baselineMin, + end: windowParameters.deviationMax, + searchQuery: JSON.stringify(searchQuery), + timeFieldName: timefield, + ...windowParameters, + }; + + const indexInfo = await withSpan( + { name: 'fetch_index_info', type: 'aiops-log-rate-analysis-for-alert' }, + () => + fetchIndexInfo({ + esClient, + abortSignal, + arguments: { + ...indexInfoParams, + textFieldCandidatesOverrides: ['message', 'error.message'], + }, + }) + ); + const { textFieldCandidates, keywordFieldCandidates } = indexInfo; + + const logRateAnalysisType = getLogRateAnalysisTypeForCounts({ + baselineCount: indexInfo.baselineTotalDocCount, + deviationCount: indexInfo.deviationTotalDocCount, + windowParameters, + }); + + // Just in case the log rate analysis type is 'dip', we need to swap + // the window parameters for the analysis. + const analysisWindowParameters = + logRateAnalysisType === LOG_RATE_ANALYSIS_TYPE.SPIKE + ? windowParameters + : getSwappedWindowParameters(windowParameters); + + // Step 2: Identify significant items. + // The following code will fetch significant categories and term p-values + // using an async queue. The field candidates will be passed on as chunks + // of 50 fields with up to 5 concurrent queries. This is to prevent running + // into bucket limit issues if we'd throw possibly hundreds of field candidates + // into a single query. + + const significantItems: SignificantItem[] = []; + + // Set up the queue: A queue item is an object with the function to call and + // the field names to be passed to the function. This is done so we can push + // queries for both keyword fields (using significant_terms/p-values) and + // text fields (using categorize_text + custom code to identify significance) + // into the same queue. + const significantItemsQueue = queue(async function ({ fn, fieldNames }: QueueItem) { + significantItems.push( + ...(await fn({ + esClient, + abortSignal, + arguments: { + ...indexInfoParams, + ...analysisWindowParameters, + fieldNames, + sampleProbability: getSampleProbability( + indexInfo.deviationTotalDocCount + indexInfo.baselineTotalDocCount + ), + }, + })) + ); + }, MAX_CONCURRENT_QUERIES); + + // Push the actual items to the queue. We don't need to chunk the text fields + // since they are just `message` and `error.message`. + significantItemsQueue.push( + [ + { fn: fetchSignificantCategories, fieldNames: textFieldCandidates }, + ...chunk(keywordFieldCandidates, CHUNK_SIZE).map((fieldNames) => ({ + fn: fetchSignificantTermPValues, + fieldNames, + })), + ], + (err) => { + if (err) significantItemsQueue.kill(); + } + ); + + // Wait for the queue to finish. + await withSpan( + { name: 'fetch_significant_items', type: 'aiops-log-rate-analysis-for-alert' }, + () => significantItemsQueue.drain() + ); + + // RETURN DATA + // Adapt the raw significant items data for contextual insights. + return { + logRateAnalysisType, + significantItems: significantItems + .map(({ fieldName, fieldValue, type, doc_count: docCount, bg_count: bgCount }) => { + const { baselineBucketRate, deviationBucketRate } = getBaselineAndDeviationRates( + logRateAnalysisType, + // Normalize the amount of baseline buckets based on treating the + // devation duration as 1 bucket. + (windowParameters.baselineMax - windowParameters.baselineMin) / + (windowParameters.deviationMax - windowParameters.deviationMin), + 1, + docCount, + bgCount + ); + + const fieldType = type === 'keyword' ? 'metadata' : 'log message pattern'; + + const data = { + fieldType, + fieldName, + fieldValue: String(fieldValue).substring(0, 140), + logRateChange: getLogRateChange( + logRateAnalysisType, + baselineBucketRate, + deviationBucketRate + ).message, + }; + + return { + logRateChangeSort: bgCount > 0 ? docCount / bgCount : docCount, + data, + }; + }) + .sort((a, b) => b.logRateChangeSort - a.logRateChangeSort) + .map((d) => d.data), + }; +} diff --git a/x-pack/packages/ml/aiops_log_rate_analysis/tsconfig.json b/x-pack/packages/ml/aiops_log_rate_analysis/tsconfig.json index 711cbfb57a15b..66b978764464e 100644 --- a/x-pack/packages/ml/aiops_log_rate_analysis/tsconfig.json +++ b/x-pack/packages/ml/aiops_log_rate_analysis/tsconfig.json @@ -31,5 +31,6 @@ "@kbn/ml-string-hash", "@kbn/ml-response-stream", "@kbn/i18n", + "@kbn/apm-utils", ] } diff --git a/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_categories/index.ts b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_categories/index.ts index c55df1122a71e..41af9a4a0360d 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_categories/index.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_categories/index.ts @@ -14,6 +14,7 @@ import { APMEventClient } from '../../../lib/helpers/create_es_client/create_apm import { PROCESSOR_EVENT, TRACE_ID } from '../../../../common/es_fields/apm'; import { getTypedSearch } from '../../../utils/create_typed_es_client'; import { getDownstreamServiceResource } from '../get_observability_alert_details_context/get_downstream_dependency_name'; +import { getShouldMatchOrNotExistFilter } from '../utils/get_should_match_or_not_exist_filter'; export interface LogCategory { errorCategory: string; @@ -101,7 +102,7 @@ export async function getLogCategories({ categories: { categorize_text: { field: 'message', - size: 500, + size: 10, }, aggs: { sample: { @@ -147,37 +148,3 @@ export async function getLogCategories({ entities: flattenObject(sampleDoc), }; } - -// field/value pairs should match, or the field should not exist -export function getShouldMatchOrNotExistFilter( - keyValuePairs: Array<{ - field: string; - value?: string; - }> -) { - return keyValuePairs - .filter(({ value }) => value) - .map(({ field, value }) => { - return { - bool: { - should: [ - { - bool: { - filter: [{ term: { [field]: value } }], - }, - }, - { - bool: { - must_not: { - bool: { - filter: [{ exists: { field } }], - }, - }, - }, - }, - ], - minimum_should_match: 1, - }, - }; - }); -} diff --git a/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_rate_analysis_for_alert/index.ts b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_rate_analysis_for_alert/index.ts new file mode 100644 index 0000000000000..097eff91ced14 --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_rate_analysis_for_alert/index.ts @@ -0,0 +1,63 @@ +/* + * 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 { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import type { CoreRequestHandlerContext } from '@kbn/core/server'; +import { aiAssistantLogsIndexPattern } from '@kbn/observability-ai-assistant-plugin/server'; +import { fetchLogRateAnalysisForAlert } from '@kbn/aiops-log-rate-analysis/queries/fetch_log_rate_analysis_for_alert'; +import { PROCESSOR_EVENT } from '../../../../common/es_fields/apm'; +import { getShouldMatchOrNotExistFilter } from '../utils/get_should_match_or_not_exist_filter'; + +/** + * Runs log rate analysis data on an index given some alert metadata. + */ +export async function getLogRateAnalysisForAlert({ + esClient, + coreContext, + arguments: args, +}: { + esClient: ElasticsearchClient; + coreContext: Pick; + arguments: { + alertStartedAt: string; + alertRuleParameterTimeSize?: number; + alertRuleParameterTimeUnit?: string; + entities: { + 'service.name'?: string; + 'host.name'?: string; + 'container.id'?: string; + 'kubernetes.pod.name'?: string; + }; + }; +}): ReturnType { + const index = await coreContext.uiSettings.client.get(aiAssistantLogsIndexPattern); + + const keyValueFilters = getShouldMatchOrNotExistFilter( + Object.entries(args.entities).map(([key, value]) => ({ field: key, value })) + ); + + const searchQuery = { + bool: { + must_not: [ + // exclude APM errors + { term: { [PROCESSOR_EVENT]: 'error' } }, + ], + filter: [...keyValueFilters], + }, + }; + + return fetchLogRateAnalysisForAlert({ + esClient, + arguments: { + index, + alertStartedAt: args.alertStartedAt, + alertRuleParameterTimeSize: args.alertRuleParameterTimeSize, + alertRuleParameterTimeUnit: args.alertRuleParameterTimeUnit, + searchQuery, + }, + }); +} diff --git a/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_observability_alert_details_context/index.ts b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_observability_alert_details_context/index.ts index 64141a7f533ee..e0f3f833a5ae2 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_observability_alert_details_context/index.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_observability_alert_details_context/index.ts @@ -22,6 +22,7 @@ import { APMDownstreamDependency, getAssistantDownstreamDependencies, } from '../get_apm_downstream_dependencies'; +import { getLogRateAnalysisForAlert } from '../get_log_rate_analysis_for_alert'; import { getLogCategories, LogCategory } from '../get_log_categories'; import { getAnomalies } from '../get_apm_service_summary/get_anomalies'; import { getServiceNameFromSignals } from './get_service_name_from_signals'; @@ -160,6 +161,42 @@ export const getAlertDetailsContextHandler = ( }); } + // log rate analysis + dataFetchers.push(async () => { + const { logRateAnalysisType, significantItems } = await getLogRateAnalysisForAlert({ + esClient, + coreContext, + arguments: { + alertStartedAt: moment(alertStartedAt).toISOString(), + alertRuleParameterTimeSize: query.alert_rule_parameter_time_size + ? parseInt(query.alert_rule_parameter_time_size, 10) + : undefined, + alertRuleParameterTimeUnit: query.alert_rule_parameter_time_unit, + entities: { + 'service.name': serviceName, + 'host.name': hostName, + 'container.id': containerId, + 'kubernetes.pod.name': kubernetesPodName, + }, + }, + }); + + if (logRateAnalysisType !== 'spike' || significantItems.length === 0) { + return { + key: 'logRateAnalysis', + description: + 'Log rate analysis did not identify any significant metadata or log patterns.', + data: [], + }; + } + + return { + key: 'logRateAnalysis', + description: `Statistically significant log metadata and log message patterns occurring in the lookback period before the alert was triggered.`, + data: significantItems, + }; + }); + // log categories dataFetchers.push(async () => { const downstreamDependencies = await downstreamDependenciesPromise; diff --git a/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_categories/index.test.ts b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/utils/get_should_match_or_not_exist_filter.test.ts similarity index 96% rename from x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_categories/index.test.ts rename to x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/utils/get_should_match_or_not_exist_filter.test.ts index 3b4f2e58a5029..024c8ff6a9170 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/get_log_categories/index.test.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/utils/get_should_match_or_not_exist_filter.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { getShouldMatchOrNotExistFilter } from '.'; +import { getShouldMatchOrNotExistFilter } from './get_should_match_or_not_exist_filter'; describe('getShouldMatchOrNotExistFilter', () => { describe('when all fields are provided', () => { diff --git a/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/utils/get_should_match_or_not_exist_filter.ts b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/utils/get_should_match_or_not_exist_filter.ts new file mode 100644 index 0000000000000..caf7bb4d5e820 --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/server/routes/assistant_functions/utils/get_should_match_or_not_exist_filter.ts @@ -0,0 +1,40 @@ +/* + * 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. + */ + +// field/value pairs should match, or the field should not exist +export function getShouldMatchOrNotExistFilter( + keyValuePairs: Array<{ + field: string; + value?: string; + }> +) { + return keyValuePairs + .filter(({ value }) => value) + .map(({ field, value }) => { + return { + bool: { + should: [ + { + bool: { + filter: [{ term: { [field]: value } }], + }, + }, + { + bool: { + must_not: { + bool: { + filter: [{ exists: { field } }], + }, + }, + }, + }, + ], + minimum_should_match: 1, + }, + }; + }); +} diff --git a/x-pack/plugins/observability_solution/apm/tsconfig.json b/x-pack/plugins/observability_solution/apm/tsconfig.json index b05447bc19e6c..7389566ed6a4c 100644 --- a/x-pack/plugins/observability_solution/apm/tsconfig.json +++ b/x-pack/plugins/observability_solution/apm/tsconfig.json @@ -127,7 +127,8 @@ "@kbn/server-route-repository-utils", "@kbn/core-analytics-browser", "@kbn/apm-types", - "@kbn/entities-schema" + "@kbn/entities-schema", + "@kbn/aiops-log-rate-analysis" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details_contextual_insights.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details_contextual_insights.tsx index 2f6fed0013102..cf42243b1e1da 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details_contextual_insights.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details_contextual_insights.tsx @@ -9,6 +9,7 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React, { useCallback } from 'react'; import { i18n } from '@kbn/i18n'; +import { ALERT_RULE_PARAMETERS } from '@kbn/rule-data-utils'; import dedent from 'dedent'; import { type AlertDetailsContextualInsight } from '../../../server/services'; import { useKibana } from '../../utils/kibana_react'; @@ -35,6 +36,12 @@ export function AlertDetailContextualInsights({ alert }: { alert: AlertData | nu query: { alert_started_at: new Date(alert.formatted.start).toISOString(), + // alert fields used for log rate analysis + alert_rule_parameter_time_size: alert.formatted.fields[ALERT_RULE_PARAMETERS] + ?.timeSize as string | undefined, + alert_rule_parameter_time_unit: alert.formatted.fields[ALERT_RULE_PARAMETERS] + ?.timeUnit as string | undefined, + // service fields 'service.name': fields['service.name'], 'service.environment': fields['service.environment'], diff --git a/x-pack/plugins/observability_solution/observability/server/services/index.ts b/x-pack/plugins/observability_solution/observability/server/services/index.ts index 3325a9d1dbfea..1e19f1cbbbb77 100644 --- a/x-pack/plugins/observability_solution/observability/server/services/index.ts +++ b/x-pack/plugins/observability_solution/observability/server/services/index.ts @@ -20,6 +20,10 @@ export const alertDetailsContextRt = t.intersection([ alert_started_at: t.string, }), t.partial({ + // alert fields used for log rate analysis + alert_rule_parameter_time_size: t.string, + alert_rule_parameter_time_unit: t.string, + // apm fields 'service.name': t.string, 'service.environment': t.string, From 2c50c4504cddb4b6975bb65b585a2a3c4e39a134 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Wed, 28 Aug 2024 08:20:51 -0400 Subject: [PATCH 39/74] [Fleet] Uninstalltoken saved object namespace agnostic and space aware (#190741) --- .../current_fields.json | 1 + .../current_mappings.json | 3 + .../check_registered_types.test.ts | 2 +- .../common/types/models/uninstall_token.ts | 1 + .../common/types/rest_spec/agent_policy.ts | 4 +- .../fleet/server/saved_objects/index.ts | 17 +- .../fleet/server/services/agent_policy.ts | 3 +- .../uninstall_token_service/index.test.ts | 163 +++++++++++++++++- .../security/uninstall_token_service/index.ts | 67 ++++--- 9 files changed, 232 insertions(+), 29 deletions(-) diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index aa84c709c655b..6138ac9d9eae1 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -544,6 +544,7 @@ ], "fleet-space-settings": [], "fleet-uninstall-tokens": [ + "namespaces", "policy_id", "token_plain" ], diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 97e34c9b29341..8098f637b177f 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -1812,6 +1812,9 @@ "fleet-uninstall-tokens": { "dynamic": false, "properties": { + "namespaces": { + "type": "keyword" + }, "policy_id": { "type": "keyword" }, diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index bcc7d33f38c39..4c9a9fad340c8 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -110,7 +110,7 @@ describe('checking migration metadata changes on all registered SO types', () => "fleet-proxy": "6cb688f0d2dd856400c1dbc998b28704ff70363d", "fleet-setup-lock": "0dc784792c79b5af5a6e6b5dcac06b0dbaa90bde", "fleet-space-settings": "b278e82a33978900e53a1253884b5bdbd929c9bb", - "fleet-uninstall-tokens": "ed8aa37e3cdd69e4360709e64944bb81cae0c025", + "fleet-uninstall-tokens": "371a691206845b364bcf6d3693ca7905ffdb71a4", "graph-workspace": "5cc6bb1455b078fd848c37324672163f09b5e376", "guided-onboarding-guide-state": "d338972ed887ac480c09a1a7fbf582d6a3827c91", "guided-onboarding-plugin-state": "bc109e5ef46ca594fdc179eda15f3095ca0a37a4", diff --git a/x-pack/plugins/fleet/common/types/models/uninstall_token.ts b/x-pack/plugins/fleet/common/types/models/uninstall_token.ts index 2d8a87c6fddcc..52ddd47143f7f 100644 --- a/x-pack/plugins/fleet/common/types/models/uninstall_token.ts +++ b/x-pack/plugins/fleet/common/types/models/uninstall_token.ts @@ -11,6 +11,7 @@ export interface UninstallToken { policy_name: string | null; token: string; created_at: string; + namespaces?: string[]; } export type UninstallTokenMetadata = Omit; diff --git a/x-pack/plugins/fleet/common/types/rest_spec/agent_policy.ts b/x-pack/plugins/fleet/common/types/rest_spec/agent_policy.ts index 3b35e986a5d55..4e6a85ccdc270 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/agent_policy.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/agent_policy.ts @@ -89,4 +89,6 @@ export type FetchAllAgentPoliciesOptions = Pick< 'perPage' | 'kuery' | 'sortField' | 'sortOrder' > & { fields?: string[] }; -export type FetchAllAgentPolicyIdsOptions = Pick; +export type FetchAllAgentPolicyIdsOptions = Pick & { + spaceId?: string; +}; diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index d955b10031536..3c224ee6ba881 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -986,7 +986,7 @@ export const getSavedObjectTypes = ( name: MESSAGE_SIGNING_KEYS_SAVED_OBJECT_TYPE, indexPattern: INGEST_SAVED_OBJECT_INDEX, hidden: true, - namespaceType: useSpaceAwareness ? 'single' : 'agnostic', + namespaceType: 'agnostic', management: { importableAndExportable: false, }, @@ -999,7 +999,7 @@ export const getSavedObjectTypes = ( name: UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, indexPattern: INGEST_SAVED_OBJECT_INDEX, hidden: true, - namespaceType: useSpaceAwareness ? 'single' : 'agnostic', + namespaceType: 'agnostic', management: { importableAndExportable: false, }, @@ -1008,6 +1008,19 @@ export const getSavedObjectTypes = ( properties: { policy_id: { type: 'keyword' }, token_plain: { type: 'keyword' }, + namespaces: { type: 'keyword' }, + }, + }, + modelVersions: { + '1': { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + namespaces: { type: 'keyword' }, + }, + }, + ], }, }, }, diff --git a/x-pack/plugins/fleet/server/services/agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policy.ts index 250cd867ee875..b5f885b6743bf 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.ts @@ -1615,7 +1615,7 @@ class AgentPolicyService { public async fetchAllAgentPolicyIds( soClient: SavedObjectsClientContract, - { perPage = 1000, kuery = undefined }: FetchAllAgentPolicyIdsOptions = {} + { perPage = 1000, kuery = undefined, spaceId = undefined }: FetchAllAgentPolicyIdsOptions = {} ): Promise> { const savedObjectType = await getAgentPolicySavedObjectType(); return createSoFindIterable<{}>({ @@ -1627,6 +1627,7 @@ class AgentPolicyService { sortOrder: 'asc', fields: ['id'], filter: kuery ? normalizeKuery(savedObjectType, kuery) : undefined, + namespaces: spaceId ? [spaceId] : undefined, }, resultsMapper: (data) => { return data.saved_objects.map((agentPolicySO) => { diff --git a/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.test.ts b/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.test.ts index ee133f920ebe0..d2daf3ff46ae5 100644 --- a/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.test.ts +++ b/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.test.ts @@ -9,7 +9,11 @@ import { createHash } from 'crypto'; import type { KibanaRequest } from '@kbn/core-http-server'; -import type { SavedObjectsClientContract } from '@kbn/core/server'; +import { + SECURITY_EXTENSION_ID, + SPACES_EXTENSION_ID, + type SavedObjectsClientContract, +} from '@kbn/core/server'; import type { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server'; import { encryptedSavedObjectsMock } from '@kbn/encrypted-saved-objects-plugin/server/mocks'; @@ -29,6 +33,7 @@ import { UNINSTALL_TOKENS_SAVED_OBJECT_TYPE } from '../../../constants'; import { createAppContextStartContractMock, type MockedFleetAppContext } from '../../../mocks'; import { appContextService } from '../../app_context'; import { agentPolicyService } from '../../agent_policy'; +import { isSpaceAwarenessEnabled } from '../../spaces/helpers'; import { UninstallTokenService, type UninstallTokenServiceInterface } from '.'; @@ -42,6 +47,8 @@ interface TokenSO { created_at: string; } +jest.mock('../../spaces/helpers'); + describe('UninstallTokenService', () => { const now = new Date().toISOString(); const aDayAgo = new Date(Date.now() - 24 * 3600 * 1000).toISOString(); @@ -194,7 +201,7 @@ describe('UninstallTokenService', () => { ); } - function setupMocks(canEncrypt: boolean = true) { + function setupMocks(canEncrypt: boolean = true, scoppedInSpace?: string) { mockContext = createAppContextStartContractMock(); mockContext.encryptedSavedObjectsSetup = encryptedSavedObjectsMock.createSetup({ canEncrypt, @@ -204,13 +211,22 @@ describe('UninstallTokenService', () => { mockContext.encryptedSavedObjectsStart!.getClient() as jest.Mocked; soClientMock = appContextService .getSavedObjects() - .getScopedClient({} as unknown as KibanaRequest) as jest.Mocked; + .getScopedClient({} as unknown as KibanaRequest, { + excludedExtensions: [SECURITY_EXTENSION_ID, SPACES_EXTENSION_ID], + }) as jest.Mocked; agentPolicyService.deployPolicies = jest.fn(); getAgentPoliciesByIDsMock = jest.fn().mockResolvedValue([]); agentPolicyService.getByIDs = getAgentPoliciesByIDsMock; - uninstallTokenService = new UninstallTokenService(esoClientMock); + if (scoppedInSpace) { + soClientMock.getCurrentNamespace.mockReturnValue(scoppedInSpace); + } + + uninstallTokenService = new UninstallTokenService( + esoClientMock, + scoppedInSpace ? soClientMock : undefined + ); mockFind(canEncrypt); mockCreatePointInTimeFinder(canEncrypt); mockCreatePointInTimeFinderAsInternalUser(); @@ -240,6 +256,7 @@ describe('UninstallTokenService', () => { beforeEach(() => { setupMocks(canEncrypt); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(false); }); describe('get uninstall tokens', () => { @@ -277,6 +294,78 @@ describe('UninstallTokenService', () => { ); }); + it('filter namespace with scopped service and space awareneness enabled', async () => { + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(true); + setupMocks(canEncrypt, 'test'); + + const so = getDefaultSO(canEncrypt); + mockCreatePointInTimeFinderAsInternalUser([so]); + getAgentPoliciesByIDsMock.mockResolvedValue([ + { id: so.attributes.policy_id, name: 'cheese' }, + ] as Array>); + + const token = await uninstallTokenService.getToken(so.id); + + const expectedItem: UninstallToken = { + id: so.id, + policy_id: so.attributes.policy_id, + policy_name: 'cheese', + token: getToken(so, canEncrypt), + created_at: so.created_at, + }; + + expect(token).toEqual(expectedItem); + + expect(esoClientMock.createPointInTimeFinderDecryptedAsInternalUser).toHaveBeenCalledWith( + { + type: UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, + filter: `(${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.attributes.namespaces:test) and (${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.id: "${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:${so.id}")`, + perPage: SO_SEARCH_LIMIT, + } + ); + expect(getAgentPoliciesByIDsMock).toHaveBeenCalledWith( + soClientMock, + [so.attributes.policy_id], + { ignoreMissing: true } + ); + }); + + it('do not filter namespace with scopped service and space awareneness disabled', async () => { + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(false); + setupMocks(canEncrypt, 'test'); + + const so = getDefaultSO(canEncrypt); + mockCreatePointInTimeFinderAsInternalUser([so]); + getAgentPoliciesByIDsMock.mockResolvedValue([ + { id: so.attributes.policy_id, name: 'cheese' }, + ] as Array>); + + const token = await uninstallTokenService.getToken(so.id); + + const expectedItem: UninstallToken = { + id: so.id, + policy_id: so.attributes.policy_id, + policy_name: 'cheese', + token: getToken(so, canEncrypt), + created_at: so.created_at, + }; + + expect(token).toEqual(expectedItem); + + expect(esoClientMock.createPointInTimeFinderDecryptedAsInternalUser).toHaveBeenCalledWith( + { + type: UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, + filter: `${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.id: "${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:${so.id}"`, + perPage: SO_SEARCH_LIMIT, + } + ); + expect(getAgentPoliciesByIDsMock).toHaveBeenCalledWith( + soClientMock, + [so.attributes.policy_id], + { ignoreMissing: true } + ); + }); + it('sets `policy_name` to `null` if linked policy does not exist', async () => { const so = getDefaultSO(canEncrypt); mockCreatePointInTimeFinderAsInternalUser([so]); @@ -341,6 +430,72 @@ describe('UninstallTokenService', () => { expect(actualItems).toEqual(expectedItems); }); + it('filter by namespace if service is scopped and space awareness is enabled', async () => { + setupMocks(canEncrypt, 'test'); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(true); + const so = getDefaultSO(canEncrypt); + const so2 = getDefaultSO2(canEncrypt); + getAgentPoliciesByIDsMock.mockResolvedValue([ + { id: so2.attributes.policy_id, name: 'only I have a name' }, + ] as Array>); + + const actualItems = (await uninstallTokenService.getTokenMetadata()).items; + const expectedItems: UninstallTokenMetadata[] = [ + { + id: so.id, + policy_id: so.attributes.policy_id, + policy_name: null, + created_at: so.created_at, + }, + { + id: so2.id, + policy_id: so2.attributes.policy_id, + policy_name: 'only I have a name', + created_at: so2.created_at, + }, + ]; + expect(actualItems).toEqual(expectedItems); + + expect(soClientMock.createPointInTimeFinder).toHaveBeenCalledWith( + expect.objectContaining({ + filter: `${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.attributes.namespaces:test`, + }) + ); + }); + + it('do not filter by namespace if service is scopped and space awareness is disabled', async () => { + setupMocks(canEncrypt, 'test'); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(false); + const so = getDefaultSO(canEncrypt); + const so2 = getDefaultSO2(canEncrypt); + getAgentPoliciesByIDsMock.mockResolvedValue([ + { id: so2.attributes.policy_id, name: 'only I have a name' }, + ] as Array>); + + const actualItems = (await uninstallTokenService.getTokenMetadata()).items; + const expectedItems: UninstallTokenMetadata[] = [ + { + id: so.id, + policy_id: so.attributes.policy_id, + policy_name: null, + created_at: so.created_at, + }, + { + id: so2.id, + policy_id: so2.attributes.policy_id, + policy_name: 'only I have a name', + created_at: so2.created_at, + }, + ]; + expect(actualItems).toEqual(expectedItems); + + expect(soClientMock.createPointInTimeFinder).toHaveBeenCalledWith( + expect.objectContaining({ + filter: undefined, + }) + ); + }); + it('should throw error if created_at is missing', async () => { const defaultBuckets = getDefaultBuckets(canEncrypt); defaultBuckets[0].latest.hits.hits[0]._source.created_at = ''; diff --git a/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts b/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts index 0abad8961e47e..0a44a3df0f294 100644 --- a/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts +++ b/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts @@ -22,17 +22,16 @@ import type { } from '@elastic/elasticsearch/lib/api/types'; import type { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server'; import type { KibanaRequest } from '@kbn/core-http-server'; -import { SECURITY_EXTENSION_ID } from '@kbn/core-saved-objects-server'; +import { SECURITY_EXTENSION_ID, SPACES_EXTENSION_ID } from '@kbn/core-saved-objects-server'; import { asyncForEach, asyncMap } from '@kbn/std'; import type { AggregationsTermsInclude, AggregationsTermsExclude, } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; - import { isResponseError } from '@kbn/es-errors'; - import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; import type { AgentPolicySOAttributes } from '../../../types'; import { UninstallTokenError } from '../../../../common/errors'; @@ -45,11 +44,13 @@ import type { import { UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../constants'; import { appContextService } from '../../app_context'; import { agentPolicyService, getAgentPolicySavedObjectType } from '../../agent_policy'; +import { isSpaceAwarenessEnabled } from '../../spaces/helpers'; interface UninstallTokenSOAttributes { policy_id: string; token: string; token_plain: string; + namespaces?: string[]; } interface UninstallTokenSOAggregationBucket { @@ -61,6 +62,14 @@ interface UninstallTokenSOAggregation { by_policy_id: AggregationsMultiBucketAggregateBase; } +function getNamespaceFiltering(namespace: string) { + if (namespace === DEFAULT_NAMESPACE_STRING) { + return `(${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.attributes.namespaces:default) or (not ${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.attributes.namespaces:*)`; + } + + return `${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.attributes.namespaces:${namespace}`; +} + export interface UninstallTokenInvalidError { error: UninstallTokenError; } @@ -189,11 +198,15 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { } public async getToken(id: string): Promise { - const namespacePrefix = this.soClient.getCurrentNamespace() - ? `${this.soClient.getCurrentNamespace()}:` - : ''; - const filter = `${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.id: "${namespacePrefix}${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:${id}"`; - const tokenObjects = await this.getDecryptedTokenObjects({ filter }); + const useSpaceAwareness = this.isScoped && (await isSpaceAwarenessEnabled()); + const namespaceFilter = useSpaceAwareness + ? getNamespaceFiltering(this.soClient.getCurrentNamespace() ?? DEFAULT_SPACE_ID) + : undefined; + + const filter = `${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}.id: "${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:${id}"`; + const tokenObjects = await this.getDecryptedTokenObjects({ + filter: namespaceFilter ? `(${namespaceFilter}) and (${filter})` : filter, + }); return tokenObjects.length === 1 ? this.convertTokenObjectToToken( await this.getPolicyIdNameDictionary([tokenObjects[0].attributes.policy_id]), @@ -278,14 +291,12 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { this.assertCreatedAt(_source.created_at); const policyId = _source[UNINSTALL_TOKENS_SAVED_OBJECT_TYPE].policy_id; - const namespacePrefix = this.soClient.getCurrentNamespace() - ? `${this.soClient.getCurrentNamespace()}:` - : ''; return { - id: _id!.replace(`${namespacePrefix}${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:`, ''), + id: _id!.replace(`${UNINSTALL_TOKENS_SAVED_OBJECT_TYPE}:`, ''), policy_id: policyId, policy_name: policyIdNameDictionary[policyId] ?? null, created_at: _source.created_at, + namespaces: _source.namespaces, }; } ); @@ -375,9 +386,6 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { { type: UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, perPage: SO_SEARCH_LIMIT, - namespaces: this.isScoped - ? [this.soClient.getCurrentNamespace() || DEFAULT_SPACE_ID] - : undefined, ...options, } ); @@ -415,6 +423,7 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { policy_name: policyIdNameDictionary[attributes.policy_id] ?? null, token: attributes.token || attributes.token_plain, created_at: createdAt, + namespaces: attributes.namespaces, }; }; @@ -423,9 +432,18 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { exclude?: AggregationsTermsExclude ): Promise>> { const bucketSize = 10000; + + const useSpaceAwareness = await isSpaceAwarenessEnabled(); + + const filter = + this.isScoped && useSpaceAwareness + ? getNamespaceFiltering(this.soClient.getCurrentNamespace() || DEFAULT_NAMESPACE_STRING) + : undefined; + const query: SavedObjectsCreatePointInTimeFinderOptions = { type: UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, perPage: 0, + filter, aggs: { by_policy_id: { terms: { @@ -574,7 +592,9 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { } private async getAllPolicyIds(): Promise { - const agentPolicyIdsFetcher = await agentPolicyService.fetchAllAgentPolicyIds(this.soClient); + const agentPolicyIdsFetcher = await agentPolicyService.fetchAllAgentPolicyIds(this.soClient, { + spaceId: '*', + }); const policyIds: string[] = []; for await (const agentPolicyId of agentPolicyIdsFetcher) { policyIds.push(...agentPolicyId); @@ -595,20 +615,27 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { const batchSize = config?.setup?.agentPolicySchemaUpgradeBatchSize ?? 100; await asyncForEach(chunk(policyIds, batchSize), async (policyIdsBatch) => { + const policies = await agentPolicyService.getByIDs( + appContextService.getInternalUserSOClientWithoutSpaceExtension(), + policyIds.map((id) => ({ id, spaceId: '*' })) + ); + const policiesSpacesIndexedById = policies.reduce((acc, p) => { + acc[p.id] = p.space_ids; + return acc; + }, {} as { [k: string]: string[] | undefined }); await this.soClient.bulkCreate>( policyIdsBatch.map((policyId) => ({ type: UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, - initialNamespaces: this.soClient.getCurrentNamespace() - ? [this.soClient.getCurrentNamespace() as string] - : undefined, attributes: this.isEncryptionAvailable ? { policy_id: policyId, token: tokensMap[policyId], + namespaces: policiesSpacesIndexedById[policyId], } : { policy_id: policyId, token_plain: tokensMap[policyId], + namespaces: policiesSpacesIndexedById[policyId], }, })) ); @@ -643,7 +670,7 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { } as unknown as KibanaRequest; this._soClient = appContextService.getSavedObjects().getScopedClient(fakeRequest, { - excludedExtensions: [SECURITY_EXTENSION_ID], + excludedExtensions: [SECURITY_EXTENSION_ID, SPACES_EXTENSION_ID], includedHiddenTypes: [UNINSTALL_TOKENS_SAVED_OBJECT_TYPE], }); From 096c52f0964d06444f6ae04eb3cc6ad427d840d0 Mon Sep 17 00:00:00 2001 From: Amir Ben Nun <34831306+amirbenun@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:24:21 +0300 Subject: [PATCH 40/74] Revert "Agentless API certificates path for security projects" (#191571) Reverts elastic/kibana#191248 Reverting since this configuration will be set by kibana-controller - Resolves: https://github.com/elastic/agentless-api/issues/278 --- config/serverless.security.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/config/serverless.security.yml b/config/serverless.security.yml index b5922379f3c4b..6f39182d1e2e6 100644 --- a/config/serverless.security.yml +++ b/config/serverless.security.yml @@ -106,8 +106,3 @@ xpack.ml.compatibleModuleType: 'security' # Disable the embedded Dev Console console.ui.embeddedEnabled: false - -# mTLS cert paths for agentless-api calls -xpack.fleet.agentless.api.tls.certificate: "/mnt/elastic-internal/http-certs/tls.crt" -xpack.fleet.agentless.api.tls.key: "/mnt/elastic-internal/http-certs/tls.key" -xpack.fleet.agentless.api.tls.ca: "/mnt/elastic-internal/http-certs/ca.crt" From f79b714fdacd3180bc990ccfca9062f9746b4699 Mon Sep 17 00:00:00 2001 From: Karen Grigoryan Date: Wed, 28 Aug 2024 14:25:49 +0200 Subject: [PATCH 41/74] [Security Solution][DQD][Tech Debt] Dissolve index properties markdown (#191264) addresses https://github.com/elastic/kibana/issues/190964 Fifth in the series of PRs to address general DQD tech debt This one builds on previous 4 PRs https://github.com/elastic/kibana/pull/190970 https://github.com/elastic/kibana/pull/190978 https://github.com/elastic/kibana/pull/191233 https://github.com/elastic/kibana/pull/191245 Gist of changes: - split gigantic markdown helper file and colocate the parts where they belong - dedupe translations - cleanup dead code --- .../impl/data_quality_panel/constants.ts | 10 + .../ilm_phases_empty_prompt/index.tsx | 15 +- .../ilm_phases_empty_prompt/translations.ts | 35 - .../pattern/error_empty_prompt/index.tsx | 2 +- .../get_common_table_columns/index.test.tsx | 4 +- .../index.test.tsx | 4 +- .../same_family/index.test.tsx | 4 +- .../same_family/index.tsx | 5 +- .../tabs/custom_tab/helpers.ts | 2 +- .../index_check_fields/tabs/helpers.tsx | 5 +- .../tabs/incompatible_tab/helpers.ts | 12 +- .../tabs/same_family_tab/helpers.ts | 4 +- .../translations.ts => translate.ts} | 2 +- .../index_check_fields/utils/markdown.test.ts | 336 ++++++++ .../index_check_fields/utils/markdown.ts | 163 ++++ .../index_stats_panel/index.tsx | 4 +- .../index_properties/markdown/helpers.test.ts | 727 ------------------ .../index_properties/markdown/helpers.ts | 422 ---------- .../index_properties/translations.ts | 14 - .../pattern/summary_table/translations.ts | 56 -- .../pattern/summary_table/utils/columns.tsx | 26 +- .../pattern/utils/stats.test.ts | 38 +- .../indices_details/pattern/utils/stats.ts | 17 - .../errors_popover/errors_viewer/helpers.tsx | 9 +- .../errors_viewer/index.test.tsx | 3 +- .../check_status/errors_popover/index.tsx | 47 +- .../errors_popover/translations.ts | 65 -- .../summary_actions/index.tsx | 19 +- .../errors_viewer => }/translations.ts | 17 +- .../summary_actions/utils/markdown.test.ts | 212 +++++ .../summary_actions/utils/markdown.ts | 145 ++++ .../impl/data_quality_panel/translations.ts | 98 ++- .../data_quality_panel/utils/markdown.test.ts | 208 +++++ .../impl/data_quality_panel/utils/markdown.ts | 128 +++ .../data_quality_panel/utils/stats.test.ts | 32 + .../impl/data_quality_panel/utils/stats.ts | 17 + .../ecs_data_quality_dashboard/index.ts | 6 +- .../translations/translations/fr-FR.json | 22 - .../translations/translations/ja-JP.json | 22 - .../translations/translations/zh-CN.json | 22 - 40 files changed, 1454 insertions(+), 1525 deletions(-) rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/{tabs/compare_fields_table/same_family/translations.ts => translate.ts} (88%) create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/utils/markdown.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/index_check_fields/utils/markdown.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/markdown/helpers.test.ts delete mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/index_properties/markdown/helpers.ts rename x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/{check_status/errors_popover/errors_viewer => }/translations.ts (51%) create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/utils/markdown.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_summary/summary_actions/utils/markdown.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/markdown.test.ts create mode 100644 x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/utils/markdown.ts diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/constants.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/constants.ts index 6e4649e9e8e74..25ea07b9d5f27 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/constants.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/constants.ts @@ -57,3 +57,13 @@ export const EMPTY_METADATA: PartitionedFieldMetadata = { incompatible: [], sameFamily: [], }; + +export const EMPTY_PLACEHOLDER = '--'; + +export const ECS_FIELD_REFERENCE_URL = + 'https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html'; + +/** The documentation link shown in the `Data Quality` dashboard */ +export const ECS_REFERENCE_URL = 'https://www.elastic.co/guide/en/ecs/current/ecs-reference.html'; +export const MAPPING_URL = + 'https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html'; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/ilm_phases_empty_prompt/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/ilm_phases_empty_prompt/index.tsx index c8a6e7385a122..fe5c4cf59e8a8 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/ilm_phases_empty_prompt/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/ilm_phases_empty_prompt/index.tsx @@ -15,6 +15,11 @@ import { HOT_DESCRIPTION, UNMANAGED_DESCRIPTION, WARM_DESCRIPTION, + HOT, + WARM, + FROZEN, + COLD, + UNMANAGED, } from '../../translations'; import * as i18n from './translations'; @@ -41,17 +46,17 @@ const IlmPhasesEmptyPromptComponent: React.FC = () => {