From 5bd32e61e87116bc82c247ada8a416d4aec98d43 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Wed, 24 Jan 2024 10:27:55 -0500 Subject: [PATCH 001/113] [Fleet] Refresh policies when deleting agent policy (#175330) --- .../agent_policy_delete_provider.tsx | 5 ++-- .../agent_policy/list_page/index.test.tsx | 4 +-- .../sections/agent_policy/list_page/index.tsx | 6 ++--- .../public/hooks/use_request/agent_policy.ts | 25 +++++++++++++------ 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_delete_provider.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_delete_provider.tsx index c80a257c93bcd..84f40ee4b692f 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_delete_provider.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_delete_provider.tsx @@ -14,11 +14,11 @@ import { useHistory } from 'react-router-dom'; import { AGENTS_PREFIX } from '../../../constants'; import { - sendDeleteAgentPolicy, useStartServices, useConfig, sendRequest, useLink, + useDeleteAgentPolicyMutation, } from '../../../hooks'; import { API_VERSIONS } from '../../../../../../common/constants'; @@ -47,6 +47,7 @@ export const AgentPolicyDeleteProvider: React.FunctionComponent = ({ const onSuccessCallback = useRef(null); const { getPath } = useLink(); const history = useHistory(); + const deleteAgentPolicyMutation = useDeleteAgentPolicyMutation(); const deleteAgentPolicyPrompt: DeleteAgentPolicy = ( agentPolicyToDelete, @@ -72,7 +73,7 @@ export const AgentPolicyDeleteProvider: React.FunctionComponent = ({ setIsLoading(true); try { - const { data } = await sendDeleteAgentPolicy({ + const { data } = await deleteAgentPolicyMutation.mutateAsync({ agentPolicyId: agentPolicy!, }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.test.tsx index e2e9c11192b0e..3f50ad4ac514e 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.test.tsx @@ -16,7 +16,7 @@ import { AgentPolicyListPage } from '.'; jest.mock('../../../hooks', () => ({ ...jest.requireActual('../../../hooks'), - useGetAgentPolicies: jest.fn().mockReturnValue({ + useGetAgentPoliciesQuery: jest.fn().mockReturnValue({ data: { items: [ { id: 'not_managed_policy', is_managed: false, updated_at: '2023-04-06T07:19:29.892Z' }, @@ -25,7 +25,7 @@ jest.mock('../../../hooks', () => ({ total: 2, } as GetAgentPoliciesResponse, isLoading: false, - resendRequest: jest.fn(), + refetch: jest.fn(), }), })); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx index e7c691fce5ea9..a80c21393df22 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx @@ -26,13 +26,13 @@ import type { AgentPolicy } from '../../../types'; import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../../constants'; import { useAuthz, - useGetAgentPolicies, usePagination, useSorting, useLink, useConfig, useUrlParams, useBreadcrumbs, + useGetAgentPoliciesQuery, } from '../../../hooks'; import { SearchBar } from '../../../components'; import { AgentPolicySummaryLine } from '../../../../../components'; @@ -83,8 +83,8 @@ export const AgentPolicyListPage: React.FunctionComponent<{}> = () => { const { isLoading, data: agentPolicyData, - resendRequest, - } = useGetAgentPolicies({ + refetch: resendRequest, + } = useGetAgentPoliciesQuery({ page: pagination.currentPage, perPage: pagination.pageSize, sortField: sorting?.field, diff --git a/x-pack/plugins/fleet/public/hooks/use_request/agent_policy.ts b/x-pack/plugins/fleet/public/hooks/use_request/agent_policy.ts index 6ce49febdeca2..9dbc939907f38 100644 --- a/x-pack/plugins/fleet/public/hooks/use_request/agent_policy.ts +++ b/x-pack/plugins/fleet/public/hooks/use_request/agent_policy.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { useQuery } from '@tanstack/react-query'; +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { agentPolicyRouteService } from '../../services'; import { API_VERSIONS } from '../../../common/constants'; @@ -141,14 +141,23 @@ export const sendCopyAgentPolicy = ( }); }; -export const sendDeleteAgentPolicy = (body: DeleteAgentPolicyRequest['body']) => { - return sendRequest({ - path: agentPolicyRouteService.getDeletePath(), - method: 'post', - body: JSON.stringify(body), - version: API_VERSIONS.public.v1, +export function useDeleteAgentPolicyMutation() { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: function sendDeleteAgentPolicy(body: DeleteAgentPolicyRequest['body']) { + return sendRequest({ + path: agentPolicyRouteService.getDeletePath(), + method: 'post', + body: JSON.stringify(body), + version: API_VERSIONS.public.v1, + }); + }, + onSuccess: () => { + return queryClient.invalidateQueries(['agentPolicies']); + }, }); -}; +} export const sendResetOnePreconfiguredAgentPolicy = (agentPolicyId: string) => { return sendRequest({ From 86ca7a6f31808f1c13f6a5f8eac7e03a1e7ba9b6 Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Wed, 24 Jan 2024 17:21:11 +0100 Subject: [PATCH 002/113] [Custom threshold] Add missing prefill fields to the custom threshold rule (#174690) Fixes #174824 ## Summary This PR adds prefill functionality for `time size`, `time unit`, and `alertOnGroupDisappear` in the custom threshold. It also fixes the filter query by changing the structure to match how we save information in the rule saved object, like this: ``` searchConfiguration: { index: 'metrics-*', query: { query: 'host.name: host-1', language: 'kuery', }, }, ``` This will be more compatible with future changes in case we want to support query filters other than `kuery`. --------- Co-authored-by: Faisal Kanout --- .../custom_threshold_rule_expression.test.tsx | 35 ++++++++++++++----- .../custom_threshold_rule_expression.tsx | 35 ++++++++----------- 2 files changed, 41 insertions(+), 29 deletions(-) diff --git a/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.test.tsx b/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.test.tsx index ce1c9527904cc..a97de99ec8e78 100644 --- a/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.test.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.test.tsx @@ -6,6 +6,8 @@ */ import React from 'react'; +import { RuleTypeParams } from '@kbn/alerting-plugin/common'; +import { Query } from '@kbn/data-plugin/common'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { queryClient } from '@kbn/osquery-plugin/public/query_client'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; @@ -15,7 +17,7 @@ import { Aggregators, Comparator } from '../../../common/custom_threshold_rule/t import { useKibana } from '../../utils/kibana_react'; import { kibanaStartMock } from '../../utils/kibana_react.mock'; import Expressions from './custom_threshold_rule_expression'; -import { CustomThresholdPrefillOptions } from './types'; +import { AlertParams, CustomThresholdPrefillOptions } from './types'; jest.mock('../../utils/kibana_react'); jest.mock('./components/preview_chart/preview_chart', () => ({ @@ -42,7 +44,7 @@ describe('Expression', () => { currentOptions?: CustomThresholdPrefillOptions, customRuleParams?: Record ) { - const ruleParams = { + const ruleParams: RuleTypeParams & AlertParams = { criteria: [], groupBy: undefined, sourceId: 'default', @@ -161,23 +163,36 @@ describe('Expression', () => { it('should prefill the rule using the context metadata', async () => { const index = 'changedMockedIndex'; const currentOptions: CustomThresholdPrefillOptions = { + alertOnGroupDisappear: false, groupBy: ['host.hostname'], - filterQuery: 'foo', - searchConfiguration: { index }, + searchConfiguration: { + index, + query: { + query: 'foo', + language: 'kuery', + }, + }, criteria: [ { metrics: [ { name: 'A', aggType: Aggregators.AVERAGE, field: 'system.load.1' }, { name: 'B', aggType: Aggregators.CARDINALITY, field: 'system.cpu.user.pct' }, ], + comparator: Comparator.LT_OR_EQ, + equation: 'A * B', + label: 'prefill label', + threshold: [500], + timeSize: 7, + timeUnit: 'h', }, ], }; const { ruleParams } = await setup(currentOptions, { searchConfiguration: undefined }); + expect(ruleParams.alertOnGroupDisappear).toEqual(false); expect(ruleParams.groupBy).toEqual(['host.hostname']); - expect(ruleParams.searchConfiguration.query.query).toBe('foo'); + expect((ruleParams.searchConfiguration.query as Query).query).toBe('foo'); expect(ruleParams.searchConfiguration.index).toBe(index); expect(ruleParams.criteria).toEqual([ { @@ -185,10 +200,12 @@ describe('Expression', () => { { name: 'A', aggType: Aggregators.AVERAGE, field: 'system.load.1' }, { name: 'B', aggType: Aggregators.CARDINALITY, field: 'system.cpu.user.pct' }, ], - comparator: Comparator.GT, - threshold: [100], - timeSize: 1, - timeUnit: 'm', + comparator: Comparator.LT_OR_EQ, + equation: 'A * B', + label: 'prefill label', + threshold: [500], + timeSize: 7, + timeUnit: 'h', }, ]); }); diff --git a/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx b/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx index 0df72511ce559..796e2e6bb13ca 100644 --- a/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx +++ b/x-pack/plugins/observability/public/components/custom_threshold/custom_threshold_rule_expression.tsx @@ -98,11 +98,11 @@ export default function Expressions(props: Props) { if (!ruleParams.searchConfiguration || !ruleParams.searchConfiguration.index) { if (metadata?.currentOptions?.searchConfiguration) { initialSearchConfiguration = { - ...metadata.currentOptions.searchConfiguration, query: { query: ruleParams.searchConfiguration?.query ?? '', language: 'kuery', }, + ...metadata.currentOptions.searchConfiguration, }; } else { const newSearchSource = data.search.searchSource.createEmpty(); @@ -164,10 +164,6 @@ export default function Expressions(props: Props) { preFillCriteria(); } - if (!ruleParams.filterQuery) { - preFillFilterQuery(); - } - if (!ruleParams.groupBy) { preFillGroupBy(); } @@ -176,7 +172,7 @@ export default function Expressions(props: Props) { setRuleParams('alertOnNoData', true); } if (typeof ruleParams.alertOnGroupDisappear === 'undefined') { - setRuleParams('alertOnGroupDisappear', true); + preFillAlertOnGroupDisappear(); } }, [metadata]); // eslint-disable-line react-hooks/exhaustive-deps @@ -277,23 +273,13 @@ export default function Expressions(props: Props) { [ruleParams.criteria, setRuleParams] ); - const preFillFilterQuery = useCallback(() => { - const md = metadata; - - if (md && md.currentOptions?.filterQuery) { - setRuleParams('searchConfiguration', { - ...ruleParams.searchConfiguration, - query: { - query: md.currentOptions.filterQuery, - language: 'kuery', - }, - }); - } - }, [metadata, setRuleParams, ruleParams.searchConfiguration]); - const preFillCriteria = useCallback(() => { const md = metadata; if (md?.currentOptions?.criteria?.length) { + const { timeSize: prefillTimeSize, timeUnit: prefillTimeUnit } = + md.currentOptions.criteria[0]; + if (prefillTimeSize) setTimeSize(prefillTimeSize); + if (prefillTimeUnit) setTimeUnit(prefillTimeUnit); setRuleParams( 'criteria', md.currentOptions.criteria.map((criterion) => ({ @@ -313,6 +299,15 @@ export default function Expressions(props: Props) { } }, [metadata, setRuleParams]); + const preFillAlertOnGroupDisappear = useCallback(() => { + const md = metadata; + if (md && typeof md.currentOptions?.alertOnGroupDisappear !== 'undefined') { + setRuleParams('alertOnGroupDisappear', md.currentOptions.alertOnGroupDisappear); + } else { + setRuleParams('alertOnGroupDisappear', true); + } + }, [metadata, setRuleParams]); + const hasGroupBy = useMemo( () => ruleParams.groupBy && ruleParams.groupBy.length > 0, [ruleParams.groupBy] From 6c5109e58b7d261b6476ee77103e4575976a8782 Mon Sep 17 00:00:00 2001 From: Kurt Date: Wed, 24 Jan 2024 11:54:10 -0500 Subject: [PATCH 003/113] Upgrade @adobe/css-tools to 4.3.2 (#175364) ## Summary Upgrade `@adobe/css-tools` from `v4.3.1` to `v4.3.2` --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 05819606e4ec5..071e4fc6051fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,9 +23,9 @@ tunnel "^0.0.6" "@adobe/css-tools@^4.0.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28" - integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg== + version "4.3.2" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.2.tgz#a6abc715fb6884851fca9dad37fc34739a04fd11" + integrity sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw== "@ampproject/remapping@^2.2.0": version "2.2.0" From d722d5a924c490df54748f003d376913fd601172 Mon Sep 17 00:00:00 2001 From: dkirchan <55240027+dkirchan@users.noreply.github.com> Date: Wed, 24 Jan 2024 19:01:28 +0200 Subject: [PATCH 004/113] [Security] [SecEngProd] Added a security solution pipeline entrypoint (#175435) ## Summary This PR is only introducing the entrypoint for a new pipeline for Security Solution where all the tests which run in the `pull-request` pipeline will be running against a real deployment and not against a dockerized one. --- .../scripts/pipelines/security_solution_ess/pipeline.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 .buildkite/scripts/pipelines/security_solution_ess/pipeline.sh diff --git a/.buildkite/scripts/pipelines/security_solution_ess/pipeline.sh b/.buildkite/scripts/pipelines/security_solution_ess/pipeline.sh new file mode 100755 index 0000000000000..c21d9cea0b87f --- /dev/null +++ b/.buildkite/scripts/pipelines/security_solution_ess/pipeline.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -euo pipefail + +echo "Inside the security solution pipeline" \ No newline at end of file From 891cbfac07cbda0f3df27c88386544cc12f6c080 Mon Sep 17 00:00:00 2001 From: Jiawei Wu <74562234+JiaweiWu@users.noreply.github.com> Date: Wed, 24 Jan 2024 09:07:44 -0800 Subject: [PATCH 005/113] [RAM][Maintenance Window] Fix maintenance window FE types and transforms (#173888) ## Summary Resolves: https://github.com/elastic/kibana/issues/172529 Fix up some odd types for the maintenance window frontend. Consolidates some response transforms. ### 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 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../use_archive_maintenance_window.test.tsx | 3 +- .../use_create_maintenance_window.test.tsx | 3 +- .../hooks/use_create_maintenance_window.ts | 7 +-- ...sh_and_archive_maintenance_window.test.tsx | 3 +- .../use_finish_maintenance_window.test.tsx | 3 +- .../use_update_maintenance_window.test.tsx | 9 ++- .../hooks/use_update_maintenance_window.ts | 10 +-- .../create_maintenance_windows_form.tsx | 5 +- .../maintenance_windows_list.test.tsx | 9 +-- .../components/maintenance_windows_list.tsx | 18 +++--- .../upcoming_events_popover.test.tsx | 1 - .../components/upcoming_events_popover.tsx | 5 +- ...rt_from_maintenance_window_to_form.test.ts | 23 +++---- ...convert_from_maintenance_window_to_form.ts | 5 +- .../public/pages/maintenance_windows/types.ts | 14 ----- .../maintenance_windows_api/archive.test.ts | 3 +- .../maintenance_windows_api/archive.ts | 22 ++----- .../maintenance_windows_api/create.test.ts | 7 +-- .../maintenance_windows_api/create.ts | 63 ++++++++++--------- .../maintenance_windows_api/find.test.ts | 5 +- .../services/maintenance_windows_api/find.ts | 47 +++----------- .../maintenance_windows_api/finish.test.ts | 3 +- .../maintenance_windows_api/finish.ts | 21 ++----- .../maintenance_windows_api/get.test.ts | 3 +- .../services/maintenance_windows_api/get.ts | 23 ++----- .../transform_maintenance_window_response.ts | 32 ++++++++++ .../maintenance_windows_api/update.test.ts | 7 +-- .../maintenance_windows_api/update.ts | 63 ++++++++++--------- 28 files changed, 184 insertions(+), 233 deletions(-) create mode 100644 x-pack/plugins/alerting/public/services/maintenance_windows_api/transform_maintenance_window_response.ts diff --git a/x-pack/plugins/alerting/public/hooks/use_archive_maintenance_window.test.tsx b/x-pack/plugins/alerting/public/hooks/use_archive_maintenance_window.test.tsx index d72f0bda9dc93..e6f58df8d3a7f 100644 --- a/x-pack/plugins/alerting/public/hooks/use_archive_maintenance_window.test.tsx +++ b/x-pack/plugins/alerting/public/hooks/use_archive_maintenance_window.test.tsx @@ -7,7 +7,6 @@ import { act, renderHook } from '@testing-library/react-hooks/dom'; import { waitFor } from '@testing-library/react'; -import { MaintenanceWindow } from '../pages/maintenance_windows/types'; import { AppMockRenderer, createAppMockRenderer } from '../lib/test_utils'; import { useArchiveMaintenanceWindow } from './use_archive_maintenance_window'; @@ -37,7 +36,7 @@ const { archiveMaintenanceWindow } = jest.requireMock( '../services/maintenance_windows_api/archive' ); -const maintenanceWindow: MaintenanceWindow = { +const maintenanceWindow = { title: 'archive', duration: 1, rRule: { diff --git a/x-pack/plugins/alerting/public/hooks/use_create_maintenance_window.test.tsx b/x-pack/plugins/alerting/public/hooks/use_create_maintenance_window.test.tsx index f827287532445..c7c1ce427f02b 100644 --- a/x-pack/plugins/alerting/public/hooks/use_create_maintenance_window.test.tsx +++ b/x-pack/plugins/alerting/public/hooks/use_create_maintenance_window.test.tsx @@ -7,7 +7,6 @@ import { act, renderHook } from '@testing-library/react-hooks/dom'; import { waitFor } from '@testing-library/react'; -import { MaintenanceWindow } from '../pages/maintenance_windows/types'; import { AppMockRenderer, createAppMockRenderer } from '../lib/test_utils'; import { useCreateMaintenanceWindow } from './use_create_maintenance_window'; @@ -35,7 +34,7 @@ jest.mock('../services/maintenance_windows_api/create', () => ({ const { createMaintenanceWindow } = jest.requireMock('../services/maintenance_windows_api/create'); -const maintenanceWindow: MaintenanceWindow = { +const maintenanceWindow = { title: 'test', duration: 1, rRule: { diff --git a/x-pack/plugins/alerting/public/hooks/use_create_maintenance_window.ts b/x-pack/plugins/alerting/public/hooks/use_create_maintenance_window.ts index ef76e8f0f5ee4..985140fddc22b 100644 --- a/x-pack/plugins/alerting/public/hooks/use_create_maintenance_window.ts +++ b/x-pack/plugins/alerting/public/hooks/use_create_maintenance_window.ts @@ -11,8 +11,7 @@ import type { IHttpFetchError } from '@kbn/core-http-browser'; import type { KibanaServerError } from '@kbn/kibana-utils-plugin/public'; import { useKibana } from '../utils/kibana_react'; -import { MaintenanceWindow } from '../pages/maintenance_windows/types'; -import { createMaintenanceWindow } from '../services/maintenance_windows_api/create'; +import { createMaintenanceWindow, CreateParams } from '../services/maintenance_windows_api/create'; interface UseCreateMaintenanceWindowProps { onError?: (error: IHttpFetchError) => void; @@ -26,8 +25,8 @@ export function useCreateMaintenanceWindow(props?: UseCreateMaintenanceWindowPro notifications: { toasts }, } = useKibana().services; - const mutationFn = (maintenanceWindow: MaintenanceWindow) => { - return createMaintenanceWindow({ http, maintenanceWindow }); + const mutationFn = (createParams: CreateParams) => { + return createMaintenanceWindow({ http, createParams }); }; return useMutation(mutationFn, { diff --git a/x-pack/plugins/alerting/public/hooks/use_finish_and_archive_maintenance_window.test.tsx b/x-pack/plugins/alerting/public/hooks/use_finish_and_archive_maintenance_window.test.tsx index 453a3b88cef8f..8b55812bd0301 100644 --- a/x-pack/plugins/alerting/public/hooks/use_finish_and_archive_maintenance_window.test.tsx +++ b/x-pack/plugins/alerting/public/hooks/use_finish_and_archive_maintenance_window.test.tsx @@ -7,7 +7,6 @@ import { act, renderHook } from '@testing-library/react-hooks/dom'; import { waitFor } from '@testing-library/react'; -import { MaintenanceWindow } from '../pages/maintenance_windows/types'; import { AppMockRenderer, createAppMockRenderer } from '../lib/test_utils'; import { useFinishAndArchiveMaintenanceWindow } from './use_finish_and_archive_maintenance_window'; @@ -41,7 +40,7 @@ const { archiveMaintenanceWindow } = jest.requireMock( '../services/maintenance_windows_api/archive' ); -const maintenanceWindow: MaintenanceWindow = { +const maintenanceWindow = { title: 'test', duration: 1, rRule: { diff --git a/x-pack/plugins/alerting/public/hooks/use_finish_maintenance_window.test.tsx b/x-pack/plugins/alerting/public/hooks/use_finish_maintenance_window.test.tsx index 06608125fd836..6041796fcc00c 100644 --- a/x-pack/plugins/alerting/public/hooks/use_finish_maintenance_window.test.tsx +++ b/x-pack/plugins/alerting/public/hooks/use_finish_maintenance_window.test.tsx @@ -7,7 +7,6 @@ import { act, renderHook } from '@testing-library/react-hooks/dom'; import { waitFor } from '@testing-library/react'; -import { MaintenanceWindow } from '../pages/maintenance_windows/types'; import { AppMockRenderer, createAppMockRenderer } from '../lib/test_utils'; import { useFinishMaintenanceWindow } from './use_finish_maintenance_window'; @@ -35,7 +34,7 @@ jest.mock('../services/maintenance_windows_api/finish', () => ({ const { finishMaintenanceWindow } = jest.requireMock('../services/maintenance_windows_api/finish'); -const maintenanceWindow: MaintenanceWindow = { +const maintenanceWindow = { title: 'cancel', duration: 1, rRule: { diff --git a/x-pack/plugins/alerting/public/hooks/use_update_maintenance_window.test.tsx b/x-pack/plugins/alerting/public/hooks/use_update_maintenance_window.test.tsx index b29161f0e006d..6ba19c27c362e 100644 --- a/x-pack/plugins/alerting/public/hooks/use_update_maintenance_window.test.tsx +++ b/x-pack/plugins/alerting/public/hooks/use_update_maintenance_window.test.tsx @@ -7,7 +7,6 @@ import { act, renderHook } from '@testing-library/react-hooks/dom'; import { waitFor } from '@testing-library/react'; -import { MaintenanceWindow } from '../pages/maintenance_windows/types'; import { AppMockRenderer, createAppMockRenderer } from '../lib/test_utils'; import { useUpdateMaintenanceWindow } from './use_update_maintenance_window'; @@ -35,7 +34,7 @@ jest.mock('../services/maintenance_windows_api/update', () => ({ const { updateMaintenanceWindow } = jest.requireMock('../services/maintenance_windows_api/update'); -const maintenanceWindow: MaintenanceWindow = { +const updateParams = { title: 'updated', duration: 1, rRule: { @@ -51,7 +50,7 @@ describe('useUpdateMaintenanceWindow', () => { jest.clearAllMocks(); appMockRenderer = createAppMockRenderer(); - updateMaintenanceWindow.mockResolvedValue(maintenanceWindow); + updateMaintenanceWindow.mockResolvedValue(updateParams); }); it('should call onSuccess if api succeeds', async () => { @@ -60,7 +59,7 @@ describe('useUpdateMaintenanceWindow', () => { }); await act(async () => { - await result.current.mutate({ maintenanceWindowId: '123', maintenanceWindow }); + await result.current.mutate({ maintenanceWindowId: '123', updateParams }); }); await waitFor(() => expect(mockAddSuccess).toBeCalledWith("Updated maintenance window 'updated'") @@ -75,7 +74,7 @@ describe('useUpdateMaintenanceWindow', () => { }); await act(async () => { - await result.current.mutate({ maintenanceWindowId: '123', maintenanceWindow }); + await result.current.mutate({ maintenanceWindowId: '123', updateParams }); }); await waitFor(() => diff --git a/x-pack/plugins/alerting/public/hooks/use_update_maintenance_window.ts b/x-pack/plugins/alerting/public/hooks/use_update_maintenance_window.ts index 14e67fa644385..403fdb3ce989d 100644 --- a/x-pack/plugins/alerting/public/hooks/use_update_maintenance_window.ts +++ b/x-pack/plugins/alerting/public/hooks/use_update_maintenance_window.ts @@ -9,10 +9,10 @@ import { i18n } from '@kbn/i18n'; import { useMutation } from '@tanstack/react-query'; import type { IHttpFetchError } from '@kbn/core-http-browser'; import type { KibanaServerError } from '@kbn/kibana-utils-plugin/public'; +import type { MaintenanceWindow } from '../../common'; import { useKibana } from '../utils/kibana_react'; -import { MaintenanceWindow } from '../pages/maintenance_windows/types'; -import { updateMaintenanceWindow } from '../services/maintenance_windows_api/update'; +import { updateMaintenanceWindow, UpdateParams } from '../services/maintenance_windows_api/update'; interface UseUpdateMaintenanceWindowProps { onError?: (error: IHttpFetchError) => void; @@ -28,12 +28,12 @@ export function useUpdateMaintenanceWindow(props?: UseUpdateMaintenanceWindowPro const mutationFn = ({ maintenanceWindowId, - maintenanceWindow, + updateParams, }: { maintenanceWindowId: string; - maintenanceWindow: MaintenanceWindow; + updateParams: UpdateParams; }) => { - return updateMaintenanceWindow({ http, maintenanceWindowId, maintenanceWindow }); + return updateMaintenanceWindow({ http, maintenanceWindowId, updateParams }); }; return useMutation(mutationFn, { diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.tsx b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.tsx index fe899c371c216..cd69f972c675a 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.tsx +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/create_maintenance_windows_form.tsx @@ -162,7 +162,10 @@ export const CreateMaintenanceWindowForm = React.memo { const date = moment('2023-04-05').toISOString(); const endDate = moment('2023-04-05').add(1, 'month').toISOString(); - const items: MaintenanceWindowFindResponse[] = [ + const items: MaintenanceWindow[] = [ { id: '1', - total: 100, title: 'Host maintenance', enabled: true, duration: 1, @@ -36,7 +34,6 @@ describe('MaintenanceWindowsList', () => { }, { id: '2', - total: 0, title: 'Server outage west coast', enabled: true, duration: 1, @@ -53,7 +50,6 @@ describe('MaintenanceWindowsList', () => { }, { id: '4', - total: 1000, title: 'Monthly maintenance window', enabled: true, duration: 1, @@ -70,7 +66,6 @@ describe('MaintenanceWindowsList', () => { }, { id: '5', - total: 200, title: 'Monthly maintenance window', enabled: true, duration: 1, diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/maintenance_windows_list.tsx b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/maintenance_windows_list.tsx index 5c361eee01177..0abd1c4e1863c 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/maintenance_windows_list.tsx +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/maintenance_windows_list.tsx @@ -18,12 +18,16 @@ import { EuiButton, } from '@elastic/eui'; import { css } from '@emotion/react'; -import { MaintenanceWindowFindResponse, SortDirection } from '../types'; +import { SortDirection } from '../types'; import * as i18n from '../translations'; import { useEditMaintenanceWindowsNavigation } from '../../../hooks/use_navigation'; import { STATUS_DISPLAY, STATUS_SORT } from '../constants'; import { UpcomingEventsPopover } from './upcoming_events_popover'; -import { MaintenanceWindowStatus, MAINTENANCE_WINDOW_DATE_FORMAT } from '../../../../common'; +import { + MaintenanceWindowStatus, + MAINTENANCE_WINDOW_DATE_FORMAT, + MaintenanceWindow, +} from '../../../../common'; import { StatusFilter } from './status_filter'; import { TableActionsPopover } from './table_actions_popover'; import { useFinishMaintenanceWindow } from '../../../hooks/use_finish_maintenance_window'; @@ -32,12 +36,12 @@ import { useFinishAndArchiveMaintenanceWindow } from '../../../hooks/use_finish_ interface MaintenanceWindowsListProps { loading: boolean; - items: MaintenanceWindowFindResponse[]; + items: MaintenanceWindow[]; readOnly: boolean; refreshData: () => void; } -const COLUMNS: Array> = [ +const COLUMNS: Array> = [ { field: 'title', name: i18n.NAME, @@ -58,7 +62,7 @@ const COLUMNS: Array> = [ field: 'eventStartTime', name: i18n.TABLE_START_TIME, dataType: 'date', - render: (startDate: string, item: MaintenanceWindowFindResponse) => { + render: (startDate: string, item: MaintenanceWindow) => { return ( @@ -89,7 +93,7 @@ const sorting = { }, }; -const rowProps = (item: MaintenanceWindowFindResponse) => ({ +const rowProps = (item: MaintenanceWindow) => ({ className: item.status, 'data-test-subj': 'list-item', }); @@ -148,7 +152,7 @@ export const MaintenanceWindowsList = React.memo( `; }, [euiTheme.colors.highlight]); - const actions: Array> = useMemo( + const actions: Array> = useMemo( () => [ { name: '', diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/upcoming_events_popover.test.tsx b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/upcoming_events_popover.test.tsx index 574bb7d1f7549..2f4d2b9a1e905 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/upcoming_events_popover.test.tsx +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/upcoming_events_popover.test.tsx @@ -49,7 +49,6 @@ describe('rule_actions_popover', () => { updatedAt: '2023-04-14T14:58:58.997Z', eventStartTime: '2023-04-21T14:58:40.243Z', eventEndTime: '2023-04-21T14:58:40.243Z', - total: 1000, }} /> ); diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/upcoming_events_popover.tsx b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/upcoming_events_popover.tsx index 70895cb67586f..b5c3d898b8ee9 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/components/upcoming_events_popover.tsx +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/components/upcoming_events_popover.tsx @@ -21,14 +21,13 @@ import { formatDate, } from '@elastic/eui'; import * as i18n from '../translations'; -import { MAINTENANCE_WINDOW_DATE_FORMAT } from '../../../../common'; +import { MAINTENANCE_WINDOW_DATE_FORMAT, MaintenanceWindow } from '../../../../common'; import { recurringSummary } from '../helpers/recurring_summary'; import { getPresets } from '../helpers/get_presets'; -import { MaintenanceWindowFindResponse } from '../types'; import { convertFromMaintenanceWindowToForm } from '../helpers/convert_from_maintenance_window_to_form'; interface UpcomingEventsPopoverProps { - maintenanceWindowFindResponse: MaintenanceWindowFindResponse; + maintenanceWindowFindResponse: MaintenanceWindow; } export const UpcomingEventsPopover: React.FC = React.memo( diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/helpers/convert_from_maintenance_window_to_form.test.ts b/x-pack/plugins/alerting/public/pages/maintenance_windows/helpers/convert_from_maintenance_window_to_form.test.ts index 7b40b028ab210..b11fadcb97340 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/helpers/convert_from_maintenance_window_to_form.test.ts +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/helpers/convert_from_maintenance_window_to_form.test.ts @@ -6,6 +6,7 @@ */ import moment from 'moment'; +import type { MaintenanceWindow } from '../../../../common'; import { Frequency } from '@kbn/rrule'; import { convertFromMaintenanceWindowToForm } from './convert_from_maintenance_window_to_form'; @@ -27,7 +28,7 @@ describe('convertFromMaintenanceWindowToForm', () => { freq: Frequency.YEARLY, count: 1, }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -50,7 +51,7 @@ describe('convertFromMaintenanceWindowToForm', () => { interval: 1, byweekday: ['WE'], }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -82,7 +83,7 @@ describe('convertFromMaintenanceWindowToForm', () => { byweekday: ['WE'], until, }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -113,7 +114,7 @@ describe('convertFromMaintenanceWindowToForm', () => { byweekday: ['WE'], count: 3, }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -143,7 +144,7 @@ describe('convertFromMaintenanceWindowToForm', () => { interval: 1, byweekday: ['WE'], }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -172,7 +173,7 @@ describe('convertFromMaintenanceWindowToForm', () => { interval: 1, byweekday: ['+4WE'], }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -202,7 +203,7 @@ describe('convertFromMaintenanceWindowToForm', () => { bymonth: [3], bymonthday: [22], }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -229,7 +230,7 @@ describe('convertFromMaintenanceWindowToForm', () => { freq: Frequency.DAILY, interval: 1, }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -258,7 +259,7 @@ describe('convertFromMaintenanceWindowToForm', () => { interval: 1, byweekday: ['WE', 'TH'], }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -288,7 +289,7 @@ describe('convertFromMaintenanceWindowToForm', () => { interval: 1, bymonthday: [22], }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, @@ -319,7 +320,7 @@ describe('convertFromMaintenanceWindowToForm', () => { bymonth: [3], bymonthday: [22], }, - }); + } as MaintenanceWindow); expect(maintenanceWindow).toEqual({ title, diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/helpers/convert_from_maintenance_window_to_form.ts b/x-pack/plugins/alerting/public/pages/maintenance_windows/helpers/convert_from_maintenance_window_to_form.ts index 9296038a405ab..6adc7310b25b7 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/helpers/convert_from_maintenance_window_to_form.ts +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/helpers/convert_from_maintenance_window_to_form.ts @@ -8,11 +8,10 @@ import moment from 'moment'; import { Frequency } from '@kbn/rrule'; import { has } from 'lodash'; -import { MaintenanceWindow } from '../types'; +import type { FormProps, RecurringScheduleFormProps } from '../components/schema'; +import type { RRuleParams, MaintenanceWindow } from '../../../../common'; import { EndsOptions, MaintenanceWindowFrequency } from '../constants'; -import { FormProps, RecurringScheduleFormProps } from '../components/schema'; import { getInitialByWeekday } from './get_initial_by_weekday'; -import { RRuleParams } from '../../../../common'; export const convertFromMaintenanceWindowToForm = ( maintenanceWindow: MaintenanceWindow diff --git a/x-pack/plugins/alerting/public/pages/maintenance_windows/types.ts b/x-pack/plugins/alerting/public/pages/maintenance_windows/types.ts index acc3cd5420bb4..da19abfb7f5bc 100644 --- a/x-pack/plugins/alerting/public/pages/maintenance_windows/types.ts +++ b/x-pack/plugins/alerting/public/pages/maintenance_windows/types.ts @@ -6,10 +6,6 @@ */ import { Frequency } from '@kbn/rrule'; -import { - MaintenanceWindow as MaintenanceWindowServerSide, - MaintenanceWindowModificationMetadata, -} from '../../../common'; export const RRuleFrequencyMap = { '0': Frequency.YEARLY, @@ -18,16 +14,6 @@ export const RRuleFrequencyMap = { '3': Frequency.DAILY, }; -export type MaintenanceWindow = Pick< - MaintenanceWindowServerSide, - 'title' | 'duration' | 'rRule' | 'categoryIds' | 'scopedQuery' ->; - -export type MaintenanceWindowFindResponse = MaintenanceWindowServerSide & - MaintenanceWindowModificationMetadata & { - total: number; - }; - export enum SortDirection { asc = 'asc', desc = 'desc', diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/archive.test.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/archive.test.ts index 8f0e44eaf2eb9..6143805f824c7 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/archive.test.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/archive.test.ts @@ -6,7 +6,6 @@ */ import { httpServiceMock } from '@kbn/core/public/mocks'; -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; import { archiveMaintenanceWindow } from './archive'; const http = httpServiceMock.createStartContract(); @@ -28,7 +27,7 @@ describe('archiveMaintenanceWindow', () => { }; http.post.mockResolvedValueOnce(apiResponse); - const maintenanceWindow: MaintenanceWindow = { + const maintenanceWindow = { title: 'test', duration: 1, rRule: { diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/archive.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/archive.ts index 45c90dcc2f649..3b8dd3b459f9d 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/archive.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/archive.ts @@ -4,21 +4,11 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { HttpSetup } from '@kbn/core/public'; -import { AsApiContract, RewriteRequestCase } from '@kbn/actions-plugin/common'; - -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; +import type { HttpSetup } from '@kbn/core/public'; +import type { MaintenanceWindowResponse } from '../../../common/routes/maintenance_window/response'; +import type { MaintenanceWindow } from '../../../common'; import { INTERNAL_BASE_ALERTING_API_PATH } from '../../../common'; - -const rewriteBodyRes: RewriteRequestCase = ({ - r_rule: rRule, - category_ids: categoryIds, - ...rest -}) => ({ - ...rest, - rRule, - categoryIds, -}); +import { transformMaintenanceWindowResponse } from './transform_maintenance_window_response'; export async function archiveMaintenanceWindow({ http, @@ -29,12 +19,12 @@ export async function archiveMaintenanceWindow({ maintenanceWindowId: string; archive: boolean; }): Promise { - const res = await http.post>( + const res = await http.post( `${INTERNAL_BASE_ALERTING_API_PATH}/rules/maintenance_window/${encodeURIComponent( maintenanceWindowId )}/_archive`, { body: JSON.stringify({ archive }) } ); - return rewriteBodyRes(res); + return transformMaintenanceWindowResponse(res); } diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/create.test.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/create.test.ts index 5a7bbf8be2bc4..baf2737c4114b 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/create.test.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/create.test.ts @@ -7,7 +7,6 @@ import { httpServiceMock } from '@kbn/core/public/mocks'; import { createMaintenanceWindow } from './create'; -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; const http = httpServiceMock.createStartContract(); @@ -28,7 +27,7 @@ describe('createMaintenanceWindow', () => { }; http.post.mockResolvedValueOnce(apiResponse); - const maintenanceWindow: MaintenanceWindow = { + const createParams = { title: 'test', duration: 1, rRule: { @@ -40,8 +39,8 @@ describe('createMaintenanceWindow', () => { }, }; - const result = await createMaintenanceWindow({ http, maintenanceWindow }); - expect(result).toEqual(maintenanceWindow); + const result = await createMaintenanceWindow({ http, createParams }); + expect(result).toEqual(createParams); expect(http.post.mock.calls[0]).toMatchInlineSnapshot(` Array [ "/internal/alerting/rules/maintenance_window", diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/create.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/create.ts index 4584d839cb6b5..c196c8120620c 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/create.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/create.ts @@ -4,47 +4,50 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { HttpSetup } from '@kbn/core/public'; -import { AsApiContract, RewriteRequestCase, RewriteResponseCase } from '@kbn/actions-plugin/common'; +import type { HttpSetup } from '@kbn/core/public'; +import type { MaintenanceWindow } from '../../../common'; +import type { CreateMaintenanceWindowRequestBody } from '../../../common/routes/maintenance_window/apis/create'; +import type { MaintenanceWindowResponse } from '../../../common/routes/maintenance_window/response'; -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; import { INTERNAL_BASE_ALERTING_API_PATH } from '../../../common'; +import { transformMaintenanceWindowResponse } from './transform_maintenance_window_response'; -const rewriteBodyRequest: RewriteResponseCase = ({ - rRule, - categoryIds, - scopedQuery, - ...res -}) => ({ - ...res, - r_rule: rRule, - category_ids: categoryIds, - scoped_query: scopedQuery, -}); +export interface CreateParams { + title: MaintenanceWindow['title']; + duration: MaintenanceWindow['duration']; + rRule: MaintenanceWindow['rRule']; + categoryIds?: MaintenanceWindow['categoryIds']; + scopedQuery?: MaintenanceWindow['scopedQuery']; +} -const rewriteBodyRes: RewriteRequestCase = ({ - r_rule: rRule, - category_ids: categoryIds, - scoped_query: scopedQuery, - ...rest -}) => ({ - ...rest, - rRule, - categoryIds, - scopedQuery, -}); +const transformCreateBodySchema = ( + createParams: CreateParams +): CreateMaintenanceWindowRequestBody => { + return { + title: createParams.title, + duration: createParams.duration, + r_rule: createParams.rRule as CreateMaintenanceWindowRequestBody['r_rule'], + ...(createParams.categoryIds !== undefined + ? { + category_ids: + createParams.categoryIds as CreateMaintenanceWindowRequestBody['category_ids'], + } + : {}), + ...(createParams.scopedQuery !== undefined ? { scoped_query: createParams.scopedQuery } : {}), + }; +}; export async function createMaintenanceWindow({ http, - maintenanceWindow, + createParams, }: { http: HttpSetup; - maintenanceWindow: MaintenanceWindow; + createParams: CreateParams; }): Promise { - const res = await http.post>( + const res = await http.post( `${INTERNAL_BASE_ALERTING_API_PATH}/rules/maintenance_window`, - { body: JSON.stringify(rewriteBodyRequest(maintenanceWindow)) } + { body: JSON.stringify(transformCreateBodySchema(createParams)) } ); - return rewriteBodyRes(res); + return transformMaintenanceWindowResponse(res); } diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/find.test.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/find.test.ts index de38f6de5af00..14b7336187293 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/find.test.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/find.test.ts @@ -6,7 +6,6 @@ */ import { httpServiceMock } from '@kbn/core/public/mocks'; -import { MaintenanceWindowFindResponse } from '../../pages/maintenance_windows/types'; import { findMaintenanceWindows } from './find'; import { MaintenanceWindowStatus } from '../../../common'; @@ -39,14 +38,13 @@ describe('findMaintenanceWindows', () => { updated_by: null, created_at: '2023-03-23T19:16:21.293Z', updated_at: '2023-03-23T19:16:21.293Z', - total: 1000, }, ], total: 1, }; http.get.mockResolvedValueOnce(apiResponse); - const maintenanceWindow: MaintenanceWindowFindResponse[] = [ + const maintenanceWindow = [ { id: '1', title: 'test', @@ -68,7 +66,6 @@ describe('findMaintenanceWindows', () => { updatedBy: null, createdAt: '2023-03-23T19:16:21.293Z', updatedAt: '2023-03-23T19:16:21.293Z', - total: 1000, }, ]; diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/find.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/find.ts index e54028d30dfa8..c63e491198ce9 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/find.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/find.ts @@ -4,49 +4,20 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { HttpSetup } from '@kbn/core/public'; -import { AsApiContract, RewriteRequestCase } from '@kbn/actions-plugin/common'; +import type { HttpSetup } from '@kbn/core/public'; +import type { MaintenanceWindow } from '../../../common'; +import type { FindMaintenanceWindowsResponse } from '../../../common/routes/maintenance_window/apis/find'; -import { MaintenanceWindowFindResponse } from '../../pages/maintenance_windows/types'; import { INTERNAL_BASE_ALERTING_API_PATH } from '../../../common'; - -const rewriteBodyRes = (results: { - data: Array>; - total: number; -}): MaintenanceWindowFindResponse[] => { - return results.data.map((item) => transform(item)); -}; - -const transform: RewriteRequestCase = ({ - expiration_date: expirationDate, - r_rule: rRule, - event_start_time: eventStartTime, - event_end_time: eventEndTime, - created_by: createdBy, - updated_by: updatedBy, - created_at: createdAt, - updated_at: updatedAt, - ...rest -}) => ({ - ...rest, - expirationDate, - rRule, - eventStartTime, - eventEndTime, - createdBy, - updatedBy, - createdAt, - updatedAt, -}); +import { transformMaintenanceWindowResponse } from './transform_maintenance_window_response'; export async function findMaintenanceWindows({ http, }: { http: HttpSetup; -}): Promise { - const res = await http.get<{ - data: Array>; - total: number; - }>(`${INTERNAL_BASE_ALERTING_API_PATH}/rules/maintenance_window/_find`); - return rewriteBodyRes(res); +}): Promise { + const res = await http.get( + `${INTERNAL_BASE_ALERTING_API_PATH}/rules/maintenance_window/_find` + ); + return res.data.map((mw) => transformMaintenanceWindowResponse(mw)); } diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/finish.test.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/finish.test.ts index a67b7246a64f5..f20d810eed6c2 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/finish.test.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/finish.test.ts @@ -6,7 +6,6 @@ */ import { httpServiceMock } from '@kbn/core/public/mocks'; -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; import { finishMaintenanceWindow } from './finish'; const http = httpServiceMock.createStartContract(); @@ -28,7 +27,7 @@ describe('finishMaintenanceWindow', () => { }; http.post.mockResolvedValueOnce(apiResponse); - const maintenanceWindow: MaintenanceWindow = { + const maintenanceWindow = { title: 'test', duration: 1, rRule: { diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/finish.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/finish.ts index a9ca1ef0a3fe6..5f59236603b16 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/finish.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/finish.ts @@ -4,21 +4,12 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { HttpSetup } from '@kbn/core/public'; -import { AsApiContract, RewriteRequestCase } from '@kbn/actions-plugin/common'; +import type { HttpSetup } from '@kbn/core/public'; +import type { MaintenanceWindow } from '../../../common'; +import type { MaintenanceWindowResponse } from '../../../common/routes/maintenance_window/response'; -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; import { INTERNAL_BASE_ALERTING_API_PATH } from '../../../common'; - -const rewriteBodyRes: RewriteRequestCase = ({ - r_rule: rRule, - category_ids: categoryIds, - ...rest -}) => ({ - ...rest, - rRule, - categoryIds, -}); +import { transformMaintenanceWindowResponse } from './transform_maintenance_window_response'; export async function finishMaintenanceWindow({ http, @@ -27,11 +18,11 @@ export async function finishMaintenanceWindow({ http: HttpSetup; maintenanceWindowId: string; }): Promise { - const res = await http.post>( + const res = await http.post( `${INTERNAL_BASE_ALERTING_API_PATH}/rules/maintenance_window/${encodeURIComponent( maintenanceWindowId )}/_finish` ); - return rewriteBodyRes(res); + return transformMaintenanceWindowResponse(res); } diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/get.test.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/get.test.ts index f19d77e55b405..9d4887640d47e 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/get.test.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/get.test.ts @@ -6,7 +6,6 @@ */ import { httpServiceMock } from '@kbn/core/public/mocks'; -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; import { getMaintenanceWindow } from './get'; const http = httpServiceMock.createStartContract(); @@ -28,7 +27,7 @@ describe('getMaintenanceWindow', () => { }; http.get.mockResolvedValueOnce(apiResponse); - const maintenanceWindow: MaintenanceWindow = { + const maintenanceWindow = { title: 'test', duration: 1, rRule: { diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/get.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/get.ts index 799a80cb28aad..820f409c50779 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/get.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/get.ts @@ -4,23 +4,12 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { HttpSetup } from '@kbn/core/public'; -import { AsApiContract, RewriteRequestCase } from '@kbn/actions-plugin/common'; +import type { HttpSetup } from '@kbn/core/public'; +import type { MaintenanceWindow } from '../../../common'; +import type { MaintenanceWindowResponse } from '../../../common/routes/maintenance_window/response'; -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; import { INTERNAL_BASE_ALERTING_API_PATH } from '../../../common'; - -const rewriteBodyRes: RewriteRequestCase = ({ - r_rule: rRule, - category_ids: categoryIds, - scoped_query: scopedQuery, - ...rest -}) => ({ - ...rest, - scopedQuery, - categoryIds, - rRule, -}); +import { transformMaintenanceWindowResponse } from './transform_maintenance_window_response'; export async function getMaintenanceWindow({ http, @@ -29,11 +18,11 @@ export async function getMaintenanceWindow({ http: HttpSetup; maintenanceWindowId: string; }): Promise { - const res = await http.get>( + const res = await http.get( `${INTERNAL_BASE_ALERTING_API_PATH}/rules/maintenance_window/${encodeURIComponent( maintenanceWindowId )}` ); - return rewriteBodyRes(res); + return transformMaintenanceWindowResponse(res); } diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/transform_maintenance_window_response.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/transform_maintenance_window_response.ts new file mode 100644 index 0000000000000..a7887e684140d --- /dev/null +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/transform_maintenance_window_response.ts @@ -0,0 +1,32 @@ +/* + * 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 { MaintenanceWindowResponse } from '../../../common/routes/maintenance_window/response'; +import type { MaintenanceWindow } from '../../../common'; + +export const transformMaintenanceWindowResponse = ( + response: MaintenanceWindowResponse +): MaintenanceWindow => { + return { + title: response.title, + enabled: response.enabled, + duration: response.duration, + expirationDate: response.expiration_date, + events: response.events, + rRule: response.r_rule, + ...(response.category_ids !== undefined ? { categoryIds: response.category_ids } : {}), + ...(response.scoped_query !== undefined ? { scopedQuery: response.scoped_query } : {}), + createdBy: response.created_by, + updatedBy: response.updated_by, + createdAt: response.created_at, + updatedAt: response.updated_at, + status: response.status as MaintenanceWindow['status'], + eventStartTime: response.event_start_time, + eventEndTime: response.event_end_time, + id: response.id, + }; +}; diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/update.test.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/update.test.ts index 4c46ac4519928..d814d9bc5942f 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/update.test.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/update.test.ts @@ -6,7 +6,6 @@ */ import { httpServiceMock } from '@kbn/core/public/mocks'; -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; import { updateMaintenanceWindow } from './update'; const http = httpServiceMock.createStartContract(); @@ -28,7 +27,7 @@ describe('updateMaintenanceWindow', () => { }; http.post.mockResolvedValueOnce(apiResponse); - const maintenanceWindow: MaintenanceWindow = { + const updateParams = { title: 'test', duration: 1, rRule: { @@ -43,9 +42,9 @@ describe('updateMaintenanceWindow', () => { const result = await updateMaintenanceWindow({ http, maintenanceWindowId: '123', - maintenanceWindow, + updateParams, }); - expect(result).toEqual(maintenanceWindow); + expect(result).toEqual(updateParams); expect(http.post.mock.calls[0]).toMatchInlineSnapshot(` Array [ "/internal/alerting/rules/maintenance_window/123", diff --git a/x-pack/plugins/alerting/public/services/maintenance_windows_api/update.ts b/x-pack/plugins/alerting/public/services/maintenance_windows_api/update.ts index c72a2285ba556..9f90acd683f35 100644 --- a/x-pack/plugins/alerting/public/services/maintenance_windows_api/update.ts +++ b/x-pack/plugins/alerting/public/services/maintenance_windows_api/update.ts @@ -4,51 +4,54 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { HttpSetup } from '@kbn/core/public'; -import { AsApiContract, RewriteRequestCase, RewriteResponseCase } from '@kbn/actions-plugin/common'; +import type { HttpSetup } from '@kbn/core/public'; +import type { MaintenanceWindow } from '../../../common'; +import type { UpdateMaintenanceWindowRequestBody } from '../../../common/routes/maintenance_window/apis/update'; +import type { MaintenanceWindowResponse } from '../../../common/routes/maintenance_window/response'; -import { MaintenanceWindow } from '../../pages/maintenance_windows/types'; import { INTERNAL_BASE_ALERTING_API_PATH } from '../../../common'; +import { transformMaintenanceWindowResponse } from './transform_maintenance_window_response'; -const rewriteBodyRequest: RewriteResponseCase = ({ - rRule, - categoryIds, - scopedQuery, - ...res -}) => ({ - ...res, - r_rule: rRule, - category_ids: categoryIds, - scoped_query: scopedQuery, -}); +export interface UpdateParams { + title: MaintenanceWindow['title']; + duration: MaintenanceWindow['duration']; + rRule: MaintenanceWindow['rRule']; + categoryIds?: MaintenanceWindow['categoryIds']; + scopedQuery?: MaintenanceWindow['scopedQuery']; +} -const rewriteBodyRes: RewriteRequestCase = ({ - r_rule: rRule, - category_ids: categoryIds, - scoped_query: scopedQuery, - ...rest -}) => ({ - ...rest, - rRule, - categoryIds, - scopedQuery, -}); +const transformUpdateBodySchema = ( + updateParams: UpdateParams +): UpdateMaintenanceWindowRequestBody => { + return { + title: updateParams.title, + duration: updateParams.duration, + r_rule: updateParams.rRule as UpdateMaintenanceWindowRequestBody['r_rule'], + ...(updateParams.categoryIds !== undefined + ? { + category_ids: + updateParams.categoryIds as UpdateMaintenanceWindowRequestBody['category_ids'], + } + : {}), + ...(updateParams.scopedQuery !== undefined ? { scoped_query: updateParams.scopedQuery } : {}), + }; +}; export async function updateMaintenanceWindow({ http, maintenanceWindowId, - maintenanceWindow, + updateParams, }: { http: HttpSetup; maintenanceWindowId: string; - maintenanceWindow: MaintenanceWindow; + updateParams: UpdateParams; }): Promise { - const res = await http.post>( + const res = await http.post( `${INTERNAL_BASE_ALERTING_API_PATH}/rules/maintenance_window/${encodeURIComponent( maintenanceWindowId )}`, - { body: JSON.stringify(rewriteBodyRequest(maintenanceWindow)) } + { body: JSON.stringify(transformUpdateBodySchema(updateParams)) } ); - return rewriteBodyRes(res); + return transformMaintenanceWindowResponse(res); } From 8b7ceea6c7b8bacb424b2c5df377ed5faae776b6 Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Wed, 24 Jan 2024 18:13:50 +0100 Subject: [PATCH 006/113] test: add missing await for connector table disappearance (#175430) ## Summary There's been a few recent failures in this test: https://buildkite.com/elastic/kibana-on-merge/builds/40574#018d3a8b-fe46-410e-a2b9-51eff916ddcd https://buildkite.com/elastic/kibana-on-merge/builds/40576#018d3b7a-1be4-499d-9b42-e10d860ee637 I don't know if this small addition will make any difference in the test timing out, but it will probably avoid the `Unhandled Promise rejection detected:` kind of errors, since we'll now wait for the expression. cc: @saarikabhasi --- .../functional/page_objects/svl_search_connectors_page.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/test_serverless/functional/page_objects/svl_search_connectors_page.ts b/x-pack/test_serverless/functional/page_objects/svl_search_connectors_page.ts index a3010b44d9820..1f834cce9d847 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_search_connectors_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_search_connectors_page.ts @@ -85,8 +85,8 @@ export function SvlSearchConnectorsPageProvider({ getService }: FtrProviderConte .then(() => true) .catch(() => false) ); - browser.refresh(); - this.expectConnectorTableToHaveNoItems(); + await browser.refresh(); + await this.expectConnectorTableToHaveNoItems(); }, async expectConnectorOverviewPageComponentsToExist() { await testSubjects.existOrFail('serverlessSearchConnectorsTitle'); From 256d12e0a5336e820b764596dc5c3bc1fa10c8d5 Mon Sep 17 00:00:00 2001 From: Umberto Pepato Date: Wed, 24 Jan 2024 18:18:27 +0100 Subject: [PATCH 007/113] [RAM][Observability] Add alert fields table to Observability flyout (#174685) ## Summary Adds the alert fields table from https://github.com/elastic/kibana/pull/172830 to Observability alert flyouts (triggered by the `View alert details` action). ![image](https://github.com/elastic/kibana/assets/18363145/7e10517e-a5b6-497a-91c8-5bc2bc88ad69) ### Checklist - [x] 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) - [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 --------- Co-authored-by: Xavier Mouligneau --- .../src/alert_fields_table/index.tsx | 41 ++- .../alerts_flyout/alerts_flyout.test.tsx | 6 +- .../alerts_flyout/alerts_flyout.tsx | 9 +- .../alerts_flyout/alerts_flyout_body.test.tsx | 50 +++- .../alerts_flyout/alerts_flyout_body.tsx | 256 +++++++++++------- .../use_get_alert_flyout_components.tsx | 2 +- .../hooks/use_fetch_alert_detail.test.ts | 72 +++-- .../public/hooks/use_fetch_alert_detail.ts | 42 +-- .../alert_details/alert_details.test.tsx | 4 +- .../pages/alert_details/alert_details.tsx | 26 +- .../public/pages/alert_details/mock/alert.ts | 8 + .../public/pages/cases/components/cases.tsx | 7 +- 12 files changed, 351 insertions(+), 172 deletions(-) diff --git a/packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx b/packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx index cf120a00e5aa2..3a34036ac9144 100644 --- a/packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx +++ b/packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx @@ -17,6 +17,7 @@ import { css } from '@emotion/react'; import React, { memo, useCallback, useMemo, useState } from 'react'; import { Alert } from '@kbn/alerting-types'; import { euiThemeVars } from '@kbn/ui-theme'; +import { EuiBasicTableColumn } from '@elastic/eui/src/components/basic_table/basic_table'; export const search = { box: { @@ -28,7 +29,7 @@ export const search = { }, }; -const columns = [ +const columns: Array> = [ { field: 'key', name: i18n.translate('alertsUIShared.alertFieldsTable.field', { @@ -86,18 +87,46 @@ const useFieldBrowserPagination = () => { }; }; +type AlertField = Exclude< + { + [K in keyof Alert]: { key: K; value: Alert[K] }; + }[keyof Alert], + undefined +>; + export interface AlertFieldsTableProps { + /** + * The raw alert object + */ alert: Alert; + /** + * A list of alert field keys to be shown in the table. + * When not defined, all the fields are shown. + */ + fields?: Array; } -export const AlertFieldsTable = memo(({ alert }: AlertFieldsTableProps) => { +/** + * A paginated, filterable table to show alert object fields + */ +export const AlertFieldsTable = memo(({ alert, fields }: AlertFieldsTableProps) => { const { onTableChange, paginationTableProp } = useFieldBrowserPagination(); + const items = useMemo(() => { + let _items = Object.entries(alert).map( + ([key, value]) => + ({ + key, + value, + } as AlertField) + ); + if (fields?.length) { + _items = _items.filter((f) => fields.includes(f.key)); + } + return _items; + }, [alert, fields]); return ( ({ - key, - value: Array.isArray(value) ? value?.[0] : value, - }))} + items={items} itemId="key" columns={columns} onTableChange={onTableChange} diff --git a/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout.test.tsx b/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout.test.tsx index 87d476138970c..44011c2b2c22b 100644 --- a/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout.test.tsx +++ b/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout.test.tsx @@ -5,13 +5,15 @@ * 2.0. */ -import React from 'react'; +import React, { ComponentProps } from 'react'; import * as useUiSettingHook from '@kbn/kibana-react-plugin/public/ui_settings/use_ui_setting'; import { createObservabilityRuleTypeRegistryMock } from '../../rules/observability_rule_type_registry_mock'; import { render } from '../../utils/test_helper'; import { AlertsFlyout } from './alerts_flyout'; import type { TopAlert } from '../../typings/alerts'; +const rawAlert = {} as ComponentProps['rawAlert']; + describe('AlertsFlyout', () => { jest .spyOn(useUiSettingHook, 'useUiSetting') @@ -22,6 +24,7 @@ describe('AlertsFlyout', () => { const flyout = render( @@ -34,6 +37,7 @@ describe('AlertsFlyout', () => { const flyout = render( diff --git a/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout.tsx b/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout.tsx index d74caac8e496a..8035398960881 100644 --- a/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout.tsx +++ b/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout.tsx @@ -9,6 +9,7 @@ import React, { useMemo } from 'react'; import { EuiFlyout, EuiFlyoutHeader, EuiFlyoutProps } from '@elastic/eui'; import { ALERT_UUID } from '@kbn/rule-data-utils'; +import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; import { AlertsFlyoutHeader } from './alerts_flyout_header'; import { AlertsFlyoutBody } from './alerts_flyout_body'; import { AlertsFlyoutFooter } from './alerts_flyout_footer'; @@ -18,6 +19,7 @@ import type { TopAlert } from '../../typings/alerts'; type AlertsFlyoutProps = { alert?: TopAlert; + rawAlert?: EcsFieldsResponse; alerts?: Array>; isInApp?: boolean; observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry; @@ -26,6 +28,7 @@ type AlertsFlyoutProps = { export function AlertsFlyout({ alert, + rawAlert, alerts, isInApp = false, observabilityRuleTypeRegistry, @@ -41,16 +44,16 @@ export function AlertsFlyout({ if (!alertData) { alertData = decoratedAlerts?.find((a) => a.fields[ALERT_UUID] === selectedAlertId) as TopAlert; } - if (!alertData) { + if (!alertData || !rawAlert) { return null; } return ( - + - + ); diff --git a/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout_body.test.tsx b/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout_body.test.tsx index 8471980f7278b..9fd1b47abdae0 100644 --- a/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout_body.test.tsx +++ b/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout_body.test.tsx @@ -12,25 +12,69 @@ import { AlertsFlyoutBody } from './alerts_flyout_body'; import { inventoryThresholdAlertEs } from '../../rules/fixtures/example_alerts'; import { parseAlert } from '../../pages/alerts/helpers/parse_alert'; import { RULE_DETAILS_PAGE_ID } from '../../pages/rule_details/constants'; +import { fireEvent } from '@testing-library/react'; + +const tabsData = [ + { name: 'Overview', subj: 'overviewTab' }, + { name: 'Table', subj: 'tableTab' }, +]; describe('AlertsFlyoutBody', () => { jest .spyOn(useUiSettingHook, 'useUiSetting') .mockImplementation(() => 'MMM D, YYYY @ HH:mm:ss.SSS'); const observabilityRuleTypeRegistryMock = createObservabilityRuleTypeRegistryMock(); + let flyout: ReturnType; const setup = (id: string) => { const alert = parseAlert(observabilityRuleTypeRegistryMock)(inventoryThresholdAlertEs); - return render(); + flyout = render( + + ); }; it('should render View rule detail link', async () => { - const flyout = setup('test'); + setup('test'); expect(flyout.getByTestId('viewRuleDetailsFlyout')).toBeInTheDocument(); }); it('should NOT render View rule detail link for RULE_DETAILS_PAGE_ID', async () => { - const flyout = setup(RULE_DETAILS_PAGE_ID); + setup(RULE_DETAILS_PAGE_ID); expect(flyout.queryByTestId('viewRuleDetailsFlyout')).not.toBeInTheDocument(); }); + + describe('tabs', () => { + beforeEach(() => { + setup('test'); + }); + + tabsData.forEach(({ name: tab }) => { + test(`should render the ${tab} tab`, () => { + flyout.debug(); + expect(flyout.getByText(tab)).toBeTruthy(); + }); + }); + + test('the Overview tab should be selected by default', () => { + expect( + flyout.container.querySelector( + '[data-test-subj="defaultAlertFlyoutTabs"] .euiTab-isSelected .euiTab__content' + )!.innerHTML + ).toContain('Overview'); + }); + + tabsData.forEach(({ subj, name }) => { + test(`should render the ${name} tab panel`, () => { + const tab = flyout.container.querySelector( + `[data-test-subj="defaultAlertFlyoutTabs"] [role="tablist"] [data-test-subj="${subj}"]` + ); + fireEvent.click(tab!); + expect( + flyout.container.querySelector( + `[data-test-subj="defaultAlertFlyoutTabs"] [role="tabpanel"] [data-test-subj="${subj}Panel"]` + ) + ).toBeTruthy(); + }); + }); + }); }); diff --git a/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout_body.tsx b/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout_body.tsx index 735d38d0604d0..aee91015ac12c 100644 --- a/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout_body.tsx +++ b/x-pack/plugins/observability/public/components/alerts_flyout/alerts_flyout_body.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import { get } from 'lodash'; import { EuiSpacer, @@ -13,7 +13,8 @@ import { EuiLink, EuiHorizontalRule, EuiDescriptionList, - EuiFlyoutBody, + EuiPanel, + EuiTabbedContentTab, } from '@elastic/eui'; import { AlertStatus, @@ -27,9 +28,14 @@ import { ALERT_STATUS, } from '@kbn/rule-data-utils'; import { i18n } from '@kbn/i18n'; -import { AlertLifecycleStatusBadge } from '@kbn/alerts-ui-shared'; +import { + AlertFieldsTable, + AlertLifecycleStatusBadge, + ScrollableFlyoutTabbedContent, +} from '@kbn/alerts-ui-shared'; import moment from 'moment-timezone'; import { useUiSetting } from '@kbn/kibana-react-plugin/public'; +import { AlertsTableFlyoutBaseProps } from '@kbn/triggers-actions-ui-plugin/public'; import { useKibana } from '../../utils/kibana_react'; import { asDuration } from '../../../common/utils/formatters'; import { paths } from '../../../common/locators/paths'; @@ -38,11 +44,14 @@ import { RULE_DETAILS_PAGE_ID } from '../../pages/rule_details/constants'; import type { TopAlert } from '../../typings/alerts'; interface FlyoutProps { + rawAlert: AlertsTableFlyoutBaseProps['alert']; alert: TopAlert; id?: string; } -export function AlertsFlyoutBody({ alert, id: pageId }: FlyoutProps) { +type TabId = 'overview' | 'table'; + +export function AlertsFlyoutBody({ alert, rawAlert, id: pageId }: FlyoutProps) { const { http: { basePath: { prepend }, @@ -57,107 +66,152 @@ export function AlertsFlyoutBody({ alert, id: pageId }: FlyoutProps) { ? prepend(paths.observability.ruleDetails(ruleId)) : null; - const overviewListItems = [ - { - title: i18n.translate('xpack.observability.alertsFlyout.statusLabel', { - defaultMessage: 'Status', - }), - description: ( - - ), - }, - { - title: i18n.translate('xpack.observability.alertsFlyout.startedAtLabel', { - defaultMessage: 'Started at', - }), - description: ( - {moment(alert.start).format(dateFormat)} - ), - }, - { - title: i18n.translate('xpack.observability.alertsFlyout.lastUpdatedLabel', { - defaultMessage: 'Last updated', - }), - description: ( - - {moment(alert.lastUpdated).format(dateFormat)} - - ), - }, - { - title: i18n.translate('xpack.observability.alertsFlyout.durationLabel', { - defaultMessage: 'Duration', - }), - description: asDuration(alert.fields[ALERT_DURATION], { extended: true }), - }, - { - title: i18n.translate('xpack.observability.alertsFlyout.expectedValueLabel', { - defaultMessage: 'Expected value', + const overviewTab = useMemo(() => { + const overviewListItems = [ + { + title: i18n.translate('xpack.observability.alertsFlyout.statusLabel', { + defaultMessage: 'Status', + }), + description: ( + + ), + }, + { + title: i18n.translate('xpack.observability.alertsFlyout.startedAtLabel', { + defaultMessage: 'Started at', + }), + description: ( + {moment(alert.start).format(dateFormat)} + ), + }, + { + title: i18n.translate('xpack.observability.alertsFlyout.lastUpdatedLabel', { + defaultMessage: 'Last updated', + }), + description: ( + + {moment(alert.lastUpdated).format(dateFormat)} + + ), + }, + { + title: i18n.translate('xpack.observability.alertsFlyout.durationLabel', { + defaultMessage: 'Duration', + }), + description: asDuration(alert.fields[ALERT_DURATION], { extended: true }), + }, + { + title: i18n.translate('xpack.observability.alertsFlyout.expectedValueLabel', { + defaultMessage: 'Expected value', + }), + description: formatAlertEvaluationValue( + alert.fields[ALERT_RULE_TYPE_ID], + alert.fields[ALERT_EVALUATION_THRESHOLD] + ), + }, + { + title: i18n.translate('xpack.observability.alertsFlyout.actualValueLabel', { + defaultMessage: 'Actual value', + }), + description: formatAlertEvaluationValue( + alert.fields[ALERT_RULE_TYPE_ID], + alert.fields[ALERT_EVALUATION_VALUE] + ), + }, + { + title: i18n.translate('xpack.observability.alertsFlyout.ruleTypeLabel', { + defaultMessage: 'Rule type', + }), + description: alert.fields[ALERT_RULE_CATEGORY] ?? '-', + }, + ]; + + return { + id: 'overview', + 'data-test-subj': 'overviewTab', + name: i18n.translate('xpack.observability.alertFlyout.overview', { + defaultMessage: 'Overview', }), - description: formatAlertEvaluationValue( - alert.fields[ALERT_RULE_TYPE_ID], - alert.fields[ALERT_EVALUATION_THRESHOLD] + content: ( + + +

+ {i18n.translate('xpack.observability.alertsFlyout.reasonTitle', { + defaultMessage: 'Reason', + })} +

+
+ + {alert.reason} + + {!!linkToRule && ( + + {i18n.translate('xpack.observability.alertsFlyout.viewRulesDetailsLinkText', { + defaultMessage: 'View rule details', + })} + + )} + + +

+ {i18n.translate('xpack.observability.alertsFlyout.documentSummaryTitle', { + defaultMessage: 'Document Summary', + })} +

+
+ + +
), - }, - { - title: i18n.translate('xpack.observability.alertsFlyout.actualValueLabel', { - defaultMessage: 'Actual value', - }), - description: formatAlertEvaluationValue( - alert.fields[ALERT_RULE_TYPE_ID], - alert.fields[ALERT_EVALUATION_VALUE] + }; + }, [alert.fields, alert.lastUpdated, alert.reason, alert.start, dateFormat, linkToRule]); + + const tableTab = useMemo( + () => ({ + id: 'table', + 'data-test-subj': 'tableTab', + name: i18n.translate('xpack.observability.alertsFlyout.table', { defaultMessage: 'Table' }), + content: ( + + + ), - }, - { - title: i18n.translate('xpack.observability.alertsFlyout.ruleTypeLabel', { - defaultMessage: 'Rule type', - }), - description: alert.fields[ALERT_RULE_CATEGORY] ?? '-', - }, - ]; + }), + [rawAlert] + ); + + const tabs = useMemo(() => [overviewTab, tableTab], [overviewTab, tableTab]); + const [selectedTabId, setSelectedTabId] = useState('overview'); + const handleTabClick = useCallback( + (tab: EuiTabbedContentTab) => setSelectedTabId(tab.id as TabId), + [] + ); + + const selectedTab = useMemo( + () => tabs.find((tab) => tab.id === selectedTabId) ?? tabs[0], + [tabs, selectedTabId] + ); return ( - - -

- {i18n.translate('xpack.observability.alertsFlyout.reasonTitle', { - defaultMessage: 'Reason', - })} -

-
- - {alert.reason} - - {!!linkToRule && ( - - {i18n.translate('xpack.observability.alertsFlyout.viewRulesDetailsLinkText', { - defaultMessage: 'View rule details', - })} - - )} - - -

- {i18n.translate('xpack.observability.alertsFlyout.documentSummaryTitle', { - defaultMessage: 'Document Summary', - })} -

-
- - -
+ ); } diff --git a/x-pack/plugins/observability/public/components/alerts_flyout/use_get_alert_flyout_components.tsx b/x-pack/plugins/observability/public/components/alerts_flyout/use_get_alert_flyout_components.tsx index 75fe3cb1133a5..460a109b14c28 100644 --- a/x-pack/plugins/observability/public/components/alerts_flyout/use_get_alert_flyout_components.tsx +++ b/x-pack/plugins/observability/public/components/alerts_flyout/use_get_alert_flyout_components.tsx @@ -22,7 +22,7 @@ export const useGetAlertFlyoutComponents = ( const body = useCallback( (props: AlertsTableFlyoutBaseProps) => { const alert = parseAlert(observabilityRuleTypeRegistry)(props.alert); - return ; + return ; }, [observabilityRuleTypeRegistry] ); diff --git a/x-pack/plugins/observability/public/hooks/use_fetch_alert_detail.test.ts b/x-pack/plugins/observability/public/hooks/use_fetch_alert_detail.test.ts index 5139fc5a0a1e7..e8e25fc5cbc57 100644 --- a/x-pack/plugins/observability/public/hooks/use_fetch_alert_detail.test.ts +++ b/x-pack/plugins/observability/public/hooks/use_fetch_alert_detail.test.ts @@ -10,8 +10,7 @@ import { kibanaStartMock } from '../utils/kibana_react.mock'; import * as pluginContext from './use_plugin_context'; import { createObservabilityRuleTypeRegistryMock } from '..'; import { PluginContextValue } from '../context/plugin_context/plugin_context'; -import { useFetchAlertDetail } from './use_fetch_alert_detail'; -import type { TopAlert } from '../typings/alerts'; +import { AlertData, useFetchAlertDetail } from './use_fetch_alert_detail'; const mockUseKibanaReturnValue = kibanaStartMock.startContract(); @@ -65,7 +64,7 @@ describe('useFetchAlertDetail', () => { it('initially is not loading and does not have data', async () => { await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => + const { result, waitForNextUpdate } = renderHook(() => useFetchAlertDetail(id) ); @@ -81,7 +80,7 @@ describe('useFetchAlertDetail', () => { }); await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => + const { result, waitForNextUpdate } = renderHook(() => useFetchAlertDetail('123') ); @@ -93,7 +92,7 @@ describe('useFetchAlertDetail', () => { it('retrieves the alert data', async () => { await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => + const { result, waitForNextUpdate } = renderHook(() => useFetchAlertDetail(id) ); @@ -104,16 +103,48 @@ describe('useFetchAlertDetail', () => { Array [ false, Object { - "0": "a", - "1": " ", - "2": "r", - "3": "e", - "4": "a", - "5": "s", - "6": "o", - "7": "n", - "active": true, - "fields": Object { + "formatted": Object { + "0": "a", + "1": " ", + "2": "r", + "3": "e", + "4": "a", + "5": "s", + "6": "o", + "7": "n", + "active": true, + "fields": Object { + "@timestamp": "2022-01-31T18:20:57.204Z", + "event.action": "active", + "event.kind": "signal", + "kibana.alert.duration.us": 13793555000, + "kibana.alert.instance.id": "*", + "kibana.alert.reason": "Document count reported no data in the last 1 hour for all hosts", + "kibana.alert.rule.category": "Metric threshold", + "kibana.alert.rule.consumer": "infrastructure", + "kibana.alert.rule.execution.uuid": "e62c418d-734d-47e7-bbeb-e6f182f5fb45", + "kibana.alert.rule.name": "A super rule", + "kibana.alert.rule.producer": "infrastructure", + "kibana.alert.rule.revision": 0, + "kibana.alert.rule.rule_type_id": "metrics.alert.threshold", + "kibana.alert.rule.tags": Array [], + "kibana.alert.rule.uuid": "69411af0-82a2-11ec-8139-c1568734434e", + "kibana.alert.start": "2022-01-31T14:31:03.649Z", + "kibana.alert.status": "active", + "kibana.alert.uuid": "73c0d0cd-2df4-4550-862c-1d447e9c1db2", + "kibana.alert.workflow_status": "open", + "kibana.space_ids": Array [ + "default", + ], + "kibana.version": "8.1.0", + "tags": Array [], + }, + "lastUpdated": 1643653257204, + "link": undefined, + "reason": "Document count reported no data in the last 1 hour for all hosts", + "start": 1643639463649, + }, + "raw": Object { "@timestamp": "2022-01-31T18:20:57.204Z", "event.action": "active", "event.kind": "signal", @@ -139,10 +170,6 @@ describe('useFetchAlertDetail', () => { "kibana.version": "8.1.0", "tags": Array [], }, - "lastUpdated": 1643653257204, - "link": undefined, - "reason": "Document count reported no data in the last 1 hour for all hosts", - "start": 1643639463649, }, ] `); @@ -151,9 +178,10 @@ describe('useFetchAlertDetail', () => { it('does not populate the results when the request is canceled', async () => { await act(async () => { - const { result, waitForNextUpdate, unmount } = renderHook( - () => useFetchAlertDetail('123') - ); + const { result, waitForNextUpdate, unmount } = renderHook< + string, + [boolean, AlertData | null] + >(() => useFetchAlertDetail('123')); await waitForNextUpdate(); unmount(); diff --git a/x-pack/plugins/observability/public/hooks/use_fetch_alert_detail.ts b/x-pack/plugins/observability/public/hooks/use_fetch_alert_detail.ts index c43ee4d352b6f..f8cb3803ec488 100644 --- a/x-pack/plugins/observability/public/hooks/use_fetch_alert_detail.ts +++ b/x-pack/plugins/observability/public/hooks/use_fetch_alert_detail.ts @@ -9,19 +9,23 @@ import { isEmpty } from 'lodash'; import { HttpSetup } from '@kbn/core/public'; import { BASE_RAC_ALERTS_API_PATH } from '@kbn/rule-registry-plugin/common/constants'; +import { EcsFieldsResponse } from '@kbn/rule-registry-plugin/common/search_strategy'; import { usePluginContext } from './use_plugin_context'; -import { ObservabilityRuleTypeRegistry } from '..'; import { useDataFetcher } from './use_data_fetcher'; import { parseAlert } from '../pages/alerts/helpers/parse_alert'; import type { TopAlert } from '../typings/alerts'; interface AlertDetailParams { id: string; - ruleType: ObservabilityRuleTypeRegistry; } -export const useFetchAlertDetail = (id: string): [boolean, TopAlert | null] => { +export interface AlertData { + formatted: TopAlert; + raw: EcsFieldsResponse; +} + +export const useFetchAlertDetail = (id: string): [boolean, AlertData | null] => { const { observabilityRuleTypeRegistry } = usePluginContext(); const params = useMemo( () => ({ id, ruleType: observabilityRuleTypeRegistry }), @@ -33,35 +37,37 @@ export const useFetchAlertDetail = (id: string): [boolean, TopAlert | null] => { [] ); - const { loading, data: alert } = useDataFetcher({ + const { loading, data: rawAlert } = useDataFetcher({ paramsForApiCall: params, initialDataState: null, executeApiCall: fetchAlert, shouldExecuteApiCall, }); - return [loading, alert]; + const data = rawAlert + ? { + formatted: parseAlert(observabilityRuleTypeRegistry)(rawAlert), + raw: rawAlert, + } + : null; + + return [loading, data]; }; const fetchAlert = async ( - params: AlertDetailParams, + { id }: AlertDetailParams, abortController: AbortController, http: HttpSetup -): Promise => { - const { id, ruleType } = params; - try { - const response = await http.get>(BASE_RAC_ALERTS_API_PATH, { +) => { + return http + .get(BASE_RAC_ALERTS_API_PATH, { query: { id, }, signal: abortController.signal, + }) + .catch(() => { + // ignore error for retrieving alert + return null; }); - if (response !== undefined) { - return parseAlert(ruleType)(response); - } - } catch (error) { - // ignore error for retrieving alert - } - - return null; }; diff --git a/x-pack/plugins/observability/public/pages/alert_details/alert_details.test.tsx b/x-pack/plugins/observability/public/pages/alert_details/alert_details.test.tsx index 9d537453d4ead..e6ef115b6aba8 100644 --- a/x-pack/plugins/observability/public/pages/alert_details/alert_details.test.tsx +++ b/x-pack/plugins/observability/public/pages/alert_details/alert_details.test.tsx @@ -24,7 +24,7 @@ import { kibanaStartMock } from '../../utils/kibana_react.mock'; import { useFetchAlertDetail } from '../../hooks/use_fetch_alert_detail'; import { AlertDetails } from './alert_details'; import { ConfigSchema } from '../../plugin'; -import { alert, alertWithNoData } from './mock/alert'; +import { alertDetail, alertWithNoData } from './mock/alert'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), @@ -124,7 +124,7 @@ describe('Alert details', () => { ); it('should show the alert detail page with all necessary components', async () => { - useFetchAlertDetailMock.mockReturnValue([false, alert]); + useFetchAlertDetailMock.mockReturnValue([false, alertDetail]); const alertDetails = renderComponent(); diff --git a/x-pack/plugins/observability/public/pages/alert_details/alert_details.tsx b/x-pack/plugins/observability/public/pages/alert_details/alert_details.tsx index 99f9ebc7eba75..feb7e06e0ae51 100644 --- a/x-pack/plugins/observability/public/pages/alert_details/alert_details.tsx +++ b/x-pack/plugins/observability/public/pages/alert_details/alert_details.tsx @@ -61,22 +61,22 @@ export function AlertDetails() { const { ObservabilityPageTemplate, config } = usePluginContext(); const { alertId } = useParams(); - const [isLoading, alert] = useFetchAlertDetail(alertId); + const [isLoading, alertDetail] = useFetchAlertDetail(alertId); const [ruleTypeModel, setRuleTypeModel] = useState(null); const CasesContext = getCasesContext(); const userCasesPermissions = canUseCases([observabilityFeatureId]); const { rule } = useFetchRule({ - ruleId: alert?.fields[ALERT_RULE_UUID], + ruleId: alertDetail?.formatted.fields[ALERT_RULE_UUID], }); const [summaryFields, setSummaryFields] = useState(); const [alertStatus, setAlertStatus] = useState(); useEffect(() => { - if (alert) { - setRuleTypeModel(ruleTypeRegistry.get(alert?.fields[ALERT_RULE_TYPE_ID]!)); - setAlertStatus(alert?.fields[ALERT_STATUS] as AlertStatus); + if (alertDetail) { + setRuleTypeModel(ruleTypeRegistry.get(alertDetail?.formatted.fields[ALERT_RULE_TYPE_ID]!)); + setAlertStatus(alertDetail?.formatted?.fields[ALERT_STATUS] as AlertStatus); } - }, [alert, ruleTypeRegistry]); + }, [alertDetail, ruleTypeRegistry]); useBreadcrumbs([ { href: http.basePath.prepend(paths.observability.alerts), @@ -86,7 +86,9 @@ export function AlertDetails() { deepLinkId: 'observability-overview:alerts', }, { - text: alert ? pageTitleContent(alert.fields[ALERT_RULE_CATEGORY]) : defaultBreadcrumb, + text: alertDetail + ? pageTitleContent(alertDetail.formatted.fields[ALERT_RULE_CATEGORY]) + : defaultBreadcrumb, }, ]); @@ -99,11 +101,11 @@ export function AlertDetails() { } // Redirect to the 404 page when the user hit the page url directly in the browser while the feature flag is off. - if (alert && !isAlertDetailsEnabledPerApp(alert, config)) { + if (alertDetail && !isAlertDetailsEnabledPerApp(alertDetail.formatted, config)) { return ; } - if (!isLoading && !alert) + if (!isLoading && !alertDetail) return ( @@ -146,7 +148,7 @@ export function AlertDetails() { features={{ alerts: { sync: false } }} > @@ -161,7 +163,7 @@ export function AlertDetails() { {AlertDetailsAppSection && rule && ( [k, !Array.isArray(v) ? [v] : v]) + ) as unknown as AlertData['raw'], +}; + export const alertWithTags: TopAlert = { ...alert, fields: { diff --git a/x-pack/plugins/observability/public/pages/cases/components/cases.tsx b/x-pack/plugins/observability/public/pages/cases/components/cases.tsx index ce4c56e136eb5..bdf54d7d0bf04 100644 --- a/x-pack/plugins/observability/public/pages/cases/components/cases.tsx +++ b/x-pack/plugins/observability/public/pages/cases/components/cases.tsx @@ -34,7 +34,7 @@ export function Cases({ permissions }: CasesProps) { const [selectedAlertId, setSelectedAlertId] = useState(''); - const [alertLoading, alert] = useFetchAlertDetail(selectedAlertId); + const [alertLoading, alertDetail] = useFetchAlertDetail(selectedAlertId); const handleFlyoutClose = () => setSelectedAlertId(''); @@ -65,10 +65,11 @@ export function Cases({ permissions }: CasesProps) { useFetchAlertData={useFetchAlertData} /> - {alert && selectedAlertId !== '' && alertLoading === false ? ( + {alertDetail && selectedAlertId !== '' && !alertLoading ? ( From a63bb6add0a46621fa88bf1f64a313641c35cbb0 Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Wed, 24 Jan 2024 18:20:49 +0100 Subject: [PATCH 008/113] [Security Solution] Data quality dashboard persistence (#173185) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary issue https://github.com/elastic/security-team/issues/7382 ### Data Stream Adapter This PR introduces the `@kbn/data-stream-adapter` package, which is a utility library to facilitate Data Stream creation and maintenance in Kibana, it was inspired by the data stream implementation in the Alerts plugin. The library has two exports: - `DataStreamSpacesAdapter`: to manage space data streams. It uses the `name-of-the-data-stream-` naming pattern. - `DataStreamAdapter`: to manage single (not space-aware) data streams. Usage examples in the package [README](https://github.com/elastic/kibana/blob/450be0369decdef156902d90a5f7292250ebd8cb/packages/kbn-data-stream-adapter/README.md) ### Data Quality Dashboard The `DataStreamSpacesAdapter` has been integrated into the data quality dashboard to store all the quality checks users perform. The information stored is the metadata (also used for telemetry) and the actual data rendered in the tables. FieldMap definition [here](https://github.com/elastic/kibana/blob/450be0369decdef156902d90a5f7292250ebd8cb/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_field_map.ts) ### Demo https://github.com/elastic/kibana/assets/17747913/311a0bf5-004b-46d7-8140-52a233361c91 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Philippe Oberti Co-authored-by: Garrett Spong Co-authored-by: Efe Gürkan YALAMAN Co-authored-by: Tiago Costa Co-authored-by: Sander Philipse <94373878+sphilipse@users.noreply.github.com> Co-authored-by: JD Kurma Co-authored-by: Jan Monschke Co-authored-by: Patryk Kopyciński Co-authored-by: Khristinin Nikita Co-authored-by: Marco Liberati Co-authored-by: Julia Rechkunova Co-authored-by: Stratoula Kalafateli Co-authored-by: Davis McPhee Co-authored-by: Eyo O. Eyo <7893459+eokoneyo@users.noreply.github.com> Co-authored-by: Elastic Machine Co-authored-by: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Co-authored-by: Søren Louv-Jansen Co-authored-by: Dzmitry Lemechko Co-authored-by: Candace Park <56409205+parkiino@users.noreply.github.com> --- .eslintrc.js | 3 + .github/CODEOWNERS | 1 + package.json | 1 + packages/kbn-data-stream-adapter/README.md | 69 +++ packages/kbn-data-stream-adapter/index.ts | 20 + .../kbn-data-stream-adapter/jest.config.js | 13 + packages/kbn-data-stream-adapter/kibana.jsonc | 5 + packages/kbn-data-stream-adapter/package.json | 7 + ...reate_or_update_component_template.test.ts | 290 +++++++++++++ .../create_or_update_component_template.ts | 118 ++++++ .../src/create_or_update_data_stream.test.ts | 172 ++++++++ .../src/create_or_update_data_stream.ts | 239 +++++++++++ .../create_or_update_index_template.test.ts | 167 ++++++++ .../src/create_or_update_index_template.ts | 66 +++ .../src/data_stream_adapter.ts | 160 +++++++ .../src/data_stream_spaces_adapter.ts | 100 +++++ .../src/field_maps/ecs_field_map.ts | 88 ++++ .../field_maps/mapping_from_field_map.test.ts | 393 ++++++++++++++++++ .../src/field_maps/mapping_from_field_map.ts | 54 +++ .../src/field_maps/types.ts | 56 +++ .../src/install_with_timeout.test.ts | 63 +++ .../src/install_with_timeout.ts | 67 +++ .../src/resource_installer_utils.test.ts | 170 ++++++++ .../src/resource_installer_utils.ts | 106 +++++ .../src/retry_transient_es_errors.test.ts | 78 ++++ .../src/retry_transient_es_errors.ts | 54 +++ .../kbn-data-stream-adapter/tsconfig.json | 24 ++ tsconfig.base.json | 2 + .../data_quality_context/index.test.tsx | 3 + .../data_quality_context/index.tsx | 10 +- .../index_properties/index.tsx | 22 +- .../impl/data_quality/helpers.test.ts | 82 ++++ .../impl/data_quality/helpers.ts | 58 +++ .../impl/data_quality/index.test.tsx | 7 +- .../impl/data_quality/index.tsx | 13 +- .../mock/test_providers/test_providers.tsx | 3 + .../impl/data_quality/translations.ts | 10 + .../impl/data_quality/types.ts | 14 +- .../use_ilm_explain/index.test.tsx | 4 + .../data_quality/use_mappings/index.test.tsx | 3 + .../use_results_rollup/helpers.test.ts | 16 - .../use_results_rollup/helpers.ts | 11 - .../data_quality/use_results_rollup/index.tsx | 127 ++++-- .../data_quality/use_stats/index.test.tsx | 4 + .../use_unallowed_values/index.test.tsx | 3 + .../ecs_data_quality_dashboard/tsconfig.json | 2 + .../common/constants.ts | 1 + .../ecs_data_quality_dashboard/kibana.jsonc | 5 +- .../server/__mocks__/request_context.ts | 3 + .../server/helpers/get_available_indices.ts | 2 +- .../helpers/get_unallowed_field_requests.ts | 4 +- .../server/index.ts | 2 +- .../data_stream/results_data_stream.test.ts | 121 ++++++ .../lib/data_stream/results_data_stream.ts | 67 +++ .../lib/data_stream/results_field_map.ts | 40 ++ .../server/lib/fetch_ilm_explain.ts | 2 +- .../server/lib/fetch_mappings.ts | 2 +- .../server/lib/fetch_stats.ts | 2 +- .../server/lib/get_unallowed_field_values.ts | 4 +- .../server/plugin.ts | 58 ++- .../server/routes/get_ilm_explain.test.ts | 2 +- .../server/routes/get_ilm_explain.ts | 2 +- .../server/routes/get_index_mappings.test.ts | 2 +- .../server/routes/get_index_mappings.ts | 2 +- .../server/routes/get_index_stats.test.ts | 3 +- .../server/routes/get_index_stats.ts | 4 +- .../routes/get_unallowed_field_values.test.ts | 3 +- .../routes/get_unallowed_field_values.ts | 2 +- .../server/routes/index.ts | 1 + .../server/routes/results/get_results.test.ts | 211 ++++++++++ .../server/routes/results/get_results.ts | 113 +++++ .../server/routes/results/index.ts | 20 + .../server/routes/results/parser.test.ts | 23 + .../server/routes/results/parser.ts | 48 +++ .../routes/results/post_results.test.ts | 180 ++++++++ .../server/routes/results/post_results.ts | 80 ++++ .../server/routes/results/results.mock.ts | 202 +++++++++ .../server/routes/results/translations.ts | 15 + .../server/schemas/common.ts | 2 +- .../server/schemas/result.ts | 70 ++++ .../server/types.ts | 14 + .../ecs_data_quality_dashboard/tsconfig.json | 3 + .../telemetry/events/data_quality/index.ts | 42 ++ .../telemetry/events/data_quality/types.ts | 3 + .../public/overview/pages/data_quality.tsx | 8 +- yarn.lock | 4 + 86 files changed, 4229 insertions(+), 121 deletions(-) create mode 100644 packages/kbn-data-stream-adapter/README.md create mode 100644 packages/kbn-data-stream-adapter/index.ts create mode 100644 packages/kbn-data-stream-adapter/jest.config.js create mode 100644 packages/kbn-data-stream-adapter/kibana.jsonc create mode 100644 packages/kbn-data-stream-adapter/package.json create mode 100644 packages/kbn-data-stream-adapter/src/create_or_update_component_template.test.ts create mode 100644 packages/kbn-data-stream-adapter/src/create_or_update_component_template.ts create mode 100644 packages/kbn-data-stream-adapter/src/create_or_update_data_stream.test.ts create mode 100644 packages/kbn-data-stream-adapter/src/create_or_update_data_stream.ts create mode 100644 packages/kbn-data-stream-adapter/src/create_or_update_index_template.test.ts create mode 100644 packages/kbn-data-stream-adapter/src/create_or_update_index_template.ts create mode 100644 packages/kbn-data-stream-adapter/src/data_stream_adapter.ts create mode 100644 packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts create mode 100644 packages/kbn-data-stream-adapter/src/field_maps/ecs_field_map.ts create mode 100644 packages/kbn-data-stream-adapter/src/field_maps/mapping_from_field_map.test.ts create mode 100644 packages/kbn-data-stream-adapter/src/field_maps/mapping_from_field_map.ts create mode 100644 packages/kbn-data-stream-adapter/src/field_maps/types.ts create mode 100644 packages/kbn-data-stream-adapter/src/install_with_timeout.test.ts create mode 100644 packages/kbn-data-stream-adapter/src/install_with_timeout.ts create mode 100644 packages/kbn-data-stream-adapter/src/resource_installer_utils.test.ts create mode 100644 packages/kbn-data-stream-adapter/src/resource_installer_utils.ts create mode 100644 packages/kbn-data-stream-adapter/src/retry_transient_es_errors.test.ts create mode 100644 packages/kbn-data-stream-adapter/src/retry_transient_es_errors.ts create mode 100644 packages/kbn-data-stream-adapter/tsconfig.json create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_data_stream.test.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_data_stream.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_field_map.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.test.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/index.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/parser.test.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/parser.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.test.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/results.mock.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/translations.ts create mode 100644 x-pack/plugins/ecs_data_quality_dashboard/server/schemas/result.ts diff --git a/.eslintrc.js b/.eslintrc.js index 96016911e40aa..f3a4fcf6ecc0d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1121,6 +1121,7 @@ module.exports = { 'x-pack/plugins/security_solution_serverless/**/*.{js,mjs,ts,tsx}', 'x-pack/plugins/timelines/**/*.{js,mjs,ts,tsx}', 'x-pack/plugins/cases/**/*.{js,mjs,ts,tsx}', + 'packages/kbn-data-stream-adapter/**/*.{js,mjs,ts,tsx}', ], plugins: ['eslint-plugin-node', 'react'], env: { @@ -1218,6 +1219,8 @@ module.exports = { 'x-pack/plugins/security_solution_ess/**/*.{js,mjs,ts,tsx}', 'x-pack/plugins/security_solution_serverless/**/*.{js,mjs,ts,tsx}', 'x-pack/plugins/cases/**/*.{js,mjs,ts,tsx}', + 'x-pack/plugins/ecs_data_quality_dashboard/**/*.{js,mjs,ts,tsx}', + 'packages/kbn-data-stream-adapter/**/*.{js,mjs,ts,tsx}', ], rules: { '@typescript-eslint/consistent-type-imports': 'error', diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0c5559b4d8fd4..f272edf41510f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -319,6 +319,7 @@ x-pack/packages/kbn-data-forge @elastic/obs-ux-management-team src/plugins/data @elastic/kibana-visualizations @elastic/kibana-data-discovery test/plugin_functional/plugins/data_search @elastic/kibana-data-discovery packages/kbn-data-service @elastic/kibana-visualizations @elastic/kibana-data-discovery +packages/kbn-data-stream-adapter @elastic/security-threat-hunting-explore src/plugins/data_view_editor @elastic/kibana-data-discovery examples/data_view_field_editor_example @elastic/kibana-data-discovery src/plugins/data_view_field_editor @elastic/kibana-data-discovery diff --git a/package.json b/package.json index cb60182479a90..bc68dac0ffe07 100644 --- a/package.json +++ b/package.json @@ -369,6 +369,7 @@ "@kbn/data-plugin": "link:src/plugins/data", "@kbn/data-search-plugin": "link:test/plugin_functional/plugins/data_search", "@kbn/data-service": "link:packages/kbn-data-service", + "@kbn/data-stream-adapter": "link:packages/kbn-data-stream-adapter", "@kbn/data-view-editor-plugin": "link:src/plugins/data_view_editor", "@kbn/data-view-field-editor-example-plugin": "link:examples/data_view_field_editor_example", "@kbn/data-view-field-editor-plugin": "link:src/plugins/data_view_field_editor", diff --git a/packages/kbn-data-stream-adapter/README.md b/packages/kbn-data-stream-adapter/README.md new file mode 100644 index 0000000000000..04a3d854aced7 --- /dev/null +++ b/packages/kbn-data-stream-adapter/README.md @@ -0,0 +1,69 @@ +# @kbn/data-stream-adapter + +Utility library for Elasticsearch data stream management. + +## DataStreamAdapter + +Manage single data streams. Example: + +``` +// Setup +const dataStream = new DataStreamAdapter('my-awesome-datastream', { kibanaVersion: '8.12.1' }); + +dataStream.setComponentTemplate({ + name: 'awesome-component-template', + fieldMap: { + 'awesome.field1: { type: 'keyword', required: true }, + 'awesome.nested.field2: { type: 'number', required: false }, + // ... + }, +}); + +dataStream.setIndexTemplate({ + name: 'awesome-index-template', + componentTemplateRefs: ['awesome-component-template', 'ecs-component-template'], + template: { + lifecycle: { + data_retention: '5d', + }, + }, +}); + +// Start +await dataStream.install({ logger, esClient, pluginStop$ }); // Installs templates and the data stream, or updates existing. +``` + + +## DataStreamSpacesAdapter + +Manage data streams per space. Example: + +``` +// Setup +const spacesDataStream = new DataStreamSpacesAdapter('my-awesome-datastream', { kibanaVersion: '8.12.1' }); + +spacesDataStream.setComponentTemplate({ + name: 'awesome-component-template', + fieldMap: { + 'awesome.field1: { type: 'keyword', required: true }, + 'awesome.nested.field2: { type: 'number', required: false }, + // ... + }, +}); + +spacesDataStream.setIndexTemplate({ + name: 'awesome-index-template', + componentTemplateRefs: ['awesome-component-template', 'ecs-component-template'], + template: { + lifecycle: { + data_retention: '5d', + }, + }, +}); + +// Start +await spacesDataStream.install({ logger, esClient, pluginStop$ }); // Installs templates and updates existing data streams. + +// Create a space data stream on the fly +await spacesDataStream.installSpace('space2'); // creates 'my-awesome-datastream-space2' data stream if it does not exist. +``` diff --git a/packages/kbn-data-stream-adapter/index.ts b/packages/kbn-data-stream-adapter/index.ts new file mode 100644 index 0000000000000..808145be4f12e --- /dev/null +++ b/packages/kbn-data-stream-adapter/index.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 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. + */ + +export { DataStreamAdapter } from './src/data_stream_adapter'; +export { DataStreamSpacesAdapter } from './src/data_stream_spaces_adapter'; +export { retryTransientEsErrors } from './src/retry_transient_es_errors'; +export { ecsFieldMap, type EcsFieldMap } from './src/field_maps/ecs_field_map'; + +export type { + DataStreamAdapterParams, + SetComponentTemplateParams, + SetIndexTemplateParams, + InstallParams, +} from './src/data_stream_adapter'; +export * from './src/field_maps/types'; diff --git a/packages/kbn-data-stream-adapter/jest.config.js b/packages/kbn-data-stream-adapter/jest.config.js new file mode 100644 index 0000000000000..48b717249e353 --- /dev/null +++ b/packages/kbn-data-stream-adapter/jest.config.js @@ -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 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. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../..', + roots: ['/packages/kbn-data-stream-adapter'], +}; diff --git a/packages/kbn-data-stream-adapter/kibana.jsonc b/packages/kbn-data-stream-adapter/kibana.jsonc new file mode 100644 index 0000000000000..99cbb458a8517 --- /dev/null +++ b/packages/kbn-data-stream-adapter/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/data-stream-adapter", + "owner": "@elastic/security-threat-hunting-explore" +} diff --git a/packages/kbn-data-stream-adapter/package.json b/packages/kbn-data-stream-adapter/package.json new file mode 100644 index 0000000000000..80b16c25ac217 --- /dev/null +++ b/packages/kbn-data-stream-adapter/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/data-stream-adapter", + "version": "1.0.0", + "description": "Utility library for Elasticsearch Data Stream management", + "license": "SSPL-1.0 OR Elastic License 2.0", + "private": true +} diff --git a/packages/kbn-data-stream-adapter/src/create_or_update_component_template.test.ts b/packages/kbn-data-stream-adapter/src/create_or_update_component_template.test.ts new file mode 100644 index 0000000000000..78fabd29d1ae8 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/create_or_update_component_template.test.ts @@ -0,0 +1,290 @@ +/* + * 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 { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import type { DiagnosticResult } from '@elastic/elasticsearch'; +import { errors as EsErrors } from '@elastic/elasticsearch'; +import { createOrUpdateComponentTemplate } from './create_or_update_component_template'; + +const randomDelayMultiplier = 0.01; +const logger = loggingSystemMock.createLogger(); +const clusterClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + +const componentTemplate = { + name: 'test-mappings', + _meta: { + managed: true, + }, + template: { + settings: { + number_of_shards: 1, + 'index.mapping.total_fields.limit': 1500, + }, + mappings: { + dynamic: false, + properties: { + foo: { + ignore_above: 1024, + type: 'keyword', + }, + }, + }, + }, +}; + +describe('createOrUpdateComponentTemplate', () => { + beforeEach(() => { + jest.resetAllMocks(); + jest.spyOn(global.Math, 'random').mockReturnValue(randomDelayMultiplier); + }); + + it(`should call esClient to put component template`, async () => { + await createOrUpdateComponentTemplate({ + logger, + esClient: clusterClient, + template: componentTemplate, + totalFieldsLimit: 2500, + }); + + expect(clusterClient.cluster.putComponentTemplate).toHaveBeenCalledWith(componentTemplate); + }); + + it(`should retry on transient ES errors`, async () => { + clusterClient.cluster.putComponentTemplate + .mockRejectedValueOnce(new EsErrors.ConnectionError('foo')) + .mockRejectedValueOnce(new EsErrors.TimeoutError('timeout')) + .mockResolvedValue({ acknowledged: true }); + await createOrUpdateComponentTemplate({ + logger, + esClient: clusterClient, + template: componentTemplate, + totalFieldsLimit: 2500, + }); + + expect(clusterClient.cluster.putComponentTemplate).toHaveBeenCalledTimes(3); + }); + + it(`should log and throw error if max retries exceeded`, async () => { + clusterClient.cluster.putComponentTemplate.mockRejectedValue( + new EsErrors.ConnectionError('foo') + ); + await expect(() => + createOrUpdateComponentTemplate({ + logger, + esClient: clusterClient, + template: componentTemplate, + totalFieldsLimit: 2500, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"foo"`); + + expect(logger.error).toHaveBeenCalledWith( + `Error installing component template test-mappings - foo` + ); + expect(clusterClient.cluster.putComponentTemplate).toHaveBeenCalledTimes(4); + }); + + it(`should log and throw error if ES throws error`, async () => { + clusterClient.cluster.putComponentTemplate.mockRejectedValue(new Error('generic error')); + + await expect(() => + createOrUpdateComponentTemplate({ + logger, + esClient: clusterClient, + template: componentTemplate, + totalFieldsLimit: 2500, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"generic error"`); + + expect(logger.error).toHaveBeenCalledWith( + `Error installing component template test-mappings - generic error` + ); + }); + + it(`should update index template field limit and retry if putTemplate throws error with field limit error`, async () => { + clusterClient.cluster.putComponentTemplate.mockRejectedValueOnce( + new EsErrors.ResponseError({ + body: 'illegal_argument_exception: Limit of total fields [1800] has been exceeded', + } as DiagnosticResult) + ); + const existingIndexTemplate = { + name: 'test-template', + index_template: { + index_patterns: ['test*'], + composed_of: ['test-mappings'], + template: { + settings: { + auto_expand_replicas: '0-1', + hidden: true, + 'index.lifecycle': { + name: '.alerts-ilm-policy', + rollover_alias: `.alerts-empty-default`, + }, + 'index.mapping.total_fields.limit': 1800, + }, + mappings: { + dynamic: false, + }, + }, + }, + }; + + clusterClient.indices.getIndexTemplate.mockResolvedValueOnce({ + index_templates: [existingIndexTemplate], + }); + + await createOrUpdateComponentTemplate({ + logger, + esClient: clusterClient, + template: componentTemplate, + totalFieldsLimit: 2500, + }); + + expect(logger.info).toHaveBeenCalledWith('Updating total_fields.limit from 1800 to 2500'); + expect(clusterClient.cluster.putComponentTemplate).toHaveBeenCalledTimes(2); + expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledTimes(1); + expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledWith({ + name: existingIndexTemplate.name, + body: { + ...existingIndexTemplate.index_template, + template: { + ...existingIndexTemplate.index_template.template, + settings: { + ...existingIndexTemplate.index_template.template?.settings, + 'index.mapping.total_fields.limit': 2500, + }, + }, + }, + }); + }); + + it(`should update index template field limit and retry if putTemplate throws error with field limit error when there are malformed index templates`, async () => { + clusterClient.cluster.putComponentTemplate.mockRejectedValueOnce( + new EsErrors.ResponseError({ + body: 'illegal_argument_exception: Limit of total fields [1800] has been exceeded', + } as DiagnosticResult) + ); + const existingIndexTemplate = { + name: 'test-template', + index_template: { + index_patterns: ['test*'], + composed_of: ['test-mappings'], + template: { + settings: { + auto_expand_replicas: '0-1', + hidden: true, + 'index.lifecycle': { + name: '.alerts-ilm-policy', + rollover_alias: `.alerts-empty-default`, + }, + 'index.mapping.total_fields.limit': 1800, + }, + mappings: { + dynamic: false, + }, + }, + }, + }; + + clusterClient.indices.getIndexTemplate.mockResolvedValueOnce({ + index_templates: [ + existingIndexTemplate, + { + name: 'lyndon', + // @ts-expect-error + index_template: { + index_patterns: ['intel*'], + }, + }, + { + name: 'sample_ds', + // @ts-expect-error + index_template: { + index_patterns: ['sample_ds-*'], + data_stream: { + hidden: false, + allow_custom_routing: false, + }, + }, + }, + ], + }); + + await createOrUpdateComponentTemplate({ + logger, + esClient: clusterClient, + template: componentTemplate, + totalFieldsLimit: 2500, + }); + + expect(logger.info).toHaveBeenCalledWith('Updating total_fields.limit from 1800 to 2500'); + expect(clusterClient.cluster.putComponentTemplate).toHaveBeenCalledTimes(2); + expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledTimes(1); + expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledWith({ + name: existingIndexTemplate.name, + body: { + ...existingIndexTemplate.index_template, + template: { + ...existingIndexTemplate.index_template.template, + settings: { + ...existingIndexTemplate.index_template.template?.settings, + 'index.mapping.total_fields.limit': 2500, + }, + }, + }, + }); + }); + + it(`should retry getIndexTemplate and putIndexTemplate on transient ES errors`, async () => { + clusterClient.cluster.putComponentTemplate.mockRejectedValueOnce( + new EsErrors.ResponseError({ + body: 'illegal_argument_exception: Limit of total fields [1800] has been exceeded', + } as DiagnosticResult) + ); + const existingIndexTemplate = { + name: 'test-template', + index_template: { + index_patterns: ['test*'], + composed_of: ['test-mappings'], + template: { + settings: { + auto_expand_replicas: '0-1', + hidden: true, + 'index.lifecycle': { + name: '.alerts-ilm-policy', + rollover_alias: `.alerts-empty-default`, + }, + 'index.mapping.total_fields.limit': 1800, + }, + mappings: { + dynamic: false, + }, + }, + }, + }; + clusterClient.indices.getIndexTemplate + .mockRejectedValueOnce(new EsErrors.ConnectionError('foo')) + .mockRejectedValueOnce(new EsErrors.TimeoutError('timeout')) + .mockResolvedValueOnce({ + index_templates: [existingIndexTemplate], + }); + clusterClient.indices.putIndexTemplate + .mockRejectedValueOnce(new EsErrors.ConnectionError('foo')) + .mockRejectedValueOnce(new EsErrors.TimeoutError('timeout')) + .mockResolvedValue({ acknowledged: true }); + await createOrUpdateComponentTemplate({ + logger, + esClient: clusterClient, + template: componentTemplate, + totalFieldsLimit: 2500, + }); + + expect(logger.info).toHaveBeenCalledWith('Updating total_fields.limit from 1800 to 2500'); + expect(clusterClient.indices.getIndexTemplate).toHaveBeenCalledTimes(3); + expect(clusterClient.indices.putIndexTemplate).toHaveBeenCalledTimes(3); + }); +}); diff --git a/packages/kbn-data-stream-adapter/src/create_or_update_component_template.ts b/packages/kbn-data-stream-adapter/src/create_or_update_component_template.ts new file mode 100644 index 0000000000000..c63dedaae6ea1 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/create_or_update_component_template.ts @@ -0,0 +1,118 @@ +/* + * 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 type { + ClusterPutComponentTemplateRequest, + IndicesGetIndexTemplateIndexTemplateItem, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { Logger, ElasticsearchClient } from '@kbn/core/server'; +import { asyncForEach } from '@kbn/std'; +import { retryTransientEsErrors } from './retry_transient_es_errors'; + +interface CreateOrUpdateComponentTemplateOpts { + logger: Logger; + esClient: ElasticsearchClient; + template: ClusterPutComponentTemplateRequest; + totalFieldsLimit: number; +} + +const putIndexTemplateTotalFieldsLimitUsingComponentTemplate = async ( + esClient: ElasticsearchClient, + componentTemplateName: string, + totalFieldsLimit: number, + logger: Logger +) => { + // Get all index templates and filter down to just the ones referencing this component template + const { index_templates: indexTemplates } = await retryTransientEsErrors( + () => esClient.indices.getIndexTemplate(), + { logger } + ); + const indexTemplatesUsingComponentTemplate = (indexTemplates ?? []).filter( + (indexTemplate: IndicesGetIndexTemplateIndexTemplateItem) => + (indexTemplate.index_template?.composed_of ?? []).includes(componentTemplateName) + ); + + await asyncForEach( + indexTemplatesUsingComponentTemplate, + async (template: IndicesGetIndexTemplateIndexTemplateItem) => { + await retryTransientEsErrors( + () => + esClient.indices.putIndexTemplate({ + name: template.name, + body: { + ...template.index_template, + template: { + ...template.index_template.template, + settings: { + ...template.index_template.template?.settings, + 'index.mapping.total_fields.limit': totalFieldsLimit, + }, + }, + }, + }), + { logger } + ); + } + ); +}; + +const createOrUpdateComponentTemplateHelper = async ( + esClient: ElasticsearchClient, + template: ClusterPutComponentTemplateRequest, + totalFieldsLimit: number, + logger: Logger +) => { + try { + await retryTransientEsErrors(() => esClient.cluster.putComponentTemplate(template), { logger }); + } catch (error) { + const limitErrorMatch = error.message.match( + /Limit of total fields \[(\d+)\] has been exceeded/ + ); + if (limitErrorMatch != null) { + // This error message occurs when there is an index template using this component template + // that contains a field limit setting that using this component template exceeds + // Specifically, this can happen for the ECS component template when we add new fields + // to adhere to the ECS spec. Individual index templates specify field limits so if the + // number of new ECS fields pushes the composed mapping above the limit, this error will + // occur. We have to update the field limit inside the index template now otherwise we + // can never update the component template + + logger.info(`Updating total_fields.limit from ${limitErrorMatch[1]} to ${totalFieldsLimit}`); + + await putIndexTemplateTotalFieldsLimitUsingComponentTemplate( + esClient, + template.name, + totalFieldsLimit, + logger + ); + + // Try to update the component template again + await retryTransientEsErrors(() => esClient.cluster.putComponentTemplate(template), { + logger, + }); + } else { + throw error; + } + } +}; + +export const createOrUpdateComponentTemplate = async ({ + logger, + esClient, + template, + totalFieldsLimit, +}: CreateOrUpdateComponentTemplateOpts) => { + logger.info(`Installing component template ${template.name}`); + + try { + await createOrUpdateComponentTemplateHelper(esClient, template, totalFieldsLimit, logger); + } catch (err) { + logger.error(`Error installing component template ${template.name} - ${err.message}`); + throw err; + } +}; diff --git a/packages/kbn-data-stream-adapter/src/create_or_update_data_stream.test.ts b/packages/kbn-data-stream-adapter/src/create_or_update_data_stream.test.ts new file mode 100644 index 0000000000000..cc587dcaebfad --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/create_or_update_data_stream.test.ts @@ -0,0 +1,172 @@ +/* + * 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 type { IndicesDataStream } from '@elastic/elasticsearch/lib/api/types'; +import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import { + updateDataStreams, + createDataStream, + createOrUpdateDataStream, +} from './create_or_update_data_stream'; + +const logger = loggingSystemMock.createLogger(); +const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + +esClient.indices.putMapping.mockResolvedValue({ acknowledged: true }); +esClient.indices.putSettings.mockResolvedValue({ acknowledged: true }); + +const simulateIndexTemplateResponse = { template: { mappings: { is_managed: true } } }; +esClient.indices.simulateIndexTemplate.mockResolvedValue(simulateIndexTemplateResponse); + +const name = 'test_data_stream'; +const totalFieldsLimit = 1000; + +describe('updateDataStreams', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it(`should update data streams`, async () => { + const dataStreamName = 'test_data_stream-default'; + esClient.indices.getDataStream.mockResolvedValueOnce({ + data_streams: [{ name: dataStreamName } as IndicesDataStream], + }); + + await updateDataStreams({ + esClient, + logger, + name, + totalFieldsLimit, + }); + + expect(esClient.indices.getDataStream).toHaveBeenCalledWith({ name, expand_wildcards: 'all' }); + + expect(esClient.indices.putSettings).toHaveBeenCalledWith({ + index: dataStreamName, + body: { 'index.mapping.total_fields.limit': totalFieldsLimit }, + }); + expect(esClient.indices.simulateIndexTemplate).toHaveBeenCalledWith({ + name: dataStreamName, + }); + expect(esClient.indices.putMapping).toHaveBeenCalledWith({ + index: dataStreamName, + body: simulateIndexTemplateResponse.template.mappings, + }); + }); + + it(`should update multiple data streams`, async () => { + const dataStreamName1 = 'test_data_stream-1'; + const dataStreamName2 = 'test_data_stream-2'; + esClient.indices.getDataStream.mockResolvedValueOnce({ + data_streams: [{ name: dataStreamName1 }, { name: dataStreamName2 }] as IndicesDataStream[], + }); + + await updateDataStreams({ + esClient, + logger, + name, + totalFieldsLimit, + }); + + expect(esClient.indices.putSettings).toHaveBeenCalledTimes(2); + expect(esClient.indices.simulateIndexTemplate).toHaveBeenCalledTimes(2); + expect(esClient.indices.putMapping).toHaveBeenCalledTimes(2); + }); + + it(`should not update data streams when not exist`, async () => { + esClient.indices.getDataStream.mockResolvedValueOnce({ data_streams: [] }); + + await updateDataStreams({ + esClient, + logger, + name, + totalFieldsLimit, + }); + + expect(esClient.indices.putSettings).not.toHaveBeenCalled(); + expect(esClient.indices.simulateIndexTemplate).not.toHaveBeenCalled(); + expect(esClient.indices.putMapping).not.toHaveBeenCalled(); + }); +}); + +describe('createDataStream', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it(`should create data stream`, async () => { + esClient.indices.getDataStream.mockResolvedValueOnce({ data_streams: [] }); + + await createDataStream({ + esClient, + logger, + name, + }); + + expect(esClient.indices.createDataStream).toHaveBeenCalledWith({ name }); + }); + + it(`should not create data stream if already exists`, async () => { + esClient.indices.getDataStream.mockResolvedValueOnce({ + data_streams: [{ name: 'test_data_stream-default' } as IndicesDataStream], + }); + + await createDataStream({ + esClient, + logger, + name, + }); + + expect(esClient.indices.createDataStream).not.toHaveBeenCalled(); + }); +}); + +describe('createOrUpdateDataStream', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it(`should create data stream if not exists`, async () => { + esClient.indices.getDataStream.mockResolvedValueOnce({ data_streams: [] }); + + await createDataStream({ + esClient, + logger, + name, + }); + + expect(esClient.indices.createDataStream).toHaveBeenCalledWith({ name }); + }); + + it(`should update data stream if already exists`, async () => { + esClient.indices.getDataStream.mockResolvedValueOnce({ + data_streams: [{ name: 'test_data_stream-default' } as IndicesDataStream], + }); + + await createOrUpdateDataStream({ + esClient, + logger, + name, + totalFieldsLimit, + }); + + expect(esClient.indices.getDataStream).toHaveBeenCalledWith({ name, expand_wildcards: 'all' }); + + expect(esClient.indices.putSettings).toHaveBeenCalledWith({ + index: name, + body: { 'index.mapping.total_fields.limit': totalFieldsLimit }, + }); + expect(esClient.indices.simulateIndexTemplate).toHaveBeenCalledWith({ + name, + }); + expect(esClient.indices.putMapping).toHaveBeenCalledWith({ + index: name, + body: simulateIndexTemplateResponse.template.mappings, + }); + }); +}); diff --git a/packages/kbn-data-stream-adapter/src/create_or_update_data_stream.ts b/packages/kbn-data-stream-adapter/src/create_or_update_data_stream.ts new file mode 100644 index 0000000000000..5cff6005ea8e0 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/create_or_update_data_stream.ts @@ -0,0 +1,239 @@ +/* + * 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 type { IndicesDataStream } from '@elastic/elasticsearch/lib/api/types'; +import type { IndicesSimulateIndexTemplateResponse } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { Logger, ElasticsearchClient } from '@kbn/core/server'; +import { get } from 'lodash'; +import { retryTransientEsErrors } from './retry_transient_es_errors'; + +interface UpdateIndexMappingsOpts { + logger: Logger; + esClient: ElasticsearchClient; + indexNames: string[]; + totalFieldsLimit: number; +} + +interface UpdateIndexOpts { + logger: Logger; + esClient: ElasticsearchClient; + indexName: string; + totalFieldsLimit: number; +} + +const updateTotalFieldLimitSetting = async ({ + logger, + esClient, + indexName, + totalFieldsLimit, +}: UpdateIndexOpts) => { + logger.debug(`Updating total field limit setting for ${indexName} data stream.`); + + try { + const body = { 'index.mapping.total_fields.limit': totalFieldsLimit }; + await retryTransientEsErrors(() => esClient.indices.putSettings({ index: indexName, body }), { + logger, + }); + } catch (err) { + logger.error( + `Failed to PUT index.mapping.total_fields.limit settings for ${indexName}: ${err.message}` + ); + throw err; + } +}; + +// This will update the mappings but *not* the settings. This +// is due to the fact settings can be classed as dynamic and static, and static +// updates will fail on an index that isn't closed. New settings *will* be applied as part +// of the ILM policy rollovers. More info: https://github.com/elastic/kibana/pull/113389#issuecomment-940152654 +const updateMapping = async ({ logger, esClient, indexName }: UpdateIndexOpts) => { + logger.debug(`Updating mappings for ${indexName} data stream.`); + + let simulatedIndexMapping: IndicesSimulateIndexTemplateResponse; + try { + simulatedIndexMapping = await retryTransientEsErrors( + () => esClient.indices.simulateIndexTemplate({ name: indexName }), + { logger } + ); + } catch (err) { + logger.error( + `Ignored PUT mappings for ${indexName}; error generating simulated mappings: ${err.message}` + ); + return; + } + + const simulatedMapping = get(simulatedIndexMapping, ['template', 'mappings']); + + if (simulatedMapping == null) { + logger.error(`Ignored PUT mappings for ${indexName}; simulated mappings were empty`); + return; + } + + try { + await retryTransientEsErrors( + () => esClient.indices.putMapping({ index: indexName, body: simulatedMapping }), + { logger } + ); + } catch (err) { + logger.error(`Failed to PUT mapping for ${indexName}: ${err.message}`); + throw err; + } +}; +/** + * Updates the data stream mapping and total field limit setting + */ +const updateDataStreamMappings = async ({ + logger, + esClient, + totalFieldsLimit, + indexNames, +}: UpdateIndexMappingsOpts) => { + // Update total field limit setting of found indices + // Other index setting changes are not updated at this time + await Promise.all( + indexNames.map((indexName) => + updateTotalFieldLimitSetting({ logger, esClient, totalFieldsLimit, indexName }) + ) + ); + // Update mappings of the found indices. + await Promise.all( + indexNames.map((indexName) => updateMapping({ logger, esClient, totalFieldsLimit, indexName })) + ); +}; + +export interface CreateOrUpdateDataStreamParams { + name: string; + logger: Logger; + esClient: ElasticsearchClient; + totalFieldsLimit: number; +} + +export async function createOrUpdateDataStream({ + logger, + esClient, + name, + totalFieldsLimit, +}: CreateOrUpdateDataStreamParams): Promise { + logger.info(`Creating data stream - ${name}`); + + // check if data stream exists + let dataStreamExists = false; + try { + const response = await retryTransientEsErrors( + () => esClient.indices.getDataStream({ name, expand_wildcards: 'all' }), + { logger } + ); + dataStreamExists = response.data_streams.length > 0; + } catch (error) { + if (error?.statusCode !== 404) { + logger.error(`Error fetching data stream for ${name} - ${error.message}`); + throw error; + } + } + + // if a data stream exists, update the underlying mapping + if (dataStreamExists) { + await updateDataStreamMappings({ + logger, + esClient, + indexNames: [name], + totalFieldsLimit, + }); + } else { + try { + await retryTransientEsErrors(() => esClient.indices.createDataStream({ name }), { logger }); + } catch (error) { + if (error?.meta?.body?.error?.type !== 'resource_already_exists_exception') { + logger.error(`Error creating data stream ${name} - ${error.message}`); + throw error; + } + } + } +} + +export interface CreateDataStreamParams { + name: string; + logger: Logger; + esClient: ElasticsearchClient; +} + +export async function createDataStream({ + logger, + esClient, + name, +}: CreateDataStreamParams): Promise { + logger.info(`Creating data stream - ${name}`); + + // check if data stream exists + let dataStreamExists = false; + try { + const response = await retryTransientEsErrors( + () => esClient.indices.getDataStream({ name, expand_wildcards: 'all' }), + { logger } + ); + dataStreamExists = response.data_streams.length > 0; + } catch (error) { + if (error?.statusCode !== 404) { + logger.error(`Error fetching data stream for ${name} - ${error.message}`); + throw error; + } + } + + // return if data stream already created + if (dataStreamExists) { + return; + } + + try { + await retryTransientEsErrors(() => esClient.indices.createDataStream({ name }), { logger }); + } catch (error) { + if (error?.meta?.body?.error?.type !== 'resource_already_exists_exception') { + logger.error(`Error creating data stream ${name} - ${error.message}`); + throw error; + } + } +} + +export interface CreateOrUpdateSpacesDataStreamParams { + name: string; + logger: Logger; + esClient: ElasticsearchClient; + totalFieldsLimit: number; +} + +export async function updateDataStreams({ + logger, + esClient, + name, + totalFieldsLimit, +}: CreateOrUpdateSpacesDataStreamParams): Promise { + logger.info(`Updating data streams - ${name}`); + + // check if data stream exists + let dataStreams: IndicesDataStream[] = []; + try { + const response = await retryTransientEsErrors( + () => esClient.indices.getDataStream({ name, expand_wildcards: 'all' }), + { logger } + ); + dataStreams = response.data_streams; + } catch (error) { + if (error?.statusCode !== 404) { + logger.error(`Error fetching data stream for ${name} - ${error.message}`); + throw error; + } + } + if (dataStreams.length > 0) { + await updateDataStreamMappings({ + logger, + esClient, + totalFieldsLimit, + indexNames: dataStreams.map((dataStream) => dataStream.name), + }); + } +} diff --git a/packages/kbn-data-stream-adapter/src/create_or_update_index_template.test.ts b/packages/kbn-data-stream-adapter/src/create_or_update_index_template.test.ts new file mode 100644 index 0000000000000..cb3b6e77a02b5 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/create_or_update_index_template.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 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 { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import { errors as EsErrors } from '@elastic/elasticsearch'; +import { createOrUpdateIndexTemplate } from './create_or_update_index_template'; + +const randomDelayMultiplier = 0.01; +const logger = loggingSystemMock.createLogger(); +const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + +const getIndexTemplate = (namespace: string = 'default', useDataStream: boolean = false) => ({ + name: `.alerts-test.alerts-${namespace}-index-template`, + body: { + _meta: { + kibana: { + version: '8.6.1', + }, + managed: true, + namespace, + }, + composed_of: ['mappings1', 'framework-mappings'], + index_patterns: [`.internal.alerts-test.alerts-${namespace}-*`], + template: { + mappings: { + _meta: { + kibana: { + version: '8.6.1', + }, + managed: true, + namespace, + }, + dynamic: false, + }, + settings: { + auto_expand_replicas: '0-1', + hidden: true, + ...(useDataStream + ? {} + : { + 'index.lifecycle': { + name: 'test-ilm-policy', + rollover_alias: `.alerts-test.alerts-${namespace}`, + }, + }), + 'index.mapping.ignore_malformed': true, + 'index.mapping.total_fields.limit': 2500, + }, + }, + priority: namespace.length, + }, +}); + +const simulateTemplateResponse = { + template: { + aliases: { + alias_name_1: { + is_hidden: true, + }, + alias_name_2: { + is_hidden: true, + }, + }, + mappings: { enabled: false }, + settings: {}, + }, +}; + +describe('createOrUpdateIndexTemplate', () => { + beforeEach(() => { + jest.resetAllMocks(); + jest.spyOn(global.Math, 'random').mockReturnValue(randomDelayMultiplier); + }); + + it(`should call esClient to put index template`, async () => { + esClient.indices.simulateTemplate.mockImplementation(async () => simulateTemplateResponse); + await createOrUpdateIndexTemplate({ logger, esClient, template: getIndexTemplate() }); + + expect(esClient.indices.simulateTemplate).toHaveBeenCalledWith(getIndexTemplate()); + expect(esClient.indices.putIndexTemplate).toHaveBeenCalledWith(getIndexTemplate()); + }); + + it(`should retry on transient ES errors`, async () => { + esClient.indices.simulateTemplate.mockImplementation(async () => simulateTemplateResponse); + esClient.indices.putIndexTemplate + .mockRejectedValueOnce(new EsErrors.ConnectionError('foo')) + .mockRejectedValueOnce(new EsErrors.TimeoutError('timeout')) + .mockResolvedValue({ acknowledged: true }); + await createOrUpdateIndexTemplate({ logger, esClient, template: getIndexTemplate() }); + + expect(esClient.indices.putIndexTemplate).toHaveBeenCalledTimes(3); + }); + + it(`should retry simulateTemplate on transient ES errors`, async () => { + esClient.indices.simulateTemplate + .mockRejectedValueOnce(new EsErrors.ConnectionError('foo')) + .mockRejectedValueOnce(new EsErrors.TimeoutError('timeout')) + .mockImplementation(async () => simulateTemplateResponse); + esClient.indices.putIndexTemplate.mockResolvedValue({ acknowledged: true }); + await createOrUpdateIndexTemplate({ logger, esClient, template: getIndexTemplate }); + + expect(esClient.indices.simulateTemplate).toHaveBeenCalledTimes(3); + }); + + it(`should log and throw error if max retries exceeded`, async () => { + esClient.indices.simulateTemplate.mockImplementation(async () => simulateTemplateResponse); + esClient.indices.putIndexTemplate.mockRejectedValue(new EsErrors.ConnectionError('foo')); + await expect(() => + createOrUpdateIndexTemplate({ logger, esClient, template: getIndexTemplate() }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"foo"`); + + expect(logger.error).toHaveBeenCalledWith( + `Error installing index template .alerts-test.alerts-default-index-template - foo`, + expect.any(Error) + ); + expect(esClient.indices.putIndexTemplate).toHaveBeenCalledTimes(4); + }); + + it(`should log and throw error if ES throws error`, async () => { + esClient.indices.simulateTemplate.mockImplementation(async () => simulateTemplateResponse); + esClient.indices.putIndexTemplate.mockRejectedValue(new Error('generic error')); + + await expect(() => + createOrUpdateIndexTemplate({ logger, esClient, template: getIndexTemplate() }) + ).rejects.toThrowErrorMatchingInlineSnapshot(`"generic error"`); + + expect(logger.error).toHaveBeenCalledWith( + `Error installing index template .alerts-test.alerts-default-index-template - generic error`, + expect.any(Error) + ); + }); + + it(`should log and return without updating template if simulate throws error`, async () => { + esClient.indices.simulateTemplate.mockRejectedValue(new Error('simulate error')); + esClient.indices.putIndexTemplate.mockRejectedValue(new Error('generic error')); + + await createOrUpdateIndexTemplate({ logger, esClient, template: getIndexTemplate() }); + + expect(logger.error).toHaveBeenCalledWith( + `Failed to simulate index template mappings for .alerts-test.alerts-default-index-template; not applying mappings - simulate error`, + expect.any(Error) + ); + expect(esClient.indices.putIndexTemplate).not.toHaveBeenCalled(); + }); + + it(`should throw error if simulate returns empty mappings`, async () => { + esClient.indices.simulateTemplate.mockImplementationOnce(async () => ({ + ...simulateTemplateResponse, + template: { + ...simulateTemplateResponse.template, + mappings: {}, + }, + })); + + await expect(() => + createOrUpdateIndexTemplate({ logger, esClient, template: getIndexTemplate() }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"No mappings would be generated for .alerts-test.alerts-default-index-template, possibly due to failed/misconfigured bootstrapping"` + ); + expect(esClient.indices.putIndexTemplate).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/kbn-data-stream-adapter/src/create_or_update_index_template.ts b/packages/kbn-data-stream-adapter/src/create_or_update_index_template.ts new file mode 100644 index 0000000000000..e9d5d589c55d6 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/create_or_update_index_template.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 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 type { + IndicesPutIndexTemplateRequest, + MappingTypeMapping, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { Logger, ElasticsearchClient } from '@kbn/core/server'; +import { isEmpty } from 'lodash/fp'; +import { retryTransientEsErrors } from './retry_transient_es_errors'; + +interface CreateOrUpdateIndexTemplateOpts { + logger: Logger; + esClient: ElasticsearchClient; + template: IndicesPutIndexTemplateRequest; +} + +/** + * Installs index template that uses installed component template + * Prior to installation, simulates the installation to check for possible + * conflicts. Simulate should return an empty mapping if a template + * conflicts with an already installed template. + */ +export const createOrUpdateIndexTemplate = async ({ + logger, + esClient, + template, +}: CreateOrUpdateIndexTemplateOpts) => { + logger.info(`Installing index template ${template.name}`); + + let mappings: MappingTypeMapping = {}; + try { + // Simulate the index template to proactively identify any issues with the mapping + const simulateResponse = await retryTransientEsErrors( + () => esClient.indices.simulateTemplate(template), + { logger } + ); + mappings = simulateResponse.template.mappings; + } catch (err) { + logger.error( + `Failed to simulate index template mappings for ${template.name}; not applying mappings - ${err.message}`, + err + ); + return; + } + + if (isEmpty(mappings)) { + throw new Error( + `No mappings would be generated for ${template.name}, possibly due to failed/misconfigured bootstrapping` + ); + } + + try { + await retryTransientEsErrors(() => esClient.indices.putIndexTemplate(template), { + logger, + }); + } catch (err) { + logger.error(`Error installing index template ${template.name} - ${err.message}`, err); + throw err; + } +}; diff --git a/packages/kbn-data-stream-adapter/src/data_stream_adapter.ts b/packages/kbn-data-stream-adapter/src/data_stream_adapter.ts new file mode 100644 index 0000000000000..3b3e2958eb46a --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/data_stream_adapter.ts @@ -0,0 +1,160 @@ +/* + * 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 type { + ClusterPutComponentTemplateRequest, + IndicesIndexSettings, + IndicesPutIndexTemplateIndexTemplateMapping, + IndicesPutIndexTemplateRequest, +} from '@elastic/elasticsearch/lib/api/types'; +import type { Logger, ElasticsearchClient } from '@kbn/core/server'; +import type { Subject } from 'rxjs'; +import type { FieldMap } from './field_maps/types'; +import { createOrUpdateComponentTemplate } from './create_or_update_component_template'; +import { createOrUpdateDataStream } from './create_or_update_data_stream'; +import { createOrUpdateIndexTemplate } from './create_or_update_index_template'; +import { InstallShutdownError, installWithTimeout } from './install_with_timeout'; +import { getComponentTemplate, getIndexTemplate } from './resource_installer_utils'; + +export interface DataStreamAdapterParams { + kibanaVersion: string; + totalFieldsLimit?: number; +} +export interface SetComponentTemplateParams { + name: string; + fieldMap: FieldMap; + settings?: IndicesIndexSettings; + dynamic?: 'strict' | boolean; +} +export interface SetIndexTemplateParams { + name: string; + componentTemplateRefs?: string[]; + namespace?: string; + template?: IndicesPutIndexTemplateIndexTemplateMapping; + hidden?: boolean; +} + +export interface GetInstallFnParams { + logger: Logger; + pluginStop$: Subject; + tasksTimeoutMs?: number; +} +export interface InstallParams { + logger: Logger; + esClient: ElasticsearchClient | Promise; + pluginStop$: Subject; + tasksTimeoutMs?: number; +} + +const DEFAULT_FIELDS_LIMIT = 2500; + +export class DataStreamAdapter { + protected readonly kibanaVersion: string; + protected readonly totalFieldsLimit: number; + protected componentTemplates: ClusterPutComponentTemplateRequest[] = []; + protected indexTemplates: IndicesPutIndexTemplateRequest[] = []; + protected installed: boolean; + + constructor(protected readonly name: string, options: DataStreamAdapterParams) { + this.installed = false; + this.kibanaVersion = options.kibanaVersion; + this.totalFieldsLimit = options.totalFieldsLimit ?? DEFAULT_FIELDS_LIMIT; + } + + public setComponentTemplate(params: SetComponentTemplateParams) { + if (this.installed) { + throw new Error('Cannot set component template after install'); + } + this.componentTemplates.push(getComponentTemplate(params)); + } + + public setIndexTemplate(params: SetIndexTemplateParams) { + if (this.installed) { + throw new Error('Cannot set index template after install'); + } + this.indexTemplates.push( + getIndexTemplate({ + ...params, + indexPatterns: [this.name], + kibanaVersion: this.kibanaVersion, + totalFieldsLimit: this.totalFieldsLimit, + }) + ); + } + + protected getInstallFn({ logger, pluginStop$, tasksTimeoutMs }: GetInstallFnParams) { + return async (promise: Promise, description?: string): Promise => { + try { + await installWithTimeout({ + installFn: () => promise, + description, + timeoutMs: tasksTimeoutMs, + pluginStop$, + }); + } catch (err) { + if (err instanceof InstallShutdownError) { + logger.info(err.message); + } else { + throw err; + } + } + }; + } + + public async install({ + logger, + esClient: esClientToResolve, + pluginStop$, + tasksTimeoutMs, + }: InstallParams) { + this.installed = true; + + const esClient = await esClientToResolve; + const installFn = this.getInstallFn({ logger, pluginStop$, tasksTimeoutMs }); + + // Install component templates in parallel + await Promise.all( + this.componentTemplates.map((componentTemplate) => + installFn( + createOrUpdateComponentTemplate({ + template: componentTemplate, + esClient, + logger, + totalFieldsLimit: this.totalFieldsLimit, + }), + `${componentTemplate.name} component template` + ) + ) + ); + + // Install index templates in parallel + await Promise.all( + this.indexTemplates.map((indexTemplate) => + installFn( + createOrUpdateIndexTemplate({ + template: indexTemplate, + esClient, + logger, + }), + `${indexTemplate.name} index template` + ) + ) + ); + + // create data stream when everything is ready + await installFn( + createOrUpdateDataStream({ + name: this.name, + esClient, + logger, + totalFieldsLimit: this.totalFieldsLimit, + }), + `${this.name} data stream` + ); + } +} diff --git a/packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts b/packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts new file mode 100644 index 0000000000000..5daad080d4720 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts @@ -0,0 +1,100 @@ +/* + * 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 { createOrUpdateComponentTemplate } from './create_or_update_component_template'; +import { createDataStream, updateDataStreams } from './create_or_update_data_stream'; +import { createOrUpdateIndexTemplate } from './create_or_update_index_template'; +import { + DataStreamAdapter, + type DataStreamAdapterParams, + type InstallParams, +} from './data_stream_adapter'; + +export class DataStreamSpacesAdapter extends DataStreamAdapter { + private installedSpaceDataStreamName: Map>; + private _installSpace?: (spaceId: string) => Promise; + + constructor(private readonly prefix: string, options: DataStreamAdapterParams) { + super(`${prefix}-*`, options); // make indexTemplate `indexPatterns` match all data stream space names + this.installedSpaceDataStreamName = new Map(); + } + + public async install({ + logger, + esClient: esClientToResolve, + pluginStop$, + tasksTimeoutMs, + }: InstallParams) { + this.installed = true; + + const esClient = await esClientToResolve; + const installFn = this.getInstallFn({ logger, pluginStop$, tasksTimeoutMs }); + + // Install component templates in parallel + await Promise.all( + this.componentTemplates.map((componentTemplate) => + installFn( + createOrUpdateComponentTemplate({ + template: componentTemplate, + esClient, + logger, + totalFieldsLimit: this.totalFieldsLimit, + }), + `create or update ${componentTemplate.name} component template` + ) + ) + ); + + // Install index templates in parallel + await Promise.all( + this.indexTemplates.map((indexTemplate) => + installFn( + createOrUpdateIndexTemplate({ template: indexTemplate, esClient, logger }), + `create or update ${indexTemplate.name} index template` + ) + ) + ); + + // Update existing space data streams + await installFn( + updateDataStreams({ + name: `${this.prefix}-*`, + esClient, + logger, + totalFieldsLimit: this.totalFieldsLimit, + }), + `update space data streams` + ); + + // define function to install data stream for spaces on demand + this._installSpace = async (spaceId: string) => { + const existingInstallPromise = this.installedSpaceDataStreamName.get(spaceId); + if (existingInstallPromise) { + return existingInstallPromise; + } + const name = `${this.prefix}-${spaceId}`; + const installPromise = installFn( + createDataStream({ name, esClient, logger }), + `create ${name} data stream` + ).then(() => name); + + this.installedSpaceDataStreamName.set(spaceId, installPromise); + return installPromise; + }; + } + + public async installSpace(spaceId: string): Promise { + if (!this._installSpace) { + throw new Error('Cannot installSpace before install'); + } + return this._installSpace(spaceId); + } + + public async getInstalledSpaceName(spaceId: string): Promise { + return this.installedSpaceDataStreamName.get(spaceId); + } +} diff --git a/packages/kbn-data-stream-adapter/src/field_maps/ecs_field_map.ts b/packages/kbn-data-stream-adapter/src/field_maps/ecs_field_map.ts new file mode 100644 index 0000000000000..17e8af1da7887 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/field_maps/ecs_field_map.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 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 { EcsFlat } from '@kbn/ecs'; +import type { EcsMetadata, FieldMap } from './types'; + +const EXCLUDED_TYPES = ['constant_keyword']; + +// ECS fields that have reached Stage 2 in the RFC process +// are included in the generated Yaml but are still considered +// experimental. Some are correctly marked as beta but most are +// not. + +// More about the RFC stages here: https://elastic.github.io/ecs/stages.html + +// The following RFCS are currently in stage 2: +// https://github.com/elastic/ecs/blob/main/rfcs/text/0027-faas-fields.md +// https://github.com/elastic/ecs/blob/main/rfcs/text/0035-tty-output.md +// https://github.com/elastic/ecs/blob/main/rfcs/text/0037-host-metrics.md +// https://github.com/elastic/ecs/blob/main/rfcs/text/0040-volume-device.md + +// Fields from these RFCs that are not already in the ECS component template +// as of 8.11 are manually identified as experimental below. +// The next time this list is updated, we should check the above list of RFCs to +// see if any have moved to Stage 3 and remove them from the list and check if +// there are any new stage 2 RFCs with fields we should exclude as experimental. + +const EXPERIMENTAL_FIELDS = [ + 'faas.trigger', // this was previously mapped as nested but changed to object + 'faas.trigger.request_id', + 'faas.trigger.type', + 'host.cpu.system.norm.pct', + 'host.cpu.user.norm.pct', + 'host.fsstats.total_size.total', + 'host.fsstats.total_size.used', + 'host.fsstats.total_size.used.pct', + 'host.load.norm.1', + 'host.load.norm.5', + 'host.load.norm.15', + 'host.memory.actual.used.bytes', + 'host.memory.actual.used.pct', + 'host.memory.total', + 'process.io.bytes', + 'volume.bus_type', + 'volume.default_access', + 'volume.device_name', + 'volume.device_type', + 'volume.dos_name', + 'volume.file_system_type', + 'volume.mount_name', + 'volume.nt_name', + 'volume.product_id', + 'volume.product_name', + 'volume.removable', + 'volume.serial_number', + 'volume.size', + 'volume.vendor_id', + 'volume.vendor_name', + 'volume.writable', +]; + +export const ecsFieldMap: FieldMap = Object.fromEntries( + Object.entries(EcsFlat) + .filter( + ([key, value]) => !EXCLUDED_TYPES.includes(value.type) && !EXPERIMENTAL_FIELDS.includes(key) + ) + .map(([key, _]) => { + const value: EcsMetadata = EcsFlat[key as keyof typeof EcsFlat]; + return [ + key, + { + type: value.type, + array: value.normalize.includes('array'), + required: !!value.required, + ...(value.scaling_factor ? { scaling_factor: value.scaling_factor } : {}), + ...(value.ignore_above ? { ignore_above: value.ignore_above } : {}), + ...(value.multi_fields ? { multi_fields: value.multi_fields } : {}), + }, + ]; + }) +); + +export type EcsFieldMap = typeof ecsFieldMap; diff --git a/packages/kbn-data-stream-adapter/src/field_maps/mapping_from_field_map.test.ts b/packages/kbn-data-stream-adapter/src/field_maps/mapping_from_field_map.test.ts new file mode 100644 index 0000000000000..e851bdc21d01b --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/field_maps/mapping_from_field_map.test.ts @@ -0,0 +1,393 @@ +/* + * 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 { alertFieldMap, legacyAlertFieldMap, type FieldMap } from '@kbn/alerts-as-data-utils'; +import { mappingFromFieldMap } from './mapping_from_field_map'; + +export const testFieldMap: FieldMap = { + date_field: { + type: 'date', + array: false, + required: true, + }, + keyword_field: { + type: 'keyword', + array: false, + required: false, + ignore_above: 1024, + }, + long_field: { + type: 'long', + array: false, + required: false, + }, + multifield_field: { + type: 'keyword', + array: false, + required: false, + ignore_above: 1024, + multi_fields: [ + { + flat_name: 'multifield_field.text', + name: 'text', + type: 'match_only_text', + }, + ], + }, + geopoint_field: { + type: 'geo_point', + array: false, + required: false, + }, + ip_field: { + type: 'ip', + array: false, + required: false, + }, + array_field: { + type: 'keyword', + array: true, + required: false, + ignore_above: 1024, + }, + nested_array_field: { + type: 'nested', + array: false, + required: false, + }, + 'nested_array_field.field1': { + type: 'keyword', + array: false, + required: false, + ignore_above: 1024, + }, + 'nested_array_field.field2': { + type: 'keyword', + array: false, + required: false, + ignore_above: 1024, + }, + scaled_float_field: { + type: 'scaled_float', + array: false, + required: false, + scaling_factor: 1000, + }, + constant_keyword_field: { + type: 'constant_keyword', + array: false, + required: false, + }, + 'parent_field.child1': { + type: 'keyword', + array: false, + required: false, + ignore_above: 1024, + }, + 'parent_field.child2': { + type: 'keyword', + array: false, + required: false, + ignore_above: 1024, + }, + unmapped_object: { + type: 'object', + required: false, + enabled: false, + }, + formatted_field: { + type: 'date_range', + required: false, + format: 'epoch_millis||strict_date_optional_time', + }, +}; +export const expectedTestMapping = { + properties: { + array_field: { + ignore_above: 1024, + type: 'keyword', + }, + constant_keyword_field: { + type: 'constant_keyword', + }, + date_field: { + type: 'date', + }, + multifield_field: { + fields: { + text: { + type: 'match_only_text', + }, + }, + ignore_above: 1024, + type: 'keyword', + }, + geopoint_field: { + type: 'geo_point', + }, + ip_field: { + type: 'ip', + }, + keyword_field: { + ignore_above: 1024, + type: 'keyword', + }, + long_field: { + type: 'long', + }, + nested_array_field: { + properties: { + field1: { + ignore_above: 1024, + type: 'keyword', + }, + field2: { + ignore_above: 1024, + type: 'keyword', + }, + }, + type: 'nested', + }, + parent_field: { + properties: { + child1: { + ignore_above: 1024, + type: 'keyword', + }, + child2: { + ignore_above: 1024, + type: 'keyword', + }, + }, + }, + scaled_float_field: { + scaling_factor: 1000, + type: 'scaled_float', + }, + unmapped_object: { + enabled: false, + type: 'object', + }, + formatted_field: { + type: 'date_range', + format: 'epoch_millis||strict_date_optional_time', + }, + }, +}; + +describe('mappingFromFieldMap', () => { + it('correctly creates mapping from field map', () => { + expect(mappingFromFieldMap(testFieldMap)).toEqual({ + dynamic: 'strict', + ...expectedTestMapping, + }); + expect(mappingFromFieldMap(alertFieldMap)).toEqual({ + dynamic: 'strict', + properties: { + '@timestamp': { + ignore_malformed: false, + type: 'date', + }, + event: { + properties: { + action: { + type: 'keyword', + }, + kind: { + type: 'keyword', + }, + }, + }, + kibana: { + properties: { + alert: { + properties: { + action_group: { + type: 'keyword', + }, + case_ids: { + type: 'keyword', + }, + duration: { + properties: { + us: { + type: 'long', + }, + }, + }, + end: { + type: 'date', + }, + flapping: { + type: 'boolean', + }, + flapping_history: { + type: 'boolean', + }, + maintenance_window_ids: { + type: 'keyword', + }, + instance: { + properties: { + id: { + type: 'keyword', + }, + }, + }, + last_detected: { + type: 'date', + }, + reason: { + fields: { + text: { + type: 'match_only_text', + }, + }, + type: 'keyword', + }, + rule: { + properties: { + category: { + type: 'keyword', + }, + consumer: { + type: 'keyword', + }, + execution: { + properties: { + uuid: { + type: 'keyword', + }, + }, + }, + name: { + type: 'keyword', + }, + parameters: { + type: 'flattened', + ignore_above: 4096, + }, + producer: { + type: 'keyword', + }, + revision: { + type: 'long', + }, + rule_type_id: { + type: 'keyword', + }, + tags: { + type: 'keyword', + }, + uuid: { + type: 'keyword', + }, + }, + }, + start: { + type: 'date', + }, + status: { + type: 'keyword', + }, + time_range: { + type: 'date_range', + format: 'epoch_millis||strict_date_optional_time', + }, + url: { + ignore_above: 2048, + index: false, + type: 'keyword', + }, + uuid: { + type: 'keyword', + }, + workflow_assignee_ids: { + type: 'keyword', + }, + workflow_status: { + type: 'keyword', + }, + workflow_tags: { + type: 'keyword', + }, + }, + }, + space_ids: { + type: 'keyword', + }, + version: { + type: 'version', + }, + }, + }, + tags: { + type: 'keyword', + }, + }, + }); + expect(mappingFromFieldMap(legacyAlertFieldMap)).toEqual({ + dynamic: 'strict', + properties: { + kibana: { + properties: { + alert: { + properties: { + risk_score: { type: 'float' }, + rule: { + properties: { + author: { type: 'keyword' }, + created_at: { type: 'date' }, + created_by: { type: 'keyword' }, + description: { type: 'keyword' }, + enabled: { type: 'keyword' }, + from: { type: 'keyword' }, + interval: { type: 'keyword' }, + license: { type: 'keyword' }, + note: { type: 'keyword' }, + references: { type: 'keyword' }, + rule_id: { type: 'keyword' }, + rule_name_override: { type: 'keyword' }, + to: { type: 'keyword' }, + type: { type: 'keyword' }, + updated_at: { type: 'date' }, + updated_by: { type: 'keyword' }, + version: { type: 'keyword' }, + }, + }, + severity: { type: 'keyword' }, + suppression: { + properties: { + docs_count: { type: 'long' }, + end: { type: 'date' }, + terms: { + properties: { field: { type: 'keyword' }, value: { type: 'keyword' } }, + }, + start: { type: 'date' }, + }, + }, + system_status: { type: 'keyword' }, + workflow_reason: { type: 'keyword' }, + workflow_status_updated_at: { type: 'date' }, + workflow_user: { type: 'keyword' }, + }, + }, + }, + }, + ecs: { properties: { version: { type: 'keyword' } } }, + }, + }); + }); + + it('uses dynamic setting if specified', () => { + expect(mappingFromFieldMap(testFieldMap, true)).toEqual({ + dynamic: true, + ...expectedTestMapping, + }); + }); +}); diff --git a/packages/kbn-data-stream-adapter/src/field_maps/mapping_from_field_map.ts b/packages/kbn-data-stream-adapter/src/field_maps/mapping_from_field_map.ts new file mode 100644 index 0000000000000..5878cedd44195 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/field_maps/mapping_from_field_map.ts @@ -0,0 +1,54 @@ +/* + * 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 type { MappingTypeMapping } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import { set } from '@kbn/safer-lodash-set'; +import type { FieldMap, MultiField } from './types'; + +export function mappingFromFieldMap( + fieldMap: FieldMap, + dynamic: 'strict' | boolean = 'strict' +): MappingTypeMapping { + const mappings = { + dynamic, + properties: {}, + }; + + const fields = Object.keys(fieldMap).map((key: string) => { + const field = fieldMap[key]; + return { + name: key, + ...field, + }; + }); + + fields.forEach((field) => { + // eslint-disable-next-line @typescript-eslint/naming-convention + const { name, required, array, multi_fields, ...rest } = field; + const mapped = multi_fields + ? { + ...rest, + // eslint-disable-next-line @typescript-eslint/naming-convention + fields: multi_fields.reduce((acc, multi_field: MultiField) => { + acc[multi_field.name] = { + type: multi_field.type, + }; + return acc; + }, {} as Record), + } + : rest; + + set(mappings.properties, field.name.split('.').join('.properties.'), mapped); + + if (name === '@timestamp') { + set(mappings.properties, `${name}.ignore_malformed`, false); + } + }); + + return mappings; +} diff --git a/packages/kbn-data-stream-adapter/src/field_maps/types.ts b/packages/kbn-data-stream-adapter/src/field_maps/types.ts new file mode 100644 index 0000000000000..0a0b68a2f26e6 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/field_maps/types.ts @@ -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. + */ + +export interface AllowedValue { + description?: string; + name?: string; +} + +export interface MultiField { + flat_name: string; + name: string; + type: string; +} + +export interface EcsMetadata { + allowed_values?: AllowedValue[]; + dashed_name: string; + description: string; + doc_values?: boolean; + example?: string | number | boolean; + flat_name: string; + ignore_above?: number; + index?: boolean; + level: string; + multi_fields?: MultiField[]; + name: string; + normalize: string[]; + required?: boolean; + scaling_factor?: number; + short: string; + type: string; + properties?: Record; +} + +export interface FieldMap { + [key: string]: { + type: string; + required: boolean; + array?: boolean; + doc_values?: boolean; + enabled?: boolean; + format?: string; + ignore_above?: number; + multi_fields?: MultiField[]; + index?: boolean; + path?: string; + scaling_factor?: number; + dynamic?: boolean | 'strict'; + properties?: Record; + }; +} diff --git a/packages/kbn-data-stream-adapter/src/install_with_timeout.test.ts b/packages/kbn-data-stream-adapter/src/install_with_timeout.test.ts new file mode 100644 index 0000000000000..59945b23124c6 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/install_with_timeout.test.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 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 { loggerMock } from '@kbn/logging-mocks'; + +import { installWithTimeout } from './install_with_timeout'; +import { ReplaySubject, type Subject } from 'rxjs'; + +const logger = loggerMock.create(); + +describe('installWithTimeout', () => { + let pluginStop$: Subject; + + beforeEach(() => { + jest.resetAllMocks(); + pluginStop$ = new ReplaySubject(1); + }); + + it(`should call installFn`, async () => { + const installFn = jest.fn(); + await installWithTimeout({ + installFn, + pluginStop$, + timeoutMs: 10, + }); + expect(installFn).toHaveBeenCalled(); + }); + + it(`should short-circuit installFn if it exceeds configured timeout`, async () => { + await expect(() => + installWithTimeout({ + installFn: async () => { + await new Promise((r) => setTimeout(r, 20)); + }, + pluginStop$, + timeoutMs: 10, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Failure during installation. Timeout: it took more than 10ms"` + ); + }); + + it(`should short-circuit installFn if pluginStop$ signal is received`, async () => { + pluginStop$.next(); + await expect(() => + installWithTimeout({ + installFn: async () => { + await new Promise((r) => setTimeout(r, 5)); + logger.info(`running`); + }, + pluginStop$, + timeoutMs: 10, + }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Server is stopping; must stop all async operations"` + ); + }); +}); diff --git a/packages/kbn-data-stream-adapter/src/install_with_timeout.ts b/packages/kbn-data-stream-adapter/src/install_with_timeout.ts new file mode 100644 index 0000000000000..7995fed5152ad --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/install_with_timeout.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 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 { firstValueFrom, type Observable } from 'rxjs'; + +const INSTALLATION_TIMEOUT = 20 * 60 * 1000; // 20 minutes + +interface InstallWithTimeoutOpts { + description?: string; + installFn: () => Promise; + pluginStop$: Observable; + timeoutMs?: number; +} + +export class InstallShutdownError extends Error { + constructor() { + super('Server is stopping; must stop all async operations'); + Object.setPrototypeOf(this, InstallShutdownError.prototype); + } +} + +export const installWithTimeout = async ({ + description, + installFn, + pluginStop$, + timeoutMs = INSTALLATION_TIMEOUT, +}: InstallWithTimeoutOpts): Promise => { + try { + let timeoutId: NodeJS.Timeout; + const install = async (): Promise => { + await installFn(); + if (timeoutId) { + clearTimeout(timeoutId); + } + }; + + const throwTimeoutException = (): Promise => { + return new Promise((_, reject) => { + timeoutId = setTimeout(() => { + const msg = `Timeout: it took more than ${timeoutMs}ms`; + reject(new Error(msg)); + }, timeoutMs); + + firstValueFrom(pluginStop$).then(() => { + clearTimeout(timeoutId); + reject(new InstallShutdownError()); + }); + }); + }; + + await Promise.race([install(), throwTimeoutException()]); + } catch (e) { + if (e instanceof InstallShutdownError) { + throw e; + } else { + const reason = e?.message || 'Unknown reason'; + throw new Error( + `Failure during installation${description ? ` of ${description}` : ''}. ${reason}` + ); + } + } +}; diff --git a/packages/kbn-data-stream-adapter/src/resource_installer_utils.test.ts b/packages/kbn-data-stream-adapter/src/resource_installer_utils.test.ts new file mode 100644 index 0000000000000..e53eb7704a06a --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/resource_installer_utils.test.ts @@ -0,0 +1,170 @@ +/* + * 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 { getIndexTemplate, getComponentTemplate } from './resource_installer_utils'; + +describe('getIndexTemplate', () => { + const defaultParams = { + name: 'indexTemplateName', + kibanaVersion: '8.12.1', + indexPatterns: ['indexPattern1', 'indexPattern2'], + componentTemplateRefs: ['template1', 'template2'], + totalFieldsLimit: 2500, + }; + + it('should create index template with given parameters and defaults', () => { + const indexTemplate = getIndexTemplate(defaultParams); + + expect(indexTemplate).toEqual({ + name: defaultParams.name, + body: { + data_stream: { hidden: true }, + index_patterns: defaultParams.indexPatterns, + composed_of: defaultParams.componentTemplateRefs, + template: { + settings: { + hidden: true, + auto_expand_replicas: '0-1', + 'index.mapping.ignore_malformed': true, + 'index.mapping.total_fields.limit': defaultParams.totalFieldsLimit, + }, + mappings: { + dynamic: false, + _meta: { + kibana: { + version: defaultParams.kibanaVersion, + }, + managed: true, + namespace: 'default', + }, + }, + }, + _meta: { + kibana: { + version: defaultParams.kibanaVersion, + }, + managed: true, + namespace: 'default', + }, + priority: 7, + }, + }); + }); + + it('should create not hidden index template', () => { + const { body } = getIndexTemplate({ ...defaultParams, hidden: false }); + expect(body?.data_stream?.hidden).toEqual(false); + expect(body?.template?.settings?.hidden).toEqual(false); + }); + + it('should create index template with custom namespace', () => { + const { body } = getIndexTemplate({ ...defaultParams, namespace: 'custom-namespace' }); + expect(body?._meta?.namespace).toEqual('custom-namespace'); + expect(body?.priority).toEqual(16); + }); + + it('should create index template with template overrides', () => { + const { body } = getIndexTemplate({ + ...defaultParams, + template: { + settings: { + number_of_shards: 1, + }, + mappings: { + dynamic: true, + }, + lifecycle: { + data_retention: '30d', + }, + }, + }); + + expect(body?.template?.settings).toEqual({ + hidden: true, + auto_expand_replicas: '0-1', + 'index.mapping.ignore_malformed': true, + 'index.mapping.total_fields.limit': defaultParams.totalFieldsLimit, + number_of_shards: 1, + }); + + expect(body?.template?.mappings).toEqual({ + dynamic: true, + _meta: { + kibana: { + version: defaultParams.kibanaVersion, + }, + managed: true, + namespace: 'default', + }, + }); + + expect(body?.template?.lifecycle).toEqual({ + data_retention: '30d', + }); + }); +}); + +describe('getComponentTemplate', () => { + const defaultParams = { + name: 'componentTemplateName', + kibanaVersion: '8.12.1', + fieldMap: { + field1: { type: 'text', required: true }, + field2: { type: 'keyword', required: false }, + }, + }; + + it('should create component template with given parameters and defaults', () => { + const componentTemplate = getComponentTemplate(defaultParams); + + expect(componentTemplate).toEqual({ + name: defaultParams.name, + _meta: { + managed: true, + }, + template: { + settings: { + number_of_shards: 1, + 'index.mapping.total_fields.limit': 1500, + }, + mappings: { + dynamic: 'strict', + properties: { + field1: { + type: 'text', + }, + field2: { + type: 'keyword', + }, + }, + }, + }, + }); + }); + + it('should create component template with custom settings', () => { + const { template } = getComponentTemplate({ + ...defaultParams, + settings: { + number_of_shards: 1, + number_of_replicas: 1, + }, + }); + + expect(template.settings).toEqual({ + number_of_shards: 1, + number_of_replicas: 1, + 'index.mapping.total_fields.limit': 1500, + }); + }); + + it('should create component template with custom dynamic', () => { + const { template } = getComponentTemplate({ ...defaultParams, dynamic: true }); + expect(template.mappings?.dynamic).toEqual(true); + }); +}); diff --git a/packages/kbn-data-stream-adapter/src/resource_installer_utils.ts b/packages/kbn-data-stream-adapter/src/resource_installer_utils.ts new file mode 100644 index 0000000000000..456be9ad8e86f --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/resource_installer_utils.ts @@ -0,0 +1,106 @@ +/* + * 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 type { + IndicesPutIndexTemplateRequest, + Metadata, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { + ClusterPutComponentTemplateRequest, + IndicesIndexSettings, + IndicesPutIndexTemplateIndexTemplateMapping, +} from '@elastic/elasticsearch/lib/api/types'; +import type { FieldMap } from './field_maps/types'; +import { mappingFromFieldMap } from './field_maps/mapping_from_field_map'; + +interface GetComponentTemplateOpts { + name: string; + fieldMap: FieldMap; + settings?: IndicesIndexSettings; + dynamic?: 'strict' | boolean; +} + +export const getComponentTemplate = ({ + name, + fieldMap, + settings, + dynamic = 'strict', +}: GetComponentTemplateOpts): ClusterPutComponentTemplateRequest => ({ + name, + _meta: { + managed: true, + }, + template: { + settings: { + number_of_shards: 1, + 'index.mapping.total_fields.limit': + Math.ceil(Object.keys(fieldMap).length / 1000) * 1000 + 500, + ...settings, + }, + mappings: mappingFromFieldMap(fieldMap, dynamic), + }, +}); + +interface GetIndexTemplateOpts { + name: string; + indexPatterns: string[]; + kibanaVersion: string; + totalFieldsLimit: number; + componentTemplateRefs?: string[]; + namespace?: string; + template?: IndicesPutIndexTemplateIndexTemplateMapping; + hidden?: boolean; +} + +export const getIndexTemplate = ({ + name, + indexPatterns, + kibanaVersion, + totalFieldsLimit, + componentTemplateRefs, + namespace = 'default', + template = {}, + hidden = true, +}: GetIndexTemplateOpts): IndicesPutIndexTemplateRequest => { + const indexMetadata: Metadata = { + kibana: { + version: kibanaVersion, + }, + managed: true, + namespace, + }; + + return { + name, + body: { + data_stream: { hidden }, + index_patterns: indexPatterns, + composed_of: componentTemplateRefs, + template: { + ...template, + settings: { + hidden, + auto_expand_replicas: '0-1', + 'index.mapping.ignore_malformed': true, + 'index.mapping.total_fields.limit': totalFieldsLimit, + ...template.settings, + }, + mappings: { + dynamic: false, + _meta: indexMetadata, + ...template.mappings, + }, + }, + _meta: indexMetadata, + + // By setting the priority to namespace.length, we ensure that if one namespace is a prefix of another namespace + // then newly created indices will use the matching template with the *longest* namespace + priority: namespace.length, + }, + }; +}; diff --git a/packages/kbn-data-stream-adapter/src/retry_transient_es_errors.test.ts b/packages/kbn-data-stream-adapter/src/retry_transient_es_errors.test.ts new file mode 100644 index 0000000000000..f7d6cca8c5a07 --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/retry_transient_es_errors.test.ts @@ -0,0 +1,78 @@ +/* + * 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 { loggingSystemMock } from '@kbn/core/server/mocks'; +import { errors as EsErrors, type DiagnosticResult } from '@elastic/elasticsearch'; +import { retryTransientEsErrors } from './retry_transient_es_errors'; + +const mockLogger = loggingSystemMock.createLogger(); + +// mock setTimeout to avoid waiting in tests and prevent test flakiness +global.setTimeout = jest.fn((cb) => jest.fn(cb())) as unknown as typeof global.setTimeout; + +describe('retryTransientEsErrors', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it.each([ + { error: new EsErrors.ConnectionError('test error'), errorType: 'ConnectionError' }, + { + error: new EsErrors.NoLivingConnectionsError('test error', {} as DiagnosticResult), + errorType: 'NoLivingConnectionsError', + }, + { error: new EsErrors.TimeoutError('test error'), errorType: 'TimeoutError' }, + { + error: new EsErrors.ResponseError({ statusCode: 503 } as DiagnosticResult), + errorType: 'ResponseError (Unavailable)', + }, + { + error: new EsErrors.ResponseError({ statusCode: 408 } as DiagnosticResult), + errorType: 'ResponseError (RequestTimeout)', + }, + { + error: new EsErrors.ResponseError({ statusCode: 410 } as DiagnosticResult), + errorType: 'ResponseError (Gone)', + }, + ])('should retry $errorType', async ({ error }) => { + const mockFn = jest.fn(); + mockFn.mockRejectedValueOnce(error); + mockFn.mockResolvedValueOnce('success'); + + const result = await retryTransientEsErrors(mockFn, { logger: mockLogger }); + + expect(result).toEqual('success'); + expect(mockFn).toHaveBeenCalledTimes(2); + expect(mockLogger.warn).toHaveBeenCalledTimes(1); + expect(mockLogger.error).not.toHaveBeenCalled(); + }); + + it('should throw non-transient errors', async () => { + const error = new EsErrors.ResponseError({ statusCode: 429 } as DiagnosticResult); + const mockFn = jest.fn(); + mockFn.mockRejectedValueOnce(error); + + await expect(retryTransientEsErrors(mockFn, { logger: mockLogger })).rejects.toEqual(error); + + expect(mockFn).toHaveBeenCalledTimes(1); + expect(mockLogger.warn).not.toHaveBeenCalled(); + }); + + it('should throw if max retries exceeded', async () => { + const error = new EsErrors.ConnectionError('test error'); + const mockFn = jest.fn(); + mockFn.mockRejectedValueOnce(error); + mockFn.mockRejectedValueOnce(error); + + await expect( + retryTransientEsErrors(mockFn, { logger: mockLogger, attempt: 2 }) + ).rejects.toEqual(error); + + expect(mockFn).toHaveBeenCalledTimes(2); + expect(mockLogger.warn).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/kbn-data-stream-adapter/src/retry_transient_es_errors.ts b/packages/kbn-data-stream-adapter/src/retry_transient_es_errors.ts new file mode 100644 index 0000000000000..3b436298e5c8d --- /dev/null +++ b/packages/kbn-data-stream-adapter/src/retry_transient_es_errors.ts @@ -0,0 +1,54 @@ +/* + * 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 type { Logger } from '@kbn/core/server'; +import { errors as EsErrors } from '@elastic/elasticsearch'; + +const MAX_ATTEMPTS = 3; + +const retryResponseStatuses = [ + 503, // ServiceUnavailable + 408, // RequestTimeout + 410, // Gone +]; + +const isRetryableError = (e: Error) => + e instanceof EsErrors.NoLivingConnectionsError || + e instanceof EsErrors.ConnectionError || + e instanceof EsErrors.TimeoutError || + (e instanceof EsErrors.ResponseError && + e?.statusCode && + retryResponseStatuses.includes(e.statusCode)); + +const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +export const retryTransientEsErrors = async ( + esCall: () => Promise, + { logger, attempt = 0 }: { logger: Logger; attempt?: number } +): Promise => { + try { + return await esCall(); + } catch (e) { + if (attempt < MAX_ATTEMPTS && isRetryableError(e)) { + const retryCount = attempt + 1; + const retryDelaySec: number = Math.min(Math.pow(2, retryCount), 30); // 2s, 4s, 8s, 16s, 30s, 30s, 30s... + + logger.warn( + `Retrying Elasticsearch operation after [${retryDelaySec}s] due to error: ${e.toString()} ${ + e.stack + }` + ); + + // delay with some randomness + await delay(retryDelaySec * 1000 * Math.random()); + return retryTransientEsErrors(esCall, { logger, attempt: retryCount }); + } + + throw e; + } +}; diff --git a/packages/kbn-data-stream-adapter/tsconfig.json b/packages/kbn-data-stream-adapter/tsconfig.json new file mode 100644 index 0000000000000..f09d2b4354d02 --- /dev/null +++ b/packages/kbn-data-stream-adapter/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node", + "react", + "@emotion/react/types/css-prop", + "@testing-library/jest-dom", + "@testing-library/react" + ] + }, + "include": ["**/*.ts", "**/*.tsx"], + "kbn_references": [ + "@kbn/core", + "@kbn/std", + "@kbn/ecs", + "@kbn/alerts-as-data-utils", + "@kbn/safer-lodash-set", + "@kbn/logging-mocks", + ], + "exclude": ["target/**/*"] +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 957f6a68e0cbe..5760913365447 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -632,6 +632,8 @@ "@kbn/data-search-plugin/*": ["test/plugin_functional/plugins/data_search/*"], "@kbn/data-service": ["packages/kbn-data-service"], "@kbn/data-service/*": ["packages/kbn-data-service/*"], + "@kbn/data-stream-adapter": ["packages/kbn-data-stream-adapter"], + "@kbn/data-stream-adapter/*": ["packages/kbn-data-stream-adapter/*"], "@kbn/data-view-editor-plugin": ["src/plugins/data_view_editor"], "@kbn/data-view-editor-plugin/*": ["src/plugins/data_view_editor/*"], "@kbn/data-view-field-editor-example-plugin": ["examples/data_view_field_editor_example"], diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/data_quality_context/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/data_quality_context/index.test.tsx index 26843c67ff64e..6bf41d9f18b7f 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/data_quality_context/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/data_quality_context/index.test.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; import { renderHook } from '@testing-library/react-hooks'; import React from 'react'; @@ -13,6 +14,7 @@ import { DataQualityProvider, useDataQualityContext } from '.'; const mockReportDataQualityIndexChecked = jest.fn(); const mockReportDataQualityCheckAllClicked = jest.fn(); const mockHttpFetch = jest.fn(); +const { toasts } = notificationServiceMock.createSetupContract(); const mockTelemetryEvents = { reportDataQualityIndexChecked: mockReportDataQualityIndexChecked, reportDataQualityCheckAllCompleted: mockReportDataQualityCheckAllClicked, @@ -22,6 +24,7 @@ const ContextWrapper: React.FC = ({ children }) => ( httpFetch={mockHttpFetch} telemetryEvents={mockTelemetryEvents} isILMAvailable={true} + toasts={toasts} > {children} diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/data_quality_context/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/data_quality_context/index.tsx index 4f5c883ddd696..41175a6793adb 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/data_quality_context/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/data_quality_context/index.tsx @@ -5,14 +5,16 @@ * 2.0. */ -import type { HttpHandler } from '@kbn/core-http-browser'; import React, { useMemo } from 'react'; -import { TelemetryEvents } from '../../types'; +import type { HttpHandler } from '@kbn/core-http-browser'; +import type { IToasts } from '@kbn/core-notifications-browser'; +import type { TelemetryEvents } from '../../types'; interface DataQualityProviderProps { httpFetch: HttpHandler; isILMAvailable: boolean; telemetryEvents: TelemetryEvents; + toasts: IToasts; } const DataQualityContext = React.createContext(undefined); @@ -20,16 +22,18 @@ const DataQualityContext = React.createContext = ({ children, httpFetch, + toasts, isILMAvailable, telemetryEvents, }) => { const value = useMemo( () => ({ httpFetch, + toasts, isILMAvailable, telemetryEvents, }), - [httpFetch, isILMAvailable, telemetryEvents] + [httpFetch, toasts, isILMAvailable, telemetryEvents] ); return {children}; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/index_properties/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/index_properties/index.tsx index 2251d0c0fdb23..3de5aba8bcc59 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/index_properties/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/data_quality_panel/index_properties/index.tsx @@ -44,7 +44,7 @@ import { useAddToNewCase } from '../../use_add_to_new_case'; import { useMappings } from '../../use_mappings'; import { useUnallowedValues } from '../../use_unallowed_values'; import { useDataQualityContext } from '../data_quality_context'; -import { getSizeInBytes } from '../../helpers'; +import { getSizeInBytes, postResult } from '../../helpers'; const EMPTY_MARKDOWN_COMMENTS: string[] = []; @@ -104,7 +104,7 @@ const IndexPropertiesComponent: React.FC = ({ updatePatternRollup, }) => { const { error: mappingsError, indexes, loading: loadingMappings } = useMappings(indexName); - const { telemetryEvents, isILMAvailable } = useDataQualityContext(); + const { telemetryEvents, isILMAvailable, httpFetch, toasts } = useDataQualityContext(); const requestItems = useMemo( () => @@ -249,7 +249,7 @@ const IndexPropertiesComponent: React.FC = ({ }) : EMPTY_MARKDOWN_COMMENTS; - updatePatternRollup({ + const updatedRollup = { ...patternRollup, results: { ...patternRollup.results, @@ -264,10 +264,11 @@ const IndexPropertiesComponent: React.FC = ({ sameFamily: indexSameFamily, }, }, - }); + }; + updatePatternRollup(updatedRollup); if (indexId && requestTime != null && requestTime > 0 && partitionedFieldMetadata) { - telemetryEvents.reportDataQualityIndexChecked?.({ + const checkMetadata = { batchId: uuidv4(), ecsVersion: EcsVersion, errorCount: error ? 1 : 0, @@ -276,7 +277,10 @@ const IndexPropertiesComponent: React.FC = ({ indexName, isCheckAll: false, numberOfDocuments: docsCount, + numberOfFields: partitionedFieldMetadata.all.length, numberOfIncompatibleFields: indexIncompatible, + numberOfEcsFields: partitionedFieldMetadata.ecsCompliant.length, + numberOfCustomFields: partitionedFieldMetadata.custom.length, numberOfIndices: 1, numberOfIndicesChecked: 1, numberOfSameFamily: indexSameFamily, @@ -289,7 +293,11 @@ const IndexPropertiesComponent: React.FC = ({ unallowedValueFields: getIncompatibleValuesFields( partitionedFieldMetadata.incompatible ), - }); + }; + telemetryEvents.reportDataQualityIndexChecked?.(checkMetadata); + + const result = { meta: checkMetadata, rollup: updatedRollup }; + postResult({ result, httpFetch, toasts, abortController: new AbortController() }); } } } @@ -297,6 +305,7 @@ const IndexPropertiesComponent: React.FC = ({ docsCount, formatBytes, formatNumber, + httpFetch, ilmPhase, indexId, indexName, @@ -309,6 +318,7 @@ const IndexPropertiesComponent: React.FC = ({ patternRollup, requestTime, telemetryEvents, + toasts, unallowedValuesError, updatePatternRollup, ]); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/helpers.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/helpers.test.ts index f3f1c44378615..a20c8144c5773 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/helpers.test.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/helpers.test.ts @@ -35,6 +35,9 @@ import { getTotalSizeInBytes, hasValidTimestampMapping, isMappingCompatible, + postResult, + getResults, + ResultData, } from './helpers'; import { hostNameWithTextMapping, @@ -77,6 +80,8 @@ import { PatternRollup, UnallowedValueCount, } from './types'; +import { httpServiceMock } from '@kbn/core-http-browser-mocks'; +import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; const ecsMetadata: Record = EcsFlat as unknown as Record; @@ -1489,4 +1494,81 @@ describe('helpers', () => { ]); }); }); + + describe('postResult', () => { + const { fetch } = httpServiceMock.createStartContract(); + const { toasts } = notificationServiceMock.createStartContract(); + beforeEach(() => { + fetch.mockClear(); + }); + + test('it posts the result', async () => { + const result = { meta: {}, rollup: {} } as unknown as ResultData; + await postResult({ + httpFetch: fetch, + result, + abortController: new AbortController(), + toasts, + }); + + expect(fetch).toHaveBeenCalledWith( + '/internal/ecs_data_quality_dashboard/results', + expect.objectContaining({ + method: 'POST', + body: JSON.stringify(result), + }) + ); + }); + + test('it throws error', async () => { + const result = { meta: {}, rollup: {} } as unknown as ResultData; + fetch.mockRejectedValueOnce('test-error'); + await postResult({ + httpFetch: fetch, + result, + abortController: new AbortController(), + toasts, + }); + expect(toasts.addError).toHaveBeenCalledWith('test-error', { title: expect.any(String) }); + }); + }); + + describe('getResults', () => { + const { fetch } = httpServiceMock.createStartContract(); + const { toasts } = notificationServiceMock.createStartContract(); + beforeEach(() => { + fetch.mockClear(); + }); + + test('it gets the results', async () => { + await getResults({ + httpFetch: fetch, + abortController: new AbortController(), + patterns: ['auditbeat-*', 'packetbeat-*'], + toasts, + }); + + expect(fetch).toHaveBeenCalledWith( + '/internal/ecs_data_quality_dashboard/results', + expect.objectContaining({ + method: 'GET', + query: { patterns: 'auditbeat-*,packetbeat-*' }, + }) + ); + }); + + it('should catch error', async () => { + fetch.mockRejectedValueOnce('test-error'); + + const results = await getResults({ + httpFetch: fetch, + abortController: new AbortController(), + patterns: ['auditbeat-*', 'packetbeat-*'], + toasts, + }); + + expect(toasts.addError).toHaveBeenCalledWith('test-error', { title: expect.any(String) }); + expect(results).toEqual([]); + }); + }); }); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/helpers.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/helpers.ts index ba195f0de0e15..a4d51233232e4 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/helpers.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/helpers.ts @@ -5,11 +5,13 @@ * 2.0. */ +import type { HttpHandler } from '@kbn/core-http-browser'; import type { IlmExplainLifecycleLifecycleExplain, IndicesStatsIndicesStats, } from '@elastic/elasticsearch/lib/api/types'; import { has, sortBy } from 'lodash/fp'; +import { IToasts } from '@kbn/core-notifications-browser'; import { getIlmPhase } from './data_quality_panel/pattern/helpers'; import { getFillColor } from './data_quality_panel/tabs/summary_tab/helpers'; @@ -17,6 +19,7 @@ import * as i18n from './translations'; import type { DataQualityCheckResult, + DataQualityIndexCheckedParams, EcsMetadata, EnrichedFieldMetadata, ErrorSummary, @@ -443,3 +446,58 @@ export const getErrorSummaries = ( [] ); }; + +export const RESULTS_API_ROUTE = '/internal/ecs_data_quality_dashboard/results'; + +export interface ResultData { + meta: DataQualityIndexCheckedParams; + rollup: PatternRollup; +} + +export async function postResult({ + result, + httpFetch, + toasts, + abortController, +}: { + result: ResultData; + httpFetch: HttpHandler; + toasts: IToasts; + abortController: AbortController; +}): Promise { + try { + await httpFetch(RESULTS_API_ROUTE, { + method: 'POST', + signal: abortController.signal, + version: INTERNAL_API_VERSION, + body: JSON.stringify(result), + }); + } catch (err) { + toasts.addError(err, { title: i18n.POST_RESULT_ERROR_TITLE }); + } +} + +export async function getResults({ + patterns, + httpFetch, + toasts, + abortController, +}: { + patterns: string[]; + httpFetch: HttpHandler; + toasts: IToasts; + abortController: AbortController; +}): Promise { + try { + const results = await httpFetch(RESULTS_API_ROUTE, { + method: 'GET', + signal: abortController.signal, + version: INTERNAL_API_VERSION, + query: { patterns: patterns.join(',') }, + }); + return results; + } catch (err) { + toasts.addError(err, { title: i18n.GET_RESULTS_ERROR_TITLE }); + return []; + } +} diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/index.test.tsx index e7e72221d18f5..720f2fc61da6c 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/index.test.tsx @@ -11,6 +11,9 @@ import React from 'react'; import { TestProviders } from './mock/test_providers/test_providers'; import { DataQualityPanel } from '.'; +import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; + +const { toasts } = notificationServiceMock.createSetupContract(); describe('DataQualityPanel', () => { describe('when ILM phases are provided', () => { @@ -20,7 +23,6 @@ describe('DataQualityPanel', () => { render( { reportDataQualityIndexChecked={jest.fn()} setLastChecked={jest.fn()} baseTheme={DARK_THEME} + toasts={toasts} /> ); @@ -56,7 +59,6 @@ describe('DataQualityPanel', () => { render( { reportDataQualityIndexChecked={jest.fn()} setLastChecked={jest.fn()} baseTheme={DARK_THEME} + toasts={toasts} /> ); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/index.tsx index 8d95e71464728..6db2d8991db82 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/index.tsx @@ -19,13 +19,14 @@ import type { } from '@elastic/charts'; import React, { useCallback, useMemo } from 'react'; +import type { IToasts } from '@kbn/core-notifications-browser'; import { Body } from './data_quality_panel/body'; import { DataQualityProvider } from './data_quality_panel/data_quality_context'; import { EMPTY_STAT } from './helpers'; import { ReportDataQualityCheckAllCompleted, ReportDataQualityIndexChecked } from './types'; interface Props { - addSuccessToast: (toast: { title: string }) => void; + toasts: IToasts; baseTheme: Theme; canUserCreateAndReadCases: () => boolean; defaultNumberFormat: string; @@ -66,7 +67,7 @@ interface Props { /** Renders the `Data Quality` dashboard content */ const DataQualityPanelComponent: React.FC = ({ - addSuccessToast, + toasts, baseTheme, canUserCreateAndReadCases, defaultBytesFormat, @@ -103,11 +104,19 @@ const DataQualityPanelComponent: React.FC = ({ [reportDataQualityCheckAllCompleted, reportDataQualityIndexChecked] ); + const addSuccessToast = useCallback( + (toast: { title: string }) => { + toasts.addSuccess(toast); + }, + [toasts] + ); + return ( = ({ children, isILMAvailable = true }) => { const http = httpServiceMock.createSetupContract({ basePath: '/test' }); + const { toasts } = notificationServiceMock.createSetupContract(); const actionTypeRegistry = actionTypeRegistryMock.create(); const mockGetInitialConversations = jest.fn(() => ({})); const mockGetComments = jest.fn(() => []); @@ -79,6 +81,7 @@ export const TestProvidersComponent: React.FC = ({ children, isILMAvailab > diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/translations.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/translations.ts index 99d94c73ff49c..b72a9fee96c57 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/translations.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/translations.ts @@ -292,3 +292,13 @@ export const WARM_PATTERN_TOOLTIP = ({ indices, pattern }: { indices: number; pa defaultMessage: '{indices} {indices, plural, =1 {index} other {indices}} matching the {pattern} pattern {indices, plural, =1 {is} other {are}} warm. Warm indices are no longer being updated but are still being queried.', }); + +export const POST_RESULT_ERROR_TITLE = i18n.translate( + 'securitySolutionPackages.ecsDataQualityDashboard.postResultErrorTitle', + { defaultMessage: 'Error writing saved data quality check results' } +); + +export const GET_RESULTS_ERROR_TITLE = i18n.translate( + 'securitySolutionPackages.ecsDataQualityDashboard.getResultErrorTitle', + { defaultMessage: 'Error reading saved data quality check results' } +); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/types.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/types.ts index 3fa021a9b3690..9f507992d1509 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/types.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/types.ts @@ -142,19 +142,7 @@ export interface IndexToCheck { indexName: string; } -export type OnCheckCompleted = ({ - batchId, - checkAllStartTime, - error, - formatBytes, - formatNumber, - indexName, - isLastCheck, - partitionedFieldMetadata, - pattern, - version, - requestTime, -}: { +export type OnCheckCompleted = (param: { batchId: string; checkAllStartTime: number; error: string | null; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_ilm_explain/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_ilm_explain/index.test.tsx index 90cd0906c137a..f715936501736 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_ilm_explain/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_ilm_explain/index.test.tsx @@ -12,6 +12,7 @@ import { DataQualityProvider } from '../data_quality_panel/data_quality_context' import { mockIlmExplain } from '../mock/ilm_explain/mock_ilm_explain'; import { ERROR_LOADING_ILM_EXPLAIN } from '../translations'; import { useIlmExplain, UseIlmExplain } from '.'; +import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; const mockHttpFetch = jest.fn(); const mockReportDataQualityIndexChecked = jest.fn(); @@ -20,6 +21,7 @@ const mockTelemetryEvents = { reportDataQualityIndexChecked: mockReportDataQualityIndexChecked, reportDataQualityCheckAllCompleted: mockReportDataQualityCheckAllClicked, }; +const { toasts } = notificationServiceMock.createSetupContract(); const ContextWrapper: React.FC<{ children: React.ReactNode; isILMAvailable: boolean }> = ({ children, isILMAvailable = true, @@ -28,6 +30,7 @@ const ContextWrapper: React.FC<{ children: React.ReactNode; isILMAvailable: bool httpFetch={mockHttpFetch} telemetryEvents={mockTelemetryEvents} isILMAvailable={isILMAvailable} + toasts={toasts} > {children} @@ -76,6 +79,7 @@ describe('useIlmExplain', () => { httpFetch={mockHttpFetch} telemetryEvents={mockTelemetryEvents} isILMAvailable={false} + toasts={toasts} > {children} diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_mappings/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_mappings/index.test.tsx index 06006d3c5a3cf..b7e0854b46443 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_mappings/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_mappings/index.test.tsx @@ -12,6 +12,7 @@ import { DataQualityProvider } from '../data_quality_panel/data_quality_context' import { mockMappingsResponse } from '../mock/mappings_response/mock_mappings_response'; import { ERROR_LOADING_MAPPINGS } from '../translations'; import { useMappings, UseMappings } from '.'; +import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; const mockHttpFetch = jest.fn(); const mockReportDataQualityIndexChecked = jest.fn(); @@ -20,12 +21,14 @@ const mockTelemetryEvents = { reportDataQualityIndexChecked: mockReportDataQualityIndexChecked, reportDataQualityCheckAllCompleted: mockReportDataQualityCheckAllClicked, }; +const { toasts } = notificationServiceMock.createSetupContract(); const ContextWrapper: React.FC = ({ children }) => ( {children} diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/helpers.test.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/helpers.test.ts index 9175acf5061b1..b37d0aecc25cf 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/helpers.test.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/helpers.test.ts @@ -13,7 +13,6 @@ import { getTotalIndices, getTotalIndicesChecked, getTotalSameFamily, - onPatternRollupUpdated, updateResultOnCheckCompleted, } from './helpers'; import { auditbeatWithAllResults } from '../mock/pattern_rollup/mock_auditbeat_pattern_rollup'; @@ -166,21 +165,6 @@ describe('helpers', () => { }); }); - describe('onPatternRollupUpdated', () => { - test('it returns a new collection with the updated rollup', () => { - const before: Record = { - 'auditbeat-*': auditbeatWithAllResults, - }; - - expect( - onPatternRollupUpdated({ - patternRollup: mockPacketbeatPatternRollup, - patternRollups: before, - }) - ).toEqual(patternRollups); - }); - }); - describe('updateResultOnCheckCompleted', () => { const packetbeatStats861: IndicesStatsIndicesStats = mockPacketbeatPatternRollup.stats != null diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/helpers.ts b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/helpers.ts index b20dfcf6648bc..cca8ac331aa88 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/helpers.ts +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/helpers.ts @@ -87,17 +87,6 @@ export const getTotalIndicesChecked = (patternRollups: Record; -}): Record => ({ - ...patternRollups, - [patternRollup.pattern]: patternRollup, -}); - export const updateResultOnCheckCompleted = ({ error, formatBytes, diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/index.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/index.tsx index 03f5035868b19..27810fedffde4 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/index.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_results_rollup/index.tsx @@ -8,6 +8,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { EcsVersion } from '@kbn/ecs'; +import { isEmpty } from 'lodash/fp'; import { getTotalDocsCount, getTotalIncompatible, @@ -15,12 +16,18 @@ import { getTotalIndicesChecked, getTotalSameFamily, getTotalSizeInBytes, - onPatternRollupUpdated, updateResultOnCheckCompleted, } from './helpers'; import type { OnCheckCompleted, PatternRollup } from '../types'; -import { getDocsCount, getIndexId, getSizeInBytes, getTotalPatternSameFamily } from '../helpers'; +import { + getDocsCount, + getIndexId, + getResults, + getSizeInBytes, + getTotalPatternSameFamily, + postResult, +} from '../helpers'; import { getIlmPhase, getIndexIncompatible } from '../data_quality_panel/pattern/helpers'; import { useDataQualityContext } from '../data_quality_panel/data_quality_context'; import { @@ -53,15 +60,60 @@ interface UseResultsRollup { updatePatternRollup: (patternRollup: PatternRollup) => void; } +const useStoredPatternRollups = (patterns: string[]) => { + const { httpFetch, toasts } = useDataQualityContext(); + const [storedRollups, setStoredRollups] = useState>({}); + + useEffect(() => { + if (isEmpty(patterns)) { + return; + } + + let ignore = false; + const abortController = new AbortController(); + const fetchStoredRollups = async () => { + const results = await getResults({ httpFetch, abortController, patterns, toasts }); + if (results?.length && !ignore) { + setStoredRollups(Object.fromEntries(results.map(({ rollup }) => [rollup.pattern, rollup]))); + } + }; + + fetchStoredRollups(); + return () => { + ignore = true; + }; + }, [httpFetch, patterns, toasts]); + + return storedRollups; +}; + export const useResultsRollup = ({ ilmPhases, patterns }: Props): UseResultsRollup => { + const { httpFetch, toasts } = useDataQualityContext(); const [patternIndexNames, setPatternIndexNames] = useState>({}); const [patternRollups, setPatternRollups] = useState>({}); + + const storedPatternsRollups = useStoredPatternRollups(patterns); + + useEffect(() => { + if (!isEmpty(storedPatternsRollups)) { + setPatternRollups((current) => ({ ...current, ...storedPatternsRollups })); + } + }, [storedPatternsRollups]); + + const updatePatternRollups = useCallback( + (updateRollups: (current: Record) => Record) => { + setPatternRollups((current) => updateRollups(current)); + }, + [] + ); + const { telemetryEvents, isILMAvailable } = useDataQualityContext(); - const updatePatternRollup = useCallback((patternRollup: PatternRollup) => { - setPatternRollups((current) => - onPatternRollupUpdated({ patternRollup, patternRollups: current }) - ); - }, []); + const updatePatternRollup = useCallback( + (patternRollup: PatternRollup) => { + updatePatternRollups((current) => ({ ...current, [patternRollup.pattern]: patternRollup })); + }, + [updatePatternRollups] + ); const totalDocsCount = useMemo(() => getTotalDocsCount(patternRollups), [patternRollups]); const totalIncompatible = useMemo(() => getTotalIncompatible(patternRollups), [patternRollups]); @@ -75,10 +127,7 @@ export const useResultsRollup = ({ ilmPhases, patterns }: Props): UseResultsRoll const updatePatternIndexNames = useCallback( ({ indexNames, pattern }: { indexNames: string[]; pattern: string }) => { - setPatternIndexNames((current) => ({ - ...current, - [pattern]: indexNames, - })); + setPatternIndexNames((current) => ({ ...current, [pattern]: indexNames })); }, [] ); @@ -96,11 +145,8 @@ export const useResultsRollup = ({ ilmPhases, patterns }: Props): UseResultsRoll requestTime, isLastCheck, }) => { - const indexId = getIndexId({ indexName, stats: patternRollups[pattern].stats }); - const ilmExplain = patternRollups[pattern].ilmExplain; - - setPatternRollups((current) => { - const updated = updateResultOnCheckCompleted({ + setPatternRollups((currentPatternRollups) => { + const updatedRollups = updateResultOnCheckCompleted({ error, formatBytes, formatNumber, @@ -108,19 +154,23 @@ export const useResultsRollup = ({ ilmPhases, patterns }: Props): UseResultsRoll isILMAvailable, partitionedFieldMetadata, pattern, - patternRollups: current, + patternRollups: currentPatternRollups, }); + const updatedRollup = updatedRollups[pattern]; + const { stats, results, ilmExplain } = updatedRollup; + const indexId = getIndexId({ indexName, stats }); + if ( indexId != null && - updated[pattern].stats && - updated[pattern].results && + stats && + results && + ilmExplain && requestTime != null && requestTime > 0 && - partitionedFieldMetadata && - ilmExplain + partitionedFieldMetadata ) { - telemetryEvents.reportDataQualityIndexChecked?.({ + const metadata = { batchId, ecsVersion: EcsVersion, errorCount: error ? 1 : 0, @@ -128,16 +178,19 @@ export const useResultsRollup = ({ ilmPhases, patterns }: Props): UseResultsRoll indexId, indexName, isCheckAll: true, - numberOfDocuments: getDocsCount({ indexName, stats: updated[pattern].stats }), + numberOfDocuments: getDocsCount({ indexName, stats }), + numberOfFields: partitionedFieldMetadata.all.length, numberOfIncompatibleFields: getIndexIncompatible({ indexName, - results: updated[pattern].results, + results, }), + numberOfEcsFields: partitionedFieldMetadata.ecsCompliant.length, + numberOfCustomFields: partitionedFieldMetadata.custom.length, numberOfIndices: 1, numberOfIndicesChecked: 1, - numberOfSameFamily: getTotalPatternSameFamily(updated[pattern].results), + numberOfSameFamily: getTotalPatternSameFamily(results), sameFamilyFields: getSameFamilyFields(partitionedFieldMetadata.sameFamily), - sizeInBytes: getSizeInBytes({ stats: updated[pattern].stats, indexName }), + sizeInBytes: getSizeInBytes({ stats, indexName }), timeConsumedMs: requestTime, unallowedMappingFields: getIncompatibleMappingsFields( partitionedFieldMetadata.incompatible @@ -145,7 +198,11 @@ export const useResultsRollup = ({ ilmPhases, patterns }: Props): UseResultsRoll unallowedValueFields: getIncompatibleValuesFields( partitionedFieldMetadata.incompatible ), - }); + }; + telemetryEvents.reportDataQualityIndexChecked?.(metadata); + + const result = { meta: metadata, rollup: updatedRollup }; + postResult({ result, httpFetch, toasts, abortController: new AbortController() }); } if (isLastCheck) { @@ -153,19 +210,19 @@ export const useResultsRollup = ({ ilmPhases, patterns }: Props): UseResultsRoll batchId, ecsVersion: EcsVersion, isCheckAll: true, - numberOfDocuments: getTotalDocsCount(updated), - numberOfIncompatibleFields: getTotalIncompatible(updated), - numberOfIndices: getTotalIndices(updated), - numberOfIndicesChecked: getTotalIndicesChecked(updated), - numberOfSameFamily: getTotalSameFamily(updated), - sizeInBytes: getTotalSizeInBytes(updated), + numberOfDocuments: getTotalDocsCount(updatedRollups), + numberOfIncompatibleFields: getTotalIncompatible(updatedRollups), + numberOfIndices: getTotalIndices(updatedRollups), + numberOfIndicesChecked: getTotalIndicesChecked(updatedRollups), + numberOfSameFamily: getTotalSameFamily(updatedRollups), + sizeInBytes: getTotalSizeInBytes(updatedRollups), timeConsumedMs: Date.now() - checkAllStartTime, }); } - return updated; + return updatedRollups; }); }, - [isILMAvailable, patternRollups, telemetryEvents] + [httpFetch, isILMAvailable, telemetryEvents, toasts] ); useEffect(() => { diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_stats/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_stats/index.test.tsx index de63f40e361c4..fb13413dbbd4d 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_stats/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_stats/index.test.tsx @@ -12,6 +12,7 @@ import { DataQualityProvider } from '../data_quality_panel/data_quality_context' import { mockStatsGreenIndex } from '../mock/stats/mock_stats_green_index'; import { ERROR_LOADING_STATS } from '../translations'; import { useStats, UseStats } from '.'; +import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; const mockHttpFetch = jest.fn(); const mockReportDataQualityIndexChecked = jest.fn(); @@ -20,12 +21,14 @@ const mockTelemetryEvents = { reportDataQualityIndexChecked: mockReportDataQualityIndexChecked, reportDataQualityCheckAllCompleted: mockReportDataQualityCheckAllClicked, }; +const { toasts } = notificationServiceMock.createSetupContract(); const ContextWrapper: React.FC = ({ children }) => ( {children} @@ -36,6 +39,7 @@ const ContextWrapperILMNotAvailable: React.FC = ({ children }) => ( httpFetch={mockHttpFetch} telemetryEvents={mockTelemetryEvents} isILMAvailable={false} + toasts={toasts} > {children} diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_unallowed_values/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_unallowed_values/index.test.tsx index b69de24cb6d9a..f5bfcde8cb3b6 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_unallowed_values/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality/use_unallowed_values/index.test.tsx @@ -15,6 +15,7 @@ import { mockUnallowedValuesResponse } from '../mock/unallowed_values/mock_unall import { ERROR_LOADING_UNALLOWED_VALUES } from '../translations'; import { EcsMetadata, UnallowedValueRequestItem } from '../types'; import { useUnallowedValues, UseUnallowedValues } from '.'; +import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; const mockHttpFetch = jest.fn(); const mockReportDataQualityIndexChecked = jest.fn(); @@ -23,12 +24,14 @@ const mockTelemetryEvents = { reportDataQualityIndexChecked: mockReportDataQualityIndexChecked, reportDataQualityCheckAllCompleted: mockReportDataQualityCheckAllClicked, }; +const { toasts } = notificationServiceMock.createSetupContract(); const ContextWrapper: React.FC = ({ children }) => ( {children} diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/tsconfig.json b/x-pack/packages/security-solution/ecs_data_quality_dashboard/tsconfig.json index 4581552f2c591..d005b92176270 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/tsconfig.json +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/tsconfig.json @@ -25,5 +25,7 @@ "@kbn/elastic-assistant", "@kbn/triggers-actions-ui-plugin", "@kbn/core", + "@kbn/core-notifications-browser", + "@kbn/core-notifications-browser-mocks", ] } diff --git a/x-pack/plugins/ecs_data_quality_dashboard/common/constants.ts b/x-pack/plugins/ecs_data_quality_dashboard/common/constants.ts index 52c734797f726..d979d22b12b88 100755 --- a/x-pack/plugins/ecs_data_quality_dashboard/common/constants.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/common/constants.ts @@ -13,4 +13,5 @@ export const GET_INDEX_STATS = `${BASE_PATH}/stats/{pattern}`; export const GET_INDEX_MAPPINGS = `${BASE_PATH}/mappings/{pattern}`; export const GET_UNALLOWED_FIELD_VALUES = `${BASE_PATH}/unallowed_field_values`; export const GET_ILM_EXPLAIN = `${BASE_PATH}/ilm_explain/{pattern}`; +export const RESULTS_ROUTE_PATH = `${BASE_PATH}/results`; export const INTERNAL_API_VERSION = '1'; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/kibana.jsonc b/x-pack/plugins/ecs_data_quality_dashboard/kibana.jsonc index b946a7342a1b0..2650184783066 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/kibana.jsonc +++ b/x-pack/plugins/ecs_data_quality_dashboard/kibana.jsonc @@ -8,7 +8,10 @@ "server": true, "browser": false, "requiredPlugins": [ - "data" + "data", + ], + "optionalPlugins": [ + "spaces", ] } } diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/__mocks__/request_context.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/__mocks__/request_context.ts index 19fb44f7f8bac..eaa90f75c5890 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/__mocks__/request_context.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/__mocks__/request_context.ts @@ -39,6 +39,9 @@ const createAppClientMock = () => ({}); const createRequestContextMock = (clients: MockClients = createMockClients()) => { return { core: clients.core, + dataQualityDashboard: { + getResultsIndexName: jest.fn(() => Promise.resolve('mock_results_index_name')), + }, }; }; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/helpers/get_available_indices.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/helpers/get_available_indices.ts index 032a0930cb40f..8f7fdead51547 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/helpers/get_available_indices.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/helpers/get_available_indices.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; +import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; export const getRequestBody = ({ indexPattern, diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/helpers/get_unallowed_field_requests.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/helpers/get_unallowed_field_requests.ts index c5b30da92295e..b09959ab7921b 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/helpers/get_unallowed_field_requests.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/helpers/get_unallowed_field_requests.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { +import type { MsearchMultisearchHeader, MsearchMultisearchBody, } from '@elastic/elasticsearch/lib/api/types'; -import { AllowedValuesInputs } from '../schemas/get_unallowed_field_values'; +import type { AllowedValuesInputs } from '../schemas/get_unallowed_field_values'; export const getMSearchRequestHeader = (indexName: string): MsearchMultisearchHeader => ({ expand_wildcards: ['open'], diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/index.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/index.ts index bd83becac07b3..eaea7b463eed7 100755 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/index.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/index.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { PluginInitializerContext } from '@kbn/core/server'; +import type { PluginInitializerContext } from '@kbn/core/server'; // This exports static code and TypeScript types, // as well as, Kibana Platform `plugin()` initializer. diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_data_stream.test.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_data_stream.test.ts new file mode 100644 index 0000000000000..7504a4b55c1cb --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_data_stream.test.ts @@ -0,0 +1,121 @@ +/* + * 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 { ResultsDataStream } from './results_data_stream'; +import { Subject } from 'rxjs'; +import type { InstallParams } from '@kbn/data-stream-adapter'; +import { DataStreamSpacesAdapter } from '@kbn/data-stream-adapter'; +import { elasticsearchServiceMock } from '@kbn/core-elasticsearch-server-mocks'; +import { loggerMock } from '@kbn/logging-mocks'; + +jest.mock('@kbn/data-stream-adapter'); + +const MockedDataStreamSpacesAdapter = DataStreamSpacesAdapter as unknown as jest.MockedClass< + typeof DataStreamSpacesAdapter +>; + +const esClient = elasticsearchServiceMock.createStart().client.asInternalUser; + +describe('ResultsDataStream', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('constructor', () => { + it('should create DataStreamSpacesAdapter', () => { + new ResultsDataStream({ kibanaVersion: '8.13.0' }); + expect(MockedDataStreamSpacesAdapter).toHaveBeenCalledTimes(1); + }); + + it('should create component templates', () => { + new ResultsDataStream({ kibanaVersion: '8.13.0' }); + const [dataStreamSpacesAdapter] = MockedDataStreamSpacesAdapter.mock.instances; + expect(dataStreamSpacesAdapter.setComponentTemplate).toHaveBeenCalledWith( + expect.objectContaining({ name: '.kibana-data-quality-dashboard-ecs-mappings' }) + ); + expect(dataStreamSpacesAdapter.setComponentTemplate).toHaveBeenCalledWith( + expect.objectContaining({ name: '.kibana-data-quality-dashboard-results-mappings' }) + ); + }); + + it('should create index templates', () => { + new ResultsDataStream({ kibanaVersion: '8.13.0' }); + const [dataStreamSpacesAdapter] = MockedDataStreamSpacesAdapter.mock.instances; + expect(dataStreamSpacesAdapter.setIndexTemplate).toHaveBeenCalledWith( + expect.objectContaining({ name: '.kibana-data-quality-dashboard-results-index-template' }) + ); + }); + }); + + describe('install', () => { + it('should install data stream', async () => { + const resultsDataStream = new ResultsDataStream({ kibanaVersion: '8.13.0' }); + const params: InstallParams = { + esClient, + logger: loggerMock.create(), + pluginStop$: new Subject(), + }; + await resultsDataStream.install(params); + const [dataStreamSpacesAdapter] = MockedDataStreamSpacesAdapter.mock.instances; + expect(dataStreamSpacesAdapter.install).toHaveBeenCalledWith(params); + }); + + it('should log error', async () => { + const resultsDataStream = new ResultsDataStream({ kibanaVersion: '8.13.0' }); + const params: InstallParams = { + esClient, + logger: loggerMock.create(), + pluginStop$: new Subject(), + }; + const [dataStreamSpacesAdapter] = MockedDataStreamSpacesAdapter.mock.instances; + const error = new Error('test-error'); + (dataStreamSpacesAdapter.install as jest.Mock).mockRejectedValueOnce(error); + + await resultsDataStream.install(params); + expect(params.logger.error).toHaveBeenCalledWith(expect.any(String), error); + }); + }); + + describe('installSpace', () => { + it('should install space', async () => { + const resultsDataStream = new ResultsDataStream({ kibanaVersion: '8.13.0' }); + const params: InstallParams = { + esClient, + logger: loggerMock.create(), + pluginStop$: new Subject(), + }; + const [dataStreamSpacesAdapter] = MockedDataStreamSpacesAdapter.mock.instances; + (dataStreamSpacesAdapter.install as jest.Mock).mockResolvedValueOnce(undefined); + + await resultsDataStream.install(params); + await resultsDataStream.installSpace('space1'); + + expect(dataStreamSpacesAdapter.getInstalledSpaceName).toHaveBeenCalledWith('space1'); + expect(dataStreamSpacesAdapter.installSpace).toHaveBeenCalledWith('space1'); + }); + + it('should not install space if install not executed', async () => { + const resultsDataStream = new ResultsDataStream({ kibanaVersion: '8.13.0' }); + expect(resultsDataStream.installSpace('space1')).rejects.toThrowError(); + }); + + it('should throw error if main install had error', async () => { + const resultsDataStream = new ResultsDataStream({ kibanaVersion: '8.13.0' }); + const params: InstallParams = { + esClient, + logger: loggerMock.create(), + pluginStop$: new Subject(), + }; + const [dataStreamSpacesAdapter] = MockedDataStreamSpacesAdapter.mock.instances; + const error = new Error('test-error'); + (dataStreamSpacesAdapter.install as jest.Mock).mockRejectedValueOnce(error); + await resultsDataStream.install(params); + + expect(resultsDataStream.installSpace('space1')).rejects.toThrowError(error); + }); + }); +}); diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_data_stream.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_data_stream.ts new file mode 100644 index 0000000000000..30f760f7ccdaf --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_data_stream.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 { DataStreamSpacesAdapter, ecsFieldMap, type InstallParams } from '@kbn/data-stream-adapter'; +import { resultsFieldMap } from './results_field_map'; + +const TOTAL_FIELDS_LIMIT = 2500; + +const RESULTS_DATA_STREAM_NAME = '.kibana-data-quality-dashboard-results'; + +const RESULTS_INDEX_TEMPLATE_NAME = '.kibana-data-quality-dashboard-results-index-template'; +const RESULTS_COMPONENT_TEMPLATE_NAME = '.kibana-data-quality-dashboard-results-mappings'; +const ECS_COMPONENT_TEMPLATE_NAME = '.kibana-data-quality-dashboard-ecs-mappings'; + +export class ResultsDataStream { + private readonly dataStream: DataStreamSpacesAdapter; + private installPromise?: Promise; + + constructor({ kibanaVersion }: { kibanaVersion: string }) { + this.dataStream = new DataStreamSpacesAdapter(RESULTS_DATA_STREAM_NAME, { + kibanaVersion, + totalFieldsLimit: TOTAL_FIELDS_LIMIT, + }); + this.dataStream.setComponentTemplate({ + name: ECS_COMPONENT_TEMPLATE_NAME, + fieldMap: ecsFieldMap, + }); + this.dataStream.setComponentTemplate({ + name: RESULTS_COMPONENT_TEMPLATE_NAME, + fieldMap: resultsFieldMap, + }); + + this.dataStream.setIndexTemplate({ + name: RESULTS_INDEX_TEMPLATE_NAME, + componentTemplateRefs: [RESULTS_COMPONENT_TEMPLATE_NAME, ECS_COMPONENT_TEMPLATE_NAME], + }); + } + + async install(params: InstallParams) { + try { + this.installPromise = this.dataStream.install(params); + await this.installPromise; + } catch (err) { + params.logger.error( + `Error installing results data stream. Data quality dashboard persistence may be impacted.- ${err.message}`, + err + ); + } + } + + async installSpace(spaceId: string): Promise { + if (!this.installPromise) { + throw new Error('Results data stream not installed'); + } + // wait for install to complete, may reject if install failed, routes should handle this + await this.installPromise; + let dataStreamName = await this.dataStream.getInstalledSpaceName(spaceId); + if (!dataStreamName) { + dataStreamName = await this.dataStream.installSpace(spaceId); + } + return dataStreamName; + } +} diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_field_map.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_field_map.ts new file mode 100644 index 0000000000000..59f8ade6cb834 --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/data_stream/results_field_map.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 type { FieldMap } from '@kbn/data-stream-adapter'; + +export const resultsFieldMap: FieldMap = { + 'meta.batchId': { type: 'keyword', required: true }, + 'meta.ecsVersion': { type: 'keyword', required: true }, + 'meta.errorCount': { type: 'long', required: true }, + 'meta.ilmPhase': { type: 'keyword', required: true }, + 'meta.indexId': { type: 'keyword', required: true }, + 'meta.indexName': { type: 'keyword', required: true }, + 'meta.isCheckAll': { type: 'boolean', required: true }, + 'meta.numberOfDocuments': { type: 'long', required: true }, + 'meta.numberOfFields': { type: 'long', required: true }, + 'meta.numberOfIncompatibleFields': { type: 'long', required: true }, + 'meta.numberOfEcsFields': { type: 'long', required: true }, + 'meta.numberOfCustomFields': { type: 'long', required: true }, + 'meta.numberOfIndices': { type: 'long', required: true }, + 'meta.numberOfIndicesChecked': { type: 'long', required: true }, + 'meta.numberOfSameFamily': { type: 'long', required: true }, + 'meta.sameFamilyFields': { type: 'keyword', required: true, array: true }, + 'meta.sizeInBytes': { type: 'long', required: true }, + 'meta.timeConsumedMs': { type: 'long', required: true }, + 'meta.unallowedMappingFields': { type: 'keyword', required: true, array: true }, + 'meta.unallowedValueFields': { type: 'keyword', required: true, array: true }, + 'rollup.docsCount': { type: 'long', required: true }, + 'rollup.error': { type: 'text', required: false }, + 'rollup.ilmExplainPhaseCounts': { type: 'object', required: false }, + 'rollup.indices': { type: 'long', required: true }, + 'rollup.pattern': { type: 'keyword', required: true }, + 'rollup.sizeInBytes': { type: 'long', required: true }, + 'rollup.ilmExplain': { type: 'object', required: true, array: true }, + 'rollup.stats': { type: 'object', required: true, array: true }, + 'rollup.results': { type: 'object', required: true, array: true }, +}; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_ilm_explain.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_ilm_explain.ts index 6ee120aa04ae3..751104db52879 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_ilm_explain.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_ilm_explain.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IlmExplainLifecycleResponse } from '@elastic/elasticsearch/lib/api/types'; +import type { IlmExplainLifecycleResponse } from '@elastic/elasticsearch/lib/api/types'; import type { IScopedClusterClient } from '@kbn/core/server'; export const fetchILMExplain = ( diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_mappings.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_mappings.ts index e0364acbb559e..d63a315a4d1e2 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_mappings.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_mappings.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IndicesGetMappingIndexMappingRecord } from '@elastic/elasticsearch/lib/api/types'; +import type { IndicesGetMappingIndexMappingRecord } from '@elastic/elasticsearch/lib/api/types'; import type { IScopedClusterClient } from '@kbn/core/server'; export const fetchMappings = ( diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_stats.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_stats.ts index b9a6abd7e54db..c02d5361bdc8e 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_stats.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/fetch_stats.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IndicesStatsResponse } from '@elastic/elasticsearch/lib/api/types'; +import type { IndicesStatsResponse } from '@elastic/elasticsearch/lib/api/types'; import type { IScopedClusterClient } from '@kbn/core/server'; export const fetchStats = ( diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/get_unallowed_field_values.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/get_unallowed_field_values.ts index 2079a58ce5b8d..e549c275d3d35 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/lib/get_unallowed_field_values.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/lib/get_unallowed_field_values.ts @@ -6,12 +6,12 @@ */ import type { ElasticsearchClient } from '@kbn/core/server'; -import { MsearchRequestItem } from '@elastic/elasticsearch/lib/api/types'; +import type { MsearchRequestItem } from '@elastic/elasticsearch/lib/api/types'; import { getMSearchRequestBody, getMSearchRequestHeader, } from '../helpers/get_unallowed_field_requests'; -import { GetUnallowedFieldValuesInputs } from '../schemas/get_unallowed_field_values'; +import type { GetUnallowedFieldValuesInputs } from '../schemas/get_unallowed_field_values'; export const getUnallowedFieldValues = ( esClient: ElasticsearchClient, diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/plugin.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/plugin.ts index 0c1cf336dc10d..19c6f12479694 100755 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/plugin.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/plugin.ts @@ -5,34 +5,77 @@ * 2.0. */ -import { PluginInitializerContext, CoreSetup, CoreStart, Plugin, Logger } from '@kbn/core/server'; +import type { + PluginInitializerContext, + CoreSetup, + CoreStart, + Plugin, + Logger, +} from '@kbn/core/server'; -import { EcsDataQualityDashboardPluginSetup, EcsDataQualityDashboardPluginStart } from './types'; +import { ReplaySubject, type Subject } from 'rxjs'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common/constants'; +import type { + EcsDataQualityDashboardPluginSetup, + EcsDataQualityDashboardPluginStart, + PluginSetupDependencies, + DataQualityDashboardRequestHandlerContext, +} from './types'; import { getILMExplainRoute, getIndexMappingsRoute, getIndexStatsRoute, getUnallowedFieldValuesRoute, + resultsRoutes, } from './routes'; +import { ResultsDataStream } from './lib/data_stream/results_data_stream'; export class EcsDataQualityDashboardPlugin implements Plugin { private readonly logger: Logger; + private readonly resultsDataStream: ResultsDataStream; + private pluginStop$: Subject; constructor(initializerContext: PluginInitializerContext) { this.logger = initializerContext.logger.get(); + this.pluginStop$ = new ReplaySubject(1); + this.resultsDataStream = new ResultsDataStream({ + kibanaVersion: initializerContext.env.packageInfo.version, + }); } - public setup(core: CoreSetup) { - this.logger.debug('ecsDataQualityDashboard: Setup'); // this would be deleted when plugin is removed - const router = core.http.createRouter(); // this would be deleted when plugin is removed + public setup(core: CoreSetup, plugins: PluginSetupDependencies) { + this.logger.debug('ecsDataQualityDashboard: Setup'); + + // TODO: Uncomment https://github.com/elastic/kibana/pull/173185#issuecomment-1908034302 + // this.resultsDataStream.install({ + // esClient: core + // .getStartServices() + // .then(([{ elasticsearch }]) => elasticsearch.client.asInternalUser), + // logger: this.logger, + // pluginStop$: this.pluginStop$, + // }); + + core.http.registerRouteHandlerContext< + DataQualityDashboardRequestHandlerContext, + 'dataQualityDashboard' + >('dataQualityDashboard', (_context, request) => { + const spaceId = plugins.spaces?.spacesService.getSpaceId(request) ?? DEFAULT_SPACE_ID; + return { + spaceId, + getResultsIndexName: async () => this.resultsDataStream.installSpace(spaceId), + }; + }); + + const router = core.http.createRouter(); // Register server side APIs getIndexMappingsRoute(router, this.logger); getIndexStatsRoute(router, this.logger); getUnallowedFieldValuesRoute(router, this.logger); getILMExplainRoute(router, this.logger); + resultsRoutes(router, this.logger); return {}; } @@ -41,5 +84,8 @@ export class EcsDataQualityDashboardPlugin return {}; } - public stop() {} + public stop() { + this.pluginStop$.next(); + this.pluginStop$.complete(); + } } diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_ilm_explain.test.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_ilm_explain.test.ts index 329defab80c2b..2fa4243f002b9 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_ilm_explain.test.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_ilm_explain.test.ts @@ -12,7 +12,7 @@ import { serverMock } from '../__mocks__/server'; import { requestMock } from '../__mocks__/request'; import { requestContextMock } from '../__mocks__/request_context'; import { getILMExplainRoute } from './get_ilm_explain'; -import { loggerMock, MockedLogger } from '@kbn/logging-mocks'; +import { loggerMock, type MockedLogger } from '@kbn/logging-mocks'; jest.mock('../lib', () => ({ fetchILMExplain: jest.fn(), diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_ilm_explain.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_ilm_explain.ts index 86db6f6c79004..73282d11e3d71 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_ilm_explain.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_ilm_explain.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IRouter, Logger } from '@kbn/core/server'; +import type { IRouter, Logger } from '@kbn/core/server'; import { GET_ILM_EXPLAIN, INTERNAL_API_VERSION } from '../../common/constants'; import { fetchILMExplain } from '../lib'; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.test.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.test.ts index 34ce98d4f9378..f1089b192ab05 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.test.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.test.ts @@ -12,7 +12,7 @@ import { serverMock } from '../__mocks__/server'; import { requestMock } from '../__mocks__/request'; import { requestContextMock } from '../__mocks__/request_context'; import { getIndexMappingsRoute } from './get_index_mappings'; -import { loggerMock, MockedLogger } from '@kbn/logging-mocks'; +import { loggerMock, type MockedLogger } from '@kbn/logging-mocks'; jest.mock('../lib', () => ({ fetchMappings: jest.fn(), diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.ts index 6f1dfbf4ee833..e593320933f7c 100755 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_mappings.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IRouter, Logger } from '@kbn/core/server'; +import type { IRouter, Logger } from '@kbn/core/server'; import { fetchMappings } from '../lib'; import { buildResponse } from '../lib/build_response'; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_stats.test.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_stats.test.ts index e000809797a01..729c795e0665b 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_stats.test.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_stats.test.ts @@ -12,7 +12,8 @@ import { serverMock } from '../__mocks__/server'; import { requestMock } from '../__mocks__/request'; import { requestContextMock } from '../__mocks__/request_context'; import { getIndexStatsRoute } from './get_index_stats'; -import { loggerMock, MockedLogger } from '@kbn/logging-mocks'; +import type { MockedLogger } from '@kbn/logging-mocks'; +import { loggerMock } from '@kbn/logging-mocks'; jest.mock('../lib', () => ({ fetchStats: jest.fn(), diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_stats.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_stats.ts index 220c3e68141f0..cbaf7940a4b51 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_stats.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_index_stats.ts @@ -5,9 +5,9 @@ * 2.0. */ import { i18n } from '@kbn/i18n'; -import { IRouter, Logger } from '@kbn/core/server'; +import type { IRouter, Logger } from '@kbn/core/server'; -import { IndicesStatsIndicesStats } from '@elastic/elasticsearch/lib/api/types'; +import type { IndicesStatsIndicesStats } from '@elastic/elasticsearch/lib/api/types'; import { fetchStats, fetchAvailableIndices } from '../lib'; import { buildResponse } from '../lib/build_response'; import { GET_INDEX_STATS, INTERNAL_API_VERSION } from '../../common/constants'; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.test.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.test.ts index fe18893acaec1..a283d24d1479e 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.test.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.test.ts @@ -12,7 +12,8 @@ import { serverMock } from '../__mocks__/server'; import { requestMock } from '../__mocks__/request'; import { requestContextMock } from '../__mocks__/request_context'; import { getUnallowedFieldValuesRoute } from './get_unallowed_field_values'; -import { loggerMock, MockedLogger } from '@kbn/logging-mocks'; +import type { MockedLogger } from '@kbn/logging-mocks'; +import { loggerMock } from '@kbn/logging-mocks'; jest.mock('../lib', () => ({ getUnallowedFieldValues: jest.fn(), diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.ts index 8108396e8f39d..76f0827caaad2 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { IRouter, Logger } from '@kbn/core/server'; +import type { IRouter, Logger } from '@kbn/core/server'; import { getUnallowedFieldValues } from '../lib'; import { buildResponse } from '../lib/build_response'; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/index.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/index.ts index 6622471d463e3..5ae8ebeae6103 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/index.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/index.ts @@ -8,3 +8,4 @@ export { getIndexMappingsRoute } from './get_index_mappings'; export { getIndexStatsRoute } from './get_index_stats'; export { getUnallowedFieldValuesRoute } from './get_unallowed_field_values'; export { getILMExplainRoute } from './get_ilm_explain'; +export { resultsRoutes } from './results'; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.test.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.test.ts new file mode 100644 index 0000000000000..44f7a97abf0d0 --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.test.ts @@ -0,0 +1,211 @@ +/* + * 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 { RESULTS_ROUTE_PATH } from '../../../common/constants'; + +import { serverMock } from '../../__mocks__/server'; +import { requestMock } from '../../__mocks__/request'; +import { requestContextMock } from '../../__mocks__/request_context'; +import type { LatestAggResponseBucket } from './get_results'; +import { getResultsRoute, getQuery } from './get_results'; +import { loggerMock, type MockedLogger } from '@kbn/logging-mocks'; +import { resultBody, resultDocument } from './results.mock'; +import type { + SearchResponse, + SecurityHasPrivilegesResponse, +} from '@elastic/elasticsearch/lib/api/types'; +import type { ResultDocument } from '../../schemas/result'; + +const searchResponse = { + aggregations: { + latest: { + buckets: [ + { + key: 'logs-*', + latest_doc: { hits: { hits: [{ _source: resultDocument }] } }, + }, + ], + }, + }, +} as unknown as SearchResponse< + ResultDocument, + Record +>; + +// TODO: https://github.com/elastic/kibana/pull/173185#issuecomment-1908034302 +describe.skip('getResultsRoute route', () => { + describe('querying', () => { + let server: ReturnType; + let { context } = requestContextMock.createTools(); + let logger: MockedLogger; + + const req = requestMock.create({ + method: 'get', + path: RESULTS_ROUTE_PATH, + query: { patterns: 'logs-*,alerts-*' }, + }); + + beforeEach(() => { + jest.clearAllMocks(); + + server = serverMock.create(); + logger = loggerMock.create(); + + ({ context } = requestContextMock.createTools()); + + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges.mockResolvedValue({ + index: { 'logs-*': { all: true }, 'alerts-*': { all: true } }, + } as unknown as SecurityHasPrivilegesResponse); + + getResultsRoute(server.router, logger); + }); + + it('gets result', async () => { + const mockSearch = context.core.elasticsearch.client.asInternalUser.search; + mockSearch.mockResolvedValueOnce(searchResponse); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(mockSearch).toHaveBeenCalled(); + + expect(response.status).toEqual(200); + expect(response.body).toEqual([{ '@timestamp': expect.any(Number), ...resultBody }]); + }); + + it('handles results data stream error', async () => { + const errorMessage = 'Installation Error!'; + context.dataQualityDashboard.getResultsIndexName.mockRejectedValueOnce( + new Error(errorMessage) + ); + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.status).toEqual(503); + expect(response.body).toEqual({ + message: expect.stringContaining(errorMessage), + status_code: 503, + }); + expect(logger.error).toHaveBeenCalledWith(expect.stringContaining(errorMessage)); + }); + + it('handles error', async () => { + const errorMessage = 'Error!'; + const mockSearch = context.core.elasticsearch.client.asInternalUser.search; + mockSearch.mockRejectedValueOnce({ message: errorMessage }); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.status).toEqual(500); + expect(response.body).toEqual({ message: errorMessage, status_code: 500 }); + }); + }); + + describe('request pattern authorization', () => { + let server: ReturnType; + let { context } = requestContextMock.createTools(); + let logger: MockedLogger; + + const req = requestMock.create({ + method: 'get', + path: RESULTS_ROUTE_PATH, + query: { patterns: 'logs-*,alerts-*' }, + }); + + beforeEach(() => { + jest.clearAllMocks(); + + server = serverMock.create(); + logger = loggerMock.create(); + + ({ context } = requestContextMock.createTools()); + + context.core.elasticsearch.client.asInternalUser.search.mockResolvedValue(searchResponse); + + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges.mockResolvedValue({ + index: { 'logs-*': { all: true }, 'alerts-*': { all: true } }, + } as unknown as SecurityHasPrivilegesResponse); + + getResultsRoute(server.router, logger); + }); + + it('should authorize pattern', async () => { + const mockHasPrivileges = + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges; + mockHasPrivileges.mockResolvedValueOnce({ + index: { 'logs-*': { all: true }, 'alerts-*': { all: true } }, + } as unknown as SecurityHasPrivilegesResponse); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(mockHasPrivileges).toHaveBeenCalledWith({ + index: [ + { names: ['logs-*', 'alerts-*'], privileges: ['all', 'read', 'view_index_metadata'] }, + ], + }); + expect(context.core.elasticsearch.client.asInternalUser.search).toHaveBeenCalled(); + + expect(response.status).toEqual(200); + expect(response.body).toEqual([{ '@timestamp': expect.any(Number), ...resultBody }]); + }); + + it('should search authorized patterns only', async () => { + const mockHasPrivileges = + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges; + mockHasPrivileges.mockResolvedValueOnce({ + index: { 'logs-*': { all: false }, 'alerts-*': { all: true } }, + } as unknown as SecurityHasPrivilegesResponse); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(context.core.elasticsearch.client.asInternalUser.search).toHaveBeenCalledWith({ + index: expect.any(String), + ...getQuery(['alerts-*']), + }); + + expect(response.status).toEqual(200); + }); + + it('should not search unauthorized patterns', async () => { + const mockHasPrivileges = + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges; + mockHasPrivileges.mockResolvedValueOnce({ + index: { 'logs-*': { all: false }, 'alerts-*': { all: false } }, + } as unknown as SecurityHasPrivilegesResponse); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(context.core.elasticsearch.client.asInternalUser.search).not.toHaveBeenCalled(); + + expect(response.status).toEqual(200); + expect(response.body).toEqual([]); + }); + + it('handles pattern authorization error', async () => { + const errorMessage = 'Error!'; + const mockHasPrivileges = + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges; + mockHasPrivileges.mockRejectedValueOnce({ message: errorMessage }); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.status).toEqual(500); + expect(response.body).toEqual({ message: errorMessage, status_code: 500 }); + }); + }); + + describe('request validation', () => { + let server: ReturnType; + let logger: MockedLogger; + beforeEach(() => { + server = serverMock.create(); + logger = loggerMock.create(); + getResultsRoute(server.router, logger); + }); + + test('disallows invalid query param', () => { + const req = requestMock.create({ + method: 'get', + path: RESULTS_ROUTE_PATH, + query: {}, + }); + const result = server.validate(req); + + expect(result.badRequest).toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.ts new file mode 100644 index 0000000000000..56729c7a40ab7 --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.ts @@ -0,0 +1,113 @@ +/* + * 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 { IRouter, Logger } from '@kbn/core/server'; + +import { RESULTS_ROUTE_PATH, INTERNAL_API_VERSION } from '../../../common/constants'; +import { buildResponse } from '../../lib/build_response'; +import { buildRouteValidation } from '../../schemas/common'; +import { GetResultQuery } from '../../schemas/result'; +import type { Result, ResultDocument } from '../../schemas/result'; +import { API_DEFAULT_ERROR_MESSAGE } from '../../translations'; +import type { DataQualityDashboardRequestHandlerContext } from '../../types'; +import { createResultFromDocument } from './parser'; +import { API_RESULTS_INDEX_NOT_AVAILABLE } from './translations'; + +export const getQuery = (patterns: string[]) => ({ + size: 0, + query: { + bool: { filter: [{ terms: { 'rollup.pattern': patterns } }] }, + }, + aggs: { + latest: { + terms: { field: 'rollup.pattern', size: 10000 }, // big enough to get all patterns, but under `index.max_terms_count` (default 65536) + aggs: { latest_doc: { top_hits: { size: 1, sort: [{ '@timestamp': { order: 'desc' } }] } } }, + }, + }, +}); + +export interface LatestAggResponseBucket { + key: string; + latest_doc: { hits: { hits: Array<{ _source: ResultDocument }> } }; +} + +export const getResultsRoute = ( + router: IRouter, + logger: Logger +) => { + router.versioned + .get({ + path: RESULTS_ROUTE_PATH, + access: 'internal', + options: { tags: ['access:securitySolution'] }, + }) + .addVersion( + { + version: INTERNAL_API_VERSION, + validate: { request: { query: buildRouteValidation(GetResultQuery) } }, + }, + async (context, request, response) => { + // TODO: https://github.com/elastic/kibana/pull/173185#issuecomment-1908034302 + return response.ok({ body: [] }); + + // eslint-disable-next-line no-unreachable + const services = await context.resolve(['core', 'dataQualityDashboard']); + const resp = buildResponse(response); + + let index: string; + try { + index = await services.dataQualityDashboard.getResultsIndexName(); + } catch (err) { + logger.error(`[GET results] Error retrieving results index name: ${err.message}`); + return resp.error({ + body: `${API_RESULTS_INDEX_NOT_AVAILABLE}: ${err.message}`, + statusCode: 503, + }); + } + + try { + // Confirm user has authorization for the requested patterns + const { patterns } = request.query; + const userEsClient = services.core.elasticsearch.client.asCurrentUser; + const privileges = await userEsClient.security.hasPrivileges({ + index: [ + { names: patterns.split(','), privileges: ['all', 'read', 'view_index_metadata'] }, + ], + }); + const authorizedPatterns = Object.keys(privileges.index).filter((pattern) => + Object.values(privileges.index[pattern]).some((v) => v === true) + ); + if (authorizedPatterns.length === 0) { + return response.ok({ body: [] }); + } + + // Get the latest result of each pattern + const query = { index, ...getQuery(authorizedPatterns) }; + const internalEsClient = services.core.elasticsearch.client.asInternalUser; + + const { aggregations } = await internalEsClient.search< + ResultDocument, + Record + >(query); + + const results: Result[] = + aggregations?.latest?.buckets.map((bucket) => + createResultFromDocument(bucket.latest_doc.hits.hits[0]._source) + ) ?? []; + + return response.ok({ body: results }); + } catch (err) { + logger.error(JSON.stringify(err)); + + return resp.error({ + body: err.message ?? API_DEFAULT_ERROR_MESSAGE, + statusCode: err.statusCode ?? 500, + }); + } + } + ); +}; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/index.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/index.ts new file mode 100644 index 0000000000000..25d4a913a1946 --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/index.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 type { IRouter, Logger } from '@kbn/core/server'; + +import { postResultsRoute } from './post_results'; +import { getResultsRoute } from './get_results'; +import type { DataQualityDashboardRequestHandlerContext } from '../../types'; + +export const resultsRoutes = ( + router: IRouter, + logger: Logger +) => { + postResultsRoute(router, logger); + getResultsRoute(router, logger); +}; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/parser.test.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/parser.test.ts new file mode 100644 index 0000000000000..56800801ffc8f --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/parser.test.ts @@ -0,0 +1,23 @@ +/* + * 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 { createDocumentFromResult, createResultFromDocument } from './parser'; +import { resultBody, resultDocument } from './results.mock'; + +describe('createDocumentFromResult', () => { + it('should create document from result', () => { + const document = createDocumentFromResult(resultBody); + expect(document).toEqual({ ...resultDocument, '@timestamp': expect.any(Number) }); + }); +}); + +describe('createResultFromDocument', () => { + it('should create document from result', () => { + const result = createResultFromDocument(resultDocument); + expect(result).toEqual({ ...resultBody, '@timestamp': expect.any(Number) }); + }); +}); diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/parser.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/parser.ts new file mode 100644 index 0000000000000..198d5522839e4 --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/parser.ts @@ -0,0 +1,48 @@ +/* + * 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 { Result, ResultDocument, IndexArray, IndexObject } from '../../schemas/result'; + +export const createDocumentFromResult = (result: Result): ResultDocument => { + const { rollup } = result; + const document: ResultDocument = { + ...result, + '@timestamp': Date.now(), + rollup: { + ...rollup, + ilmExplain: indexObjectToIndexArray(rollup.ilmExplain), + stats: indexObjectToIndexArray(rollup.stats), + results: indexObjectToIndexArray(rollup.results), + }, + }; + + return document; +}; + +export const createResultFromDocument = (document: ResultDocument): Result => { + const { rollup } = document; + const result = { + ...document, + rollup: { + ...rollup, + ilmExplain: indexArrayToIndexObject(rollup.ilmExplain), + stats: indexArrayToIndexObject(rollup.stats), + results: indexArrayToIndexObject(rollup.results), + }, + }; + + return result; +}; + +// ES parses object keys containing `.` as nested dot-separated field names (e.g. `event.name`). +// we need to convert documents containing objects with "indexName" keys (e.g. `.index-name-checked`) +// to object arrays so they can be stored correctly, we keep the key in the `_indexName` field. +const indexObjectToIndexArray = (obj: IndexObject): IndexArray => + Object.entries(obj).map(([key, value]) => ({ ...value, _indexName: key })); + +// convert index arrays back to objects with indexName as key +const indexArrayToIndexObject = (arr: IndexArray): IndexObject => + Object.fromEntries(arr.map(({ _indexName, ...value }) => [_indexName, value])); diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.test.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.test.ts new file mode 100644 index 0000000000000..98eb67ecbaaa8 --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.test.ts @@ -0,0 +1,180 @@ +/* + * 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 { RESULTS_ROUTE_PATH } from '../../../common/constants'; + +import { serverMock } from '../../__mocks__/server'; +import { requestMock } from '../../__mocks__/request'; +import { requestContextMock } from '../../__mocks__/request_context'; +import { postResultsRoute } from './post_results'; +import { loggerMock, type MockedLogger } from '@kbn/logging-mocks'; +import type { + SecurityHasPrivilegesResponse, + WriteResponseBase, +} from '@elastic/elasticsearch/lib/api/types'; +import { resultBody, resultDocument } from './results.mock'; + +// TODO: https://github.com/elastic/kibana/pull/173185#issuecomment-1908034302 +describe.skip('postResultsRoute route', () => { + describe('indexation', () => { + let server: ReturnType; + let { context } = requestContextMock.createTools(); + let logger: MockedLogger; + + const req = requestMock.create({ method: 'post', path: RESULTS_ROUTE_PATH, body: resultBody }); + + beforeEach(() => { + jest.clearAllMocks(); + + server = serverMock.create(); + logger = loggerMock.create(); + + ({ context } = requestContextMock.createTools()); + + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges.mockResolvedValue({ + has_all_requested: true, + } as unknown as SecurityHasPrivilegesResponse); + + postResultsRoute(server.router, logger); + }); + + it('indexes result', async () => { + const mockIndex = context.core.elasticsearch.client.asInternalUser.index; + mockIndex.mockResolvedValueOnce({ result: 'created' } as WriteResponseBase); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(mockIndex).toHaveBeenCalledWith({ + body: { ...resultDocument, '@timestamp': expect.any(Number) }, + index: await context.dataQualityDashboard.getResultsIndexName(), + }); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ result: 'created' }); + }); + + it('handles results data stream error', async () => { + const errorMessage = 'Installation Error!'; + context.dataQualityDashboard.getResultsIndexName.mockRejectedValueOnce( + new Error(errorMessage) + ); + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.status).toEqual(503); + expect(response.body).toEqual({ + message: expect.stringContaining(errorMessage), + status_code: 503, + }); + expect(logger.error).toHaveBeenCalledWith(expect.stringContaining(errorMessage)); + }); + + it('handles index error', async () => { + const errorMessage = 'Error!'; + const mockIndex = context.core.elasticsearch.client.asInternalUser.index; + mockIndex.mockRejectedValueOnce({ message: errorMessage }); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.status).toEqual(500); + expect(response.body).toEqual({ message: errorMessage, status_code: 500 }); + }); + }); + + describe('request pattern authorization', () => { + let server: ReturnType; + let { context } = requestContextMock.createTools(); + let logger: MockedLogger; + + const req = requestMock.create({ method: 'post', path: RESULTS_ROUTE_PATH, body: resultBody }); + + beforeEach(() => { + jest.clearAllMocks(); + + server = serverMock.create(); + logger = loggerMock.create(); + + ({ context } = requestContextMock.createTools()); + + context.core.elasticsearch.client.asInternalUser.index.mockResolvedValueOnce({ + result: 'created', + } as WriteResponseBase); + + postResultsRoute(server.router, logger); + }); + + it('should authorize pattern', async () => { + const mockHasPrivileges = + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges; + mockHasPrivileges.mockResolvedValueOnce({ + has_all_requested: true, + } as unknown as SecurityHasPrivilegesResponse); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(mockHasPrivileges).toHaveBeenCalledWith({ + index: [ + { + names: [resultBody.rollup.pattern], + privileges: ['all', 'read', 'view_index_metadata'], + }, + ], + }); + expect(context.core.elasticsearch.client.asInternalUser.index).toHaveBeenCalled(); + expect(response.status).toEqual(200); + expect(response.body).toEqual({ result: 'created' }); + }); + + it('should not index unauthorized pattern', async () => { + const mockHasPrivileges = + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges; + mockHasPrivileges.mockResolvedValueOnce({ + has_all_requested: false, + } as unknown as SecurityHasPrivilegesResponse); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(mockHasPrivileges).toHaveBeenCalledWith({ + index: [ + { + names: [resultBody.rollup.pattern], + privileges: ['all', 'read', 'view_index_metadata'], + }, + ], + }); + expect(context.core.elasticsearch.client.asInternalUser.index).not.toHaveBeenCalled(); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ result: 'noop' }); + }); + + it('handles pattern authorization error', async () => { + const errorMessage = 'Error!'; + const mockHasPrivileges = + context.core.elasticsearch.client.asCurrentUser.security.hasPrivileges; + mockHasPrivileges.mockRejectedValueOnce({ message: errorMessage }); + + const response = await server.inject(req, requestContextMock.convertContext(context)); + expect(response.status).toEqual(500); + expect(response.body).toEqual({ message: errorMessage, status_code: 500 }); + }); + }); + + describe('request validation', () => { + let server: ReturnType; + let logger: MockedLogger; + beforeEach(() => { + server = serverMock.create(); + logger = loggerMock.create(); + postResultsRoute(server.router, logger); + }); + + test('disallows invalid pattern', () => { + const req = requestMock.create({ + method: 'post', + path: RESULTS_ROUTE_PATH, + body: { rollup: resultBody.rollup }, + }); + const result = server.validate(req); + + expect(result.badRequest).toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.ts new file mode 100644 index 0000000000000..1162d23f1dfad --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.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 type { IRouter, Logger } from '@kbn/core/server'; + +import { RESULTS_ROUTE_PATH, INTERNAL_API_VERSION } from '../../../common/constants'; +import { buildResponse } from '../../lib/build_response'; +import { buildRouteValidation } from '../../schemas/common'; +import { PostResultBody } from '../../schemas/result'; +import { API_DEFAULT_ERROR_MESSAGE } from '../../translations'; +import type { DataQualityDashboardRequestHandlerContext } from '../../types'; +import { createDocumentFromResult } from './parser'; +import { API_RESULTS_INDEX_NOT_AVAILABLE } from './translations'; + +export const postResultsRoute = ( + router: IRouter, + logger: Logger +) => { + router.versioned + .post({ + path: RESULTS_ROUTE_PATH, + access: 'internal', + options: { tags: ['access:securitySolution'] }, + }) + .addVersion( + { + version: INTERNAL_API_VERSION, + validate: { request: { body: buildRouteValidation(PostResultBody) } }, + }, + async (context, request, response) => { + // TODO: https://github.com/elastic/kibana/pull/173185#issuecomment-1908034302 + return response.ok({ body: { result: 'noop' } }); + + // eslint-disable-next-line no-unreachable + const services = await context.resolve(['core', 'dataQualityDashboard']); + const resp = buildResponse(response); + + let index: string; + try { + index = await services.dataQualityDashboard.getResultsIndexName(); + } catch (err) { + logger.error(`[POST result] Error retrieving results index name: ${err.message}`); + return resp.error({ + body: `${API_RESULTS_INDEX_NOT_AVAILABLE}: ${err.message}`, + statusCode: 503, + }); + } + + try { + // Confirm user has authorization for the pattern payload + const { pattern } = request.body.rollup; + const userEsClient = services.core.elasticsearch.client.asCurrentUser; + const privileges = await userEsClient.security.hasPrivileges({ + index: [{ names: [pattern], privileges: ['all', 'read', 'view_index_metadata'] }], + }); + if (!privileges.has_all_requested) { + return response.ok({ body: { result: 'noop' } }); + } + + // Index the result + const document = createDocumentFromResult(request.body); + const esClient = services.core.elasticsearch.client.asInternalUser; + const outcome = await esClient.index({ index, body: document }); + + return response.ok({ body: { result: outcome.result } }); + } catch (err) { + logger.error(JSON.stringify(err)); + + return resp.error({ + body: err.message ?? API_DEFAULT_ERROR_MESSAGE, + statusCode: err.statusCode ?? 500, + }); + } + } + ); +}; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/results.mock.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/results.mock.ts new file mode 100644 index 0000000000000..1d0b15a4c24c0 --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/results.mock.ts @@ -0,0 +1,202 @@ +/* + * 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 { ResultDocument } from '../../schemas/result'; + +export const resultDocument: ResultDocument = { + '@timestamp': 1622767273955, + meta: { + batchId: 'aae36cd8-3825-4ad1-baa4-79bdf4617f8a', + ecsVersion: '8.6.1', + errorCount: 0, + ilmPhase: 'hot', + indexId: 'aO29KOwtQ3Snf-Pit5Wf4w', + indexName: '.internal.alerts-security.alerts-default-000001', + isCheckAll: true, + numberOfDocuments: 20, + numberOfFields: 1726, + numberOfIncompatibleFields: 2, + numberOfEcsFields: 1440, + numberOfCustomFields: 284, + numberOfIndices: 1, + numberOfIndicesChecked: 1, + numberOfSameFamily: 0, + sameFamilyFields: [], + sizeInBytes: 506471, + timeConsumedMs: 85, + unallowedMappingFields: [], + unallowedValueFields: ['event.category', 'event.outcome'], + }, + rollup: { + docsCount: 20, + error: null, + ilmExplain: [ + { + _indexName: '.internal.alerts-security.alerts-default-000001', + index: '.internal.alerts-security.alerts-default-000001', + managed: true, + policy: '.alerts-ilm-policy', + index_creation_date_millis: 1700757268526, + time_since_index_creation: '20.99d', + lifecycle_date_millis: 1700757268526, + age: '20.99d', + phase: 'hot', + phase_time_millis: 1700757270294, + action: 'rollover', + action_time_millis: 1700757273955, + step: 'check-rollover-ready', + step_time_millis: 1700757273955, + phase_execution: { + policy: '.alerts-ilm-policy', + phase_definition: { + min_age: '0ms', + actions: { + rollover: { + max_age: '30d', + max_primary_shard_size: '50gb', + }, + }, + }, + version: 1, + modified_date_in_millis: 1700757266723, + }, + }, + ], + ilmExplainPhaseCounts: { + hot: 1, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 0, + }, + indices: 1, + pattern: '.alerts-security.alerts-default', + results: [ + { + _indexName: '.internal.alerts-security.alerts-default-000001', + docsCount: 20, + error: null, + ilmPhase: 'hot', + incompatible: 2, + indexName: '.internal.alerts-security.alerts-default-000001', + markdownComments: [ + '### .internal.alerts-security.alerts-default-000001\n', + '| Result | Index | Docs | Incompatible fields | ILM Phase | Size |\n|--------|-------|------|---------------------|-----------|------|\n| ❌ | .internal.alerts-security.alerts-default-000001 | 20 (100,0 %) | 2 | `hot` | 494.6KB |\n\n', + '### **Incompatible fields** `2` **Same family** `0` **Custom fields** `284` **ECS compliant fields** `1440` **All fields** `1726`\n', + "#### 2 incompatible fields\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\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\n#### Incompatible field values - .internal.alerts-security.alerts-default-000001\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` | `behavior` (1) |\n| event.outcome | `failure`, `success`, `unknown` | `` (12) |\n\n', + ], + pattern: '.alerts-security.alerts-default', + sameFamily: 0, + }, + ], + sizeInBytes: 506471, + stats: [ + { + _indexName: '.internal.alerts-security.alerts-default-000001', + uuid: 'aO29KOwtQ3Snf-Pit5Wf4w', + health: 'green', + status: 'open', + }, + ], + }, +}; + +export const resultBody = { + meta: { + batchId: 'aae36cd8-3825-4ad1-baa4-79bdf4617f8a', + ecsVersion: '8.6.1', + errorCount: 0, + ilmPhase: 'hot', + indexId: 'aO29KOwtQ3Snf-Pit5Wf4w', + indexName: '.internal.alerts-security.alerts-default-000001', + isCheckAll: true, + numberOfDocuments: 20, + numberOfFields: 1726, + numberOfIncompatibleFields: 2, + numberOfEcsFields: 1440, + numberOfCustomFields: 284, + numberOfIndices: 1, + numberOfIndicesChecked: 1, + numberOfSameFamily: 0, + sameFamilyFields: [], + sizeInBytes: 506471, + timeConsumedMs: 85, + unallowedMappingFields: [], + unallowedValueFields: ['event.category', 'event.outcome'], + }, + rollup: { + docsCount: 20, + error: null, + ilmExplain: { + '.internal.alerts-security.alerts-default-000001': { + index: '.internal.alerts-security.alerts-default-000001', + managed: true, + policy: '.alerts-ilm-policy', + index_creation_date_millis: 1700757268526, + time_since_index_creation: '20.99d', + lifecycle_date_millis: 1700757268526, + age: '20.99d', + phase: 'hot', + phase_time_millis: 1700757270294, + action: 'rollover', + action_time_millis: 1700757273955, + step: 'check-rollover-ready', + step_time_millis: 1700757273955, + phase_execution: { + policy: '.alerts-ilm-policy', + phase_definition: { + min_age: '0ms', + actions: { + rollover: { + max_age: '30d', + max_primary_shard_size: '50gb', + }, + }, + }, + version: 1, + modified_date_in_millis: 1700757266723, + }, + }, + }, + ilmExplainPhaseCounts: { + hot: 1, + warm: 0, + cold: 0, + frozen: 0, + unmanaged: 0, + }, + indices: 1, + pattern: '.alerts-security.alerts-default', + results: { + '.internal.alerts-security.alerts-default-000001': { + docsCount: 20, + error: null, + ilmPhase: 'hot', + incompatible: 2, + indexName: '.internal.alerts-security.alerts-default-000001', + markdownComments: [ + '### .internal.alerts-security.alerts-default-000001\n', + '| Result | Index | Docs | Incompatible fields | ILM Phase | Size |\n|--------|-------|------|---------------------|-----------|------|\n| ❌ | .internal.alerts-security.alerts-default-000001 | 20 (100,0 %) | 2 | `hot` | 494.6KB |\n\n', + '### **Incompatible fields** `2` **Same family** `0` **Custom fields** `284` **ECS compliant fields** `1440` **All fields** `1726`\n', + "#### 2 incompatible fields\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\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\n#### Incompatible field values - .internal.alerts-security.alerts-default-000001\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` | `behavior` (1) |\n| event.outcome | `failure`, `success`, `unknown` | `` (12) |\n\n', + ], + pattern: '.alerts-security.alerts-default', + sameFamily: 0, + }, + }, + sizeInBytes: 506471, + stats: { + '.internal.alerts-security.alerts-default-000001': { + uuid: 'aO29KOwtQ3Snf-Pit5Wf4w', + health: 'green', + status: 'open', + }, + }, + }, +}; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/translations.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/translations.ts new file mode 100644 index 0000000000000..924479e9da0ad --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/translations.ts @@ -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. + */ + +import { i18n } from '@kbn/i18n'; + +export const API_RESULTS_INDEX_NOT_AVAILABLE = i18n.translate( + 'xpack.ecsDataQualityDashboard.api.results.indexNotAvailable', + { + defaultMessage: 'Data Quality Dashboard result persistence not available', + } +); diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/schemas/common.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/schemas/common.ts index 57dc45d4071f7..00e97a9326c5e 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/schemas/common.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/schemas/common.ts @@ -7,7 +7,7 @@ import { fold } from 'fp-ts/lib/Either'; import { pipe } from 'fp-ts/lib/pipeable'; -import * as rt from 'io-ts'; +import type * as rt from 'io-ts'; import { exactCheck, formatErrors } from '@kbn/securitysolution-io-ts-utils'; import type { RouteValidationFunction, diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/schemas/result.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/schemas/result.ts new file mode 100644 index 0000000000000..09851c9b8dc86 --- /dev/null +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/schemas/result.ts @@ -0,0 +1,70 @@ +/* + * 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 t from 'io-ts'; + +export const ResultMeta = t.type({ + batchId: t.string, + ecsVersion: t.string, + errorCount: t.number, + ilmPhase: t.string, + indexId: t.string, + indexName: t.string, + isCheckAll: t.boolean, + numberOfDocuments: t.number, + numberOfFields: t.number, + numberOfIncompatibleFields: t.number, + numberOfEcsFields: t.number, + numberOfCustomFields: t.number, + numberOfIndices: t.number, + numberOfIndicesChecked: t.number, + numberOfSameFamily: t.number, + sameFamilyFields: t.array(t.string), + sizeInBytes: t.number, + timeConsumedMs: t.number, + unallowedMappingFields: t.array(t.string), + unallowedValueFields: t.array(t.string), +}); +export type ResultMeta = t.TypeOf; + +export const ResultRollup = t.type({ + docsCount: t.number, + error: t.union([t.string, t.null]), + indices: t.number, + pattern: t.string, + sizeInBytes: t.number, + ilmExplainPhaseCounts: t.record(t.string, t.number), + ilmExplain: t.record(t.string, t.UnknownRecord), + stats: t.record(t.string, t.UnknownRecord), + results: t.record(t.string, t.UnknownRecord), +}); +export type ResultRollup = t.TypeOf; + +export const Result = t.type({ + meta: ResultMeta, + rollup: ResultRollup, +}); +export type Result = t.TypeOf; + +export type IndexArray = Array<{ _indexName: string } & Record>; +export type IndexObject = Record>; + +export type ResultDocument = Omit & { + '@timestamp': number; + rollup: Omit & { + stats: IndexArray; + results: IndexArray; + ilmExplain: IndexArray; + }; +}; + +// Routes validation schemas + +export const GetResultQuery = t.type({ patterns: t.string }); +export type GetResultQuery = t.TypeOf; + +export const PostResultBody = Result; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/server/types.ts b/x-pack/plugins/ecs_data_quality_dashboard/server/types.ts index 0e7c1c68af653..ed875cd83f8c4 100755 --- a/x-pack/plugins/ecs_data_quality_dashboard/server/types.ts +++ b/x-pack/plugins/ecs_data_quality_dashboard/server/types.ts @@ -5,8 +5,22 @@ * 2.0. */ +import type { CustomRequestHandlerContext } from '@kbn/core-http-request-handler-context-server'; +import type { SpacesPluginSetup } from '@kbn/spaces-plugin/server'; + /** The plugin setup interface */ export interface EcsDataQualityDashboardPluginSetup {} // eslint-disable-line @typescript-eslint/no-empty-interface /** The plugin start interface */ export interface EcsDataQualityDashboardPluginStart {} // eslint-disable-line @typescript-eslint/no-empty-interface + +export interface PluginSetupDependencies { + spaces?: SpacesPluginSetup; +} + +export type DataQualityDashboardRequestHandlerContext = CustomRequestHandlerContext<{ + dataQualityDashboard: { + spaceId: string; + getResultsIndexName: () => Promise; + }; +}>; diff --git a/x-pack/plugins/ecs_data_quality_dashboard/tsconfig.json b/x-pack/plugins/ecs_data_quality_dashboard/tsconfig.json index f742dc544a79b..04a7d2bf092f5 100644 --- a/x-pack/plugins/ecs_data_quality_dashboard/tsconfig.json +++ b/x-pack/plugins/ecs_data_quality_dashboard/tsconfig.json @@ -21,6 +21,9 @@ "@kbn/i18n", "@kbn/core-http-router-server-mocks", "@kbn/logging-mocks", + "@kbn/data-stream-adapter", + "@kbn/spaces-plugin", + "@kbn/core-elasticsearch-server-mocks", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/security_solution/public/common/lib/telemetry/events/data_quality/index.ts b/x-pack/plugins/security_solution/public/common/lib/telemetry/events/data_quality/index.ts index e39d36fb7fe0c..6d3cb9167cb01 100644 --- a/x-pack/plugins/security_solution/public/common/lib/telemetry/events/data_quality/index.ts +++ b/x-pack/plugins/security_solution/public/common/lib/telemetry/events/data_quality/index.ts @@ -77,6 +77,13 @@ export const dataQualityIndexCheckedEvent: DataQualityTelemetryIndexCheckedEvent optional: true, }, }, + numberOfFields: { + type: 'integer', + _meta: { + description: 'Total number of fields', + optional: true, + }, + }, numberOfIncompatibleFields: { type: 'integer', _meta: { @@ -84,6 +91,20 @@ export const dataQualityIndexCheckedEvent: DataQualityTelemetryIndexCheckedEvent optional: true, }, }, + numberOfEcsFields: { + type: 'integer', + _meta: { + description: 'Number of ecs compatible fields', + optional: true, + }, + }, + numberOfCustomFields: { + type: 'integer', + _meta: { + description: 'Number of custom fields', + optional: true, + }, + }, numberOfDocuments: { type: 'integer', _meta: { @@ -187,6 +208,13 @@ export const dataQualityCheckAllClickedEvent: DataQualityTelemetryCheckAllComple optional: true, }, }, + numberOfFields: { + type: 'integer', + _meta: { + description: 'Total number of fields', + optional: true, + }, + }, numberOfIncompatibleFields: { type: 'integer', _meta: { @@ -194,6 +222,20 @@ export const dataQualityCheckAllClickedEvent: DataQualityTelemetryCheckAllComple optional: true, }, }, + numberOfEcsFields: { + type: 'integer', + _meta: { + description: 'Number of ecs compatible fields', + optional: true, + }, + }, + numberOfCustomFields: { + type: 'integer', + _meta: { + description: 'Number of custom fields', + optional: true, + }, + }, numberOfDocuments: { type: 'integer', _meta: { diff --git a/x-pack/plugins/security_solution/public/common/lib/telemetry/events/data_quality/types.ts b/x-pack/plugins/security_solution/public/common/lib/telemetry/events/data_quality/types.ts index 806ce3e741c31..6ae922d45b957 100644 --- a/x-pack/plugins/security_solution/public/common/lib/telemetry/events/data_quality/types.ts +++ b/x-pack/plugins/security_solution/public/common/lib/telemetry/events/data_quality/types.ts @@ -23,7 +23,10 @@ export interface ReportDataQualityCheckAllCompletedParams { ecsVersion?: string; isCheckAll?: boolean; numberOfDocuments?: number; + numberOfFields?: number; numberOfIncompatibleFields?: number; + numberOfEcsFields?: number; + numberOfCustomFields?: number; numberOfIndices?: number; numberOfIndicesChecked?: number; numberOfSameFamily?: number; diff --git a/x-pack/plugins/security_solution/public/overview/pages/data_quality.tsx b/x-pack/plugins/security_solution/public/overview/pages/data_quality.tsx index 0c318b38a4660..1c2be8f8a798e 100644 --- a/x-pack/plugins/security_solution/public/overview/pages/data_quality.tsx +++ b/x-pack/plugins/security_solution/public/overview/pages/data_quality.tsx @@ -136,12 +136,6 @@ const DataQualityComponent: React.FC = () => { const { baseTheme, theme } = useThemes(); const toasts = useToasts(); - const addSuccessToast = useCallback( - (toast: { title: string }) => { - toasts.addSuccess(toast); - }, - [toasts] - ); const [defaultBytesFormat] = useUiSetting$(DEFAULT_BYTES_FORMAT); const [defaultNumberFormat] = useUiSetting$(DEFAULT_NUMBER_FORMAT); const labelInputId = useGeneratedHtmlId({ prefix: 'labelInput' }); @@ -280,7 +274,6 @@ const DataQualityComponent: React.FC = () => { { setLastChecked={setLastChecked} startDate={startDate} theme={theme} + toasts={toasts} /> ) : ( diff --git a/yarn.lock b/yarn.lock index 071e4fc6051fa..c022206277664 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4329,6 +4329,10 @@ version "0.0.0" uid "" +"@kbn/data-stream-adapter@link:packages/kbn-data-stream-adapter": + version "0.0.0" + uid "" + "@kbn/data-view-editor-plugin@link:src/plugins/data_view_editor": version "0.0.0" uid "" From cd907739f3cb4c57bb2ace7a6da538226b5334d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=E1=BB=97=20Tr=E1=BB=8Dng=20H=E1=BA=A3i?= <41283691+hainenber@users.noreply.github.com> Date: Thu, 25 Jan 2024 00:38:47 +0700 Subject: [PATCH 009/113] fix(x-pack/reporting): use FIPS-compliant ID generator `uuidv4` in Reporting plugin (#174809) ## Summary Closes #174798 ### Checklist Delete any items that are not applicable to this PR. ### Risk Matrix Delete this section if it is not applicable to this PR. ### 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: Tim Sullivan Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- package.json | 2 -- .../use_push_to_service/callout/helpers.test.tsx | 8 ++++---- .../use_push_to_service/callout/helpers.tsx | 4 ++-- x-pack/plugins/reporting/server/lib/puid.d.ts | 15 --------------- .../plugins/reporting/server/lib/store/report.ts | 5 ++--- .../common/generate/request_handler.test.ts | 10 +--------- yarn.lock | 5 ----- 7 files changed, 9 insertions(+), 40 deletions(-) delete mode 100644 x-pack/plugins/reporting/server/lib/puid.d.ts diff --git a/package.json b/package.json index bc68dac0ffe07..410dffca4b7ef 100644 --- a/package.json +++ b/package.json @@ -1003,7 +1003,6 @@ "mapbox-gl-draw-rectangle-mode": "1.0.4", "maplibre-gl": "3.1.0", "markdown-it": "^12.3.2", - "md5": "^2.1.0", "mdast-util-to-hast": "10.2.0", "memoize-one": "^6.0.0", "mime": "^2.4.4", @@ -1040,7 +1039,6 @@ "pretty-ms": "6.0.0", "prop-types": "^15.8.1", "proxy-from-env": "1.0.0", - "puid": "1.0.7", "puppeteer": "21.5.2", "query-string": "^6.13.2", "rbush": "^3.0.1", diff --git a/x-pack/plugins/cases/public/components/use_push_to_service/callout/helpers.test.tsx b/x-pack/plugins/cases/public/components/use_push_to_service/callout/helpers.test.tsx index b5b92a3374874..4a2265a095a37 100644 --- a/x-pack/plugins/cases/public/components/use_push_to_service/callout/helpers.test.tsx +++ b/x-pack/plugins/cases/public/components/use_push_to_service/callout/helpers.test.tsx @@ -5,24 +5,24 @@ * 2.0. */ -import md5 from 'md5'; +import { sha256 } from 'js-sha256'; import { createCalloutId } from './helpers'; describe('createCalloutId', () => { it('creates id correctly with one id', () => { - const digest = md5('one'); + const digest = sha256('one'); const id = createCalloutId(['one']); expect(id).toBe(digest); }); it('creates id correctly with multiples ids', () => { - const digest = md5('one|two|three'); + const digest = sha256('one|two|three'); const id = createCalloutId(['one', 'two', 'three']); expect(id).toBe(digest); }); it('creates id correctly with multiples ids and delimiter', () => { - const digest = md5('one,two,three'); + const digest = sha256('one,two,three'); const id = createCalloutId(['one', 'two', 'three'], ','); expect(id).toBe(digest); }); diff --git a/x-pack/plugins/cases/public/components/use_push_to_service/callout/helpers.tsx b/x-pack/plugins/cases/public/components/use_push_to_service/callout/helpers.tsx index fdd49ad17168d..e83d215c61ed9 100644 --- a/x-pack/plugins/cases/public/components/use_push_to_service/callout/helpers.tsx +++ b/x-pack/plugins/cases/public/components/use_push_to_service/callout/helpers.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import md5 from 'md5'; +import { sha256 } from 'js-sha256'; export const createCalloutId = (ids: string[], delimiter: string = '|'): string => - md5(ids.join(delimiter)); + sha256(ids.join(delimiter)); diff --git a/x-pack/plugins/reporting/server/lib/puid.d.ts b/x-pack/plugins/reporting/server/lib/puid.d.ts deleted file mode 100644 index 4ac240157971f..0000000000000 --- a/x-pack/plugins/reporting/server/lib/puid.d.ts +++ /dev/null @@ -1,15 +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. - */ - -declare module 'puid' { - class Puid { - generate(): string; - } - - // eslint-disable-next-line import/no-default-export - export default Puid; -} diff --git a/x-pack/plugins/reporting/server/lib/store/report.ts b/x-pack/plugins/reporting/server/lib/store/report.ts index c302aaa34ea8b..e62f4f2f20b58 100644 --- a/x-pack/plugins/reporting/server/lib/store/report.ts +++ b/x-pack/plugins/reporting/server/lib/store/report.ts @@ -7,7 +7,7 @@ import { omit } from 'lodash'; import moment from 'moment'; -import Puid from 'puid'; +import { v4 as uuidv4 } from 'uuid'; import { JOB_STATUS } from '@kbn/reporting-common'; import { @@ -19,7 +19,6 @@ import { import type { ReportTaskParams } from '../tasks'; -const puid = new Puid(); export const MIGRATION_VERSION = '7.14.0'; /* @@ -63,7 +62,7 @@ export class Report implements Partial { * Index string is required */ constructor(opts: Partial & Partial, fields?: ReportFields) { - this._id = opts._id != null ? opts._id : puid.generate(); + this._id = opts._id != null ? opts._id : uuidv4(); this._index = opts._index; this._primary_term = opts._primary_term; this._seq_no = opts._seq_no; diff --git a/x-pack/plugins/reporting/server/routes/common/generate/request_handler.test.ts b/x-pack/plugins/reporting/server/routes/common/generate/request_handler.test.ts index 0d84eb1c56061..8ef72e9ee385c 100644 --- a/x-pack/plugins/reporting/server/routes/common/generate/request_handler.test.ts +++ b/x-pack/plugins/reporting/server/routes/common/generate/request_handler.test.ts @@ -5,15 +5,7 @@ * 2.0. */ -jest.mock( - 'puid', - () => - class MockPuid { - generate() { - return 'mock-report-id'; - } - } -); +jest.mock('uuid', () => ({ v4: () => 'mock-report-id' })); import rison from '@kbn/rison'; diff --git a/yarn.lock b/yarn.lock index c022206277664..50ea6503d5906 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25343,11 +25343,6 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" -puid@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/puid/-/puid-1.0.7.tgz#fa638a737d7b20419059d93965aed36ca20e1c84" - integrity sha1-+mOKc317IEGQWdk5Za7TbKIOHIQ= - pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" From df855bad168fb07eedfe9d6ac8a612d349a360be Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Wed, 24 Jan 2024 13:22:34 -0600 Subject: [PATCH 010/113] [Console] disable access to embedded console without dev tools capability (#175321) ## Summary Added a check for the dev tools capability in kibana before making the render of the embedded console available to other plugins. --- src/plugins/console/public/plugin.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/console/public/plugin.ts b/src/plugins/console/public/plugin.ts index 0ad80014fce04..ea4ddc7099fc4 100644 --- a/src/plugins/console/public/plugin.ts +++ b/src/plugins/console/public/plugin.ts @@ -105,7 +105,8 @@ export class ConsoleUIPlugin implements Plugin(); - if (isConsoleUiEnabled) { + + if (isConsoleUiEnabled && core.application.capabilities?.dev_tools?.show === true) { return { renderEmbeddableConsole: (props: EmbeddableConsoleProps) => { const consoleDeps: EmbeddableConsoleDependencies = { From 98cb0c2eaac63db92d8624ed98e9fe423c935d2d Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Wed, 24 Jan 2024 13:22:56 -0600 Subject: [PATCH 011/113] [Embedded Console] Introduce kbnSolutionNavOffset CSS variable (#175348) ## Summary This PR updates the Kibana `SolutionNav` component to set a global CSS variable `--kbnSolutionNavOffset` with it's current width. This is modeled off of the EUI CSS variable `--euiCollapsibleNavOffset` that can be used in Serverless to get the current width of the side nav. This will be used by the embedded dev console to ensure it is not rendered over the page side navigation, at least for pages that use the `KibanaPageTemplate` & `SolutionNav`. ### Testing The easiest way to verify this change is to check the values of `--kbnSolutionNavOffset` in the browser console, which can be done with the following command: `getComputedStyle(document.documentElement).getPropertyValue('--kbnSolutionNavOffset')` You can check this with the solution nav open and closed or on pages without a solution nav at all (`/app/home` for example) --- packages/kbn-optimizer/limits.yml | 2 +- .../page/solution_nav/src/_variables.scss | 4 +++ .../solution_nav/src/collapse_button.scss | 8 +++-- .../page/solution_nav/src/solution_nav.scss | 3 +- .../page/solution_nav/src/solution_nav.tsx | 31 ++++++++++++++++++- .../embeddable/_embeddable_console.scss | 13 +++++++- .../embeddable/embeddable_console.tsx | 5 +++ 7 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 packages/shared-ux/page/solution_nav/src/_variables.scss diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 35714e5e33ad2..e9f0ac0f7ff37 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -32,7 +32,7 @@ pageLoadAssetSize: datasetQuality: 50624 dataViewEditor: 28082 dataViewFieldEditor: 27000 - dataViewManagement: 5136 + dataViewManagement: 5176 dataViews: 51000 dataVisualizer: 27530 devTools: 38637 diff --git a/packages/shared-ux/page/solution_nav/src/_variables.scss b/packages/shared-ux/page/solution_nav/src/_variables.scss new file mode 100644 index 0000000000000..ac69606f7cc93 --- /dev/null +++ b/packages/shared-ux/page/solution_nav/src/_variables.scss @@ -0,0 +1,4 @@ +// This size is also tracked with a variable in solution_nav.tsx, if updated +// update there as well +$solutionNavWidth: 248px; +$solutionNavCollapsedWidth: $euiSizeXXL; diff --git a/packages/shared-ux/page/solution_nav/src/collapse_button.scss b/packages/shared-ux/page/solution_nav/src/collapse_button.scss index fa6f0864e71d6..a1fe7e5ed55a4 100644 --- a/packages/shared-ux/page/solution_nav/src/collapse_button.scss +++ b/packages/shared-ux/page/solution_nav/src/collapse_button.scss @@ -1,7 +1,9 @@ +@import 'variables'; + .kbnSolutionNavCollapseButton { position: absolute; opacity: 0; - left: 248px - $euiSize; + left: $solutionNavWidth - $euiSize; top: $euiSizeL; z-index: 2; @@ -18,7 +20,7 @@ &:hover, &:focus { opacity: 1; - left: 248px - $euiSizeL; + left: $solutionNavWidth - $euiSizeL; } .kbnSolutionNav__sidebar:hover & { @@ -39,7 +41,7 @@ top: 0; bottom: 0; height: 100%; - width: $euiSizeXXL; + width: $solutionNavCollapsedWidth; border-radius: 0; // Keep the icon at the top instead of it getting shifted to the center of the page padding-top: $euiSizeL + $euiSizeS; diff --git a/packages/shared-ux/page/solution_nav/src/solution_nav.scss b/packages/shared-ux/page/solution_nav/src/solution_nav.scss index 28cef100e174a..9db81e1b1a062 100644 --- a/packages/shared-ux/page/solution_nav/src/solution_nav.scss +++ b/packages/shared-ux/page/solution_nav/src/solution_nav.scss @@ -1,5 +1,6 @@ $euiSideNavEmphasizedBackgroundColor: transparentize($euiColorLightShade, .7); @import '@elastic/eui/src/components/side_nav/mixins'; +@import 'variables'; // Put the page background color in the flyout version too .kbnSolutionNav__flyout { @@ -14,7 +15,7 @@ $euiSideNavEmphasizedBackgroundColor: transparentize($euiColorLightShade, .7); flex-direction: column; @include euiBreakpoint('m', 'l', 'xl') { - width: 248px; + width: $solutionNavWidth; padding: $euiSizeL; } diff --git a/packages/shared-ux/page/solution_nav/src/solution_nav.tsx b/packages/shared-ux/page/solution_nav/src/solution_nav.tsx index f88f98afa349a..000176eb371b1 100644 --- a/packages/shared-ux/page/solution_nav/src/solution_nav.tsx +++ b/packages/shared-ux/page/solution_nav/src/solution_nav.tsx @@ -7,7 +7,7 @@ */ import './solution_nav.scss'; -import React, { FC, useState, useMemo } from 'react'; +import React, { FC, useState, useMemo, useEffect } from 'react'; import classNames from 'classnames'; import { EuiAvatarProps, @@ -23,6 +23,8 @@ import { htmlIdGenerator, useIsWithinBreakpoints, useIsWithinMinBreakpoint, + useEuiTheme, + useEuiThemeCSSVariables, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; @@ -71,6 +73,7 @@ export type SolutionNavProps = Omit, 'children' | 'items' | }; const FLYOUT_SIZE = 248; +const FLYOUT_SIZE_CSS = `${FLYOUT_SIZE}px`; const setTabIndex = (items: Array>, isHidden: boolean) => { return items.map((item) => { @@ -174,6 +177,32 @@ export const SolutionNav: FC = ({ ); }, [children, headingID, isCustomSideNav, isHidden, items, rest]); + const { euiTheme } = useEuiTheme(); + const navWidth = useMemo(() => { + if (isLargerBreakpoint) { + return isOpenOnDesktop ? FLYOUT_SIZE_CSS : euiTheme.size.xxl; + } + if (isMediumBreakpoint) { + return isSideNavOpenOnMobile || !canBeCollapsed ? FLYOUT_SIZE_CSS : euiTheme.size.xxl; + } + return '0'; + }, [ + euiTheme, + isOpenOnDesktop, + isSideNavOpenOnMobile, + canBeCollapsed, + isMediumBreakpoint, + isLargerBreakpoint, + ]); + const { setGlobalCSSVariables } = useEuiThemeCSSVariables(); + // Setting a global CSS variable with the nav width + // so that other pages have it available when needed. + useEffect(() => { + setGlobalCSSVariables({ + '--kbnSolutionNavOffset': navWidth, + }); + }, [navWidth, setGlobalCSSVariables]); + return ( <> {isSmallerBreakpoint && ( diff --git a/src/plugins/console/public/application/containers/embeddable/_embeddable_console.scss b/src/plugins/console/public/application/containers/embeddable/_embeddable_console.scss index 206ab6459c05a..9c8fddd65b387 100644 --- a/src/plugins/console/public/application/containers/embeddable/_embeddable_console.scss +++ b/src/plugins/console/public/application/containers/embeddable/_embeddable_console.scss @@ -8,7 +8,6 @@ box-shadow: inset 0 $embeddableConsoleInitialHeight 0 $embeddableConsoleBackground, inset 0 600rem 0 $euiPageBackgroundColor; bottom: 0; right: 0; - left: var(--euiCollapsibleNavOffset, 0); transform: translateY(0); height: $embeddableConsoleInitialHeight; max-height: $embeddableConsoleMaxHeight; @@ -18,6 +17,18 @@ z-index: $euiZLevel1; } + &--projectChrome { + left: var(--euiCollapsibleNavOffset, 0); + } + + &--classicChrome { + left: var(--kbnSolutionNavOffset, 0); + } + + &--unknownChrome { + left: 0; + } + &-isOpen { animation-duration: $euiAnimSpeedNormal; animation-timing-function: $euiAnimSlightResistance; diff --git a/src/plugins/console/public/application/containers/embeddable/embeddable_console.tsx b/src/plugins/console/public/application/containers/embeddable/embeddable_console.tsx index 2ec249b1eb3ee..2577c9d4841d7 100644 --- a/src/plugins/console/public/application/containers/embeddable/embeddable_console.tsx +++ b/src/plugins/console/public/application/containers/embeddable/embeddable_console.tsx @@ -8,6 +8,7 @@ import React, { useState } from 'react'; import classNames from 'classnames'; +import useObservable from 'react-use/lib/useObservable'; import { EuiButton, EuiFocusTrap, @@ -38,6 +39,7 @@ export const EmbeddableConsole = ({ }: EmbeddableConsoleProps & EmbeddableConsoleDependencies) => { const [isConsoleOpen, setIsConsoleOpen] = useState(false); const toggleConsole = () => setIsConsoleOpen(!isConsoleOpen); + const chromeStyle = useObservable(core.chrome.getChromeStyle$()); const onKeyDown = (event: any) => { if (event.key === keys.ESCAPE) { @@ -52,6 +54,9 @@ export const EmbeddableConsole = ({ 'embeddableConsole--large': size === 'l', 'embeddableConsole--medium': size === 'm', 'embeddableConsole--small': size === 's', + 'embeddableConsole--classicChrome': chromeStyle === 'classic', + 'embeddableConsole--projectChrome': chromeStyle === 'project', + 'embeddableConsole--unknownChrome': chromeStyle === undefined, 'embeddableConsole--fixed': true, 'embeddableConsole--showOnMobile': false, }); From 5d254068ace8e983a2dc360a73847f35c21feba6 Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Wed, 24 Jan 2024 13:30:19 -0600 Subject: [PATCH 012/113] [Security Solution][Timeline] refactor timeline modal open timeline button (#175335) --- .../components/flyout/action_menu/index.tsx | 4 +- .../flyout/action_menu/translations.ts | 50 ------------ .../actions/open_timeline_button.test.tsx | 80 +++++++++++++++++++ .../actions/open_timeline_button.tsx} | 18 ++--- .../components/modal/actions/translations.ts | 22 +++++ .../cypress/screens/timeline.ts | 2 +- 6 files changed, 114 insertions(+), 62 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/timelines/components/modal/actions/open_timeline_button.test.tsx rename x-pack/plugins/security_solution/public/timelines/components/{flyout/action_menu/open_timeline.tsx => modal/actions/open_timeline_button.tsx} (64%) create mode 100644 x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx index 2208b6ee706b8..b1be7562fcf97 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx @@ -16,7 +16,7 @@ import { InputsModelId } from '../../../../common/store/inputs/constants'; import { AddToCaseButton } from '../add_to_case_button'; import { NewTimelineAction } from './new_timeline'; import { SaveTimelineButton } from './save_timeline_button'; -import { OpenTimelineAction } from './open_timeline'; +import { OpenTimelineButton } from '../../modal/actions/open_timeline_button'; import { TIMELINE_TOUR_CONFIG_ANCHORS } from '../../timeline/tour/step_config'; interface TimelineActionMenuProps { @@ -54,7 +54,7 @@ const TimelineActionMenuComponent = ({
- + { + const origin = jest.requireActual('react-redux'); + return { + ...origin, + useDispatch: jest.fn(), + }; +}); +jest.mock('react-router-dom', () => { + const actual = jest.requireActual('react-router-dom'); + return { + ...actual, + useParams: jest.fn(), + }; +}); +jest.mock('../../../../common/lib/kibana', () => { + const actual = jest.requireActual('../../../../common/lib/kibana'); + return { + ...actual, + useNavigation: () => ({ + navigateTo: jest.fn(), + }), + }; +}); + +const renderOpenTimelineButton = () => + render( + + + + ); + +describe('OpenTimelineButton', () => { + it('should render the button', () => { + const { getByTestId, queryByTestId } = renderOpenTimelineButton(); + + expect(getByTestId('timeline-modal-open-timeline-button')).toBeInTheDocument(); + expect(getByTestId('timeline-modal-open-timeline-button')).toHaveTextContent('Open'); + + expect(queryByTestId('open-timeline-modal')).not.toBeInTheDocument(); + }); + + it('should open the modal after clicking on the button', async () => { + (useParams as jest.Mock).mockReturnValue({ tabName: TimelineType.template }); + (useStartTransaction as jest.Mock).mockReturnValue({ startTransaction: jest.fn() }); + (useSourcererDataView as jest.Mock).mockReturnValue({ dataViewId: '', selectedPatterns: [] }); + (useTimelineStatus as jest.Mock).mockReturnValue({ + timelineStatus: 'active', + templateTimelineFilter: null, + installPrepackagedTimelines: jest.fn(), + }); + + const { getByTestId } = renderOpenTimelineButton(); + + getByTestId('timeline-modal-open-timeline-button').click(); + + await waitFor(() => { + expect(getByTestId('open-timeline-modal')).toBeInTheDocument(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/open_timeline.tsx b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/open_timeline_button.tsx similarity index 64% rename from x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/open_timeline.tsx rename to x-pack/plugins/security_solution/public/timelines/components/modal/actions/open_timeline_button.tsx index f5a7a51dc75e8..f5cf939791944 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/open_timeline.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/open_timeline_button.tsx @@ -13,28 +13,28 @@ import * as i18n from './translations'; const actionTimelineToHide: ActionTimelineToShow[] = ['createFrom']; -export const OpenTimelineAction = React.memo(() => { +/** + * Renders a button that opens the `OpenTimelineModal` to allow users to select a saved timeline to open + */ +export const OpenTimelineButton = React.memo(() => { const [showTimelineModal, setShowTimelineModal] = useState(false); - const onCloseTimelineModal = useCallback(() => setShowTimelineModal(false), []); - const onOpenTimelineModal = useCallback(() => { - setShowTimelineModal(true); - }, []); + const toggleTimelineModal = useCallback(() => setShowTimelineModal((prev) => !prev), []); return ( <> {i18n.OPEN_TIMELINE_BTN} {showTimelineModal ? ( - + ) : null} ); }); -OpenTimelineAction.displayName = 'OpenTimelineAction'; +OpenTimelineButton.displayName = 'OpenTimelineButton'; diff --git a/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts new file mode 100644 index 0000000000000..364e7eeb8c9a9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.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 { i18n } from '@kbn/i18n'; + +export const OPEN_TIMELINE_BTN = i18n.translate( + 'xpack.securitySolution.timeline.modal.openTimelineBtn', + { + defaultMessage: 'Open', + } +); + +export const OPEN_TIMELINE_BTN_LABEL = i18n.translate( + 'xpack.securitySolution.timeline.modal.openTimelineBtnLabel', + { + defaultMessage: 'Open Existing Timeline', + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts index 733c7eaa338ff..fb2859842842b 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts @@ -81,7 +81,7 @@ export const DELETE_NOTE = '[data-test-subj="delete-note"]'; export const MARKDOWN_INVESTIGATE_BUTTON = '[data-test-subj="insight-investigate-in-timeline-button"]'; -export const OPEN_TIMELINE_ICON = '[data-test-subj="open-timeline-button"]'; +export const OPEN_TIMELINE_ICON = '[data-test-subj="timeline-modal-open-timeline-button"]'; export const OPEN_TIMELINE_MODAL = '[data-test-subj="open-timeline-modal"]'; From ee3934b7b7a2e8553da8b19ad7e7a1f62a1c281d Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 24 Jan 2024 19:49:55 +0000 Subject: [PATCH 013/113] skip flaky suite (#175407) --- .../custom_threshold_rule/documents_count_fired.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts index 9025cb80ff47d..133ced9b239d1 100644 --- a/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts +++ b/x-pack/test/alerting_api_integration/observability/custom_threshold_rule/documents_count_fired.ts @@ -96,7 +96,8 @@ export default function ({ getService }: FtrProviderContext) { await cleanup({ client: esClient, config: dataForgeConfig, logger }); }); - describe('Rule creation', () => { + // FLAKY: https://github.com/elastic/kibana/issues/175407 + describe.skip('Rule creation', () => { it('creates rule successfully', async () => { actionId = await createIndexConnector({ supertest, From 765cf2497173ca679d89fef3b736b5702f2818df Mon Sep 17 00:00:00 2001 From: Rickyanto Ang Date: Wed, 24 Jan 2024 12:24:11 -0800 Subject: [PATCH 014/113] [Cloud Security] Rules Combo Box filters Custom component (#175175) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR is for updating the current find rule API to allow multi select and search on section and rule numbers it also add a custom component for the section and rule number filter also some small UI fixes Screenshot 2024-01-24 at 4 22 35 AM --- .../common/types/index.ts | 1 + .../common/types/latest.ts | 2 +- .../common/types/rules/v1.ts | 5 +- .../common/types/rules/v2.ts | 5 +- .../common/types/rules/v3.ts | 19 +- .../common/types/rules/v4.ts | 29 ++- .../common/types/rules/v5.ts | 120 +++++++++++ .../common/utils/helpers.test.ts | 45 +++- .../common/utils/helpers.ts | 35 ++- .../common/component/multi_select_filter.tsx | 200 ++++++++++++++++++ .../public/pages/rules/rules_container.tsx | 5 +- .../public/pages/rules/rules_table.tsx | 32 +-- .../public/pages/rules/rules_table_header.tsx | 57 ++--- .../pages/rules/use_csp_benchmark_rules.ts | 2 +- .../public/pages/rules/use_csp_rules_state.ts | 2 +- .../routes/benchmark_rules/find/find.ts | 41 +++- .../server/routes/benchmark_rules/find/v2.ts | 2 +- .../server/routes/benchmark_rules/find/v3.ts | 58 +++++ .../page_objects/rule_page.ts | 25 +++ .../pages/rules.ts | 30 ++- 20 files changed, 633 insertions(+), 82 deletions(-) create mode 100644 x-pack/plugins/cloud_security_posture/common/types/rules/v5.ts create mode 100644 x-pack/plugins/cloud_security_posture/public/common/component/multi_select_filter.tsx create mode 100644 x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v3.ts diff --git a/x-pack/plugins/cloud_security_posture/common/types/index.ts b/x-pack/plugins/cloud_security_posture/common/types/index.ts index e53f34d5cf919..04fa2a95a8d5e 100644 --- a/x-pack/plugins/cloud_security_posture/common/types/index.ts +++ b/x-pack/plugins/cloud_security_posture/common/types/index.ts @@ -9,6 +9,7 @@ export * as rulesV1 from './rules/v1'; export * as rulesV2 from './rules/v2'; export * as rulesV3 from './rules/v3'; export * as rulesV4 from './rules/v4'; +export * as rulesV5 from './rules/v5'; export * as benchmarkV1 from './benchmarks/v1'; export * as benchmarkV2 from './benchmarks/v2'; diff --git a/x-pack/plugins/cloud_security_posture/common/types/latest.ts b/x-pack/plugins/cloud_security_posture/common/types/latest.ts index 73d86e76db250..32006fe5b5aef 100644 --- a/x-pack/plugins/cloud_security_posture/common/types/latest.ts +++ b/x-pack/plugins/cloud_security_posture/common/types/latest.ts @@ -5,5 +5,5 @@ * 2.0. */ -export * from './rules/v4'; +export * from './rules/v5'; export * from './benchmarks/v2'; diff --git a/x-pack/plugins/cloud_security_posture/common/types/rules/v1.ts b/x-pack/plugins/cloud_security_posture/common/types/rules/v1.ts index afc2b705ab5c3..068c7244ef4f6 100644 --- a/x-pack/plugins/cloud_security_posture/common/types/rules/v1.ts +++ b/x-pack/plugins/cloud_security_posture/common/types/rules/v1.ts @@ -7,6 +7,9 @@ import { schema, TypeOf } from '@kbn/config-schema'; // Since version 8.3.0 + +export type CspBenchmarkRule = TypeOf; + export const cspBenchmarkRuleSchema = schema.object({ audit: schema.string(), benchmark: schema.object({ name: schema.string(), version: schema.string() }), @@ -26,5 +29,3 @@ export const cspBenchmarkRuleSchema = schema.object({ tags: schema.arrayOf(schema.string()), version: schema.string(), }); - -export type CspBenchmarkRule = TypeOf; diff --git a/x-pack/plugins/cloud_security_posture/common/types/rules/v2.ts b/x-pack/plugins/cloud_security_posture/common/types/rules/v2.ts index d88ae6adc089a..729de7736b0c0 100644 --- a/x-pack/plugins/cloud_security_posture/common/types/rules/v2.ts +++ b/x-pack/plugins/cloud_security_posture/common/types/rules/v2.ts @@ -7,6 +7,9 @@ import { schema, TypeOf } from '@kbn/config-schema'; // Since version 8.4.0 + +export type CspBenchmarkRule = TypeOf; + export const cspBenchmarkRuleMetadataSchema = schema.object({ audit: schema.string(), benchmark: schema.object({ @@ -34,5 +37,3 @@ export const cspBenchmarkRuleSchema = schema.object({ metadata: cspBenchmarkRuleMetadataSchema, muted: schema.boolean(), }); - -export type CspBenchmarkRule = TypeOf; diff --git a/x-pack/plugins/cloud_security_posture/common/types/rules/v3.ts b/x-pack/plugins/cloud_security_posture/common/types/rules/v3.ts index fb0310c088a19..85c38c50022b8 100644 --- a/x-pack/plugins/cloud_security_posture/common/types/rules/v3.ts +++ b/x-pack/plugins/cloud_security_posture/common/types/rules/v3.ts @@ -8,9 +8,18 @@ import { schema, TypeOf } from '@kbn/config-schema'; import { CSPM_POLICY_TEMPLATE, KSPM_POLICY_TEMPLATE } from '../../constants'; -const DEFAULT_BENCHMARK_RULES_PER_PAGE = 25; +export const DEFAULT_BENCHMARK_RULES_PER_PAGE = 25; // Since version 8.7.0 + +export type FindCspBenchmarkRuleRequest = TypeOf; + +export type CspBenchmarkRuleMetadata = TypeOf; + +export type CspBenchmarkRule = TypeOf; + +export type PageUrlParams = Record<'policyId' | 'packagePolicyId', string>; + export const cspBenchmarkRuleMetadataSchema = schema.object({ audit: schema.string(), benchmark: schema.object({ @@ -37,14 +46,10 @@ export const cspBenchmarkRuleMetadataSchema = schema.object({ version: schema.string(), }); -export type CspBenchmarkRuleMetadata = TypeOf; - export const cspBenchmarkRuleSchema = schema.object({ metadata: cspBenchmarkRuleMetadataSchema, }); -export type CspBenchmarkRule = TypeOf; - export const findCspBenchmarkRuleRequestSchema = schema.object({ /** * An Elasticsearch simple_query_string @@ -125,13 +130,9 @@ export const findCspBenchmarkRuleRequestSchema = schema.object({ section: schema.maybe(schema.string()), }); -export type FindCspBenchmarkRuleRequest = TypeOf; - export interface FindCspBenchmarkRuleResponse { items: CspBenchmarkRule[]; total: number; page: number; perPage: number; } - -export type PageUrlParams = Record<'policyId' | 'packagePolicyId', string>; diff --git a/x-pack/plugins/cloud_security_posture/common/types/rules/v4.ts b/x-pack/plugins/cloud_security_posture/common/types/rules/v4.ts index 19711c7e7eb13..78680bf111dc7 100644 --- a/x-pack/plugins/cloud_security_posture/common/types/rules/v4.ts +++ b/x-pack/plugins/cloud_security_posture/common/types/rules/v4.ts @@ -7,6 +7,7 @@ import { schema, TypeOf } from '@kbn/config-schema'; import { BenchmarksCisId } from '../latest'; +import { DEFAULT_BENCHMARK_RULES_PER_PAGE } from './v3'; export type { cspBenchmarkRuleMetadataSchema, CspBenchmarkRuleMetadata, @@ -15,7 +16,19 @@ export type { FindCspBenchmarkRuleResponse, } from './v3'; -const DEFAULT_BENCHMARK_RULES_PER_PAGE = 25; +export type FindCspBenchmarkRuleRequest = TypeOf; + +export type RulesToUpdate = TypeOf; + +export type CspBenchmarkRulesBulkActionRequestSchema = TypeOf< + typeof cspBenchmarkRulesBulkActionRequestSchema +>; + +export type RuleStateAttributes = TypeOf; + +export type CspBenchmarkRulesStates = TypeOf; + +export type CspSettings = TypeOf; export const findCspBenchmarkRuleRequestSchema = schema.object({ /** @@ -99,8 +112,6 @@ export const findCspBenchmarkRuleRequestSchema = schema.object({ ruleNumber: schema.maybe(schema.string()), }); -export type FindCspBenchmarkRuleRequest = TypeOf; - export interface BenchmarkRuleSelectParams { section?: string; ruleNumber?: string; @@ -125,12 +136,6 @@ export const cspBenchmarkRulesBulkActionRequestSchema = schema.object({ rules: rulesToUpdate, }); -export type RulesToUpdate = TypeOf; - -export type CspBenchmarkRulesBulkActionRequestSchema = TypeOf< - typeof cspBenchmarkRulesBulkActionRequestSchema ->; - export interface CspBenchmarkRulesBulkActionResponse { updated_benchmark_rules: CspBenchmarkRulesStates; disabled_detection_rules?: string[]; @@ -145,18 +150,12 @@ const ruleStateAttributes = schema.object({ rule_id: schema.string(), }); -export type RuleStateAttributes = TypeOf; - const rulesStates = schema.recordOf(schema.string(), ruleStateAttributes); -export type CspBenchmarkRulesStates = TypeOf; - export const cspSettingsSchema = schema.object({ rules: rulesStates, }); -export type CspSettings = TypeOf; - export interface BulkActionBenchmarkRulesResponse { updatedBenchmarkRulesStates: CspBenchmarkRulesStates; disabledDetectionRules: string[]; diff --git a/x-pack/plugins/cloud_security_posture/common/types/rules/v5.ts b/x-pack/plugins/cloud_security_posture/common/types/rules/v5.ts new file mode 100644 index 0000000000000..6f30ed446531a --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/common/types/rules/v5.ts @@ -0,0 +1,120 @@ +/* + * 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 { schema, TypeOf } from '@kbn/config-schema'; +import { DEFAULT_BENCHMARK_RULES_PER_PAGE } from './v3'; + +export type { + cspBenchmarkRuleMetadataSchema, + CspBenchmarkRuleMetadata, + cspBenchmarkRuleSchema, + CspBenchmarkRule, + FindCspBenchmarkRuleResponse, +} from './v3'; +export type { + PageUrlParams, + rulesToUpdate, + CspBenchmarkRulesBulkActionRequestSchema, + CspBenchmarkRulesBulkActionResponse, + RuleStateAttributes, + CspBenchmarkRulesStates, + cspSettingsSchema, + CspSettings, + BulkActionBenchmarkRulesResponse, +} from './v4'; + +export type FindCspBenchmarkRuleRequest = TypeOf; + +export const findCspBenchmarkRuleRequestSchema = schema.object({ + /** + * An Elasticsearch simple_query_string + */ + search: schema.maybe(schema.string()), + + /** + * The page of objects to return + */ + page: schema.number({ defaultValue: 1, min: 1 }), + + /** + * The number of objects to include in each page + */ + perPage: schema.number({ defaultValue: DEFAULT_BENCHMARK_RULES_PER_PAGE, min: 0 }), + + /** + * Fields to retrieve from CspBenchmarkRule saved object + */ + fields: schema.maybe(schema.arrayOf(schema.string())), + + /** + * The fields to perform the parsed query against. + * Valid fields are fields which mapped to 'text' in cspBenchmarkRuleSavedObjectMapping + */ + searchFields: schema.arrayOf( + schema.oneOf([schema.literal('metadata.name.text'), schema.literal('metadata.section.text')]), + { defaultValue: ['metadata.name.text'] } + ), + + /** + * Sort Field + */ + sortField: schema.oneOf( + [ + schema.literal('metadata.name'), + schema.literal('metadata.section'), + schema.literal('metadata.id'), + schema.literal('metadata.version'), + schema.literal('metadata.benchmark.id'), + schema.literal('metadata.benchmark.name'), + schema.literal('metadata.benchmark.posture_type'), + schema.literal('metadata.benchmark.version'), + schema.literal('metadata.benchmark.rule_number'), + ], + { + defaultValue: 'metadata.benchmark.rule_number', + } + ), + + /** + * The order to sort by + */ + sortOrder: schema.oneOf([schema.literal('asc'), schema.literal('desc')], { + defaultValue: 'asc', + }), + + /** + * benchmark id + */ + benchmarkId: schema.maybe( + schema.oneOf([ + schema.literal('cis_k8s'), + schema.literal('cis_eks'), + schema.literal('cis_aws'), + schema.literal('cis_azure'), + schema.literal('cis_gcp'), + ]) + ), + + /** + * benchmark version + */ + benchmarkVersion: schema.maybe(schema.string()), + + /** + * rule section + */ + section: schema.maybe( + schema.oneOf([schema.string(), schema.arrayOf(schema.string(), { minSize: 1 })]) + ), + ruleNumber: schema.maybe( + schema.oneOf([schema.string(), schema.arrayOf(schema.string(), { minSize: 1 })]) + ), +}); + +export interface BenchmarkRuleSelectParams { + section?: string[]; + ruleNumber?: string[]; +} diff --git a/x-pack/plugins/cloud_security_posture/common/utils/helpers.test.ts b/x-pack/plugins/cloud_security_posture/common/utils/helpers.test.ts index 6ce2add754f20..951800d8a3cc0 100644 --- a/x-pack/plugins/cloud_security_posture/common/utils/helpers.test.ts +++ b/x-pack/plugins/cloud_security_posture/common/utils/helpers.test.ts @@ -6,7 +6,12 @@ */ import { createPackagePolicyMock } from '@kbn/fleet-plugin/common/mocks'; -import { getBenchmarkFromPackagePolicy, getBenchmarkFilter, cleanupCredentials } from './helpers'; +import { + getBenchmarkFromPackagePolicy, + getBenchmarkFilter, + cleanupCredentials, + getBenchmarkFilterQueryV2, +} from './helpers'; describe('test helper methods', () => { it('get default integration type from inputs with multiple enabled types', () => { @@ -70,6 +75,44 @@ describe('test helper methods', () => { ); }); + it('get benchmark filter query based on a benchmark Id, version', () => { + const typeFilter = getBenchmarkFilterQueryV2('cis_eks', '1.0.1'); + expect(typeFilter).toMatch( + 'csp-rule-template.attributes.metadata.benchmark.id:cis_eks AND csp-rule-template.attributes.metadata.benchmark.version:"v1.0.1"' + ); + }); + + it('get benchmark filter query based on a benchmark Id, version and multiple sections and rule numbers', () => { + const mockSelectParams = { + section: ['section_1', 'section_2'], + ruleNumber: ['1a', '2b', '3c'], + }; + const typeFilter = getBenchmarkFilterQueryV2('cis_eks', '1.0.1', mockSelectParams); + expect(typeFilter).toMatch( + 'csp-rule-template.attributes.metadata.benchmark.id:cis_eks AND csp-rule-template.attributes.metadata.benchmark.version:"v1.0.1" AND (csp-rule-template.attributes.metadata.section: "section_1" OR csp-rule-template.attributes.metadata.section: "section_2") AND (csp-rule-template.attributes.metadata.benchmark.rule_number: "1a" OR csp-rule-template.attributes.metadata.benchmark.rule_number: "2b" OR csp-rule-template.attributes.metadata.benchmark.rule_number: "3c")' + ); + }); + + it('get benchmark filter query based on a benchmark Id, version and just sections', () => { + const mockSelectParams = { + section: ['section_1', 'section_2'], + }; + const typeFilter = getBenchmarkFilterQueryV2('cis_eks', '1.0.1', mockSelectParams); + expect(typeFilter).toMatch( + 'csp-rule-template.attributes.metadata.benchmark.id:cis_eks AND csp-rule-template.attributes.metadata.benchmark.version:"v1.0.1" AND (csp-rule-template.attributes.metadata.section: "section_1" OR csp-rule-template.attributes.metadata.section: "section_2")' + ); + }); + + it('get benchmark filter query based on a benchmark Id, version and just rule numbers', () => { + const mockSelectParams = { + ruleNumber: ['1a', '2b', '3c'], + }; + const typeFilter = getBenchmarkFilterQueryV2('cis_eks', '1.0.1', mockSelectParams); + expect(typeFilter).toMatch( + 'csp-rule-template.attributes.metadata.benchmark.id:cis_eks AND csp-rule-template.attributes.metadata.benchmark.version:"v1.0.1" AND (csp-rule-template.attributes.metadata.benchmark.rule_number: "1a" OR csp-rule-template.attributes.metadata.benchmark.rule_number: "2b" OR csp-rule-template.attributes.metadata.benchmark.rule_number: "3c")' + ); + }); + describe('cleanupCredentials', () => { it('cleans unused aws credential methods, except role_arn when using assume_role', () => { const mockPackagePolicy = createPackagePolicyMock(); diff --git a/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts b/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts index 3c70b3a7964b9..0dc376b19f179 100644 --- a/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts +++ b/x-pack/plugins/cloud_security_posture/common/utils/helpers.ts @@ -32,6 +32,7 @@ import type { RuleSection, } from '../types_old'; import type { BenchmarkRuleSelectParams, BenchmarksCisId } from '../types/latest'; +import type { BenchmarkRuleSelectParams as BenchmarkRuleSelectParamsV1 } from '../types/rules/v4'; /** * @example @@ -205,11 +206,11 @@ export const getBenchmarkApplicableTo = (benchmarkId: BenchmarksCisId) => { }; export const getBenchmarkFilterQuery = ( - id: BenchmarkId, - version?: string, - selectParams?: BenchmarkRuleSelectParams + benchmarkId: BenchmarkId, + benchmarkVersion?: string, + selectParams?: BenchmarkRuleSelectParamsV1 ): string => { - const baseQuery = `${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.id:${id} AND ${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.version:"v${version}"`; + const baseQuery = `${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.id:${benchmarkId} AND ${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.version:"v${benchmarkVersion}"`; const sectionQuery = selectParams?.section ? ` AND ${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.section: "${selectParams.section}"` : ''; @@ -218,3 +219,29 @@ export const getBenchmarkFilterQuery = ( : ''; return baseQuery + sectionQuery + ruleNumberQuery; }; + +export const getBenchmarkFilterQueryV2 = ( + benchmarkId: BenchmarkId, + benchmarkVersion?: string, + selectParams?: BenchmarkRuleSelectParams +): string => { + const baseQuery = `${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.id:${benchmarkId} AND ${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.version:"v${benchmarkVersion}"`; + + let sectionQuery = ''; + let ruleNumberQuery = ''; + if (selectParams?.section) { + const sectionParamsArr = selectParams.section?.map( + (params) => `${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.section: "${params}"` + ); + sectionQuery = ' AND (' + sectionParamsArr.join(' OR ') + ')'; + } + if (selectParams?.ruleNumber) { + const ruleNumbersParamsArr = selectParams.ruleNumber?.map( + (params) => + `${CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE}.attributes.metadata.benchmark.rule_number: "${params}"` + ); + ruleNumberQuery = ' AND (' + ruleNumbersParamsArr.join(' OR ') + ')'; + } + + return baseQuery + sectionQuery + ruleNumberQuery; +}; diff --git a/x-pack/plugins/cloud_security_posture/public/common/component/multi_select_filter.tsx b/x-pack/plugins/cloud_security_posture/public/common/component/multi_select_filter.tsx new file mode 100644 index 0000000000000..6eece8a31c5e8 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/common/component/multi_select_filter.tsx @@ -0,0 +1,200 @@ +/* + * 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. + */ + +/* This code is based on MultiSelectFilter component from x-pack/plugins/cases/public/components/all_cases/multi_select_filter.tsx */ +import React, { useState, useEffect } from 'react'; +import { css } from '@emotion/react'; +import type { EuiSelectableOption } from '@elastic/eui'; +import { + EuiPopoverTitle, + EuiCallOut, + EuiHorizontalRule, + EuiPopover, + EuiSelectable, + EuiFilterButton, + EuiFilterGroup, + EuiText, +} from '@elastic/eui'; +import { isEqual } from 'lodash/fp'; +import { i18n } from '@kbn/i18n'; + +type FilterOption = EuiSelectableOption<{ + key: K; + label: T; +}>; + +export type { FilterOption as MultiSelectFilterOption }; + +export const mapToMultiSelectOption = (options: T[]) => { + return options.map((option) => { + return { + key: option, + label: option, + }; + }); +}; + +const fromRawOptionsToEuiSelectableOptions = ( + options: Array>, + selectedOptionKeys: string[] +): Array> => { + return options.map(({ key, label }) => { + const selectableOption: FilterOption = { label, key }; + if (selectedOptionKeys.includes(key)) { + selectableOption.checked = 'on'; + } + selectableOption['data-test-subj'] = `options-filter-popover-item-${key.split(' ').join('-')}`; + return selectableOption; + }); +}; + +const fromEuiSelectableOptionToRawOption = ( + options: Array> +): string[] => { + return options.map((option) => option.key); +}; + +const getEuiSelectableCheckedOptions = ( + options: Array> +) => options.filter((option) => option.checked === 'on') as Array>; + +interface UseFilterParams { + buttonIconType?: string; + buttonLabel?: string; + hideActiveOptionsNumber?: boolean; + id: string; + limit?: number; + limitReachedMessage?: string; + onChange: (params: { filterId: string; selectedOptionKeys: string[] }) => void; + options: Array>; + renderOption?: (option: FilterOption) => React.ReactNode; + selectedOptionKeys?: string[]; + transparentBackground?: boolean; +} +export const MultiSelectFilter = ({ + buttonLabel, + buttonIconType, + hideActiveOptionsNumber, + id, + limit, + limitReachedMessage, + onChange, + options: rawOptions, + selectedOptionKeys = [], + renderOption, + transparentBackground, +}: UseFilterParams) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const toggleIsPopoverOpen = () => setIsPopoverOpen((prevValue) => !prevValue); + const showActiveOptionsNumber = !hideActiveOptionsNumber; + const isInvalid = Boolean(limit && limitReachedMessage && selectedOptionKeys.length >= limit); + const options = fromRawOptionsToEuiSelectableOptions(rawOptions, selectedOptionKeys); + + useEffect(() => { + const newSelectedOptions = selectedOptionKeys.filter((selectedOptionKey) => + rawOptions.some(({ key: optionKey }) => optionKey === selectedOptionKey) + ); + if (!isEqual(newSelectedOptions, selectedOptionKeys)) { + onChange({ + filterId: id, + selectedOptionKeys: newSelectedOptions, + }); + } + }, [selectedOptionKeys, rawOptions, id, onChange]); + + const _onChange = (newOptions: Array>) => { + const newSelectedOptions = getEuiSelectableCheckedOptions(newOptions); + if (isInvalid && limit && newSelectedOptions.length >= limit) { + return; + } + + onChange({ + filterId: id, + selectedOptionKeys: fromEuiSelectableOptionToRawOption(newSelectedOptions), + }); + }; + + return ( + + 0 : undefined} + numActiveFilters={showActiveOptionsNumber ? selectedOptionKeys.length : undefined} + aria-label={buttonLabel} + > + + {buttonLabel} + + + } + isOpen={isPopoverOpen} + closePopover={() => setIsPopoverOpen(false)} + panelPaddingSize="none" + repositionOnScroll + > + {isInvalid && ( + <> + + + + + )} + > + options={options} + searchable + searchProps={{ + placeholder: + i18n.translate('xpack.csp.common.component.multiSelectFilter.searchWord', { + defaultMessage: 'Search ', + }) + buttonLabel, + compressed: false, + 'data-test-subj': `${id}-search-input`, + css: css` + border-radius: 0px !important; + `, + }} + emptyMessage={'empty'} + onChange={_onChange} + singleSelection={false} + renderOption={renderOption} + > + {(list, search) => ( +
+ {search} + {list} +
+ )} + +
+
+ ); +}; + +MultiSelectFilter.displayName = 'MultiSelectFilter'; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx index a6853a20db3ad..e0017fa7a54e1 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_container.tsx @@ -5,6 +5,7 @@ * 2.0. */ import React, { useState, useMemo } from 'react'; +import compareVersions from 'compare-versions'; import { EuiSpacer } from '@elastic/eui'; import { useParams } from 'react-router-dom'; import { buildRuleKey } from '../../../common/utils/rules_states'; @@ -117,7 +118,7 @@ export const RulesContainer = () => { const rulesKey = buildRuleKey( rule.metadata.benchmark.id, rule.metadata.benchmark.version, - /* Since Packages are automatically upgraded, we can be sure that rule_number will Always exist */ + /* Rule number always exists* from 8.7 */ rule.metadata.benchmark.rule_number! ); @@ -147,7 +148,7 @@ export const RulesContainer = () => { const cleanedSectionList = [...new Set(sectionList)].sort((a, b) => { return a.localeCompare(b, 'en', { sensitivity: 'base' }); }); - const cleanedRuleNumberList = [...new Set(ruleNumberList)]; + const cleanedRuleNumberList = [...new Set(ruleNumberList)].sort(compareVersions); const rulesPageData = useMemo( () => getRulesPage(filteredRulesWithStates, status, error, rulesQuery), diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx index 44bf8cc62785a..b792ab851fa74 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table.tsx @@ -14,6 +14,8 @@ import { useEuiTheme, EuiSwitch, EuiCheckbox, + EuiFlexGroup, + EuiFlexItem, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { uniqBy } from 'lodash'; @@ -190,7 +192,7 @@ const getColumns = ({ }} /> ), - width: '30px', + width: '40px', sortable: false, render: (rules, item: CspBenchmarkRulesWithStates) => { return ( @@ -219,7 +221,7 @@ const getColumns = ({ name: i18n.translate('xpack.csp.rules.rulesTable.ruleNumberColumnLabel', { defaultMessage: 'Rule Number', }), - width: '10%', + width: '100px', sortable: true, }, { @@ -248,20 +250,21 @@ const getColumns = ({ name: i18n.translate('xpack.csp.rules.rulesTable.cisSectionColumnLabel', { defaultMessage: 'CIS Section', }), - width: '15%', + width: '24%', }, { field: 'metadata.name', name: i18n.translate('xpack.csp.rules.rulesTable.mutedColumnLabel', { defaultMessage: 'Enabled', }), - width: '10%', + align: 'right', + width: '100px', truncateText: true, render: (name, rule: CspBenchmarkRulesWithStates) => { const rulesObjectRequest = { benchmark_id: rule?.metadata.benchmark.id, benchmark_version: rule?.metadata.benchmark.version, - /* Since Packages are automatically upgraded, we can be sure that rule_number will Always exist */ + /* Rule number always exists from 8.7 */ rule_number: rule?.metadata.benchmark.rule_number!, rule_id: rule?.metadata.id, }; @@ -275,13 +278,18 @@ const getColumns = ({ } }; return ( - + + + + + ); }, }, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx index a960d541f1630..366ae740c3e94 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/rules_table_header.tsx @@ -6,13 +6,11 @@ */ import React, { useState } from 'react'; import { - EuiComboBox, EuiFieldSearch, EuiFlexItem, EuiText, EuiSpacer, EuiFlexGroup, - type EuiComboBoxOptionOption, EuiPopover, EuiButtonEmpty, EuiContextMenuItem, @@ -28,6 +26,7 @@ import { css } from '@emotion/react'; import { euiThemeVars } from '@kbn/ui-theme'; import { RuleStateAttributesWithoutStates, useChangeCspRuleState } from './change_csp_rule_state'; import { CspBenchmarkRulesWithStates } from './rules_container'; +import { MultiSelectFilter } from '../../common/component/multi_select_filter'; export const RULES_BULK_ACTION_BUTTON = 'bulk-action-button'; export const RULES_BULK_ACTION_OPTION_ENABLE = 'bulk-action-option-enable'; @@ -36,11 +35,13 @@ export const RULES_SELECT_ALL_RULES = 'select-all-rules-button'; export const RULES_CLEAR_ALL_RULES_SELECTION = 'clear-rules-selection-button'; export const RULES_DISABLED_FILTER = 'rules-disabled-filter'; export const RULES_ENABLED_FILTER = 'rules-enabled-filter'; +export const CIS_SECTION_FILTER = 'cis-section-filter'; +export const RULE_NUMBER_FILTER = 'rule-number-filter'; interface RulesTableToolbarProps { search: (value: string) => void; - onSectionChange: (value: string | undefined) => void; - onRuleNumberChange: (value: string | undefined) => void; + onSectionChange: (value: string[] | undefined) => void; + onRuleNumberChange: (value: string[] | undefined) => void; sectionSelectOptions: string[]; ruleNumberSelectOptions: string[]; totalRulesCount: number; @@ -81,16 +82,16 @@ export const RulesTableHeader = ({ setSelectAllRules, setSelectedRules, }: RulesTableToolbarProps) => { - const [selectedSection, setSelectedSection] = useState([]); - const [selectedRuleNumber, setSelectedRuleNumber] = useState([]); + const [selectedSection, setSelectedSection] = useState([]); + const [selectedRuleNumber, setSelectedRuleNumber] = useState([]); const sectionOptions = sectionSelectOptions.map((option) => ({ + key: option, label: option, })); - const ruleNumberOptions = ruleNumberSelectOptions.map((option) => ({ + key: option, label: option, })); - const [isEnabledRulesFilterOn, setIsEnabledRulesFilterOn] = useState(false); const [isDisabledRulesFilterOn, setisDisabledRulesFilterOn] = useState(false); @@ -130,27 +131,28 @@ export const RulesTableHeader = ({ />
- + - { - setSelectedSection(option); - onSectionChange(option.length ? option[0].label : undefined); + id={'cis-section-multi-select-filter'} + onChange={(section) => { + setSelectedSection([...section?.selectedOptionKeys]); + onSectionChange( + section?.selectedOptionKeys ? section?.selectedOptionKeys : undefined + ); }} + options={sectionOptions} + selectedOptionKeys={selectedSection} /> - { - setSelectedRuleNumber(option); - onRuleNumberChange(option.length ? option[0].label : undefined); + id={'rule-number-multi-select-filter'} + onChange={(ruleNumber) => { + setSelectedRuleNumber([...ruleNumber?.selectedOptionKeys]); + onRuleNumberChange( + ruleNumber?.selectedOptionKeys ? ruleNumber?.selectedOptionKeys : undefined + ); }} + options={ruleNumberOptions} + selectedOptionKeys={selectedRuleNumber} /> { return http.get(FIND_CSP_BENCHMARK_RULE_ROUTE_PATH, { query: { benchmarkId, page, perPage, search, section, benchmarkVersion, ruleNumber }, - version: '2', + version: '3', }); } ); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_rules_state.ts b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_rules_state.ts index ff56ad8ad4570..da34cf8b247c7 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_rules_state.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/rules/use_csp_rules_state.ts @@ -10,7 +10,7 @@ import { CspBenchmarkRulesStates } from '../../../common/types/latest'; import { CSP_GET_BENCHMARK_RULES_STATE_ROUTE_PATH } from '../../../common/constants'; import { useKibana } from '../../common/hooks/use_kibana'; -const QUERY_KEY_V1 = 'csp_rules_status_v1'; +const QUERY_KEY_V1 = 'csp_rules_states_v1'; export const useCspGetRulesStates = () => { const { http } = useKibana().services; diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts index 12954073e552a..8dc8f36554600 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/find.ts @@ -14,10 +14,15 @@ import { FindCspBenchmarkRuleRequest as FindCspBenchmarkRuleRequestV1, findCspBenchmarkRuleRequestSchema as findCspBenchmarkRuleRequestSchemaV1, } from '../../../../common/types/rules/v3'; +import { + FindCspBenchmarkRuleRequest as FindCspBenchmarkRuleRequestV2, + findCspBenchmarkRuleRequestSchema as findCspBenchmarkRuleRequestSchemaV2, +} from '../../../../common/types/rules/v4'; import { FIND_CSP_BENCHMARK_RULE_ROUTE_PATH } from '../../../../common/constants'; import { CspRouter } from '../../../types'; import { findBenchmarkRuleHandler as findRuleHandlerV1 } from './v1'; import { findBenchmarkRuleHandler as findRuleHandlerV2 } from './v2'; +import { findBenchmarkRuleHandler as findRuleHandlerV3 } from './v3'; export const defineFindCspBenchmarkRuleRoute = (router: CspRouter) => router.versioned @@ -61,6 +66,40 @@ export const defineFindCspBenchmarkRuleRoute = (router: CspRouter) => .addVersion( { version: '2', + validate: { + request: { + query: findCspBenchmarkRuleRequestSchemaV2, + }, + }, + }, + async (context, request, response) => { + if (!(await context.fleet).authz.fleet.all) { + return response.forbidden(); + } + + const requestBody: FindCspBenchmarkRuleRequestV2 = request.query; + const cspContext = await context.csp; + + try { + const cspBenchmarkRules: FindCspBenchmarkRuleResponse = await findRuleHandlerV2( + cspContext.soClient, + requestBody + ); + + return response.ok({ body: cspBenchmarkRules }); + } catch (err) { + const error = transformError(err); + cspContext.logger.error(`Failed to fetch csp rules templates ${err}`); + return response.customError({ + body: { message: error.message }, + statusCode: error.statusCode, + }); + } + } + ) + .addVersion( + { + version: '3', validate: { request: { query: findCspBenchmarkRuleRequestSchema, @@ -76,7 +115,7 @@ export const defineFindCspBenchmarkRuleRoute = (router: CspRouter) => const cspContext = await context.csp; try { - const cspBenchmarkRules: FindCspBenchmarkRuleResponse = await findRuleHandlerV2( + const cspBenchmarkRules: FindCspBenchmarkRuleResponse = await findRuleHandlerV3( cspContext.soClient, requestBody ); diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v2.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v2.ts index 228d7d5e9c3e6..5054fc211a529 100644 --- a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v2.ts +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v2.ts @@ -13,7 +13,7 @@ import type { CspBenchmarkRule, FindCspBenchmarkRuleRequest, FindCspBenchmarkRuleResponse, -} from '../../../../common/types/latest'; +} from '../../../../common/types/rules/v4'; import { getSortedCspBenchmarkRulesTemplates } from './utils'; export const findBenchmarkRuleHandler = async ( diff --git a/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v3.ts b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v3.ts new file mode 100644 index 0000000000000..6cf4efd5705a0 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/server/routes/benchmark_rules/find/v3.ts @@ -0,0 +1,58 @@ +/* + * 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 { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { getBenchmarkFilterQueryV2 } from '../../../../common/utils/helpers'; +import { CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE } from '../../../../common/constants'; + +import type { + CspBenchmarkRule, + FindCspBenchmarkRuleRequest, + FindCspBenchmarkRuleResponse, +} from '../../../../common/types/latest'; +import { getSortedCspBenchmarkRulesTemplates } from './utils'; + +export const findBenchmarkRuleHandler = async ( + soClient: SavedObjectsClientContract, + options: FindCspBenchmarkRuleRequest +): Promise => { + if (!options.benchmarkId) { + throw new Error('Please provide benchmarkId'); + } + const sectionFilter: string[] | undefined = + typeof options?.section === 'string' ? [options?.section] : options?.section; + const ruleNumberFilter: string[] | undefined = + typeof options?.ruleNumber === 'string' ? [options?.ruleNumber] : options?.ruleNumber; + const benchmarkId = options.benchmarkId; + const cspCspBenchmarkRulesSo = await soClient.find({ + type: CSP_BENCHMARK_RULE_SAVED_OBJECT_TYPE, + searchFields: options.searchFields, + search: options.search ? `"${options.search}"*` : '', + page: options.page, + perPage: options.perPage, + sortField: options.sortField, + fields: options?.fields, + filter: getBenchmarkFilterQueryV2(benchmarkId, options.benchmarkVersion || '', { + section: sectionFilter, + ruleNumber: ruleNumberFilter, + }), + }); + + const cspBenchmarkRules = cspCspBenchmarkRulesSo.saved_objects.map( + (cspBenchmarkRule) => cspBenchmarkRule.attributes + ); + + // Semantic version sorting using semver for valid versions and custom comparison for invalid versions + const sortedCspBenchmarkRules = getSortedCspBenchmarkRulesTemplates(cspBenchmarkRules); + + return { + items: sortedCspBenchmarkRules, + total: cspCspBenchmarkRulesSo.total, + page: options.page, + perPage: options.perPage, + }; +}; diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/rule_page.ts b/x-pack/test/cloud_security_posture_functional/page_objects/rule_page.ts index 3136b2b240fb4..7547bf67be8ab 100644 --- a/x-pack/test/cloud_security_posture_functional/page_objects/rule_page.ts +++ b/x-pack/test/cloud_security_posture_functional/page_objects/rule_page.ts @@ -20,6 +20,9 @@ export const RULES_CLEAR_ALL_RULES_SELECTION = 'clear-rules-selection-button'; export const RULES_ROWS_ENABLE_SWITCH_BUTTON = 'rules-row-enable-switch-button'; export const RULES_DISABLED_FILTER = 'rules-disabled-filter'; export const RULES_ENABLED_FILTER = 'rules-enabled-filter'; +export const CIS_SECTION_FILTER = 'options-filter-popover-button-cis-section-multi-select-filter'; +export const RULE_NUMBER_FILTER = 'options-filter-popover-button-rule-number-multi-select-filter'; +export const RULE_NUMBER_FILTER_SEARCH_FIELD = 'rule-number-search-input'; export function RulePagePageProvider({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); @@ -86,6 +89,27 @@ export function RulePagePageProvider({ getService, getPageObjects }: FtrProvider const enableRulesRowSwitch = await testSubjects.findAll(RULES_ROWS_ENABLE_SWITCH_BUTTON); return await enableRulesRowSwitch.length; }, + + clickFilterPopover: async (filterType: 'section' | 'ruleNumber') => { + const filterPopoverButton = + (await filterType) === 'section' + ? await testSubjects.find(CIS_SECTION_FILTER) + : await testSubjects.find(RULE_NUMBER_FILTER); + + await filterPopoverButton.click(); + await PageObjects.header.waitUntilLoadingHasFinished(); + }, + + clickFilterPopOverOption: async (value: string) => { + const chosenValue = await testSubjects.find('options-filter-popover-item-' + value); + await chosenValue.click(); + }, + + filterTextInput: async (selector: string, value: string) => { + const textField = await testSubjects.find(selector); + await textField.type(value); + await PageObjects.header.waitUntilLoadingHasFinished(); + }, }; const navigateToRulePage = async (benchmarkCisId: string, benchmarkCisVersion: string) => { @@ -94,6 +118,7 @@ export function RulePagePageProvider({ getService, getPageObjects }: FtrProvider `cloud_security_posture/benchmarks/${benchmarkCisId}/${benchmarkCisVersion}/rules`, { shouldUseHashForSubUrl: false } ); + await PageObjects.header.waitUntilLoadingHasFinished(); }; return { diff --git a/x-pack/test/cloud_security_posture_functional/pages/rules.ts b/x-pack/test/cloud_security_posture_functional/pages/rules.ts index 46859f75572d8..4841c9ad6b8b3 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/rules.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/rules.ts @@ -27,8 +27,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { 'findings', ]); - describe('Cloud Posture Dashboard Page', function () { - this.tags(['cloud_security_posture_compliance_dashboard']); + describe('Cloud Posture Rules Page', function () { + this.tags(['cloud_security_posture_rules_page']); let rule: typeof pageObjects.rule; let agentPolicyId: string; @@ -59,7 +59,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); await rule.waitForPluginInitialized(); await rule.navigateToRulePage('cis_k8s', '1.0.1'); - await pageObjects.header.waitUntilLoadingHasFinished(); }); afterEach(async () => { @@ -139,5 +138,30 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect((await rule.rulePage.getEnableRulesRowSwitchButton()) > 1).to.be(true); }); }); + + describe('Rules Page - CIS Section & Rule Number filters', () => { + it('Table should only show result that has the same section as in the Section filter', async () => { + await rule.rulePage.clickFilterPopover('section'); + await rule.rulePage.clickFilterPopOverOption('etcd'); + await rule.rulePage.clickFilterPopOverOption('Scheduler'); + expect((await rule.rulePage.getEnableRulesRowSwitchButton()) < 10).to.be(true); + }); + + it('Table should only show result that has the same section as in the Rule number filter', async () => { + await rule.rulePage.clickFilterPopover('ruleNumber'); + await rule.rulePage.clickFilterPopOverOption('1.1.1'); + await rule.rulePage.clickFilterPopOverOption('1.1.2'); + expect((await rule.rulePage.getEnableRulesRowSwitchButton()) === 2).to.be(true); + }); + + it('Table should only show result that passes both Section and Rule number filter', async () => { + await rule.rulePage.clickFilterPopover('section'); + await rule.rulePage.clickFilterPopOverOption('Control-Plane-Node-Configuration-Files'); + await rule.rulePage.clickFilterPopover('section'); + await rule.rulePage.clickFilterPopover('ruleNumber'); + await rule.rulePage.clickFilterPopOverOption('1.1.5'); + expect((await rule.rulePage.getEnableRulesRowSwitchButton()) === 1).to.be(true); + }); + }); }); } From 0dd0664261a3e3b8a60cbd6bf2ae10f4cb000d9a Mon Sep 17 00:00:00 2001 From: GitStart <1501599+gitstart@users.noreply.github.com> Date: Thu, 25 Jan 2024 02:24:18 +0530 Subject: [PATCH 015/113] [Fleet]: Beta label is shown inconsistently while selecting proxy under Fleet settings. (#170634) ## What does this PR do? * It fixes the consistency of displaying the "Beta" label in the proxies under the Fleet Server settings page. ## Issue References * Closes https://github.com/elastic/kibana/issues/168333 ## Screenshot Demo ##### Before: ![image](https://github.com/GitStartHQ/client-kibana-oss/assets/50892465/f411779f-760b-4bc1-a6f1-17da5586ad53) ##### Fix: ![image](https://github.com/GitStartHQ/client-kibana-oss/assets/50892465/8dffe98c-fb39-48dd-badf-37be2dbdb863) ___ This code was written and reviewed by GitStart Community. Growing future engineers, one PR at a time. --------- Co-authored-by: KlingerMatheus Co-authored-by: Kyle Pollich Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/edit_output_flyout/index.tsx | 16 +++++++++++++++- .../fleet_server_hosts_flyout/index.tsx | 17 ++++++++++++++++- .../translations/translations/fr-FR.json | 2 -- .../translations/translations/ja-JP.json | 2 -- .../translations/translations/zh-CN.json | 2 -- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx index ed4774ea7470c..ef7a4632c6b4a 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_output_flyout/index.tsx @@ -335,7 +335,21 @@ export const EditOutputFlyout: React.FunctionComponent = label={ + ), + }} /> } > diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx index 4ac3a093d351c..f8dfc630f5a51 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx @@ -26,6 +26,7 @@ import { EuiSwitch, EuiComboBox, EuiCallOut, + EuiBetaBadge, } from '@elastic/eui'; import { MultiRowInput } from '../multi_row_input'; @@ -158,7 +159,21 @@ export const FleetServerHostsFlyout: React.FunctionComponent + ), + }} /> } > diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index be09425ea86d4..13277d812a452 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -17730,7 +17730,6 @@ "xpack.fleet.settings.editOutputFlyout.nameInputPlaceholder": "Indiquer le nom", "xpack.fleet.settings.editOutputFlyout.preconfiguredOutputCalloutDescription": "La plupart des actions liées à cette sortie sont indisponibles. Reportez-vous à votre configuration Kibana pour en savoir plus.", "xpack.fleet.settings.editOutputFlyout.preconfiguredOutputCalloutTitle": "Cette sortie est gérée en dehors de Fleet.", - "xpack.fleet.settings.editOutputFlyout.proxyIdLabel": "Proxy", "xpack.fleet.settings.editOutputFlyout.proxyIdPlaceholder": "Sélectionner un proxy", "xpack.fleet.settings.editOutputFlyout.queueFlushTimeoutDescription": "À l'expiration, la file d'attente de sortie est vidée, et les données sont écrites dans la sortie.", "xpack.fleet.settings.editOutputFlyout.queueFlushTimeoutLabel": "Délai de vidage", @@ -17795,7 +17794,6 @@ "xpack.fleet.settings.fleetServerHostsFlyout.hostUrlLabel": "URL", "xpack.fleet.settings.fleetServerHostsFlyout.nameInputLabel": "Nom", "xpack.fleet.settings.fleetServerHostsFlyout.nameInputPlaceholder": "Indiquer le nom", - "xpack.fleet.settings.fleetServerHostsFlyout.proxyIdLabel": "Proxy", "xpack.fleet.settings.fleetServerHostsFlyout.proxyIdPlaceholder": "Sélectionner un proxy", "xpack.fleet.settings.fleetServerHostsFlyout.saveButton": "Enregistrer et appliquer les paramètres", "xpack.fleet.settings.fleetServerHostsFlyout.successToastTitle": "Hôte du serveur Fleet enregistré", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index eacf6ad39e4ae..1742ae147ca25 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -17743,7 +17743,6 @@ "xpack.fleet.settings.editOutputFlyout.nameInputPlaceholder": "名前を指定", "xpack.fleet.settings.editOutputFlyout.preconfiguredOutputCalloutDescription": "この出力に関連するほとんどのアクションは使用できません。詳細については、Kibana構成を参照してください。", "xpack.fleet.settings.editOutputFlyout.preconfiguredOutputCalloutTitle": "この出力はFleet外で管理されます", - "xpack.fleet.settings.editOutputFlyout.proxyIdLabel": "プロキシ", "xpack.fleet.settings.editOutputFlyout.proxyIdPlaceholder": "プロキシを選択", "xpack.fleet.settings.editOutputFlyout.queueFlushTimeoutDescription": "有効期限切れになると、出力キューがフラッシュされ、データが出力に書き込まれます。", "xpack.fleet.settings.editOutputFlyout.queueFlushTimeoutLabel": "フラッシュタイムアウト", @@ -17808,7 +17807,6 @@ "xpack.fleet.settings.fleetServerHostsFlyout.hostUrlLabel": "URL", "xpack.fleet.settings.fleetServerHostsFlyout.nameInputLabel": "名前", "xpack.fleet.settings.fleetServerHostsFlyout.nameInputPlaceholder": "名前を指定", - "xpack.fleet.settings.fleetServerHostsFlyout.proxyIdLabel": "プロキシ", "xpack.fleet.settings.fleetServerHostsFlyout.proxyIdPlaceholder": "プロキシを選択", "xpack.fleet.settings.fleetServerHostsFlyout.saveButton": "設定を保存して適用", "xpack.fleet.settings.fleetServerHostsFlyout.successToastTitle": "Fleetサーバーホストが保存されました", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 4370b89846653..f88e19663d057 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -17837,7 +17837,6 @@ "xpack.fleet.settings.editOutputFlyout.nameInputPlaceholder": "指定名称", "xpack.fleet.settings.editOutputFlyout.preconfiguredOutputCalloutDescription": "与此输出相关的操作多数不可用。请参阅 Kibana 配置了解详情。", "xpack.fleet.settings.editOutputFlyout.preconfiguredOutputCalloutTitle": "此输出在 Fleet 外部进行管理", - "xpack.fleet.settings.editOutputFlyout.proxyIdLabel": "代理", "xpack.fleet.settings.editOutputFlyout.proxyIdPlaceholder": "选择代理", "xpack.fleet.settings.editOutputFlyout.queueFlushTimeoutDescription": "过期后,将清空此输出队列,并将数据写入到输出。", "xpack.fleet.settings.editOutputFlyout.queueFlushTimeoutLabel": "清空超时", @@ -17902,7 +17901,6 @@ "xpack.fleet.settings.fleetServerHostsFlyout.hostUrlLabel": "URL", "xpack.fleet.settings.fleetServerHostsFlyout.nameInputLabel": "名称", "xpack.fleet.settings.fleetServerHostsFlyout.nameInputPlaceholder": "指定名称", - "xpack.fleet.settings.fleetServerHostsFlyout.proxyIdLabel": "代理", "xpack.fleet.settings.fleetServerHostsFlyout.proxyIdPlaceholder": "选择代理", "xpack.fleet.settings.fleetServerHostsFlyout.saveButton": "保存并应用设置", "xpack.fleet.settings.fleetServerHostsFlyout.successToastTitle": "已保存 Fleet 服务器主机", From 2f8825d68af0336aaa764848eeb6a0c346ef8a18 Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Wed, 24 Jan 2024 13:29:43 -0800 Subject: [PATCH 016/113] Upgrade EUI to v92.1.1 (#174955) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v92.0.0-backport.0`⏩ `v92.1.1` --- ## [`v92.1.1`](https://github.com/elastic/eui/releases/v92.1.1) **Bug fixes** - Minor `EuiDataGrid` cell performance fixes ([#7465](https://github.com/elastic/eui/pull/7465)) ## [`v92.1.0`](https://github.com/elastic/eui/releases/v92.1.0) - Updated `EuiResizableButton` to allow customizing the `indicator` style with either `handle` (default) or `border` ([#7455](https://github.com/elastic/eui/pull/7455)) - Enhanced `EuiResizableContainer` to preserve the drag/resize event when the user's mouse leaves the parent container and re-enters ([#7456](https://github.com/elastic/eui/pull/7456)) **Bug fixes** - Fixed an `EuiTreeView` JSX Typescript error ([#7452](https://github.com/elastic/eui/pull/7452)) - Fixed a color console warning being generated by disabled `EuiStep`s ([#7454](https://github.com/elastic/eui/pull/7454)) **Accessibility** - `EuiDataGrid`'s keyboard/screenreader experience has been tweaked to be more consistent for varying complex data: ([#7448](https://github.com/elastic/eui/pull/7448)) - Headers are now always navigable by arrow key, regardless of whether the header cells contain interactive content - Non-expandable cells containing any amount of interactive content now must be entered via Enter or F2 keypress - Expandable cells continue to be toggled via Enter or F2 keypress - `EuiDataGrid` now provides a direct screen reader hint for Enter key behavior for expandable & interactive cells ([#7448](https://github.com/elastic/eui/pull/7448)) --- package.json | 2 +- .../__snapshots__/i18n_service.test.tsx.snap | 2 + .../src/i18n_eui_mapping.tsx | 8 ++ .../src/panels_resizable.tsx | 107 +++++++++--------- src/dev/license_checker/config.ts | 2 +- .../vis_default_editor/public/_default.scss | 4 + .../public/default_editor.tsx | 1 + .../datatable/components/table_basic.test.tsx | 8 +- .../osquery/cypress/e2e/all/live_query.cy.ts | 7 +- .../osquery/cypress/tasks/saved_queries.ts | 21 ++-- .../cypress/tasks/alerts.ts | 5 +- .../cypress/tasks/asset_criticality/common.ts | 4 +- yarn.lock | 8 +- 13 files changed, 96 insertions(+), 83 deletions(-) diff --git a/package.json b/package.json index 410dffca4b7ef..f67fead47293d 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.9.1-canary.1", "@elastic/ems-client": "8.5.1", - "@elastic/eui": "92.0.0-backport.0", + "@elastic/eui": "92.1.1", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap index c1f33ec2f18c6..78bb5d5d7ea71 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap +++ b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap @@ -83,6 +83,8 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiDataGrid.ariaLabel": [Function], "euiDataGrid.ariaLabelledBy": [Function], "euiDataGrid.screenReaderNotice": "Cell contains interactive content.", + "euiDataGridCell.expansionEnterPrompt": "Press the Enter key to expand this cell.", + "euiDataGridCell.focusTrapEnterPrompt": "Press the Enter key to interact with this cell's contents.", "euiDataGridCell.position": [Function], "euiDataGridCellActions.expandButtonTitle": "Click or hit enter to interact with cell content", "euiDataGridHeaderCell.actionsPopoverScreenReaderText": "To navigate through the list of column actions, press the Tab or Up and Down arrow keys.", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx index 6f6a29e1a5255..8710a8640d747 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx +++ b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx @@ -523,6 +523,14 @@ export const getEuiContextMapping = (): EuiTokensObject => { defaultMessage: '{columnId}, column {col}, row {row}', values: { columnId, row, col }, }), + 'euiDataGridCell.expansionEnterPrompt': i18n.translate( + 'core.euiDataGridCell.expansionEnterPrompt', + { defaultMessage: 'Press the Enter key to expand this cell.' } + ), + 'euiDataGridCell.focusTrapEnterPrompt': i18n.translate( + 'core.euiDataGridCell.focusTrapEnterPrompt', + { defaultMessage: "Press the Enter key to interact with this cell's contents." } + ), 'euiDataGridCellActions.expandButtonTitle': i18n.translate( 'core.euiDataGridCellActions.expandButtonTitle', { diff --git a/packages/kbn-resizable-layout/src/panels_resizable.tsx b/packages/kbn-resizable-layout/src/panels_resizable.tsx index 300c9130b8100..6c9bd12674b20 100644 --- a/packages/kbn-resizable-layout/src/panels_resizable.tsx +++ b/packages/kbn-resizable-layout/src/panels_resizable.tsx @@ -6,12 +6,19 @@ * Side Public License, v 1. */ -import { EuiResizableContainer, useGeneratedHtmlId, useResizeObserver } from '@elastic/eui'; +import { + EuiResizableContainer, + useGeneratedHtmlId, + useResizeObserver, + useEuiTheme, + mathWithUnits, +} from '@elastic/eui'; import type { ResizeTrigger } from '@elastic/eui/src/components/resizable_container/types'; import { css } from '@emotion/react'; import { isEqual, round } from 'lodash'; import type { ReactElement } from 'react'; import React, { useCallback, useEffect, useState } from 'react'; +import useLatest from 'react-use/lib/useLatest'; import { ResizableLayoutDirection } from '../types'; import { getContainerSize, percentToPixels, pixelsToPercent } from './utils'; @@ -47,41 +54,30 @@ export const PanelsResizable = ({ onFixedPanelSizeChange?: (fixedPanelSize: number) => void; setPanelSizes: (panelSizes: { fixedPanelSizePct: number; flexPanelSizePct: number }) => void; }) => { + const { euiTheme } = useEuiTheme(); const fixedPanelId = useGeneratedHtmlId({ prefix: 'fixedPanel' }); const { height: containerHeight, width: containerWidth } = useResizeObserver(container); const containerSize = getContainerSize(direction, containerWidth, containerHeight); - // EuiResizableContainer doesn't work properly when used with react-reverse-portal and - // will cancel the resize. To work around this we keep track of when resizes start and - // end to toggle the rendering of a transparent overlay which prevents the cancellation. - // EUI issue: https://github.com/elastic/eui/issues/6199 - const [resizeWithPortalsHackIsResizing, setResizeWithPortalsHackIsResizing] = useState(false); - const enableResizeWithPortalsHack = useCallback( - () => setResizeWithPortalsHackIsResizing(true), - [] - ); - const disableResizeWithPortalsHack = useCallback( - () => setResizeWithPortalsHackIsResizing(false), - [] - ); - const baseButtonCss = css` - background-color: transparent !important; - gap: 0 !important; - - &:not(:hover):not(:focus) { - &:before, - &:after { - width: 0; - } - } + // The resize overlay makes it so that other mouse events (e.g. tooltip hovers, etc) + // don't occur when mouse dragging + const [isResizing, setIsResizing] = useState(false); + + // Align the resizable button border to overlap exactly over existing panel/layout borders + const buttonBorderCss = css` + position: relative; + inset-${direction === 'horizontal' ? 'inline-start' : 'block-end'}: -${mathWithUnits( + euiTheme.border.width.thin, + (x) => x / 2 + )}; `; const defaultButtonCss = css` z-index: 3; `; - const resizeWithPortalsHackButtonCss = css` + const resizingButtonCss = css` z-index: 4; `; - const resizeWithPortalsHackOverlayCss = css` + const resizingOverlayCss = css` position: absolute; top: 0; left: 0; @@ -158,34 +154,35 @@ export const PanelsResizable = ({ setPanelSizes, ]); - const onResizeStart = useCallback( - (trigger: ResizeTrigger) => { - if (trigger !== 'pointer') { - return; - } - - enableResizeWithPortalsHack(); - }, - [enableResizeWithPortalsHack] - ); - - const onResizeEnd = useCallback(() => { - if (!resizeWithPortalsHackIsResizing) { + const onResizeStart = useCallback((trigger: ResizeTrigger) => { + if (trigger !== 'pointer') { return; } + setIsResizing(true); + }, []); + + // EUI will call an outdated version of this callback when the resize ends, + // so we need to make sure on our end that the latest version is called. + const onResizeEndStable = useLatest(() => { + setIsResizing((_isResizing) => { + // We don't want the resize button to retain focus after the resize is complete, + // but EuiResizableContainer will force focus it onClick. To work around this we + // use setTimeout to wait until after onClick has been called before blurring. + if (_isResizing) { + if (document.activeElement instanceof HTMLElement) { + const button = document.activeElement; + setTimeout(() => { + button.blur(); + }); + } + } + return false; + }); + }); - // We don't want the resize button to retain focus after the resize is complete, - // but EuiResizableContainer will force focus it onClick. To work around this we - // use setTimeout to wait until after onClick has been called before blurring. - if (document.activeElement instanceof HTMLElement) { - const button = document.activeElement; - setTimeout(() => { - button.blur(); - }); - } - - disableResizeWithPortalsHack(); - }, [disableResizeWithPortalsHack, resizeWithPortalsHackIsResizing]); + const onResizeEnd = useCallback(() => { + onResizeEndStable.current(); + }, [onResizeEndStable]); // Don't render EuiResizableContainer until we have have valid // panel sizes or it can cause the resize functionality to break. @@ -218,10 +215,8 @@ export const PanelsResizable = ({ {flexPanel} - {resizeWithPortalsHackIsResizing ?
: <>} + {isResizing ?
: <>} )} diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index 2846992840a59..e171747874c2e 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -85,7 +85,7 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.5.1': ['Elastic License 2.0'], - '@elastic/eui@92.0.0-backport.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@92.1.1': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary '@bufbuild/protobuf@1.2.1': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause) diff --git a/src/plugins/vis_default_editor/public/_default.scss b/src/plugins/vis_default_editor/public/_default.scss index 56c6a0f0f63f6..2949712f6347e 100644 --- a/src/plugins/vis_default_editor/public/_default.scss +++ b/src/plugins/vis_default_editor/public/_default.scss @@ -32,6 +32,10 @@ * Resizer */ +.visEditor__resizer { + height: auto; +} + .visEditor__resizer-isHidden { display: none; } diff --git a/src/plugins/vis_default_editor/public/default_editor.tsx b/src/plugins/vis_default_editor/public/default_editor.tsx index fdfcf5bd7d7cc..2f6757a96d252 100644 --- a/src/plugins/vis_default_editor/public/default_editor.tsx +++ b/src/plugins/vis_default_editor/public/default_editor.tsx @@ -109,6 +109,7 @@ function DefaultEditor({ 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 d99f62fcb9219..7e7a18a94ac9c 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 @@ -207,7 +207,7 @@ describe('DatatableComponent', () => { /> ); - wrapper.find('[data-test-subj="dataGridRowCell"]').first().simulate('focus'); + wrapper.find('[data-test-subj="dataGridRowCell"]').first().simulate('mouseEnter'); await waitForWrapperUpdate(wrapper); @@ -248,7 +248,7 @@ describe('DatatableComponent', () => { /> ); - wrapper.find('[data-test-subj="dataGridRowCell"]').at(1).simulate('focus'); + wrapper.find('[data-test-subj="dataGridRowCell"]').at(1).simulate('mouseEnter'); await waitForWrapperUpdate(wrapper); @@ -324,7 +324,7 @@ describe('DatatableComponent', () => { /> ); - wrapper.find('[data-test-subj="dataGridRowCell"]').at(0).simulate('focus'); + wrapper.find('[data-test-subj="dataGridRowCell"]').at(0).simulate('mouseEnter'); await waitForWrapperUpdate(wrapper); @@ -365,7 +365,7 @@ describe('DatatableComponent', () => { /> ); - wrapper.find('[data-test-subj="dataGridRowCell"]').first().simulate('focus'); + wrapper.find('[data-test-subj="dataGridRowCell"]').first().simulate('mouseEnter'); await waitForWrapperUpdate(wrapper); diff --git a/x-pack/plugins/osquery/cypress/e2e/all/live_query.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/live_query.cy.ts index 04a3a24fbabb5..8351e9df4728c 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/live_query.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/live_query.cy.ts @@ -58,10 +58,9 @@ describe('ALL - Live Query', { tags: ['@ess', '@serverless'] }, () => { expect(interception.response?.body.data.queries[0]).to.have.property('timeout', 890); }); checkResults(); - cy.get('[data-gridcell-column-index="0"][data-gridcell-row-index="0"]').should('exist'); - cy.get( - '[data-gridcell-column-index="0"][data-gridcell-row-index="0"] [data-datagrid-interactable="true"]' - ).click(); + const firstCell = '[data-gridcell-column-index="0"][data-gridcell-row-index="0"]'; + cy.get(firstCell).should('exist'); + cy.get(firstCell).find('[data-euigrid-tab-managed="true"]').click(); cy.url().should('include', 'app/fleet/agents/'); }); diff --git a/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts b/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts index 0ff06beed1d79..568649572ae99 100644 --- a/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts +++ b/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts @@ -52,15 +52,17 @@ export const getSavedQueriesComplexTest = () => // hidden columns cy.getBySel(RESULTS_TABLE_COLUMNS_BUTTON).should('have.text', 'Columns35'); - cy.getBySel('dataGridHeaderCell-osquery.cmdline').click(); - cy.contains(/Hide column$/).click(); - cy.getBySel('dataGridHeaderCell-osquery.cwd').click(); - - cy.contains(/Hide column$/).click(); - cy.getBySel('dataGridHeaderCell-osquery.disk_bytes_written.number').click(); - - cy.contains(/Hide column$/).click(); + cy.getBySel('dataGridColumnSelectorButton').click(); + cy.get('[data-popover-open="true"]').should('be.visible'); + cy.getBySel('dataGridColumnSelectorToggleColumnVisibility-osquery.cmdline').click(); + cy.getBySel('dataGridColumnSelectorToggleColumnVisibility-osquery.cwd').click(); + cy.getBySel( + 'dataGridColumnSelectorToggleColumnVisibility-osquery.disk_bytes_written.number' + ).click(); + cy.getBySel('dataGridColumnSelectorButton').click(); + cy.get('[data-popover-open="true"]').should('not.exist'); cy.getBySel(RESULTS_TABLE_COLUMNS_BUTTON).should('have.text', 'Columns32/35'); + // change pagination cy.getBySel('pagination-button-next').click().wait(500).click(); cy.getBySel(RESULTS_TABLE_COLUMNS_BUTTON).should('have.text', 'Columns32/35'); @@ -72,8 +74,7 @@ export const getSavedQueriesComplexTest = () => cy.getBySel(RESULTS_TABLE_BUTTON).click(); // sorting - cy.getBySel('dataGridHeaderCell-osquery.egid').click(); - + cy.getBySel('dataGridHeaderCellActionButton-osquery.egid').click({ force: true }); cy.contains(/Sort A-Z$/).click(); cy.getBySel(RESULTS_TABLE_COLUMNS_BUTTON).should('have.text', 'Columns32/35'); cy.getBySel(RESULTS_TABLE_BUTTON).trigger('mouseover'); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts b/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts index d75d94ed519d6..dfedc68af8985 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/alerts.ts @@ -143,8 +143,9 @@ export const expandFirstAlertActions = () => { }; export const expandFirstAlert = () => { - cy.get(EXPAND_ALERT_BTN).should('be.visible'); - cy.get(EXPAND_ALERT_BTN).first().click(); + cy.get(EXPAND_ALERT_BTN).first().should('be.visible'); + // Cypress is flaky on clicking this button despite production not having that issue + cy.get(EXPAND_ALERT_BTN).first().trigger('click'); }; export const hideMessageTooltip = () => { diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/asset_criticality/common.ts b/x-pack/test/security_solution_cypress/cypress/tasks/asset_criticality/common.ts index 515bd4061365a..f867efc80f8b3 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/asset_criticality/common.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/asset_criticality/common.ts @@ -21,7 +21,9 @@ import { scrollAlertTableColumnIntoView } from '../alerts'; * Find the first alert row in the alerts table then click on the host name to open the flyout */ export const expandFirstAlertHostFlyout = () => { - cy.get(OPEN_HOST_FLYOUT_BUTTON).first().click(); + // Cypress is flaky on clicking this button despite production not having that issue + // eslint-disable-next-line cypress/no-force + cy.get(OPEN_HOST_FLYOUT_BUTTON).first().click({ force: true }); }; /** diff --git a/yarn.lock b/yarn.lock index 50ea6503d5906..1ef4d6d6e968f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1740,10 +1740,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@92.0.0-backport.0": - version "92.0.0-backport.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-92.0.0-backport.0.tgz#201757bef89141dad6f8f719976fa2a0b52be86a" - integrity sha512-ZliSke0YehCbCuHvYkY0BIMg32QeqTMZy+qgGYsh+Bp0UZ4CZn9j5e7LWavfal3+t8HMFCHTk0RUFFXrcepplA== +"@elastic/eui@92.1.1": + version "92.1.1" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-92.1.1.tgz#f5713bfa12733a2c62df365e37f7983a7c08411e" + integrity sha512-kjUP+IewVcoJ59e84lHwtdy5OvGNSmlHvzn5uUmGTKnBGOxoYv5K9pyGujVWpxSCG9MNr3anMsNE7EX6usj37A== dependencies: "@hello-pangea/dnd" "^16.3.0" "@types/lodash" "^4.14.198" From 19f01ae704f48bcb0040086b45094318b30d3947 Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Wed, 24 Jan 2024 16:24:29 -0600 Subject: [PATCH 017/113] [Security Solution][Timeline] refactor timeline modal attach to case button (#175163) --- .../flyout/action_menu/index.test.tsx | 8 +- .../components/flyout/action_menu/index.tsx | 4 +- .../actions/attach_to_case_button.test.tsx} | 75 +++++++----- .../actions/attach_to_case_button.tsx} | 115 ++++++++---------- .../components/modal/actions/translations.ts | 20 +++ .../timeline/properties/translations.ts | 20 --- .../translations/translations/fr-FR.json | 3 - .../translations/translations/ja-JP.json | 3 - .../translations/translations/zh-CN.json | 3 - .../cypress/screens/timeline.ts | 8 +- 10 files changed, 133 insertions(+), 126 deletions(-) rename x-pack/plugins/security_solution/public/timelines/components/{flyout/add_to_case_button/index.test.tsx => modal/actions/attach_to_case_button.test.tsx} (52%) rename x-pack/plugins/security_solution/public/timelines/components/{flyout/add_to_case_button/index.tsx => modal/actions/attach_to_case_button.tsx} (62%) diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.test.tsx index 7203e74fe02c1..54eb8cf2769a9 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.test.tsx @@ -88,7 +88,9 @@ describe('Action menu', () => { ); - expect(screen.getByTestId('attach-timeline-case-button')).toBeInTheDocument(); + expect( + screen.getByTestId('timeline-modal-attach-to-case-dropdown-button') + ).toBeInTheDocument(); }); it('does not render the button when the user does not have create permissions', () => { @@ -104,7 +106,9 @@ describe('Action menu', () => { ); - expect(screen.queryByTestId('attach-timeline-case-button')).not.toBeInTheDocument(); + expect( + screen.queryByTestId('timeline-modal-attach-to-case-dropdown-button') + ).not.toBeInTheDocument(); }); }); }); diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx index b1be7562fcf97..9c30205d10702 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx @@ -8,12 +8,12 @@ import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; import styled from 'styled-components'; +import { AttachToCaseButton } from '../../modal/actions/attach_to_case_button'; import { useKibana } from '../../../../common/lib/kibana/kibana_react'; import { APP_ID } from '../../../../../common'; import type { TimelineTabs } from '../../../../../common/types'; import { InspectButton } from '../../../../common/components/inspect'; import { InputsModelId } from '../../../../common/store/inputs/constants'; -import { AddToCaseButton } from '../add_to_case_button'; import { NewTimelineAction } from './new_timeline'; import { SaveTimelineButton } from './save_timeline_button'; import { OpenTimelineButton } from '../../modal/actions/open_timeline_button'; @@ -71,7 +71,7 @@ const TimelineActionMenuComponent = ({ - + ) : null} diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/add_to_case_button/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/attach_to_case_button.test.tsx similarity index 52% rename from x-pack/plugins/security_solution/public/timelines/components/flyout/add_to_case_button/index.test.tsx rename to x-pack/plugins/security_solution/public/timelines/components/modal/actions/attach_to_case_button.test.tsx index 063d6da3f2d07..22a9be583329d 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/add_to_case_button/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/attach_to_case_button.test.tsx @@ -6,14 +6,11 @@ */ import React from 'react'; -import { render, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; +import { render } from '@testing-library/react'; import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; - import { useKibana } from '../../../../common/lib/kibana'; -import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; import { mockTimelineModel, TestProviders } from '../../../../common/mock'; -import { AddToCaseButton } from '.'; +import { AttachToCaseButton } from './attach_to_case_button'; import { SecurityPageName } from '../../../../../common/constants'; jest.mock('../../../../common/components/link_to', () => { @@ -26,28 +23,54 @@ jest.mock('../../../../common/components/link_to', () => { }), }; }); -const mockDispatch = jest.fn(); jest.mock('react-redux', () => { const original = jest.requireActual('react-redux'); return { ...original, - useDispatch: () => mockDispatch, + useDispatch: () => jest.fn(), + useSelector: () => mockTimelineModel, }; }); - jest.mock('../../../../common/lib/kibana'); -jest.mock('../../../../common/hooks/use_selector'); const useKibanaMock = useKibana as jest.Mocked; -describe('AddToCaseButton', () => { +const renderAttachToCaseButton = () => + render( + + + + ); + +describe('AttachToCaseButton', () => { const navigateToApp = jest.fn(); beforeEach(() => { useKibanaMock().services.application.navigateToApp = navigateToApp; }); - it('navigates to the correct path without id', async () => { + it('should render the 2 options in the popover when clicking on the button', () => { + const { getByTestId } = renderAttachToCaseButton(); + + const button = getByTestId('timeline-modal-attach-to-case-dropdown-button'); + + expect(button).toBeInTheDocument(); + expect(button).toHaveTextContent('Attach to case'); + + button.click(); + + expect(getByTestId('timeline-modal-attach-timeline-to-new-case')).toBeInTheDocument(); + expect(getByTestId('timeline-modal-attach-timeline-to-new-case')).toHaveTextContent( + 'Attach to new case' + ); + + expect(getByTestId('timeline-modal-attach-timeline-to-existing-case')).toBeInTheDocument(); + expect(getByTestId('timeline-modal-attach-timeline-to-existing-case')).toHaveTextContent( + 'Attach to existing case' + ); + }); + + it('should navigate to the create case page when clicking on attach to new case', async () => { const here = jest.fn(); useKibanaMock().services.cases.ui.getAllCasesSelectorModal = here.mockImplementation( ({ onRowClick }) => { @@ -55,16 +78,14 @@ describe('AddToCaseButton', () => { return <>; } ); - (useDeepEqualSelector as jest.Mock).mockReturnValue(mockTimelineModel); - render( - - - - ); - userEvent.click(screen.getByTestId('attach-timeline-case-button')); + + const { getByTestId } = renderAttachToCaseButton(); + + getByTestId('timeline-modal-attach-to-case-dropdown-button').click(); + await waitForEuiPopoverOpen(); - userEvent.click(screen.getByTestId('attach-timeline-existing-case')); + getByTestId('timeline-modal-attach-timeline-to-existing-case').click(); expect(navigateToApp).toHaveBeenCalledWith('securitySolutionUI', { path: '/create', @@ -72,23 +93,21 @@ describe('AddToCaseButton', () => { }); }); - it('navigates to the correct path with id', async () => { + it('should open modal and navigate to the case page when clicking on attach to existing case', async () => { useKibanaMock().services.cases.ui.getAllCasesSelectorModal = jest .fn() .mockImplementation(({ onRowClick }) => { onRowClick({ id: 'case-id' }); return <>; }); - (useDeepEqualSelector as jest.Mock).mockReturnValue(mockTimelineModel); - render( - - - - ); - userEvent.click(screen.getByTestId('attach-timeline-case-button')); + + const { getByTestId } = renderAttachToCaseButton(); + + getByTestId('timeline-modal-attach-to-case-dropdown-button').click(); + await waitForEuiPopoverOpen(); - userEvent.click(screen.getByTestId('attach-timeline-existing-case')); + getByTestId('timeline-modal-attach-timeline-to-existing-case').click(); expect(navigateToApp).toHaveBeenCalledWith('securitySolutionUI', { path: '/case-id', diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/add_to_case_button/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/attach_to_case_button.tsx similarity index 62% rename from x-pack/plugins/security_solution/public/timelines/components/flyout/add_to_case_button/index.tsx rename to x-pack/plugins/security_solution/public/timelines/components/modal/actions/attach_to_case_button.tsx index 4eb701c5a8d98..fb9f6d9edcbc7 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/add_to_case_button/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/attach_to_case_button.tsx @@ -5,34 +5,33 @@ * 2.0. */ -import { pick } from 'lodash/fp'; import { EuiContextMenuPanel, EuiContextMenuItem, EuiPopover, EuiButtonEmpty } from '@elastic/eui'; import React, { useCallback, useMemo, useState } from 'react'; -import { useDispatch } from 'react-redux'; - +import { useDispatch, useSelector } from 'react-redux'; import type { CaseUI } from '@kbn/cases-plugin/common'; +import { UNTITLED_TIMELINE } from '../../timeline/properties/translations'; +import { selectTimelineById } from '../../../store/selectors'; +import type { State } from '../../../../common/store'; import { APP_ID, APP_UI_ID } from '../../../../../common/constants'; -import { timelineSelectors } from '../../../store'; import { setInsertTimeline, showTimeline } from '../../../store/actions'; -import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; import { useKibana } from '../../../../common/lib/kibana'; import { TimelineId } from '../../../../../common/types/timeline'; import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline'; import { getCreateCaseUrl, getCaseDetailsUrl } from '../../../../common/components/link_to'; import { SecurityPageName } from '../../../../app/types'; -import { timelineDefaults } from '../../../store/defaults'; -import * as i18n from '../../timeline/properties/translations'; +import * as i18n from './translations'; -interface Props { +interface AttachToCaseButtonProps { + /** + * Id of the timeline to be displayed in the bottom bar and within the modal + */ timelineId: string; } -const AddToCaseButtonComponent: React.FC = ({ timelineId }) => { - const getTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []); - const { - cases, - application: { navigateToApp }, - } = useKibana().services; +/** + * Button that opens a popover with options to attach the timeline to new or existing case + */ +export const AttachToCaseButton = React.memo(({ timelineId }) => { const dispatch = useDispatch(); const { graphEventId, @@ -40,18 +39,23 @@ const AddToCaseButtonComponent: React.FC = ({ timelineId }) => { status: timelineStatus, title: timelineTitle, timelineType, - } = useDeepEqualSelector((state) => - pick( - ['graphEventId', 'savedObjectId', 'status', 'title', 'timelineType'], - getTimeline(state, timelineId) ?? timelineDefaults - ) - ); + } = useSelector((state: State) => selectTimelineById(state, timelineId)); + + const { + cases, + application: { navigateToApp }, + } = useKibana().services; + const userCasesPermissions = cases.helpers.canUseCases([APP_ID]); + const [isPopoverOpen, setPopover] = useState(false); const [isCaseModalOpen, openCaseModal] = useState(false); + const togglePopover = useCallback(() => setPopover((currentIsOpen) => !currentIsOpen), []); + const closeCaseModal = useCallback(() => openCaseModal(false), [openCaseModal]); + const onRowClick = useCallback( async (theCase?: CaseUI) => { - openCaseModal(false); + closeCaseModal(); await navigateToApp(APP_UI_ID, { deepLinkId: SecurityPageName.case, path: theCase != null ? getCaseDetailsUrl({ id: theCase.id }) : getCreateCaseUrl(), @@ -65,19 +69,19 @@ const AddToCaseButtonComponent: React.FC = ({ timelineId }) => { }) ); }, - [dispatch, graphEventId, navigateToApp, savedObjectId, timelineId, timelineTitle] + [ + closeCaseModal, + dispatch, + graphEventId, + navigateToApp, + savedObjectId, + timelineId, + timelineTitle, + ] ); - const userCasesPermissions = cases.helpers.canUseCases([APP_ID]); - - const handleButtonClick = useCallback(() => { - setPopover((currentIsOpen) => !currentIsOpen); - }, []); - - const handlePopoverClose = useCallback(() => setPopover(false), []); - - const handleNewCaseClick = useCallback(() => { - handlePopoverClose(); + const attachToNewCase = useCallback(() => { + togglePopover(); navigateToApp(APP_UI_ID, { deepLinkId: SecurityPageName.case, @@ -88,7 +92,7 @@ const AddToCaseButtonComponent: React.FC = ({ timelineId }) => { graphEventId, timelineId, timelineSavedObjectId: savedObjectId, - timelineTitle: timelineTitle.length > 0 ? timelineTitle : i18n.UNTITLED_TIMELINE, + timelineTitle: timelineTitle.length > 0 ? timelineTitle : UNTITLED_TIMELINE, }) ); dispatch(showTimeline({ id: TimelineId.active, show: false })); @@ -97,84 +101,71 @@ const AddToCaseButtonComponent: React.FC = ({ timelineId }) => { dispatch, graphEventId, navigateToApp, - handlePopoverClose, savedObjectId, timelineId, timelineTitle, + togglePopover, ]); - const handleExistingCaseClick = useCallback(() => { - handlePopoverClose(); + const attachToExistingCase = useCallback(() => { + togglePopover(); openCaseModal(true); - }, [openCaseModal, handlePopoverClose]); - - const onCaseModalClose = useCallback(() => { - openCaseModal(false); - }, [openCaseModal]); - - const closePopover = useCallback(() => { - setPopover(false); - }, []); + }, [togglePopover, openCaseModal]); const button = useMemo( () => ( {i18n.ATTACH_TO_CASE} ), - [handleButtonClick, timelineStatus, timelineType] + [togglePopover, timelineStatus, timelineType] ); const items = useMemo( () => [ {i18n.ATTACH_TO_NEW_CASE} , {i18n.ATTACH_TO_EXISTING_CASE} , ], - [handleExistingCaseClick, handleNewCaseClick] + [attachToExistingCase, attachToNewCase] ); return ( <> {isCaseModalOpen && cases.ui.getAllCasesSelectorModal({ onRowClick, - onClose: onCaseModalClose, + onClose: closeCaseModal, owner: [APP_ID], permissions: userCasesPermissions, })} ); -}; - -AddToCaseButtonComponent.displayName = 'AddToCaseButtonComponent'; +}); -export const AddToCaseButton = React.memo(AddToCaseButtonComponent); +AttachToCaseButton.displayName = 'AttachToCaseButton'; diff --git a/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts index 364e7eeb8c9a9..a30c77bd3632b 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts @@ -20,3 +20,23 @@ export const OPEN_TIMELINE_BTN_LABEL = i18n.translate( defaultMessage: 'Open Existing Timeline', } ); + +export const ATTACH_TO_CASE = i18n.translate( + 'xpack.securitySolution.timeline.modal.attachToCaseButtonLabel', + { + defaultMessage: 'Attach to case', + } +); + +export const ATTACH_TO_NEW_CASE = i18n.translate( + 'xpack.securitySolution.timeline.modal.attachToNewCaseButtonLabel', + { + defaultMessage: 'Attach to new case', + } +); +export const ATTACH_TO_EXISTING_CASE = i18n.translate( + 'xpack.securitySolution.timeline.modal.attachToExistingCaseButtonLabel', + { + defaultMessage: 'Attach to existing case', + } +); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/properties/translations.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/properties/translations.ts index aa1bf0ad30857..c037ae5d94cfa 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/properties/translations.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/properties/translations.ts @@ -52,23 +52,3 @@ export const ADD_TIMELINE = i18n.translate( defaultMessage: 'Add new timeline or template', } ); - -export const ATTACH_TO_CASE = i18n.translate( - 'xpack.securitySolution.timeline.properties.attachToCaseButtonLabel', - { - defaultMessage: 'Attach to case', - } -); - -export const ATTACH_TO_NEW_CASE = i18n.translate( - 'xpack.securitySolution.timeline.properties.attachToNewCaseButtonLabel', - { - defaultMessage: 'Attach to new case', - } -); -export const ATTACH_TO_EXISTING_CASE = i18n.translate( - 'xpack.securitySolution.timeline.properties.attachToExistingCaseButtonLabel', - { - defaultMessage: 'Attach to existing case', - } -); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 13277d812a452..9633397e242da 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -36107,9 +36107,6 @@ "xpack.securitySolution.timeline.participantsTitle": "Participants", "xpack.securitySolution.timeline.promptDeleteNoteLabel": "Supprimer la note sur la chronologie ?", "xpack.securitySolution.timeline.properties.addTimelineButtonLabel": "Ajouter une nouvelle chronologie ou un nouveau modèle", - "xpack.securitySolution.timeline.properties.attachToCaseButtonLabel": "Attacher à un cas", - "xpack.securitySolution.timeline.properties.attachToExistingCaseButtonLabel": "Attacher à un cas existant", - "xpack.securitySolution.timeline.properties.attachToNewCaseButtonLabel": "Attacher au nouveau cas", "xpack.securitySolution.timeline.properties.descriptionPlaceholder": "Ajouter une description", "xpack.securitySolution.timeline.properties.lockDatePickerDescription": "Verrouiller le sélecteur de date global sur le sélecteur de date de chronologie", "xpack.securitySolution.timeline.properties.lockDatePickerTooltip": "Désactiver la synchronisation de la plage de date/heure entre la page actuellement consultée et votre chronologie", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 1742ae147ca25..4698cc060b7d9 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -36107,9 +36107,6 @@ "xpack.securitySolution.timeline.participantsTitle": "参加者", "xpack.securitySolution.timeline.promptDeleteNoteLabel": "タイムラインメモを削除しますか?", "xpack.securitySolution.timeline.properties.addTimelineButtonLabel": "新しいタイムラインまたはテンプレートの追加", - "xpack.securitySolution.timeline.properties.attachToCaseButtonLabel": "ケースに関連付ける", - "xpack.securitySolution.timeline.properties.attachToExistingCaseButtonLabel": "既存のケースに添付", - "xpack.securitySolution.timeline.properties.attachToNewCaseButtonLabel": "新しいケースに添付", "xpack.securitySolution.timeline.properties.descriptionPlaceholder": "説明を追加", "xpack.securitySolution.timeline.properties.lockDatePickerDescription": "グローバル日付ピッカーをタイムライン日付ピッカーにロック", "xpack.securitySolution.timeline.properties.lockDatePickerTooltip": "現在表示中のページとタイムラインの間の日付/時刻範囲の同期を無効にします", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index f88e19663d057..9a99a93093d67 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -36089,9 +36089,6 @@ "xpack.securitySolution.timeline.participantsTitle": "参与者", "xpack.securitySolution.timeline.promptDeleteNoteLabel": "删除时间线备注?", "xpack.securitySolution.timeline.properties.addTimelineButtonLabel": "添加新时间线或模板", - "xpack.securitySolution.timeline.properties.attachToCaseButtonLabel": "附加到案例", - "xpack.securitySolution.timeline.properties.attachToExistingCaseButtonLabel": "附加到现有案例", - "xpack.securitySolution.timeline.properties.attachToNewCaseButtonLabel": "附加到新案例", "xpack.securitySolution.timeline.properties.descriptionPlaceholder": "添加描述", "xpack.securitySolution.timeline.properties.lockDatePickerDescription": "将全局日期选取器锁定到时间线日期选取器", "xpack.securitySolution.timeline.properties.lockDatePickerTooltip": "禁用当前查看的页面与您的时间线之间的日期/时间范围同步", diff --git a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts index fb2859842842b..8e37caf463325 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts @@ -13,12 +13,14 @@ export const ADD_NOTE_BUTTON = '[data-test-subj="add-note"]'; export const ADD_FILTER = '[data-test-subj="timeline-search-or-filter"] [data-test-subj="addFilter"]'; -export const ATTACH_TIMELINE_TO_CASE_BUTTON = '[data-test-subj="attach-timeline-case-button"]'; +export const ATTACH_TIMELINE_TO_CASE_BUTTON = + '[data-test-subj="timeline-modal-attach-to-case-dropdown-button"]'; -export const ATTACH_TIMELINE_TO_NEW_CASE_ICON = '[data-test-subj="attach-timeline-new-case"]'; +export const ATTACH_TIMELINE_TO_NEW_CASE_ICON = + '[data-test-subj="timeline-modal-attach-timeline-to-new-case"]'; export const ATTACH_TIMELINE_TO_EXISTING_CASE_ICON = - '[data-test-subj="attach-timeline-existing-case"]'; + '[data-test-subj="timeline-modal-attach-timeline-to-existing-case"]'; export const SELECT_CASE = (id: string) => { return `[data-test-subj="cases-table-row-select-${id}"]`; From 9357bd4714ef0af35d75534b5d19d33684e0aaaf Mon Sep 17 00:00:00 2001 From: Xavier Mouligneau Date: Wed, 24 Jan 2024 18:01:53 -0500 Subject: [PATCH 018/113] [RAM] Stack Management::Rules loses user selections when navigating back (#174954) ## Summary FIX => https://github.com/elastic/kibana/issues/173967 ![image](https://github.com/elastic/kibana/assets/189600/dd6a2b83-7460-4d90-8ee4-39c40534c247) ### Checklist - [ ] [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 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../use_rules_list_filter_store.test.tsx | 267 ++++++++++++++++++ .../hooks/use_rules_list_filter_store.tsx | 188 ++++++++++++ .../rules_list/components/rules_list.test.tsx | 13 + .../rules_list/components/rules_list.tsx | 36 ++- .../rules_list_bulk_disable.test.tsx | 11 + .../components/rules_list_bulk_edit.test.tsx | 11 + .../rules_list_bulk_enable.test.tsx | 11 + .../components/rules_list_table.tsx | 79 ++++-- .../sections/rules_list/translations.ts | 7 + .../rules_list/rules_list.ts | 8 + .../observability/rules/rules_list.ts | 42 ++- 11 files changed, 618 insertions(+), 55 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/hooks/use_rules_list_filter_store.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/hooks/use_rules_list_filter_store.tsx diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/hooks/use_rules_list_filter_store.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/hooks/use_rules_list_filter_store.test.tsx new file mode 100644 index 0000000000000..89b5e56aa33dd --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/hooks/use_rules_list_filter_store.test.tsx @@ -0,0 +1,267 @@ +/* + * 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 { act, renderHook } from '@testing-library/react-hooks'; +import * as useLocalStorage from 'react-use/lib/useLocalStorage'; +import { useRulesListFilterStore } from './use_rules_list_filter_store'; + +jest.mock('@kbn/kibana-utils-plugin/public'); +const { createKbnUrlStateStorage } = jest.requireMock('@kbn/kibana-utils-plugin/public'); + +const useUrlStateStorageGetMock = jest.fn(); +const useUrlStateStorageSetMock = jest.fn(); +const setRulesListFilterLocalMock = jest.fn(); +const LOCAL_STORAGE_KEY = 'test_local'; +describe('useRulesListFilterStore', () => { + beforeAll(() => { + createKbnUrlStateStorage.mockReturnValue({ + get: useUrlStateStorageGetMock, + set: useUrlStateStorageSetMock, + }); + }); + + beforeEach(() => { + jest + .spyOn(useLocalStorage, 'default') + .mockImplementation(() => [null, setRulesListFilterLocalMock, () => {}]); + useUrlStateStorageGetMock.mockReturnValue(null); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('Should return empty filter when url query param and local storage and props are empty', async () => { + const { result } = renderHook(() => + useRulesListFilterStore({ + rulesListKey: LOCAL_STORAGE_KEY, + }) + ); + expect(result.current.filters).toEqual({ + actionTypes: [], + kueryNode: undefined, + ruleExecutionStatuses: [], + ruleLastRunOutcomes: [], + ruleParams: {}, + ruleStatuses: [], + searchText: '', + tags: [], + types: [], + }); + expect(result.current.numberOfFiltersStore).toEqual(0); + }); + + it('Should return the props as filter when url query param and local storage are empty', () => { + const { result } = renderHook(() => + useRulesListFilterStore({ + lastResponseFilter: ['props-lastResponse-filter'], + lastRunOutcomeFilter: ['props-lastRunOutcome-filter'], + rulesListKey: LOCAL_STORAGE_KEY, + ruleParamFilter: { propsRuleParams: 'props-ruleParams-filter' }, + statusFilter: ['enabled'], + searchFilter: 'props-search-filter', + typeFilter: ['props-ruleType-filter'], + }) + ); + expect(result.current.filters).toEqual({ + actionTypes: [], + kueryNode: undefined, + ruleExecutionStatuses: ['props-lastResponse-filter'], + ruleLastRunOutcomes: ['props-lastRunOutcome-filter'], + ruleParams: { + propsRuleParams: 'props-ruleParams-filter', + }, + ruleStatuses: ['enabled'], + searchText: 'props-search-filter', + tags: [], + types: ['props-ruleType-filter'], + }); + expect(result.current.numberOfFiltersStore).toEqual(6); + }); + + it('Should return the local storage params as filter when url query param is empty', () => { + jest.spyOn(useLocalStorage, 'default').mockImplementation(() => [ + { + actionTypes: ['localStorage-actionType-filter'], + lastResponse: ['localStorage-lastResponse-filter'], + params: { localStorageRuleParams: 'localStorage-ruleParams-filter' }, + search: 'localStorage-search-filter', + status: ['disabled'], + tags: ['localStorage-tag-filter'], + type: ['localStorage-ruleType-filter'], + }, + () => null, + () => {}, + ]); + const { result } = renderHook(() => + useRulesListFilterStore({ + lastResponseFilter: ['props-lastResponse-filter'], + lastRunOutcomeFilter: ['props-lastRunOutcome-filter'], + rulesListKey: LOCAL_STORAGE_KEY, + ruleParamFilter: { propsRuleParams: 'props-ruleParams-filter' }, + statusFilter: ['enabled'], + searchFilter: 'props-search-filter', + typeFilter: ['ruleType-filter'], + }) + ); + expect(result.current.filters).toEqual({ + actionTypes: ['localStorage-actionType-filter'], + kueryNode: undefined, + // THIS is valid because we are not using this param in local storage + ruleExecutionStatuses: ['props-lastResponse-filter'], + ruleLastRunOutcomes: ['localStorage-lastResponse-filter'], + ruleParams: { + localStorageRuleParams: 'localStorage-ruleParams-filter', + }, + ruleStatuses: ['disabled'], + searchText: 'localStorage-search-filter', + tags: ['localStorage-tag-filter'], + types: ['localStorage-ruleType-filter'], + }); + expect(result.current.numberOfFiltersStore).toEqual(8); + }); + + it('Should return the url params as filter when url query param is empty', () => { + jest.spyOn(useLocalStorage, 'default').mockImplementation(() => [ + { + actionTypes: ['localStorage-actionType-filter'], + lastResponse: ['localStorage-lastResponse-filter'], + params: { localStorageRuleParams: 'localStorage-ruleParams-filter' }, + search: 'localStorage-search-filter', + status: ['disabled'], + tags: ['localStorage-tag-filter'], + type: ['localStorage-ruleType-filter'], + }, + () => null, + () => {}, + ]); + useUrlStateStorageGetMock.mockReturnValue({ + actionTypes: ['urlQueryParams-actionType-filter'], + lastResponse: ['urlQueryParams-lastResponse-filter'], + params: { urlQueryParamsRuleParams: 'urlQueryParams-ruleParams-filter' }, + search: 'urlQueryParams-search-filter', + status: ['snoozed'], + tags: ['urlQueryParams-tag-filter'], + type: ['urlQueryParams-ruleType-filter'], + }); + const { result } = renderHook(() => + useRulesListFilterStore({ + lastResponseFilter: ['props-lastResponse-filter'], + lastRunOutcomeFilter: ['props-lastRunOutcome-filter'], + rulesListKey: LOCAL_STORAGE_KEY, + ruleParamFilter: { propsRuleParams: 'props-ruleParams-filter' }, + statusFilter: ['enabled'], + searchFilter: 'props-search-filter', + typeFilter: ['ruleType-filter'], + }) + ); + expect(result.current.filters).toEqual({ + actionTypes: ['urlQueryParams-actionType-filter'], + kueryNode: undefined, + // THIS is valid because we are not using this param in url query params + ruleExecutionStatuses: ['props-lastResponse-filter'], + ruleLastRunOutcomes: ['urlQueryParams-lastResponse-filter'], + ruleParams: { + urlQueryParamsRuleParams: 'urlQueryParams-ruleParams-filter', + }, + ruleStatuses: ['snoozed'], + searchText: 'urlQueryParams-search-filter', + tags: ['urlQueryParams-tag-filter'], + types: ['urlQueryParams-ruleType-filter'], + }); + expect(result.current.numberOfFiltersStore).toEqual(8); + }); + + it('Should clear filter when resetFiltersStore has been called', async () => { + useUrlStateStorageGetMock.mockReturnValue({ + actionTypes: ['urlQueryParams-actionType-filter'], + lastResponse: ['urlQueryParams-lastResponse-filter'], + params: { urlQueryParamsRuleParams: 'urlQueryParams-ruleParams-filter' }, + search: 'urlQueryParams-search-filter', + status: ['snoozed'], + tags: ['urlQueryParams-tag-filter'], + type: ['urlQueryParams-ruleType-filter'], + }); + const { result } = renderHook(() => + useRulesListFilterStore({ + rulesListKey: LOCAL_STORAGE_KEY, + }) + ); + expect(result.current.filters).toEqual({ + actionTypes: ['urlQueryParams-actionType-filter'], + kueryNode: undefined, + ruleExecutionStatuses: [], + ruleLastRunOutcomes: ['urlQueryParams-lastResponse-filter'], + ruleParams: { + urlQueryParamsRuleParams: 'urlQueryParams-ruleParams-filter', + }, + ruleStatuses: ['snoozed'], + searchText: 'urlQueryParams-search-filter', + tags: ['urlQueryParams-tag-filter'], + types: ['urlQueryParams-ruleType-filter'], + }); + expect(result.current.numberOfFiltersStore).toEqual(7); + + act(() => { + result.current.resetFiltersStore(); + }); + + expect(result.current.filters).toEqual({ + actionTypes: [], + kueryNode: undefined, + ruleExecutionStatuses: [], + ruleLastRunOutcomes: [], + ruleParams: {}, + ruleStatuses: [], + searchText: '', + tags: [], + types: [], + }); + expect(result.current.numberOfFiltersStore).toEqual(0); + expect(useUrlStateStorageSetMock).toBeCalledTimes(1); + expect(setRulesListFilterLocalMock).toBeCalledTimes(1); + }); + + it('Should set filter when setFiltersStore has been called', async () => { + const { result } = renderHook(() => + useRulesListFilterStore({ + rulesListKey: LOCAL_STORAGE_KEY, + }) + ); + expect(result.current.filters).toEqual({ + actionTypes: [], + kueryNode: undefined, + ruleExecutionStatuses: [], + ruleLastRunOutcomes: [], + ruleParams: {}, + ruleStatuses: [], + searchText: '', + tags: [], + types: [], + }); + expect(result.current.numberOfFiltersStore).toEqual(0); + + act(() => { + result.current.setFiltersStore({ filter: 'tags', value: ['my-tags'] }); + }); + + expect(result.current.filters).toEqual({ + actionTypes: [], + kueryNode: undefined, + ruleExecutionStatuses: [], + ruleLastRunOutcomes: [], + ruleParams: {}, + ruleStatuses: [], + searchText: '', + tags: ['my-tags'], + types: [], + }); + expect(result.current.numberOfFiltersStore).toEqual(1); + expect(useUrlStateStorageSetMock).toBeCalledTimes(1); + expect(setRulesListFilterLocalMock).toBeCalledTimes(1); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/hooks/use_rules_list_filter_store.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/hooks/use_rules_list_filter_store.tsx new file mode 100644 index 0000000000000..02798de45c644 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/hooks/use_rules_list_filter_store.tsx @@ -0,0 +1,188 @@ +/* + * 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 { useHistory } from 'react-router-dom'; +import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import useLocalStorage from 'react-use/lib/useLocalStorage'; +import { isEmpty } from 'lodash'; +import { RuleStatus } from '../../../../../common'; +import { RulesListFilters, RulesListProps, UpdateFiltersProps } from '../../../../../types'; + +type FilterStoreProps = Pick< + RulesListProps, + | 'lastResponseFilter' + | 'lastRunOutcomeFilter' + | 'rulesListKey' + | 'ruleParamFilter' + | 'statusFilter' + | 'searchFilter' + | 'typeFilter' +>; +const RULES_LIST_FILTERS_KEY = 'triggersActionsUi_rulesList'; + +interface FilterParameters { + actionTypes?: string[]; + lastResponse?: string[]; + params?: Record; + search?: string; + status?: RuleStatus[]; + tags?: string[]; + type?: string[]; +} + +export const convertRulesListFiltersToFilterAttributes = ( + rulesListFilter: RulesListFilters +): FilterParameters => { + return { + actionTypes: rulesListFilter.actionTypes, + lastResponse: rulesListFilter.ruleLastRunOutcomes, + params: rulesListFilter.ruleParams, + search: rulesListFilter.searchText, + status: rulesListFilter.ruleStatuses, + tags: rulesListFilter.tags, + type: rulesListFilter.types, + }; +}; + +export const useRulesListFilterStore = ({ + lastResponseFilter, + lastRunOutcomeFilter, + rulesListKey = RULES_LIST_FILTERS_KEY, + ruleParamFilter, + statusFilter, + searchFilter, + typeFilter, +}: FilterStoreProps): { + filters: RulesListFilters; + setFiltersStore: (params: UpdateFiltersProps) => void; + numberOfFiltersStore: number; + resetFiltersStore: () => void; +} => { + const history = useHistory(); + const urlStateStorage = createKbnUrlStateStorage({ + history, + useHash: false, + useHashQuery: false, + }); + + const [rulesListFilterLocal, setRulesListFilterLocal] = useLocalStorage( + `${RULES_LIST_FILTERS_KEY}_filters`, + {} + ); + const hasFilterFromLocalStorage = useMemo( + () => + rulesListFilterLocal + ? !Object.values(rulesListFilterLocal).every((filters) => isEmpty(filters)) + : false, + [rulesListFilterLocal] + ); + + const rulesListFilterUrl = useMemo( + () => urlStateStorage.get('_a') ?? {}, + [urlStateStorage] + ); + + const hasFilterFromUrl = useMemo( + () => + rulesListFilterUrl + ? !Object.values(rulesListFilterUrl).every((filters) => isEmpty(filters)) + : false, + [rulesListFilterUrl] + ); + + const filtersStore = useMemo( + () => + hasFilterFromUrl ? rulesListFilterUrl : hasFilterFromLocalStorage ? rulesListFilterLocal : {}, + [hasFilterFromLocalStorage, hasFilterFromUrl, rulesListFilterLocal, rulesListFilterUrl] + ); + const [filters, setFilters] = useState({ + actionTypes: filtersStore?.actionTypes ?? [], + ruleExecutionStatuses: lastResponseFilter ?? [], + ruleLastRunOutcomes: filtersStore?.lastResponse ?? lastRunOutcomeFilter ?? [], + ruleParams: filtersStore?.params ?? ruleParamFilter ?? {}, + ruleStatuses: filtersStore?.status ?? statusFilter ?? [], + searchText: filtersStore?.search ?? searchFilter ?? '', + tags: filtersStore?.tags ?? [], + types: filtersStore?.type ?? typeFilter ?? [], + kueryNode: undefined, + }); + + const updateUrlFilters = useCallback( + (updatedParams: RulesListFilters) => { + urlStateStorage.set('_a', convertRulesListFiltersToFilterAttributes(updatedParams)); + }, + [urlStateStorage] + ); + + const updateLocalFilters = useCallback( + (updatedParams: RulesListFilters) => { + setRulesListFilterLocal(convertRulesListFiltersToFilterAttributes(updatedParams)); + }, + [setRulesListFilterLocal] + ); + + const setFiltersStore = useCallback( + (updateFiltersProps: UpdateFiltersProps) => { + const { filter, value } = updateFiltersProps; + setFilters((prev) => { + const newFilters = { + ...prev, + [filter]: value, + }; + updateUrlFilters(newFilters); + updateLocalFilters(newFilters); + return newFilters; + }); + }, + [updateLocalFilters, updateUrlFilters] + ); + + const resetFiltersStore = useCallback(() => { + const resetFilter = { + actionTypes: [], + ruleExecutionStatuses: [], + ruleLastRunOutcomes: [], + ruleParams: {}, + ruleStatuses: [], + searchText: '', + tags: [], + types: [], + kueryNode: undefined, + }; + setFilters(resetFilter); + updateUrlFilters(resetFilter); + updateLocalFilters(resetFilter); + }, [updateLocalFilters, updateUrlFilters]); + + useEffect(() => { + if (hasFilterFromUrl || hasFilterFromLocalStorage) { + setFilters({ + actionTypes: filtersStore?.actionTypes ?? [], + ruleExecutionStatuses: lastResponseFilter ?? [], + ruleLastRunOutcomes: filtersStore?.lastResponse ?? lastRunOutcomeFilter ?? [], + ruleParams: filtersStore?.params ?? ruleParamFilter ?? {}, + ruleStatuses: filtersStore?.status ?? statusFilter ?? [], + searchText: filtersStore?.search ?? searchFilter ?? '', + tags: filtersStore?.tags ?? [], + types: filtersStore?.type ?? typeFilter ?? [], + kueryNode: undefined, + }); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return useMemo( + () => ({ + filters, + setFiltersStore, + numberOfFiltersStore: Object.values(filters).filter((filter) => !isEmpty(filter)).length, + resetFiltersStore, + }), + [filters, resetFiltersStore, setFiltersStore] + ); +}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx index a8dee15e26104..cd5e66c703533 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx @@ -123,6 +123,19 @@ jest.mock('../../../../common/get_experimental_features', () => ({ getIsExperimentalFeatureEnabled: jest.fn(), })); +jest.mock('@kbn/kibana-utils-plugin/public', () => { + const originalModule = jest.requireActual('@kbn/kibana-utils-plugin/public'); + return { + ...originalModule, + createKbnUrlStateStorage: jest.fn(() => ({ + get: jest.fn(() => null), + set: jest.fn(() => null), + })), + }; +}); + +jest.mock('react-use/lib/useLocalStorage', () => jest.fn(() => [null, () => null])); + const ruleTags = ['a', 'b', 'c', 'd']; const { loadRuleTypes } = jest.requireMock('../../../lib/rule_api/rule_types'); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx index 61d9fb7133f65..67d475ae2689e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.tsx @@ -54,7 +54,6 @@ import { Pagination, Percentiles, SnoozeSchedule, - RulesListFilters, UpdateFiltersProps, BulkEditActions, UpdateRulesToBulkEditProps, @@ -107,6 +106,7 @@ import { import { useBulkOperationToast } from '../../../hooks/use_bulk_operation_toast'; import { RulesSettingsLink } from '../../../components/rules_setting/rules_settings_link'; import { useRulesListUiState as useUiState } from '../../../hooks/use_rules_list_ui_state'; +import { useRulesListFilterStore } from './hooks/use_rules_list_filter_store'; // Directly lazy import the flyouts because the suspendedComponentWithProps component // cause a visual hitch due to the loading spinner @@ -190,23 +190,12 @@ export const RulesList = ({ notifications: { toasts }, ruleTypeRegistry, } = kibanaServices; + const canExecuteActions = hasExecuteActionsCapability(capabilities); const [isPerformingAction, setIsPerformingAction] = useState(false); const [page, setPage] = useState({ index: 0, size: DEFAULT_SEARCH_PAGE_SIZE }); const [inputText, setInputText] = useState(searchFilter); - const [filters, setFilters] = useState({ - actionTypes: [], - ruleExecutionStatuses: lastResponseFilter || [], - ruleLastRunOutcomes: lastRunOutcomeFilter || [], - ruleParams: ruleParamFilter || {}, - ruleStatuses: statusFilter || [], - searchText: searchFilter || '', - tags: [], - types: typeFilter || [], - kueryNode: undefined, - }); - const [ruleFlyoutVisible, setRuleFlyoutVisibility] = useState(false); const [editFlyoutVisible, setEditFlyoutVisibility] = useState(false); const [currentRuleToEdit, setCurrentRuleToEdit] = useState(null); @@ -259,6 +248,17 @@ export const RulesList = ({ // Fetch action types const { actionTypes } = useLoadActionTypesQuery(); + const { filters, setFiltersStore, numberOfFiltersStore, resetFiltersStore } = + useRulesListFilterStore({ + lastResponseFilter, + lastRunOutcomeFilter, + rulesListKey, + ruleParamFilter, + statusFilter, + searchFilter, + typeFilter, + }); + const rulesTypesFilter = isEmpty(filters.types) ? authorizedRuleTypes.map((art) => art.id) : filters.types; @@ -406,14 +406,10 @@ export const RulesList = ({ const updateFilters = useCallback( (updateFiltersProps: UpdateFiltersProps) => { - const { filter, value } = updateFiltersProps; - setFilters((prev) => ({ - ...prev, - [filter]: value, - })); + setFiltersStore(updateFiltersProps); handleUpdateFiltersEffect(updateFiltersProps); }, - [setFilters, handleUpdateFiltersEffect] + [setFiltersStore, handleUpdateFiltersEffect] ); const handleClearRuleParamFilter = () => updateFilters({ filter: 'ruleParams', value: {} }); @@ -982,6 +978,8 @@ export const RulesList = ({ rulesListKey={rulesListKey} config={config} visibleColumns={visibleColumns} + numberOfFilters={numberOfFiltersStore} + resetFilters={resetFiltersStore} /> {manageLicenseModalOpts && ( ({ loadRuleAggregationsWithKueryFilter: jest.fn(), })); jest.mock('@kbn/alerts-ui-shared', () => ({ MaintenanceWindowCallout: jest.fn(() => <>) })); +jest.mock('@kbn/kibana-utils-plugin/public', () => { + const originalModule = jest.requireActual('@kbn/kibana-utils-plugin/public'); + return { + ...originalModule, + createKbnUrlStateStorage: jest.fn(() => ({ + get: jest.fn(() => null), + set: jest.fn(() => null), + })), + }; +}); +jest.mock('react-use/lib/useLocalStorage', () => jest.fn(() => [null, () => null])); const { loadRuleAggregationsWithKueryFilter } = jest.requireMock( '../../../lib/rule_api/aggregate_kuery_filter' diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_edit.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_edit.test.tsx index 80f74e02acc69..44d6e11d7ab95 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_edit.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_edit.test.tsx @@ -91,6 +91,17 @@ jest.mock('../../../lib/rule_api/aggregate_kuery_filter', () => ({ loadRuleAggregationsWithKueryFilter: jest.fn(), })); jest.mock('@kbn/alerts-ui-shared', () => ({ MaintenanceWindowCallout: jest.fn(() => <>) })); +jest.mock('@kbn/kibana-utils-plugin/public', () => { + const originalModule = jest.requireActual('@kbn/kibana-utils-plugin/public'); + return { + ...originalModule, + createKbnUrlStateStorage: jest.fn(() => ({ + get: jest.fn(() => null), + set: jest.fn(() => null), + })), + }; +}); +jest.mock('react-use/lib/useLocalStorage', () => jest.fn(() => [null, () => null])); const { loadRuleAggregationsWithKueryFilter } = jest.requireMock( '../../../lib/rule_api/aggregate_kuery_filter' diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_enable.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_enable.test.tsx index 51227392ea216..e8e1bd8b99899 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_enable.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_bulk_enable.test.tsx @@ -92,6 +92,17 @@ jest.mock('../../../lib/rule_api/aggregate_kuery_filter', () => ({ loadRuleAggregationsWithKueryFilter: jest.fn(), })); jest.mock('@kbn/alerts-ui-shared', () => ({ MaintenanceWindowCallout: jest.fn(() => <>) })); +jest.mock('@kbn/kibana-utils-plugin/public', () => { + const originalModule = jest.requireActual('@kbn/kibana-utils-plugin/public'); + return { + ...originalModule, + createKbnUrlStateStorage: jest.fn(() => ({ + get: jest.fn(() => null), + set: jest.fn(() => null), + })), + }; +}); +jest.mock('react-use/lib/useLocalStorage', () => jest.fn(() => [null, () => null])); const { loadRuleAggregationsWithKueryFilter } = jest.requireMock( '../../../lib/rule_api/aggregate_kuery_filter' diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx index 0f7420a926d6f..9933a52e3ac1f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx @@ -39,6 +39,7 @@ import { CLEAR_SELECTION, TOTAL_RULES, SELECT_ALL_ARIA_LABEL, + CLEAR_FILTERS, } from '../translations'; import { Rule, @@ -140,6 +141,8 @@ export interface RulesListTableProps { ) => React.ReactNode; renderRuleError?: (rule: RuleTableItem) => React.ReactNode; visibleColumns?: string[]; + numberOfFilters: number; + resetFilters: () => void; } interface ConvertRulesToTableItemsOpts { @@ -205,6 +208,8 @@ export const RulesListTable = (props: RulesListTableProps) => { renderSelectAllDropdown, renderRuleError = EMPTY_RENDER, visibleColumns, + resetFilters, + numberOfFilters, } = props; const [tagPopoverOpenIndex, setTagPopoverOpenIndex] = useState(-1); @@ -844,34 +849,56 @@ export const RulesListTable = (props: RulesListTableProps) => { return ( - - {ColumnSelector} + - {numberOfSelectedRules > 0 ? ( - renderSelectAllDropdown?.() - ) : ( - - {TOTAL_RULES(formattedTotalRules, rulesState.totalItemCount)} - - )} - - - {numberOfSelectedRules > 0 && authorizedToModifyAllRules && ( - - {selectAllButtonText} - - )} + + + {numberOfSelectedRules > 0 ? ( + renderSelectAllDropdown?.() + ) : ( + + {TOTAL_RULES(formattedTotalRules, rulesState.totalItemCount)} + + )} + + + {numberOfSelectedRules > 0 && authorizedToModifyAllRules && ( + + {selectAllButtonText} + + )} + + {numberOfFilters > 0 && ( + + + {CLEAR_FILTERS(numberOfFilters)} + + + )} + + {ColumnSelector} { + return i18n.translate('xpack.triggersActionsUI.sections.rulesList.clearFilterLink', { + values: { numberOfFilters }, + defaultMessage: 'Clear {numberOfFilters, plural, =1 {filter} other {filters}}', + }); +}; + export const getConfirmDeletionModalText = ( numIdsToDelete: number, singleTitle: string, diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/rules_list/rules_list.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/rules_list/rules_list.ts index 41303ca4b028d..1a169c3bd69bf 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/rules_list/rules_list.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/rules_list/rules_list.ts @@ -27,6 +27,14 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const objectRemover = new ObjectRemover(supertest); async function refreshAlertsList() { + const existsClearFilter = await testSubjects.exists('rules-list-clear-filter'); + const existsRefreshButton = await testSubjects.exists('refreshRulesButton'); + if (existsClearFilter) { + await testSubjects.click('rules-list-clear-filter'); + } else if (existsRefreshButton) { + await testSubjects.click('refreshRulesButton'); + await find.waitForDeletedByCssSelector('.euiBasicTable-loading'); + } await testSubjects.click('logsTab'); await testSubjects.click('rulesTab'); } diff --git a/x-pack/test_serverless/functional/test_suites/observability/rules/rules_list.ts b/x-pack/test_serverless/functional/test_suites/observability/rules/rules_list.ts index 917e953cb2aec..d664d36e99f1e 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/rules/rules_list.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/rules/rules_list.ts @@ -30,6 +30,11 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const toasts = getService('toasts'); async function refreshRulesList() { + const existsClearFilter = await testSubjects.exists('rules-list-clear-filter'); + if (existsClearFilter) { + await testSubjects.click('rules-list-clear-filter'); + await find.waitForDeletedByCssSelector('.euiBasicTable-loading'); + } await svlCommonNavigation.sidenav.clickLink({ text: 'Alerts' }); await testSubjects.click('manageRulesPageButton'); } @@ -525,6 +530,10 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { expect(filterErrorOnlyResults[0].status).toEqual('Failed'); expect(filterErrorOnlyResults[0].duration).toMatch(/\d{2,}:\d{2}/); }); + + // Clear it again because it is still selected + await refreshRulesList(); + await assertRulesLength(2); }); it.skip('should display total rules by status and error banner only when exists rules with status error', async () => { @@ -673,6 +682,11 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { expect(filterInventoryRuleOnlyResults[0].interval).toEqual('1 min'); expect(filterInventoryRuleOnlyResults[0].duration).toMatch(/\d{2,}:\d{2}/); }); + + // Clear it again because it is still selected + await testSubjects.click('rules-list-clear-filter'); + await find.waitForDeletedByCssSelector('.euiBasicTable-loading'); + await assertRulesLength(2); }); it('should filter rules by the rule status', async () => { @@ -746,6 +760,11 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await testSubjects.click('ruleStatusFilterOption-enabled'); await find.waitForDeletedByCssSelector('.euiBasicTable-loading'); await assertRulesLength(4); + + // Clear it again because it is still selected + await testSubjects.click('rules-list-clear-filter'); + await find.waitForDeletedByCssSelector('.euiBasicTable-loading'); + await assertRulesLength(4); }); it('should filter rules by the tag', async () => { @@ -804,6 +823,11 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await testSubjects.click('ruleTagFilterOption-c'); await find.waitForDeletedByCssSelector('.euiBasicTable-loading'); await assertRulesLength(2); + + // Clear it again because it is still selected + await testSubjects.click('rules-list-clear-filter'); + await find.waitForDeletedByCssSelector('.euiBasicTable-loading'); + await assertRulesLength(5); }); it('should not prevent rules with action execution capabilities from being edited', async () => { @@ -835,12 +859,11 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { ruleIdList = [rule1.id]; await refreshRulesList(); + await assertRulesLength(1); - await retry.try(async () => { - const actionButton = await testSubjects.find('selectActionButton'); - const disabled = await actionButton.getAttribute('disabled'); - expect(disabled).toEqual(null); - }); + const actionButton = await testSubjects.find('selectActionButton'); + const disabled = await actionButton.getAttribute('disabled'); + expect(disabled).toEqual(null); }); it('should allow rules to be snoozed using the right side dropdown', async () => { @@ -851,7 +874,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { ruleIdList = [rule1.id]; await refreshRulesList(); - await svlTriggersActionsUI.searchRules(rule1.name); + await assertRulesLength(1); await testSubjects.click('collapsedItemActions'); await testSubjects.click('snoozeButton'); @@ -871,7 +894,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { ruleIdList = [rule1.id]; await refreshRulesList(); - await svlTriggersActionsUI.searchRules(rule1.name); + await assertRulesLength(1); + await testSubjects.click('collapsedItemActions'); await testSubjects.click('snoozeButton'); await testSubjects.click('ruleSnoozeIndefiniteApply'); @@ -895,8 +919,8 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); await refreshRulesList(); + await assertRulesLength(1); - await svlTriggersActionsUI.searchRules(rule1.name); await testSubjects.click('collapsedItemActions'); await testSubjects.click('snoozeButton'); await testSubjects.click('ruleSnoozeCancel'); @@ -910,8 +934,6 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { expect(toastText).toEqual('Rules notification successfully unsnoozed'); }); - await svlTriggersActionsUI.searchRules(rule1.name); - await testSubjects.missingOrFail('rulesListNotifyBadge-snoozed'); await testSubjects.missingOrFail('rulesListNotifyBadge-snoozedIndefinitely'); }); From 76433e4a23c84849b747b46e636802251e0d0aa5 Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Wed, 24 Jan 2024 18:26:19 -0600 Subject: [PATCH 019/113] [Security Solution][Timeline] refactor timeline modal save timeline button (#175343) --- .../components/flyout/action_menu/index.tsx | 2 +- .../action_menu/save_timeline_button.test.tsx | 146 ---------- .../action_menu/save_timeline_button.tsx | 87 ------ .../action_menu/save_timeline_modal.test.tsx | 274 ------------------ .../flyout/action_menu/translations.ts | 96 ------ .../actions/save_timeline_button.test.tsx | 107 +++++++ .../modal/actions/save_timeline_button.tsx | 80 +++++ .../actions/save_timeline_modal.test.tsx | 208 +++++++++++++ .../actions}/save_timeline_modal.tsx | 70 +++-- .../action_menu => modal/actions}/schema.ts | 0 .../components/modal/actions/translations.ts | 96 ++++++ .../cypress/screens/timeline.ts | 16 +- .../cypress/tasks/timeline.ts | 20 +- 13 files changed, 550 insertions(+), 652 deletions(-) delete mode 100644 x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_button.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_button.tsx delete mode 100644 x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_modal.test.tsx create mode 100644 x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_button.test.tsx create mode 100644 x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_button.tsx create mode 100644 x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_modal.test.tsx rename x-pack/plugins/security_solution/public/timelines/components/{flyout/action_menu => modal/actions}/save_timeline_modal.tsx (86%) rename x-pack/plugins/security_solution/public/timelines/components/{flyout/action_menu => modal/actions}/schema.ts (100%) diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx index 9c30205d10702..00b0ad5a95b0f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/index.tsx @@ -15,7 +15,7 @@ import type { TimelineTabs } from '../../../../../common/types'; import { InspectButton } from '../../../../common/components/inspect'; import { InputsModelId } from '../../../../common/store/inputs/constants'; import { NewTimelineAction } from './new_timeline'; -import { SaveTimelineButton } from './save_timeline_button'; +import { SaveTimelineButton } from '../../modal/actions/save_timeline_button'; import { OpenTimelineButton } from '../../modal/actions/open_timeline_button'; import { TIMELINE_TOUR_CONFIG_ANCHORS } from '../../timeline/tour/step_config'; diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_button.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_button.test.tsx deleted file mode 100644 index 92bc0be3f54e1..0000000000000 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_button.test.tsx +++ /dev/null @@ -1,146 +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 React from 'react'; -import { render, fireEvent, waitFor, screen } from '@testing-library/react'; -import type { SaveTimelineButtonProps } from './save_timeline_button'; -import { SaveTimelineButton } from './save_timeline_button'; -import { TestProviders } from '../../../../common/mock'; -import { useUserPrivileges } from '../../../../common/components/user_privileges'; -import { getTimelineStatusByIdSelector } from '../header/selectors'; -import { TimelineStatus } from '../../../../../common/api/timeline'; - -const TEST_ID = { - SAVE_TIMELINE_MODAL: 'save-timeline-modal', -}; - -jest.mock('react-redux', () => { - const actual = jest.requireActual('react-redux'); - return { - ...actual, - useDispatch: jest.fn().mockImplementation(() => () => {}), - }; -}); - -jest.mock('../../../../common/lib/kibana'); -jest.mock('../../../../common/components/user_privileges'); -jest.mock('../header/selectors', () => { - return { - getTimelineStatusByIdSelector: jest.fn().mockReturnValue(() => ({ - status: 'draft', - isSaving: false, - })), - }; -}); - -const props: SaveTimelineButtonProps = { - timelineId: 'timeline-1', -}; - -const TestSaveTimelineButton = (_props: SaveTimelineButtonProps) => ( - - - -); - -jest.mock('raf', () => { - return jest.fn().mockImplementation((cb) => cb()); -}); - -describe('SaveTimelineButton', () => { - it('should disable the save timeline button when the user does not have write acceess', () => { - (useUserPrivileges as jest.Mock).mockReturnValue({ - kibanaSecuritySolutionsPrivileges: { crud: false }, - }); - render( - - - - ); - expect(screen.getByRole('button')).toBeDisabled(); - }); - - it('should disable the save timeline button when the timeline is immutable', () => { - (useUserPrivileges as jest.Mock).mockReturnValue({ - kibanaSecuritySolutionsPrivileges: { crud: true }, - }); - (getTimelineStatusByIdSelector as jest.Mock).mockReturnValue(() => ({ - status: TimelineStatus.immutable, - })); - render( - - - - ); - expect(screen.getByRole('button')).toBeDisabled(); - }); - - describe('with draft timeline', () => { - beforeAll(() => { - (getTimelineStatusByIdSelector as jest.Mock).mockReturnValue(() => ({ - status: TimelineStatus.draft, - })); - }); - - it('should not show the save modal if user does not have write access', async () => { - (useUserPrivileges as jest.Mock).mockReturnValue({ - kibanaSecuritySolutionsPrivileges: { crud: false }, - }); - render(); - - expect(screen.queryByTestId(TEST_ID.SAVE_TIMELINE_MODAL)).not.toBeInTheDocument(); - - const saveTimelineBtn = screen.getByRole('button'); - - fireEvent.click(saveTimelineBtn); - - await waitFor(() => { - expect(screen.queryAllByTestId(TEST_ID.SAVE_TIMELINE_MODAL)).toHaveLength(0); - }); - }); - - it('should show the save modal when user has crud privileges', async () => { - (useUserPrivileges as jest.Mock).mockReturnValue({ - kibanaSecuritySolutionsPrivileges: { crud: true }, - }); - render(); - expect(screen.queryByTestId(TEST_ID.SAVE_TIMELINE_MODAL)).not.toBeInTheDocument(); - - const saveTimelineBtn = screen.getByRole('button'); - - fireEvent.click(saveTimelineBtn); - - await waitFor(() => { - expect(screen.getByTestId(TEST_ID.SAVE_TIMELINE_MODAL)).toBeVisible(); - }); - }); - }); - - describe('with active timeline', () => { - beforeAll(() => { - (getTimelineStatusByIdSelector as jest.Mock).mockReturnValue(() => ({ - status: TimelineStatus.active, - isSaving: false, - })); - }); - - it('should open the timeline save modal', async () => { - (useUserPrivileges as jest.Mock).mockReturnValue({ - kibanaSecuritySolutionsPrivileges: { crud: true }, - }); - render(); - - const saveTimelineBtn = screen.getByRole('button'); - - fireEvent.click(saveTimelineBtn); - - await waitFor(() => { - expect(screen.getByTestId(TEST_ID.SAVE_TIMELINE_MODAL)).toBeInTheDocument(); - }); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_button.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_button.tsx deleted file mode 100644 index 24e806b43cd5b..0000000000000 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_button.tsx +++ /dev/null @@ -1,87 +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 React, { useCallback, useMemo, useState } from 'react'; -import { EuiButton, EuiToolTip } from '@elastic/eui'; -import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; -import { TimelineStatus } from '../../../../../common/api/timeline'; -import { useUserPrivileges } from '../../../../common/components/user_privileges'; - -import { SaveTimelineModal } from './save_timeline_modal'; -import * as timelineTranslations from './translations'; -import { getTimelineStatusByIdSelector } from '../header/selectors'; -import { TIMELINE_TOUR_CONFIG_ANCHORS } from '../../timeline/tour/step_config'; - -export interface SaveTimelineButtonProps { - timelineId: string; -} - -export const SaveTimelineButton = React.memo(({ timelineId }) => { - const [showEditTimelineOverlay, setShowEditTimelineOverlay] = useState(false); - - const closeSaveTimeline = useCallback(() => { - setShowEditTimelineOverlay(false); - }, []); - - const openEditTimeline = useCallback(() => { - setShowEditTimelineOverlay(true); - }, []); - - // Case: 1 - // check if user has crud privileges so that user can be allowed to edit the timeline - // Case: 2 - // TODO: User may have Crud privileges but they may not have access to timeline index. - // Do we need to check that? - const { - kibanaSecuritySolutionsPrivileges: { crud: canEditTimelinePrivilege }, - } = useUserPrivileges(); - - const getTimelineStatus = useMemo(() => getTimelineStatusByIdSelector(), []); - - const { status: timelineStatus, isSaving } = useDeepEqualSelector((state) => - getTimelineStatus(state, timelineId) - ); - - const canEditTimeline = canEditTimelinePrivilege && timelineStatus !== TimelineStatus.immutable; - - const isUnsaved = timelineStatus === TimelineStatus.draft; - const tooltipContent = canEditTimeline ? null : timelineTranslations.CALL_OUT_UNAUTHORIZED_MSG; - - return ( - - <> - - {timelineTranslations.SAVE} - - {showEditTimelineOverlay && canEditTimeline ? ( - - ) : null} - - - ); -}); - -SaveTimelineButton.displayName = 'SaveTimelineButton'; diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_modal.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_modal.test.tsx deleted file mode 100644 index 43cdb85da8c30..0000000000000 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_modal.test.tsx +++ /dev/null @@ -1,274 +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 React from 'react'; -import { mount } from 'enzyme'; - -import { TestProviders } from '../../../../common/mock'; -import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; -import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline'; -import { SaveTimelineModal } from './save_timeline_modal'; -import * as i18n from './translations'; - -jest.mock('../../../../common/hooks/use_selector', () => ({ - useDeepEqualSelector: jest.fn(), -})); - -jest.mock('../../timeline/properties/use_create_timeline', () => ({ - useCreateTimeline: jest.fn(), -})); - -jest.mock('react-redux', () => { - const actual = jest.requireActual('react-redux'); - return { - ...actual, - useDispatch: jest.fn(), - }; -}); - -describe('EditTimelineModal', () => { - describe('save timeline', () => { - const props = { - initialFocusOn: 'title' as const, - closeSaveTimeline: jest.fn(), - timelineId: 'timeline-1', - }; - - const mockGetButton = jest.fn().mockReturnValue(
); - - beforeEach(() => { - (useDeepEqualSelector as jest.Mock).mockReturnValue({ - description: '', - isSaving: true, - status: TimelineStatus.draft, - title: 'my timeline', - timelineType: TimelineType.default, - }); - }); - - afterEach(() => { - (useDeepEqualSelector as jest.Mock).mockReset(); - mockGetButton.mockClear(); - }); - - test('show process bar while saving', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="progress-bar"]').exists()).toEqual(true); - }); - - test('Show correct header for edit timeline modal', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="modal-header"]').at(1).prop('children')).toEqual( - i18n.SAVE_TIMELINE - ); - }); - - test('Show correct header for edit timeline template modal', () => { - (useDeepEqualSelector as jest.Mock).mockReturnValue({ - description: '', - isSaving: true, - status: TimelineStatus.draft, - title: 'my timeline', - timelineType: TimelineType.template, - }); - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="modal-header"]').at(1).prop('children')).toEqual( - i18n.SAVE_TIMELINE_TEMPLATE - ); - }); - - test('Show name field', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="save-timeline-title"]').exists()).toEqual(true); - }); - - test('Show description field', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="save-timeline-description"]').exists()).toEqual(true); - }); - - test('Show close button', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="close-button"]').exists()).toEqual(true); - }); - - test('Show saveButton', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="save-button"]').exists()).toEqual(true); - }); - - test('Does not show save as new switch', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="save-as-new-switch"]').exists()).toEqual(false); - }); - }); - - describe('update timeline', () => { - const props = { - initialFocusOn: 'title' as const, - closeSaveTimeline: jest.fn(), - timelineId: 'timeline-1', - }; - - const mockGetButton = jest.fn().mockReturnValue(
); - - beforeEach(() => { - (useDeepEqualSelector as jest.Mock).mockReturnValue({ - description: 'xxxx', - isSaving: true, - status: TimelineStatus.active, - title: 'my timeline', - timelineType: TimelineType.default, - }); - }); - - afterEach(() => { - (useDeepEqualSelector as jest.Mock).mockReset(); - mockGetButton.mockClear(); - }); - - test('show process bar while saving', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="progress-bar"]').exists()).toEqual(true); - }); - - test('Show correct header for save timeline modal', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="modal-header"]').at(1).prop('children')).toEqual( - i18n.SAVE_TIMELINE - ); - }); - - test('Show correct header for edit timeline template modal', () => { - (useDeepEqualSelector as jest.Mock).mockReturnValue({ - description: 'xxxx', - isSaving: true, - status: TimelineStatus.active, - title: 'my timeline', - timelineType: TimelineType.template, - }); - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="modal-header"]').at(1).prop('children')).toEqual( - i18n.NAME_TIMELINE_TEMPLATE - ); - }); - - test('Show name field', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="save-timeline-title"]').exists()).toEqual(true); - }); - - test('Show description field', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="save-timeline-description"]').exists()).toEqual(true); - }); - - test('Show saveButton', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="save-button"]').exists()).toEqual(true); - }); - - test('Show save as new switch', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="save-as-new-switch"]').exists()).toEqual(true); - }); - }); - - describe('showWarning', () => { - const props = { - initialFocusOn: 'title' as const, - closeSaveTimeline: jest.fn(), - timelineId: 'timeline-1', - showWarning: true, - }; - - const mockGetButton = jest.fn().mockReturnValue(
); - - beforeEach(() => { - (useDeepEqualSelector as jest.Mock).mockReturnValue({ - description: '', - isSaving: true, - status: TimelineStatus.draft, - title: 'my timeline', - timelineType: TimelineType.default, - showWarnging: true, - }); - }); - - afterEach(() => { - (useDeepEqualSelector as jest.Mock).mockReset(); - mockGetButton.mockClear(); - }); - - test('Show EuiCallOut', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="edit-timeline-callout"]').exists()).toEqual(true); - }); - - test('Show discardTimelineButton', () => { - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="close-button"]').at(2).text()).toEqual( - 'Discard Timeline' - ); - }); - - test('get discardTimelineTemplateButton with correct props', () => { - (useDeepEqualSelector as jest.Mock).mockReturnValue({ - description: 'xxxx', - isSaving: true, - status: TimelineStatus.draft, - title: 'my timeline', - timelineType: TimelineType.template, - }); - const component = mount(, { - wrappingComponent: TestProviders, - }); - expect(component.find('[data-test-subj="close-button"]').at(2).text()).toEqual( - 'Discard Timeline Template' - ); - }); - - test('Show saveButton', () => { - const component = mount(); - expect(component.find('[data-test-subj="save-button"]').at(1).exists()).toEqual(true); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/translations.ts b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/translations.ts index c7384e0368992..9bc1abd662bb7 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/translations.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/translations.ts @@ -6,8 +6,6 @@ */ import { i18n } from '@kbn/i18n'; -import type { TimelineTypeLiteral } from '../../../../../common/api/timeline'; -import { TimelineType } from '../../../../../common/api/timeline'; export const NEW_TIMELINE_BTN = i18n.translate( 'xpack.securitySolution.flyout.timeline.actionMenu.newTimelineBtn', @@ -29,97 +27,3 @@ export const NEW_TEMPLATE_TIMELINE = i18n.translate( defaultMessage: 'New Timeline template', } ); - -export const CALL_OUT_UNAUTHORIZED_MSG = i18n.translate( - 'xpack.securitySolution.timeline.callOut.unauthorized.message.description', - { - defaultMessage: - 'You can use Timeline to investigate events, but you do not have the required permissions to save timelines for future use. If you need to save timelines, contact your Kibana administrator.', - } -); - -export const SAVE_TIMELINE = i18n.translate( - 'xpack.securitySolution.timeline.saveTimeline.modal.header', - { - defaultMessage: 'Save Timeline', - } -); - -export const SAVE_TIMELINE_TEMPLATE = i18n.translate( - 'xpack.securitySolution.timeline.saveTimelineTemplate.modal.header', - { - defaultMessage: 'Save Timeline Template', - } -); - -export const SAVE = i18n.translate('xpack.securitySolution.timeline.nameTimeline.save.title', { - defaultMessage: 'Save', -}); - -export const NAME_TIMELINE_TEMPLATE = i18n.translate( - 'xpack.securitySolution.timeline.nameTimelineTemplate.modal.header', - { - defaultMessage: 'Name Timeline Template', - } -); - -export const DISCARD_TIMELINE = i18n.translate( - 'xpack.securitySolution.timeline.saveTimeline.modal.discard.title', - { - defaultMessage: 'Discard Timeline', - } -); - -export const DISCARD_TIMELINE_TEMPLATE = i18n.translate( - 'xpack.securitySolution.timeline.saveTimelineTemplate.modal.discard.title', - { - defaultMessage: 'Discard Timeline Template', - } -); - -export const CLOSE_MODAL = i18n.translate( - 'xpack.securitySolution.timeline.saveTimeline.modal.close.title', - { - defaultMessage: 'Close', - } -); - -export const UNSAVED_TIMELINE_WARNING = (timelineType: TimelineTypeLiteral) => - i18n.translate('xpack.securitySolution.timeline.saveTimeline.modal.warning.title', { - values: { - timeline: timelineType === TimelineType.template ? 'timeline template' : 'timeline', - }, - defaultMessage: 'You have an unsaved {timeline}. Do you wish to save it?', - }); - -export const TIMELINE_TITLE = i18n.translate( - 'xpack.securitySolution.timeline.saveTimeline.modal.titleAriaLabel', - { - defaultMessage: 'Title', - } -); - -export const TIMELINE_DESCRIPTION = i18n.translate( - 'xpack.securitySolution.timeline.saveTimeline.modal.descriptionLabel', - { - defaultMessage: 'Description', - } -); - -export const OPTIONAL = i18n.translate( - 'xpack.securitySolution.timeline.saveTimeline.modal.optionalLabel', - { - defaultMessage: 'Optional', - } -); - -export const TITLE = i18n.translate('xpack.securitySolution.timeline.saveTimeline.modal.title', { - defaultMessage: 'Title', -}); - -export const SAVE_AS_NEW = i18n.translate( - 'xpack.securitySolution.timeline.saveTimeline.modal.saveAsNew', - { - defaultMessage: 'Save as new timeline', - } -); diff --git a/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_button.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_button.test.tsx new file mode 100644 index 0000000000000..b417d81726324 --- /dev/null +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_button.test.tsx @@ -0,0 +1,107 @@ +/* + * 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 { render, waitFor } from '@testing-library/react'; +import { SaveTimelineButton } from './save_timeline_button'; +import { mockTimelineModel, TestProviders } from '../../../../common/mock'; +import { useUserPrivileges } from '../../../../common/components/user_privileges'; +import { TimelineStatus } from '../../../../../common/api/timeline'; +import { useCreateTimeline } from '../../timeline/properties/use_create_timeline'; + +jest.mock('../../../../common/components/user_privileges'); +jest.mock('../../timeline/properties/use_create_timeline'); + +const mockGetState = jest.fn(); +jest.mock('react-redux', () => { + const original = jest.requireActual('react-redux'); + return { + ...original, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + useSelector: (selector: any) => + selector({ + timeline: { + timelineById: { + 'timeline-1': { + ...mockGetState(), + }, + }, + }, + }), + }; +}); + +const renderSaveTimelineButton = () => + render( + + + + ); + +describe('SaveTimelineButton', () => { + it('should render components', async () => { + (useUserPrivileges as jest.Mock).mockReturnValue({ + kibanaSecuritySolutionsPrivileges: { crud: true }, + }); + mockGetState.mockReturnValue({ + ...mockTimelineModel, + status: TimelineStatus.active, + isSaving: false, + }); + (useCreateTimeline as jest.Mock).mockReturnValue({}); + + const { getByTestId, getByText, queryByTestId } = renderSaveTimelineButton(); + + expect(getByTestId('timeline-modal-save-timeline')).toBeInTheDocument(); + expect(getByText('Save')).toBeInTheDocument(); + + expect(queryByTestId('save-timeline-modal')).not.toBeInTheDocument(); + }); + + it('should open the timeline save modal', async () => { + (useUserPrivileges as jest.Mock).mockReturnValue({ + kibanaSecuritySolutionsPrivileges: { crud: true }, + }); + mockGetState.mockReturnValue({ + ...mockTimelineModel, + status: TimelineStatus.active, + isSaving: false, + }); + (useCreateTimeline as jest.Mock).mockReturnValue({}); + + const { getByTestId } = renderSaveTimelineButton(); + + getByTestId('timeline-modal-save-timeline').click(); + + await waitFor(() => { + expect(getByTestId('save-timeline-modal')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal')).toBeVisible(); + }); + }); + + it('should disable the save timeline button when the user does not have write access', () => { + (useUserPrivileges as jest.Mock).mockReturnValue({ + kibanaSecuritySolutionsPrivileges: { crud: false }, + }); + mockGetState.mockReturnValue(mockTimelineModel); + + const { getByTestId } = renderSaveTimelineButton(); + + expect(getByTestId('timeline-modal-save-timeline')).toBeDisabled(); + }); + + it('should disable the save timeline button when the timeline is immutable', () => { + (useUserPrivileges as jest.Mock).mockReturnValue({ + kibanaSecuritySolutionsPrivileges: { crud: true }, + }); + mockGetState.mockReturnValue({ ...mockTimelineModel, status: TimelineStatus.immutable }); + + const { getByTestId } = renderSaveTimelineButton(); + + expect(getByTestId('timeline-modal-save-timeline')).toBeDisabled(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_button.tsx b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_button.tsx new file mode 100644 index 0000000000000..9d332d66fb2f5 --- /dev/null +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_button.tsx @@ -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 React, { useCallback, useState } from 'react'; +import { EuiButton, EuiToolTip } from '@elastic/eui'; +import { useSelector } from 'react-redux'; +import { TimelineStatus } from '../../../../../common/api/timeline'; +import { useUserPrivileges } from '../../../../common/components/user_privileges'; +import { SaveTimelineModal } from './save_timeline_modal'; +import * as i18n from './translations'; +import { selectTimelineById } from '../../../store/selectors'; +import type { State } from '../../../../common/store'; +import { TIMELINE_TOUR_CONFIG_ANCHORS } from '../../timeline/tour/step_config'; + +export interface SaveTimelineButtonProps { + /** + * Id of the timeline to be displayed in the bottom bar and within the modal + */ + timelineId: string; +} + +/** + * Button that allows user to save the timeline. Clicking it opens the `SaveTimelineModal` + */ +export const SaveTimelineButton = React.memo(({ timelineId }) => { + const [showEditTimelineOverlay, setShowEditTimelineOverlay] = useState(false); + const toggleSaveTimeline = useCallback(() => setShowEditTimelineOverlay((prev) => !prev), []); + + // Case: 1 + // check if user has crud privileges so that user can be allowed to edit the timeline + // Case: 2 + // TODO: User may have Crud privileges but they may not have access to timeline index. + // Do we need to check that? + const { + kibanaSecuritySolutionsPrivileges: { crud: canEditTimelinePrivilege }, + } = useUserPrivileges(); + + const { status, isSaving } = useSelector((state: State) => selectTimelineById(state, timelineId)); + + const canSaveTimeline = canEditTimelinePrivilege && status !== TimelineStatus.immutable; + const isUnsaved = status === TimelineStatus.draft; + const unauthorizedMessage = canSaveTimeline ? null : i18n.CALL_OUT_UNAUTHORIZED_MSG; + + return ( + <> + + + {i18n.SAVE} + + + {showEditTimelineOverlay && canSaveTimeline ? ( + + ) : null} + + ); +}); + +SaveTimelineButton.displayName = 'SaveTimelineButton'; diff --git a/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_modal.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_modal.test.tsx new file mode 100644 index 0000000000000..36cef9de70473 --- /dev/null +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_modal.test.tsx @@ -0,0 +1,208 @@ +/* + * 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 { render } from '@testing-library/react'; +import { mockTimelineModel, TestProviders } from '../../../../common/mock'; +import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline'; +import { SaveTimelineModal } from './save_timeline_modal'; +import * as i18n from './translations'; + +jest.mock('../../timeline/properties/use_create_timeline', () => ({ + useCreateTimeline: jest.fn(), +})); + +const mockGetState = jest.fn(); +jest.mock('react-redux', () => { + const actual = jest.requireActual('react-redux'); + return { + ...actual, + useDispatch: jest.fn(), + // eslint-disable-next-line @typescript-eslint/no-explicit-any + useSelector: (selector: any) => + selector({ + timeline: { + timelineById: { + 'timeline-1': { + ...mockGetState(), + }, + }, + }, + }), + }; +}); + +const renderSaveTimelineModal = (showWarning?: boolean) => + render( + + + + ); + +describe('SaveTimelineModal', () => { + describe('save timeline', () => { + it('should show process bar while saving', () => { + mockGetState.mockReturnValue({ + ...mockTimelineModel, + isSaving: true, + }); + + const { getByTestId } = renderSaveTimelineModal(); + + expect(getByTestId('progress-bar')).toBeInTheDocument(); + }); + + it('should show correct header for save timeline modal', () => { + mockGetState.mockReturnValue(mockTimelineModel); + + const { getByTestId } = renderSaveTimelineModal(); + + expect(getByTestId('save-timeline-modal-header')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-header')).toHaveTextContent(i18n.SAVE_TIMELINE); + }); + + it('should show correct header for save timeline template modal', () => { + mockGetState.mockReturnValue({ + ...mockTimelineModel, + status: TimelineStatus.draft, + timelineType: TimelineType.template, + }); + + const { getByTestId } = renderSaveTimelineModal(); + + expect(getByTestId('save-timeline-modal-header')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-header')).toHaveTextContent( + i18n.SAVE_TIMELINE_TEMPLATE + ); + }); + + it('should render all the dom elements of the modal', () => { + mockGetState.mockReturnValue({ + ...mockTimelineModel, + status: TimelineStatus.draft, + }); + + const { getByTestId, queryByTestId } = renderSaveTimelineModal(); + + expect(getByTestId('save-timeline-modal-title-input')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-description-input')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-description-input')).toHaveTextContent( + 'This is a sample rule description' + ); + expect(getByTestId('save-timeline-modal-close-button')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-save-button')).toBeInTheDocument(); + expect(queryByTestId('save-timeline-modal-save-as-new-switch')).not.toBeInTheDocument(); + }); + }); + + describe('edit timeline', () => { + it('should show process bar while saving', () => { + mockGetState.mockReturnValue({ + ...mockTimelineModel, + isSaving: true, + title: 'my timeline', + }); + + const { getByTestId } = renderSaveTimelineModal(); + + expect(getByTestId('progress-bar')).toBeInTheDocument(); + }); + + it('should show correct header for edit timeline template modal', () => { + mockGetState.mockReturnValue({ + ...mockTimelineModel, + status: TimelineStatus.active, + }); + + const { getByTestId } = renderSaveTimelineModal(); + + expect(getByTestId('save-timeline-modal-header')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-header')).toHaveTextContent(i18n.SAVE_TIMELINE); + }); + + it('should show correct header for save timeline template modal', () => { + mockGetState.mockReturnValue({ + status: TimelineStatus.active, + timelineType: TimelineType.template, + }); + + const { getByTestId } = renderSaveTimelineModal(); + + expect(getByTestId('save-timeline-modal-header')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-header')).toHaveTextContent( + i18n.NAME_TIMELINE_TEMPLATE + ); + }); + + it('should render all the dom elements of the modal', () => { + mockGetState.mockReturnValue({ + ...mockTimelineModel, + description: 'my description', + status: TimelineStatus.active, + title: 'my timeline', + timelineType: TimelineType.default, + }); + + const { getByTestId } = renderSaveTimelineModal(); + + expect(getByTestId('save-timeline-modal-title-input')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-title-input')).toHaveProperty('value', 'my timeline'); + expect(getByTestId('save-timeline-modal-description-input')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-description-input')).toHaveTextContent( + 'my description' + ); + expect(getByTestId('save-timeline-modal-close-button')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-save-button')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-save-as-new-switch')).toBeInTheDocument(); + }); + }); + + describe('showWarning', () => { + it('should show EuiCallOut', () => { + const { getByTestId } = renderSaveTimelineModal(true); + + expect(getByTestId('save-timeline-modal-callout')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-callout')).toHaveTextContent( + 'You have an unsaved timeline. Do you wish to save it?' + ); + }); + + it('should show discard timeline in the close button', () => { + mockGetState.mockReturnValue({ + ...mockTimelineModel, + status: TimelineStatus.draft, + }); + + const { getByTestId } = renderSaveTimelineModal(true); + + expect(getByTestId('save-timeline-modal-save-button')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-close-button')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-close-button')).toHaveTextContent('Discard Timeline'); + }); + + it('should show discard timeline template in the close button', () => { + mockGetState.mockReturnValue({ + ...mockTimelineModel, + timelineType: TimelineType.template, + status: TimelineStatus.draft, + }); + + const { getByTestId } = renderSaveTimelineModal(true); + + expect(getByTestId('save-timeline-modal-save-button')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-close-button')).toBeInTheDocument(); + expect(getByTestId('save-timeline-modal-close-button')).toHaveTextContent( + 'Discard Timeline Template' + ); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_modal.tsx b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_modal.tsx similarity index 86% rename from x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_modal.tsx rename to x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_modal.tsx index 8028eb92eac7b..56dae333fc7e5 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/save_timeline_modal.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/save_timeline_modal.tsx @@ -5,7 +5,6 @@ * 2.0. */ -import { pick } from 'lodash/fp'; import { EuiButton, EuiFlexGroup, @@ -20,14 +19,15 @@ import { } from '@elastic/eui'; import type { EuiSwitchEvent } from '@elastic/eui'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { useDispatch } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import usePrevious from 'react-use/lib/usePrevious'; +import type { State } from '../../../../common/store'; +import { selectTimelineById } from '../../../store/selectors'; import { getUseField, Field, Form, useForm } from '../../../../shared_imports'; import { TimelineId } from '../../../../../common/types/timeline'; import { TimelineStatus, TimelineType } from '../../../../../common/api/timeline'; -import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; -import { timelineActions, timelineSelectors } from '../../../store'; +import { timelineActions } from '../../../store'; import * as commonI18n from '../../timeline/properties/translations'; import * as i18n from './translations'; import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction'; @@ -37,9 +37,21 @@ import { NOTES_PANEL_WIDTH } from '../../timeline/properties/notes_size'; import { formSchema } from './schema'; const CommonUseField = getUseField({ component: Field }); + +const descriptionLabel = `${i18n.TIMELINE_DESCRIPTION} (${i18n.OPTIONAL})`; + interface SaveTimelineModalProps { + /** + * Callback called when the modal closes + */ closeSaveTimeline: () => void; + /** + * Sets the initial focus to either the title of the modal or the save button + */ initialFocusOn?: 'title' | 'save'; + /** + * Id of the timeline to be displayed in the bottom bar and within the modal + */ timelineId: string; /** * When showWarning is true, the modal is used as a reminder @@ -48,36 +60,32 @@ interface SaveTimelineModalProps { showWarning?: boolean; } +/** + * This component renders the modal to save a timeline with title, description, save as new timeline switch and save / cancel buttons + */ export const SaveTimelineModal = React.memo( ({ closeSaveTimeline, initialFocusOn, timelineId, showWarning }) => { const { startTransaction } = useStartTransaction(); - const getTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []); - const { - isSaving, - description = '', - status, - title = '', - timelineType, - } = useDeepEqualSelector((state) => - pick( - ['isSaving', 'description', 'status', 'title', 'timelineType'], - getTimeline(state, timelineId) - ) + + const dispatch = useDispatch(); + const { isSaving, description, status, title, timelineType } = useSelector((state: State) => + selectTimelineById(state, timelineId) ); + + const [saveAsNewTimeline, setSaveAsNewTimeline] = useState(false); + const onSaveAsNewChanged = useCallback( + (e: EuiSwitchEvent) => setSaveAsNewTimeline(e.target.checked), + [] + ); + const isUnsaved = status === TimelineStatus.draft; const prevIsSaving = usePrevious(isSaving); - const dispatch = useDispatch(); + // Resetting the timeline by replacing the active one with a new empty one const resetTimeline = useCreateTimeline({ timelineId: TimelineId.active, timelineType: TimelineType.default, }); - const [saveAsNewTimeline, setSaveAsNewTimeline] = useState(false); - - const onSaveAsNewChanged = useCallback( - (e: EuiSwitchEvent) => setSaveAsNewTimeline(e.target.checked), - [] - ); const handleSubmit = useCallback( (titleAndDescription, isValid) => { @@ -166,13 +174,11 @@ export const SaveTimelineModal = React.memo( [timelineType] ); - const descriptionLabel = useMemo(() => `${i18n.TIMELINE_DESCRIPTION} (${i18n.OPTIONAL})`, []); - const titleFieldProps = useMemo( () => ({ 'aria-label': i18n.TIMELINE_TITLE, autoFocus: initialFocusOn === 'title', - 'data-test-subj': 'save-timeline-title', + 'data-test-subj': 'save-timeline-modal-title-input', disabled: isSaving, spellCheck: true, placeholder: @@ -186,7 +192,7 @@ export const SaveTimelineModal = React.memo( const descriptionFieldProps = useMemo( () => ({ 'aria-label': i18n.TIMELINE_DESCRIPTION, - 'data-test-subj': 'save-timeline-description', + 'data-test-subj': 'save-timeline-modal-description-input', disabled: isSaving, placeholder: commonI18n.DESCRIPTION, }), @@ -208,7 +214,7 @@ export const SaveTimelineModal = React.memo( {isSaving && ( )} - {modalHeader} + {modalHeader} {showWarning && ( @@ -217,7 +223,7 @@ export const SaveTimelineModal = React.memo( title={calloutMessage} color="danger" iconType="warning" - data-test-subj="edit-timeline-callout" + data-test-subj="save-timeline-modal-callout" /> @@ -248,7 +254,7 @@ export const SaveTimelineModal = React.memo( label={i18n.SAVE_AS_NEW} checked={saveAsNewTimeline} onChange={onSaveAsNewChanged} - data-test-subj="save-as-new-switch" + data-test-subj="save-timeline-modal-save-as-new-switch" /> ) : null} @@ -258,7 +264,7 @@ export const SaveTimelineModal = React.memo( fill={false} onClick={handleCancel} isDisabled={isSaving} - data-test-subj="close-button" + data-test-subj="save-timeline-modal-close-button" > {closeModalText} @@ -270,7 +276,7 @@ export const SaveTimelineModal = React.memo( isDisabled={isSaving || isSubmitting} fill={true} onClick={onSubmit} - data-test-subj="save-button" + data-test-subj="save-timeline-modal-save-button" > {saveButtonTitle} diff --git a/x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/schema.ts b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/schema.ts similarity index 100% rename from x-pack/plugins/security_solution/public/timelines/components/flyout/action_menu/schema.ts rename to x-pack/plugins/security_solution/public/timelines/components/modal/actions/schema.ts diff --git a/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts index a30c77bd3632b..f0f853ee03201 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/modal/actions/translations.ts @@ -6,6 +6,8 @@ */ import { i18n } from '@kbn/i18n'; +import type { TimelineTypeLiteral } from '../../../../../common/api/timeline'; +import { TimelineType } from '../../../../../common/api/timeline'; export const OPEN_TIMELINE_BTN = i18n.translate( 'xpack.securitySolution.timeline.modal.openTimelineBtn', @@ -40,3 +42,97 @@ export const ATTACH_TO_EXISTING_CASE = i18n.translate( defaultMessage: 'Attach to existing case', } ); + +export const CALL_OUT_UNAUTHORIZED_MSG = i18n.translate( + 'xpack.securitySolution.timeline.callOut.unauthorized.message.description', + { + defaultMessage: + 'You can use Timeline to investigate events, but you do not have the required permissions to save timelines for future use. If you need to save timelines, contact your Kibana administrator.', + } +); + +export const SAVE_TIMELINE = i18n.translate( + 'xpack.securitySolution.timeline.saveTimeline.modal.header', + { + defaultMessage: 'Save Timeline', + } +); + +export const SAVE_TIMELINE_TEMPLATE = i18n.translate( + 'xpack.securitySolution.timeline.saveTimelineTemplate.modal.header', + { + defaultMessage: 'Save Timeline Template', + } +); + +export const SAVE = i18n.translate('xpack.securitySolution.timeline.nameTimeline.save.title', { + defaultMessage: 'Save', +}); + +export const NAME_TIMELINE_TEMPLATE = i18n.translate( + 'xpack.securitySolution.timeline.nameTimelineTemplate.modal.header', + { + defaultMessage: 'Name Timeline Template', + } +); + +export const DISCARD_TIMELINE = i18n.translate( + 'xpack.securitySolution.timeline.saveTimeline.modal.discard.title', + { + defaultMessage: 'Discard Timeline', + } +); + +export const DISCARD_TIMELINE_TEMPLATE = i18n.translate( + 'xpack.securitySolution.timeline.saveTimelineTemplate.modal.discard.title', + { + defaultMessage: 'Discard Timeline Template', + } +); + +export const CLOSE_MODAL = i18n.translate( + 'xpack.securitySolution.timeline.saveTimeline.modal.close.title', + { + defaultMessage: 'Close', + } +); + +export const UNSAVED_TIMELINE_WARNING = (timelineType: TimelineTypeLiteral) => + i18n.translate('xpack.securitySolution.timeline.saveTimeline.modal.warning.title', { + values: { + timeline: timelineType === TimelineType.template ? 'timeline template' : 'timeline', + }, + defaultMessage: 'You have an unsaved {timeline}. Do you wish to save it?', + }); + +export const TIMELINE_TITLE = i18n.translate( + 'xpack.securitySolution.timeline.saveTimeline.modal.titleAriaLabel', + { + defaultMessage: 'Title', + } +); + +export const TIMELINE_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.timeline.saveTimeline.modal.descriptionLabel', + { + defaultMessage: 'Description', + } +); + +export const OPTIONAL = i18n.translate( + 'xpack.securitySolution.timeline.saveTimeline.modal.optionalLabel', + { + defaultMessage: 'Optional', + } +); + +export const TITLE = i18n.translate('xpack.securitySolution.timeline.saveTimeline.modal.title', { + defaultMessage: 'Title', +}); + +export const SAVE_AS_NEW = i18n.translate( + 'xpack.securitySolution.timeline.saveTimeline.modal.saveAsNew', + { + defaultMessage: 'Save as new timeline', + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts index 8e37caf463325..e5ae1c8ee9c8d 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts @@ -136,7 +136,8 @@ export const TIMELINE_DATA_PROVIDER_VALUE = `[data-test-subj="value"]`; export const SAVE_DATA_PROVIDER_BTN = `[data-test-subj="save"]`; -export const TIMELINE_DESCRIPTION_INPUT = '[data-test-subj="save-timeline-description"]'; +export const TIMELINE_DESCRIPTION_INPUT = + '[data-test-subj="save-timeline-modal-description-input"]'; export const TIMELINE_DROPPED_DATA_PROVIDERS = '[data-test-subj="providerContainer"]'; @@ -205,7 +206,7 @@ export const TIMELINE_KQLLANGUAGE_BUTTON = '[data-test-subj="kqlLanguageMenuItem export const TIMELINE_TITLE = '[data-test-subj="timeline-title"]'; -export const TIMELINE_TITLE_INPUT = '[data-test-subj="save-timeline-title"]'; +export const TIMELINE_TITLE_INPUT = '[data-test-subj="save-timeline-modal-title-input"]'; export const TIMESTAMP_HEADER_FIELD = '[data-test-subj="header-text-@timestamp"]'; @@ -216,9 +217,10 @@ export const TOGGLE_TIMELINE_EXPAND_EVENT = '[data-test-subj="expand-event"]'; export const TIMELINE_SAVE_MODAL = '[data-test-subj="save-timeline-modal"]'; -export const TIMELINE_EDIT_MODAL_SAVE_BUTTON = '[data-test-subj="save-button"]'; +export const TIMELINE_SAVE_MODAL_SAVE_BUTTON = '[data-test-subj="save-timeline-modal-save-button"]'; -export const TIMELINE_EDIT_MODAL_SAVE_AS_NEW_SWITCH = '[data-test-subj="save-as-new-switch"]'; +export const TIMELINE_SAVE_MODAL_SAVE_AS_NEW_SWITCH = + '[data-test-subj="save-timeline-modal-save-as-new-switch"]'; export const TIMELINE_EXIT_FULL_SCREEN_BUTTON = '[data-test-subj="exit-full-screen"]'; @@ -312,8 +314,10 @@ export const TIMELINE_FILTER_BADGE = `[data-test-subj^='timeline-filters-contain export const NEW_TIMELINE_ACTION = getDataTestSubjectSelector('new-timeline-action'); export const SAVE_TIMELINE_ACTION = getDataTestSubjectSelector('save-timeline-action'); -export const SAVE_TIMELINE_ACTION_BTN = getDataTestSubjectSelector('save-timeline-action-btn'); +export const SAVE_TIMELINE_ACTION_BTN = getDataTestSubjectSelector('timeline-modal-save-timeline'); -export const SAVE_TIMELINE_TOOLTIP = getDataTestSubjectSelector('save-timeline-btn-tooltip'); +export const SAVE_TIMELINE_TOOLTIP = getDataTestSubjectSelector( + 'timeline-modal-save-timeline-tooltip' +); export const TOGGLE_DATA_PROVIDER_BTN = getDataTestSubjectSelector('toggle-data-provider'); diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts b/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts index f24fc5d735b85..8fecbdedcbc06 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/timeline.ts @@ -47,8 +47,8 @@ import { TOGGLE_TIMELINE_EXPAND_EVENT, CREATE_NEW_TIMELINE_TEMPLATE, TIMELINE_SAVE_MODAL, - TIMELINE_EDIT_MODAL_SAVE_BUTTON, - TIMELINE_EDIT_MODAL_SAVE_AS_NEW_SWITCH, + TIMELINE_SAVE_MODAL_SAVE_BUTTON, + TIMELINE_SAVE_MODAL_SAVE_AS_NEW_SWITCH, TIMELINE_PROGRESS_BAR, QUERY_TAB_BUTTON, TIMELINE_ADD_FIELD_BUTTON, @@ -105,7 +105,7 @@ export const addDescriptionToTimeline = ( } cy.get(TIMELINE_DESCRIPTION_INPUT).should('not.be.disabled').type(description); cy.get(TIMELINE_DESCRIPTION_INPUT).invoke('val').should('equal', description); - cy.get(TIMELINE_EDIT_MODAL_SAVE_BUTTON).click(); + cy.get(TIMELINE_SAVE_MODAL_SAVE_BUTTON).click(); cy.get(TIMELINE_TITLE_INPUT).should('not.exist'); }; @@ -114,7 +114,7 @@ export const addNameToTimelineAndSave = (name: string) => { cy.get(TIMELINE_TITLE_INPUT).should('not.be.disabled').clear(); cy.get(TIMELINE_TITLE_INPUT).type(`${name}{enter}`); cy.get(TIMELINE_TITLE_INPUT).should('have.attr', 'value', name); - cy.get(TIMELINE_EDIT_MODAL_SAVE_BUTTON).click(); + cy.get(TIMELINE_SAVE_MODAL_SAVE_BUTTON).click(); cy.get(TIMELINE_TITLE_INPUT).should('not.exist'); }; @@ -123,9 +123,9 @@ export const addNameToTimelineAndSaveAsNew = (name: string) => { cy.get(TIMELINE_TITLE_INPUT).should('not.be.disabled').clear(); cy.get(TIMELINE_TITLE_INPUT).type(`${name}{enter}`); cy.get(TIMELINE_TITLE_INPUT).should('have.attr', 'value', name); - cy.get(TIMELINE_EDIT_MODAL_SAVE_AS_NEW_SWITCH).should('exist'); - cy.get(TIMELINE_EDIT_MODAL_SAVE_AS_NEW_SWITCH).click(); - cy.get(TIMELINE_EDIT_MODAL_SAVE_BUTTON).click(); + cy.get(TIMELINE_SAVE_MODAL_SAVE_AS_NEW_SWITCH).should('exist'); + cy.get(TIMELINE_SAVE_MODAL_SAVE_AS_NEW_SWITCH).click(); + cy.get(TIMELINE_SAVE_MODAL_SAVE_BUTTON).click(); cy.get(TIMELINE_TITLE_INPUT).should('not.exist'); }; @@ -140,7 +140,7 @@ export const addNameAndDescriptionToTimeline = ( cy.get(TIMELINE_TITLE_INPUT).should('have.attr', 'value', timeline.title); cy.get(TIMELINE_DESCRIPTION_INPUT).type(timeline.description); cy.get(TIMELINE_DESCRIPTION_INPUT).invoke('val').should('equal', timeline.description); - cy.get(TIMELINE_EDIT_MODAL_SAVE_BUTTON).click(); + cy.get(TIMELINE_SAVE_MODAL_SAVE_BUTTON).click(); cy.get(TIMELINE_TITLE_INPUT).should('not.exist'); }; @@ -377,8 +377,8 @@ export const saveTimeline = () => { cy.get(TIMELINE_PROGRESS_BAR).should('not.exist'); cy.get(TIMELINE_TITLE_INPUT).should('not.be.disabled'); - cy.get(TIMELINE_EDIT_MODAL_SAVE_BUTTON).should('not.be.disabled'); - cy.get(TIMELINE_EDIT_MODAL_SAVE_BUTTON).click(); + cy.get(TIMELINE_SAVE_MODAL_SAVE_BUTTON).should('not.be.disabled'); + cy.get(TIMELINE_SAVE_MODAL_SAVE_BUTTON).click(); cy.get(TIMELINE_PROGRESS_BAR).should('exist'); cy.get(TIMELINE_PROGRESS_BAR).should('not.exist'); From 3f02a725566308248b0e8517b3ddaf5568ff5b09 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 25 Jan 2024 00:28:19 +0000 Subject: [PATCH 020/113] skip flaky suite (#175443) --- .../apps/ml/short_tests/model_management/model_list.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts b/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts index c1c32114ea235..b82d12f38493f 100644 --- a/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts +++ b/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts @@ -462,7 +462,8 @@ export default function ({ getService }: FtrProviderContext) { await ml.navigation.navigateToTrainedModels(); }); - describe('with imported models', function () { + // FLAKY: https://github.com/elastic/kibana/issues/175443 + describe.skip('with imported models', function () { before(async () => { await ml.navigation.navigateToTrainedModels(); }); From 88e81bf93148437ae9b178299372fd863794fc7f Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 24 Jan 2024 16:52:58 -0800 Subject: [PATCH 021/113] [DOCS] Add buildkite links to doc preview comments (#175463) --- .github/workflows/docs-preview-links.yml | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/.github/workflows/docs-preview-links.yml b/.github/workflows/docs-preview-links.yml index 79ea1de7748a9..ba6e2397759b2 100644 --- a/.github/workflows/docs-preview-links.yml +++ b/.github/workflows/docs-preview-links.yml @@ -6,21 +6,15 @@ on: paths: - '**.asciidoc' +permissions: + pull-requests: write jobs: doc-preview: runs-on: ubuntu-latest steps: - - uses: actions/github-script@v6 - name: Add doc preview links + - uses: elastic/docs/.github/actions/docs-preview@current with: - script: | - const pr = context.payload.pull_request; - const comment = `Documentation preview: - - ✨ [Changed pages](https://${context.repo.repo}_${pr.number}.docs-preview.app.elstc.co/diff)`; - - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: comment, - }); \ No newline at end of file + github-token: ${{ secrets.GITHUB_TOKEN }} + repo: ${{ github.event.repository.name }} + preview-path: 'guide/en/observability/master/index.html' + pr: ${{ github.event.pull_request.number }} From 32e378eb6fa923d8c8997bb87291b4d4588292af Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 25 Jan 2024 01:02:22 -0500 Subject: [PATCH 022/113] [api-docs] 2024-01-25 Daily api_docs build (#175502) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/593 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_observability.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.devdocs.json | 8 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.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_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.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- 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/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/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- 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/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/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.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_utils.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.devdocs.json | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_ui_shared.devdocs.json | 28 +- api_docs/kbn_alerts_ui_shared.mdx | 4 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.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_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- 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 +- 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.mdx | 2 +- 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 +- ...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 +- 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 | 8 + 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 +- 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 +- 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_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_settings_server.mdx | 2 +- ...kbn_core_user_settings_server_internal.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.devdocs.json | 1315 +++++++++++++++++ api_docs/kbn_data_stream_adapter.mdx | 42 + api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.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.mdx | 2 +- 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.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_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_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- ...common_functional_ui_services.devdocs.json | 21 +- .../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_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_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.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_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 +- .../kbn_managed_content_badge.devdocs.json | 63 + api_docs/kbn_managed_content_badge.mdx | 30 + 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_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_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_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_library.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_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_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_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.devdocs.json | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.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_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.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_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_grouping.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 +- 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_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_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_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.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_url_state.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_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.mdx | 2 +- 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/log_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.devdocs.json | 6 +- api_docs/observability.mdx | 2 +- .../observability_a_i_assistant.devdocs.json | 70 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_log_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 | 14 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.devdocs.json | 14 + api_docs/presentation_util.mdx | 4 +- 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/security.mdx | 2 +- api_docs/security_solution.devdocs.json | 89 +- api_docs/security_solution.mdx | 7 +- 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/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/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.devdocs.json | 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 +- 661 files changed, 2282 insertions(+), 731 deletions(-) create mode 100644 api_docs/kbn_data_stream_adapter.devdocs.json create mode 100644 api_docs/kbn_data_stream_adapter.mdx create mode 100644 api_docs/kbn_managed_content_badge.devdocs.json create mode 100644 api_docs/kbn_managed_content_badge.mdx diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 12b81ce69befe..5ba8b05bd16af 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index e1e115a33552e..12716a51a3860 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index aea31971e2e41..457756cca70a7 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index e5bc869e7030a..d2dc6e481b99f 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-01-24 +date: 2024-01-25 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 456821ea72b17..0d0d21266a426 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index b45d5a83b0562..fa7a709253c6d 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index c2601faeed68b..826a1856a6cee 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -81,7 +81,7 @@ "label": "featureFlags", "description": [], "signature": [ - "{ agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }" + "{ agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; profilingIntegrationAvailable: boolean; }" ], "path": "x-pack/plugins/apm/public/index.ts", "deprecated": false, @@ -275,7 +275,7 @@ "Observable", "; searchAggregatedTransactions: ", "SearchAggregatedTransactionSetting", - "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; latestAgentVersionsUrl: string; serverless: Readonly<{} & { enabled: true; }>; serverlessOnboarding: boolean; managedServiceUrl: string; featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }>; }>>; }" + "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; latestAgentVersionsUrl: string; serverless: Readonly<{} & { enabled: true; }>; serverlessOnboarding: boolean; managedServiceUrl: string; featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; profilingIntegrationAvailable: boolean; }>; }>>; }" ], "path": "x-pack/plugins/apm/server/plugin.ts", "deprecated": false, @@ -450,7 +450,7 @@ "signature": [ "{ readonly enabled: boolean; readonly autoCreateApmDataView: boolean; readonly serviceMapEnabled: boolean; readonly serviceMapFingerprintBucketSize: number; readonly serviceMapFingerprintGlobalBucketSize: number; readonly serviceMapTraceIdBucketSize: number; readonly serviceMapTraceIdGlobalBucketSize: number; readonly serviceMapMaxTracesPerRequest: number; readonly serviceMapTerminateAfter: number; readonly serviceMapMaxTraces: number; readonly ui: Readonly<{} & { enabled: boolean; maxTraceItems: number; }>; readonly searchAggregatedTransactions: ", "SearchAggregatedTransactionSetting", - "; readonly telemetryCollectionEnabled: boolean; readonly metricsInterval: number; readonly agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; readonly forceSyntheticSource: boolean; readonly latestAgentVersionsUrl: string; readonly serverless: Readonly<{} & { enabled: true; }>; readonly serverlessOnboarding: boolean; readonly managedServiceUrl: string; readonly featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }>; }" + "; readonly telemetryCollectionEnabled: boolean; readonly metricsInterval: number; readonly agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; readonly forceSyntheticSource: boolean; readonly latestAgentVersionsUrl: string; readonly serverless: Readonly<{} & { enabled: true; }>; readonly serverlessOnboarding: boolean; readonly managedServiceUrl: string; readonly featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; profilingIntegrationAvailable: boolean; }>; }" ], "path": "x-pack/plugins/apm/server/index.ts", "deprecated": false, @@ -7848,7 +7848,7 @@ "Observable", "; searchAggregatedTransactions: ", "SearchAggregatedTransactionSetting", - "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; latestAgentVersionsUrl: string; serverless: Readonly<{} & { enabled: true; }>; serverlessOnboarding: boolean; managedServiceUrl: string; featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }>; }>>" + "; telemetryCollectionEnabled: boolean; metricsInterval: number; agent: Readonly<{} & { migrations: Readonly<{} & { enabled: boolean; }>; }>; forceSyntheticSource: boolean; latestAgentVersionsUrl: string; serverless: Readonly<{} & { enabled: true; }>; serverlessOnboarding: boolean; managedServiceUrl: string; featureFlags: Readonly<{} & { agentConfigurationAvailable: boolean; configurableIndicesAvailable: boolean; infrastructureTabAvailable: boolean; infraUiAvailable: boolean; migrationToFleetAvailable: boolean; sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; profilingIntegrationAvailable: boolean; }>; }>>" ], "path": "x-pack/plugins/apm/server/types.ts", "deprecated": false, diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 2dd0858efc1f2..7436d47e82122 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-01-24 +date: 2024-01-25 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 122439fe2070c..d066e1de53db8 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 1bcb98965ca91..2385a915b4a70 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index d7a9671a70164..611615fdb4550 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-01-24 +date: 2024-01-25 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 ac0edbbc20350..c3ed76da29606 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-01-24 +date: 2024-01-25 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 3ef2b195117cb..9f357b5e75baa 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-01-24 +date: 2024-01-25 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 e091e6b0a06b8..bb31d56820c91 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-01-24 +date: 2024-01-25 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 6d081b565e78d..6292074538642 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-01-24 +date: 2024-01-25 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 be903fae866a3..6c24d75ce81bb 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-01-24 +date: 2024-01-25 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 bc5444e63393a..10d5ec0641eaf 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-01-24 +date: 2024-01-25 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 33b8b3d790423..f9382c72e2dc8 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-01-24 +date: 2024-01-25 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 e7b0124b4b73a..a876aa48509ec 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-01-24 +date: 2024-01-25 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 11a9970e50ff9..fff4c1731fad9 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-01-24 +date: 2024-01-25 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 d00337c055906..bc7534d64656e 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-01-24 +date: 2024-01-25 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 cc80a35c34fef..e759ebf77c94b 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-01-24 +date: 2024-01-25 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 0325bc0dbb098..5f106ae1a95cf 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-01-24 +date: 2024-01-25 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 aa22e24368661..826327800be55 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-01-24 +date: 2024-01-25 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 ce8fa4c60e29b..c98bc50c09b49 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-01-24 +date: 2024-01-25 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 179bb05689936..0e61d816f13a5 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-01-24 +date: 2024-01-25 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 0fb05f54e732c..d646832309bdd 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 5c895870c5b08..1a7f6abc0fcdc 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-01-24 +date: 2024-01-25 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 b920cff6a9599..ad8936b3940dd 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-01-24 +date: 2024-01-25 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 5f00e0d5c3296..635562b176033 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-01-24 +date: 2024-01-25 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 c0a41708c32d5..aee0f175988ea 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-01-24 +date: 2024-01-25 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 fba61de86188d..bea25504a4f9a 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-01-24 +date: 2024-01-25 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 0d2a81e1517f8..a5343d5e3bd67 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-01-24 +date: 2024-01-25 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 172316b4d2b9e..a3317e80b1fec 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 45cc84740a2c5..7449d749ed6e6 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-01-24 +date: 2024-01-25 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 f1059051b574f..b7e08b00e0580 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 12598aea0767e..05f1f4e2d5092 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index c73dd2b827af9..bb56d78c5454d 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index f572564c6f770..04fcaf7ddd46f 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-01-24 +date: 2024-01-25 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 5e03a578d5f47..9033e67b5f209 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-01-24 +date: 2024-01-25 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 dc4fd2e6daa97..f655655d5cbc2 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 45fc0ceecd90a..bf7dd8d9fdfce 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-01-24 +date: 2024-01-25 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 cb6157404b679..5cab0b700bdec 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-01-24 +date: 2024-01-25 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 47d5b490e6fcd..8fe84c83abfae 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-01-24 +date: 2024-01-25 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 f9194bcd9c564..805f2f6f3c05a 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-01-24 +date: 2024-01-25 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 291bc3e0ad45f..d9189bfb1b186 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-01-24 +date: 2024-01-25 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 8699397bf6807..492bb61c14f16 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index a00b256eaf194..8b14943da5c03 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 36cf5f676a69c..f3864f1bae4d3 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-01-24 +date: 2024-01-25 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 c9207b01e57d8..37debb4e81480 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 491a322109fff..ccac1d19007ca 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-01-24 +date: 2024-01-25 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 49f114a2f5f59..bda42007bb3d3 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-01-24 +date: 2024-01-25 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 c811d7da3ce3e..59299c2403ef9 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-01-24 +date: 2024-01-25 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 a771e6f9dd634..f8756060ab775 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-01-24 +date: 2024-01-25 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 668f82e5cea53..393b33db83823 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-01-24 +date: 2024-01-25 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 a5f2f487acf71..f723a46b101e9 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-01-24 +date: 2024-01-25 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 5c1beab864575..0494057a51ab9 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-01-24 +date: 2024-01-25 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 2f8d12e132bca..6a564306b3831 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-01-24 +date: 2024-01-25 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 0fbb173bdb76e..e664c51d4f29b 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-01-24 +date: 2024-01-25 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 f8041746116aa..ef147b85f42ab 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-01-24 +date: 2024-01-25 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 51e0a004484bd..80243ffc9d2b2 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-01-24 +date: 2024-01-25 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 725ea09488733..80f74ef448e44 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-01-24 +date: 2024-01-25 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 174b3593cf777..9568d8872b3bf 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-01-24 +date: 2024-01-25 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 640288539109c..5803b3052b115 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-01-24 +date: 2024-01-25 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 f8ed40e5fbdf4..47d76f675c844 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-01-24 +date: 2024-01-25 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 be9f4c25ce94f..ddc4aa2c88838 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-01-24 +date: 2024-01-25 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 f995207b1a1f0..d0ee9e756eccc 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-01-24 +date: 2024-01-25 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 59008ddaef8bc..be59bc24a7e6d 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 6328cf4dc64fb..d853465265193 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-01-24 +date: 2024-01-25 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 ff6ab98a10e6f..ddb4b8b34876c 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-01-24 +date: 2024-01-25 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 4aa6ba3bfd93e..71216f33f20ed 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-01-24 +date: 2024-01-25 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 27051d220dd76..647131948546b 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-01-24 +date: 2024-01-25 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 c81c59d5ac7b2..87864c052c324 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-01-24 +date: 2024-01-25 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 9bee68b1eaa0f..c2190ce16c07e 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-01-24 +date: 2024-01-25 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 37b5a1165ca05..3e4b6688c7fb7 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-01-24 +date: 2024-01-25 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 e9e6c6613ced0..f8e425b1227e8 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-01-24 +date: 2024-01-25 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 091edfc216ca6..f2e2b3be03b67 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-01-24 +date: 2024-01-25 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 b23768f8fcd9c..0a49bdcac74a3 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 3d1bb7bd4ede0..d0c8633ae3729 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-01-24 +date: 2024-01-25 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 2469b2e49567e..65bc9969ac858 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-01-24 +date: 2024-01-25 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 4fd8cabe04333..a679684973090 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 07ad45dbc2004..729e2c3b52bb4 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index e0cbaef6d7269..7f787d8b7ac6f 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-01-24 +date: 2024-01-25 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 23ca9ccb139e1..5c5bd5a8000cb 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-01-24 +date: 2024-01-25 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 b1e185ed278c1..d852cf568224d 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index 7d412101cd8d9..6640b0ecb1a58 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 99399572f176f..5ff65c2c1196f 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-01-24 +date: 2024-01-25 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_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 1e8646b524666..85d0200671b09 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-01-24 +date: 2024-01-25 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.devdocs.json b/api_docs/kbn_alerting_types.devdocs.json index 43d9355d36bc8..1c7e6322dfefe 100644 --- a/api_docs/kbn_alerting_types.devdocs.json +++ b/api_docs/kbn_alerting_types.devdocs.json @@ -486,7 +486,7 @@ "section": "def-common.BasicFields", "text": "BasicFields" }, - " & { \"@timestamp\"?: string[] | undefined; \"event.action\"?: string[] | undefined; tags?: string[] | undefined; kibana?: string[] | undefined; \"kibana.alert.rule.rule_type_id\"?: string[] | undefined; \"kibana.alert.rule.consumer\"?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string[] | undefined; \"kibana.alert.instance.id\"?: string[] | undefined; \"kibana.alert.rule.category\"?: string[] | undefined; \"kibana.alert.rule.name\"?: string[] | undefined; \"kibana.alert.rule.producer\"?: string[] | undefined; \"kibana.alert.rule.uuid\"?: string[] | undefined; \"kibana.alert.status\"?: string[] | undefined; \"kibana.alert.uuid\"?: string[] | undefined; \"kibana.space_ids\"?: string[] | undefined; \"event.kind\"?: string[] | undefined; \"kibana.alert.action_group\"?: string[] | undefined; \"kibana.alert.case_ids\"?: string[] | undefined; \"kibana.alert.duration.us\"?: string[] | undefined; \"kibana.alert.end\"?: string[] | undefined; \"kibana.alert.flapping\"?: string[] | undefined; \"kibana.alert.maintenance_window_ids\"?: string[] | undefined; \"kibana.alert.reason\"?: string[] | undefined; \"kibana.alert.rule.parameters\"?: string[] | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.start\"?: string[] | undefined; \"kibana.alert.time_range\"?: string[] | undefined; \"kibana.alert.workflow_assignee_ids\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string[] | undefined; \"kibana.alert.workflow_tags\"?: string[] | undefined; \"kibana.version\"?: string[] | undefined; \"kibana.alert.context\"?: string[] | undefined; \"kibana.alert.evaluation.threshold\"?: string[] | undefined; \"kibana.alert.evaluation.value\"?: string[] | undefined; \"kibana.alert.evaluation.values\"?: string[] | undefined; \"kibana.alert.group\"?: string[] | undefined; \"ecs.version\"?: string[] | undefined; \"kibana.alert.risk_score\"?: string[] | undefined; \"kibana.alert.rule.author\"?: string[] | undefined; \"kibana.alert.rule.created_at\"?: string[] | undefined; \"kibana.alert.rule.created_by\"?: string[] | undefined; \"kibana.alert.rule.description\"?: string[] | undefined; \"kibana.alert.rule.enabled\"?: string[] | undefined; \"kibana.alert.rule.from\"?: string[] | undefined; \"kibana.alert.rule.interval\"?: string[] | undefined; \"kibana.alert.rule.license\"?: string[] | undefined; \"kibana.alert.rule.note\"?: string[] | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string[] | undefined; \"kibana.alert.rule.rule_name_override\"?: string[] | undefined; \"kibana.alert.rule.to\"?: string[] | undefined; \"kibana.alert.rule.type\"?: string[] | undefined; \"kibana.alert.rule.updated_at\"?: string[] | undefined; \"kibana.alert.rule.updated_by\"?: string[] | undefined; \"kibana.alert.rule.version\"?: string[] | undefined; \"kibana.alert.severity\"?: string[] | undefined; \"kibana.alert.suppression.docs_count\"?: string[] | undefined; \"kibana.alert.suppression.end\"?: string[] | undefined; \"kibana.alert.suppression.start\"?: string[] | undefined; \"kibana.alert.suppression.terms.field\"?: string[] | undefined; \"kibana.alert.suppression.terms.value\"?: string[] | undefined; \"kibana.alert.system_status\"?: string[] | undefined; \"kibana.alert.workflow_reason\"?: string[] | undefined; \"kibana.alert.workflow_user\"?: string[] | undefined; \"event.module\"?: string[] | undefined; \"kibana.alert.rule.threat.framework\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.id\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.name\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.reference\"?: string[] | undefined; \"kibana.alert.building_block_type\"?: string[] | undefined; \"kibana.alert\"?: string[] | undefined; \"kibana.alert.rule\"?: string[] | undefined; \"kibana.alert.suppression.terms\"?: string[] | undefined; \"kibana.alert.group.field\"?: string[] | undefined; \"kibana.alert.group.value\"?: string[] | undefined; \"kibana.alert.rule.exceptions_list\"?: string[] | undefined; \"kibana.alert.rule.namespace\"?: string[] | undefined; } & { [x: string]: unknown[]; }" + " & { \"@timestamp\"?: string[] | undefined; \"event.action\"?: string[] | undefined; tags?: string[] | undefined; kibana?: string[] | undefined; \"kibana.alert.rule.rule_type_id\"?: string[] | undefined; \"kibana.alert.rule.consumer\"?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string[] | undefined; \"kibana.alert.instance.id\"?: string[] | undefined; \"kibana.alert.rule.category\"?: string[] | undefined; \"kibana.alert.rule.name\"?: string[] | undefined; \"kibana.alert.rule.producer\"?: string[] | undefined; \"kibana.alert.rule.uuid\"?: string[] | undefined; \"kibana.alert.status\"?: string[] | undefined; \"kibana.alert.uuid\"?: string[] | undefined; \"kibana.space_ids\"?: string[] | undefined; \"event.kind\"?: string[] | undefined; \"kibana.alert.action_group\"?: string[] | undefined; \"kibana.alert.case_ids\"?: string[] | undefined; \"kibana.alert.duration.us\"?: string[] | undefined; \"kibana.alert.end\"?: string[] | undefined; \"kibana.alert.flapping\"?: string[] | undefined; \"kibana.alert.maintenance_window_ids\"?: string[] | undefined; \"kibana.alert.reason\"?: string[] | undefined; \"kibana.alert.rule.parameters\"?: string[] | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.start\"?: string[] | undefined; \"kibana.alert.time_range\"?: string[] | undefined; \"kibana.alert.workflow_assignee_ids\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string[] | undefined; \"kibana.alert.workflow_tags\"?: string[] | undefined; \"kibana.version\"?: string[] | undefined; \"kibana.alert.context\"?: string[] | undefined; \"kibana.alert.evaluation.threshold\"?: string[] | undefined; \"kibana.alert.evaluation.value\"?: string[] | undefined; \"kibana.alert.evaluation.values\"?: string[] | undefined; \"kibana.alert.group\"?: string[] | undefined; \"ecs.version\"?: string[] | undefined; \"kibana.alert.risk_score\"?: string[] | undefined; \"kibana.alert.rule.author\"?: string[] | undefined; \"kibana.alert.rule.created_at\"?: string[] | undefined; \"kibana.alert.rule.created_by\"?: string[] | undefined; \"kibana.alert.rule.description\"?: string[] | undefined; \"kibana.alert.rule.enabled\"?: string[] | undefined; \"kibana.alert.rule.from\"?: string[] | undefined; \"kibana.alert.rule.interval\"?: string[] | undefined; \"kibana.alert.rule.license\"?: string[] | undefined; \"kibana.alert.rule.note\"?: string[] | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string[] | undefined; \"kibana.alert.rule.rule_name_override\"?: string[] | undefined; \"kibana.alert.rule.to\"?: string[] | undefined; \"kibana.alert.rule.type\"?: string[] | undefined; \"kibana.alert.rule.updated_at\"?: string[] | undefined; \"kibana.alert.rule.updated_by\"?: string[] | undefined; \"kibana.alert.rule.version\"?: string[] | undefined; \"kibana.alert.severity\"?: string[] | undefined; \"kibana.alert.suppression.docs_count\"?: string[] | undefined; \"kibana.alert.suppression.end\"?: string[] | undefined; \"kibana.alert.suppression.start\"?: string[] | undefined; \"kibana.alert.suppression.terms.field\"?: string[] | undefined; \"kibana.alert.suppression.terms.value\"?: string[] | undefined; \"kibana.alert.system_status\"?: string[] | undefined; \"kibana.alert.workflow_reason\"?: string[] | undefined; \"kibana.alert.workflow_user\"?: string[] | undefined; \"event.module\"?: string[] | undefined; \"kibana.alert.rule.threat.framework\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.id\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.name\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.reference\"?: string[] | undefined; \"kibana.alert.building_block_type\"?: string[] | undefined; \"kibana.alert\"?: string[] | undefined; \"kibana.alert.group.field\"?: string[] | undefined; \"kibana.alert.group.value\"?: string[] | undefined; \"kibana.alert.rule\"?: string[] | undefined; \"kibana.alert.rule.exceptions_list\"?: string[] | undefined; \"kibana.alert.rule.namespace\"?: string[] | undefined; \"kibana.alert.suppression.terms\"?: string[] | undefined; } & { [x: string]: unknown[]; }" ], "path": "packages/kbn-alerting-types/alert_type.ts", "deprecated": false, diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index ece297870be4e..4cf4723694ebd 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-01-24 +date: 2024-01-25 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 d7fb746435910..c56da12bc3d95 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-01-24 +date: 2024-01-25 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_ui_shared.devdocs.json b/api_docs/kbn_alerts_ui_shared.devdocs.json index 1fc57339d3f09..0a909f1d2f241 100644 --- a/api_docs/kbn_alerts_ui_shared.devdocs.json +++ b/api_docs/kbn_alerts_ui_shared.devdocs.json @@ -58,7 +58,9 @@ "type": "Function", "tags": [], "label": "AlertFieldsTable", - "description": [], + "description": [ + "\nA paginated, filterable table to show alert object fields" + ], "signature": [ "React.NamedExoticComponent<", { @@ -68,7 +70,7 @@ "section": "def-common.AlertFieldsTableProps", "text": "AlertFieldsTableProps" }, - "> & { readonly type: ({ alert }: ", + "> & { readonly type: ({ alert, fields }: ", { "pluginId": "@kbn/alerts-ui-shared", "scope": "common", @@ -779,7 +781,9 @@ "type": "CompoundType", "tags": [], "label": "alert", - "description": [], + "description": [ + "\nThe raw alert object" + ], "signature": [ { "pluginId": "@kbn/alerting-types", @@ -788,7 +792,23 @@ "section": "def-common.BasicFields", "text": "BasicFields" }, - " & { \"@timestamp\"?: string[] | undefined; \"event.action\"?: string[] | undefined; tags?: string[] | undefined; kibana?: string[] | undefined; \"kibana.alert.rule.rule_type_id\"?: string[] | undefined; \"kibana.alert.rule.consumer\"?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string[] | undefined; \"kibana.alert.instance.id\"?: string[] | undefined; \"kibana.alert.rule.category\"?: string[] | undefined; \"kibana.alert.rule.name\"?: string[] | undefined; \"kibana.alert.rule.producer\"?: string[] | undefined; \"kibana.alert.rule.uuid\"?: string[] | undefined; \"kibana.alert.status\"?: string[] | undefined; \"kibana.alert.uuid\"?: string[] | undefined; \"kibana.space_ids\"?: string[] | undefined; \"event.kind\"?: string[] | undefined; \"kibana.alert.action_group\"?: string[] | undefined; \"kibana.alert.case_ids\"?: string[] | undefined; \"kibana.alert.duration.us\"?: string[] | undefined; \"kibana.alert.end\"?: string[] | undefined; \"kibana.alert.flapping\"?: string[] | undefined; \"kibana.alert.maintenance_window_ids\"?: string[] | undefined; \"kibana.alert.reason\"?: string[] | undefined; \"kibana.alert.rule.parameters\"?: string[] | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.start\"?: string[] | undefined; \"kibana.alert.time_range\"?: string[] | undefined; \"kibana.alert.workflow_assignee_ids\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string[] | undefined; \"kibana.alert.workflow_tags\"?: string[] | undefined; \"kibana.version\"?: string[] | undefined; \"kibana.alert.context\"?: string[] | undefined; \"kibana.alert.evaluation.threshold\"?: string[] | undefined; \"kibana.alert.evaluation.value\"?: string[] | undefined; \"kibana.alert.evaluation.values\"?: string[] | undefined; \"kibana.alert.group\"?: string[] | undefined; \"ecs.version\"?: string[] | undefined; \"kibana.alert.risk_score\"?: string[] | undefined; \"kibana.alert.rule.author\"?: string[] | undefined; \"kibana.alert.rule.created_at\"?: string[] | undefined; \"kibana.alert.rule.created_by\"?: string[] | undefined; \"kibana.alert.rule.description\"?: string[] | undefined; \"kibana.alert.rule.enabled\"?: string[] | undefined; \"kibana.alert.rule.from\"?: string[] | undefined; \"kibana.alert.rule.interval\"?: string[] | undefined; \"kibana.alert.rule.license\"?: string[] | undefined; \"kibana.alert.rule.note\"?: string[] | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string[] | undefined; \"kibana.alert.rule.rule_name_override\"?: string[] | undefined; \"kibana.alert.rule.to\"?: string[] | undefined; \"kibana.alert.rule.type\"?: string[] | undefined; \"kibana.alert.rule.updated_at\"?: string[] | undefined; \"kibana.alert.rule.updated_by\"?: string[] | undefined; \"kibana.alert.rule.version\"?: string[] | undefined; \"kibana.alert.severity\"?: string[] | undefined; \"kibana.alert.suppression.docs_count\"?: string[] | undefined; \"kibana.alert.suppression.end\"?: string[] | undefined; \"kibana.alert.suppression.start\"?: string[] | undefined; \"kibana.alert.suppression.terms.field\"?: string[] | undefined; \"kibana.alert.suppression.terms.value\"?: string[] | undefined; \"kibana.alert.system_status\"?: string[] | undefined; \"kibana.alert.workflow_reason\"?: string[] | undefined; \"kibana.alert.workflow_user\"?: string[] | undefined; \"event.module\"?: string[] | undefined; \"kibana.alert.rule.threat.framework\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.id\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.name\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.reference\"?: string[] | undefined; \"kibana.alert.building_block_type\"?: string[] | undefined; \"kibana.alert\"?: string[] | undefined; \"kibana.alert.rule\"?: string[] | undefined; \"kibana.alert.suppression.terms\"?: string[] | undefined; \"kibana.alert.group.field\"?: string[] | undefined; \"kibana.alert.group.value\"?: string[] | undefined; \"kibana.alert.rule.exceptions_list\"?: string[] | undefined; \"kibana.alert.rule.namespace\"?: string[] | undefined; } & { [x: string]: unknown[]; }" + " & { \"@timestamp\"?: string[] | undefined; \"event.action\"?: string[] | undefined; tags?: string[] | undefined; kibana?: string[] | undefined; \"kibana.alert.rule.rule_type_id\"?: string[] | undefined; \"kibana.alert.rule.consumer\"?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string[] | undefined; \"kibana.alert.instance.id\"?: string[] | undefined; \"kibana.alert.rule.category\"?: string[] | undefined; \"kibana.alert.rule.name\"?: string[] | undefined; \"kibana.alert.rule.producer\"?: string[] | undefined; \"kibana.alert.rule.uuid\"?: string[] | undefined; \"kibana.alert.status\"?: string[] | undefined; \"kibana.alert.uuid\"?: string[] | undefined; \"kibana.space_ids\"?: string[] | undefined; \"event.kind\"?: string[] | undefined; \"kibana.alert.action_group\"?: string[] | undefined; \"kibana.alert.case_ids\"?: string[] | undefined; \"kibana.alert.duration.us\"?: string[] | undefined; \"kibana.alert.end\"?: string[] | undefined; \"kibana.alert.flapping\"?: string[] | undefined; \"kibana.alert.maintenance_window_ids\"?: string[] | undefined; \"kibana.alert.reason\"?: string[] | undefined; \"kibana.alert.rule.parameters\"?: string[] | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.start\"?: string[] | undefined; \"kibana.alert.time_range\"?: string[] | undefined; \"kibana.alert.workflow_assignee_ids\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string[] | undefined; \"kibana.alert.workflow_tags\"?: string[] | undefined; \"kibana.version\"?: string[] | undefined; \"kibana.alert.context\"?: string[] | undefined; \"kibana.alert.evaluation.threshold\"?: string[] | undefined; \"kibana.alert.evaluation.value\"?: string[] | undefined; \"kibana.alert.evaluation.values\"?: string[] | undefined; \"kibana.alert.group\"?: string[] | undefined; \"ecs.version\"?: string[] | undefined; \"kibana.alert.risk_score\"?: string[] | undefined; \"kibana.alert.rule.author\"?: string[] | undefined; \"kibana.alert.rule.created_at\"?: string[] | undefined; \"kibana.alert.rule.created_by\"?: string[] | undefined; \"kibana.alert.rule.description\"?: string[] | undefined; \"kibana.alert.rule.enabled\"?: string[] | undefined; \"kibana.alert.rule.from\"?: string[] | undefined; \"kibana.alert.rule.interval\"?: string[] | undefined; \"kibana.alert.rule.license\"?: string[] | undefined; \"kibana.alert.rule.note\"?: string[] | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string[] | undefined; \"kibana.alert.rule.rule_name_override\"?: string[] | undefined; \"kibana.alert.rule.to\"?: string[] | undefined; \"kibana.alert.rule.type\"?: string[] | undefined; \"kibana.alert.rule.updated_at\"?: string[] | undefined; \"kibana.alert.rule.updated_by\"?: string[] | undefined; \"kibana.alert.rule.version\"?: string[] | undefined; \"kibana.alert.severity\"?: string[] | undefined; \"kibana.alert.suppression.docs_count\"?: string[] | undefined; \"kibana.alert.suppression.end\"?: string[] | undefined; \"kibana.alert.suppression.start\"?: string[] | undefined; \"kibana.alert.suppression.terms.field\"?: string[] | undefined; \"kibana.alert.suppression.terms.value\"?: string[] | undefined; \"kibana.alert.system_status\"?: string[] | undefined; \"kibana.alert.workflow_reason\"?: string[] | undefined; \"kibana.alert.workflow_user\"?: string[] | undefined; \"event.module\"?: string[] | undefined; \"kibana.alert.rule.threat.framework\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.id\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.name\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.reference\"?: string[] | undefined; \"kibana.alert.building_block_type\"?: string[] | undefined; \"kibana.alert\"?: string[] | undefined; \"kibana.alert.group.field\"?: string[] | undefined; \"kibana.alert.group.value\"?: string[] | undefined; \"kibana.alert.rule\"?: string[] | undefined; \"kibana.alert.rule.exceptions_list\"?: string[] | undefined; \"kibana.alert.rule.namespace\"?: string[] | undefined; \"kibana.alert.suppression.terms\"?: string[] | undefined; } & { [x: string]: unknown[]; }" + ], + "path": "packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/alerts-ui-shared", + "id": "def-common.AlertFieldsTableProps.fields", + "type": "Array", + "tags": [], + "label": "fields", + "description": [ + "\nA list of alert field keys to be shown in the table.\nWhen not defined, all the fields are shown." + ], + "signature": [ + "(string | number)[] | undefined" ], "path": "packages/kbn-alerts-ui-shared/src/alert_fields_table/index.tsx", "deprecated": false, diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 6efea930dd9b3..dce4a6471d42a 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.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 | |-------------------|-----------|------------------------|-----------------| -| 94 | 0 | 92 | 1 | +| 95 | 0 | 90 | 1 | ## Common diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 5a58e17ee952a..5c4292579e505 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 06d7368c4ec16..d694a3f8f3ba9 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 3c71b9ada9846..8fed0d52abc50 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index e9f6a5142534f..78679e4f8edd3 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 440d26ca3760d..3d117b605e41c 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 019c1b5004309..8e51ce6c91a4b 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index bf758445a3fe0..5a24aa593a393 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index e7a06b1a55d40..eb64dad40f062 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-01-24 +date: 2024-01-25 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_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 8a2050d71a744..821eb9f10c263 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-01-24 +date: 2024-01-25 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 e806f4e290ebd..149f30b14ae84 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-01-24 +date: 2024-01-25 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_utils.mdx b/api_docs/kbn_apm_utils.mdx index 680d01f64d716..0262a1ed9b30e 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index fa7df71033a24..fc90735c37b3c 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-01-24 +date: 2024-01-25 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 0e196ca79df30..d047275316f9f 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-01-24 +date: 2024-01-25 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 0c3cb1d4aab78..a064f8350fb20 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-01-24 +date: 2024-01-25 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 5045e1e7d2087..7d20bdcbeaaef 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-01-24 +date: 2024-01-25 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 5cb05290118f4..d76fafce5327d 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 30c8a91821391..7d540b9b6d6b5 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-01-24 +date: 2024-01-25 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.mdx b/api_docs/kbn_chart_expressions_common.mdx index 352e37dfbc304..23ad71c097e91 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 48a0745581671..db669c1d58f77 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-01-24 +date: 2024-01-25 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 71d023cb41e11..583dcccf12d26 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-01-24 +date: 2024-01-25 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 48f717e7632d5..8ac940fdbac8b 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-01-24 +date: 2024-01-25 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 c77447b8830cc..94514acb4f6ba 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-01-24 +date: 2024-01-25 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 fc7d7268f573d..86e9f7ad230d0 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 4ad0315d3d87a..f73267b5f0621 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-01-24 +date: 2024-01-25 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 d44ee634ee738..bab3c23a70831 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-01-24 +date: 2024-01-25 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 b16996e0c8e41..bde3d496e942c 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index 330a3717674e9..ab9f94ea244c4 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 2010195929f67..93646e6515d5a 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-01-24 +date: 2024-01-25 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 403b20cf5728e..4ea463c2de763 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-01-24 +date: 2024-01-25 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 9a939c2ae26ff..d40a17d6b839e 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-01-24 +date: 2024-01-25 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 0104462738e2f..f35e07201e15d 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-01-24 +date: 2024-01-25 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_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index fa8fd5a1861e3..b8c16b989a85a 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-01-24 +date: 2024-01-25 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 3f13c6f6c0106..38c99fe20f1cd 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-01-24 +date: 2024-01-25 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 c7216271dc021..814df6f24f021 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-01-24 +date: 2024-01-25 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 dff42a0a491a3..853418301e333 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-01-24 +date: 2024-01-25 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_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 7a0b959f92fca..6e814cd21cece 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-01-24 +date: 2024-01-25 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 6a644ffcbea18..8b61551eb1c69 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-01-24 +date: 2024-01-25 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 6842280f903d4..d26ceebff7f75 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-01-24 +date: 2024-01-25 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 6bc8d9009df11..b132bcc236bfc 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-01-24 +date: 2024-01-25 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 481fe5c527ae2..0a428521cfac1 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-01-24 +date: 2024-01-25 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 beee6760981b0..eb24f1c8ab835 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-01-24 +date: 2024-01-25 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 fa2cdd0b8e3cf..ce525c27c4169 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-01-24 +date: 2024-01-25 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 8f067c39c29d0..76acf7e1d61c7 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-01-24 +date: 2024-01-25 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 b42ada75dcfb0..092ce2e40df92 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-01-24 +date: 2024-01-25 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 8199898b3376f..a7a2bbd29db7f 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-01-24 +date: 2024-01-25 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 c934f99d8f5bb..2f5c5e6740614 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-01-24 +date: 2024-01-25 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 a11cab1fcd86b..047b258fdedf7 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-01-24 +date: 2024-01-25 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 ececac90ecdd8..77f6abceec47b 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-01-24 +date: 2024-01-25 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 543e7bfc66f48..dfb1f3e1bc3af 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-01-24 +date: 2024-01-25 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 5db1b94e7776f..629c1cd06543a 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-01-24 +date: 2024-01-25 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 ae656ad5cca8a..51d7833d36133 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-01-24 +date: 2024-01-25 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 1f36cd17f7749..116c33982235d 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-01-24 +date: 2024-01-25 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 8cea80fbd5230..bed8c67971179 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-01-24 +date: 2024-01-25 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 0bd7bf7951d0a..9fc696408db0b 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-01-24 +date: 2024-01-25 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 42f732ca84897..ea07c07c47e66 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-01-24 +date: 2024-01-25 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 a4b86c6279265..807ba7bd21be9 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-01-24 +date: 2024-01-25 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 0842c9ffad16b..80895745b0a66 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-01-24 +date: 2024-01-25 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 b1a33e54e39e4..aed2780fd5302 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-01-24 +date: 2024-01-25 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 7b20d28c04f76..0c376d5e78dac 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-01-24 +date: 2024-01-25 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 d3e91c2264141..87d581d830e45 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-01-24 +date: 2024-01-25 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 7c9f998a67f6a..40cc79180ae32 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-01-24 +date: 2024-01-25 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 6b70851c3cb04..7be0b2984bc8a 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-01-24 +date: 2024-01-25 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 32f769e89a822..f17c8213cb5c3 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-01-24 +date: 2024-01-25 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 18e56efcbce7e..9a1af7abaa22e 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-01-24 +date: 2024-01-25 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 3ced2a36e0048..e66540807da07 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-01-24 +date: 2024-01-25 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 88ffe5d3d5b14..014356028b271 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-01-24 +date: 2024-01-25 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 74856e15cf341..763055dbfeaf9 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-01-24 +date: 2024-01-25 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 8ba77357334dd..f04cb86393fb7 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-01-24 +date: 2024-01-25 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 abbc17652023c..ec973cebbf434 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-01-24 +date: 2024-01-25 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 28f38e501fc91..1b1fb04a5d590 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-01-24 +date: 2024-01-25 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 7db7ffa89c6ac..300ef9c281a1b 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-01-24 +date: 2024-01-25 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 07619119fde3d..ad933156a423e 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-01-24 +date: 2024-01-25 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 c94706e0489ed..a711694adb69c 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-01-24 +date: 2024-01-25 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 64818dcd358e0..9777e5ec13e5a 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-01-24 +date: 2024-01-25 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 9bc34c766740e..15f5d4e6fd3a0 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-01-24 +date: 2024-01-25 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 071100fed6688..2cc2a0fdf954e 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-01-24 +date: 2024-01-25 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 1d64f4f947fcf..266694442ec43 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-01-24 +date: 2024-01-25 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 2bd1bbd320bba..793d2900c6690 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-01-24 +date: 2024-01-25 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 6ca37d933d605..7222984c26d28 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-01-24 +date: 2024-01-25 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 1782cf6b644a7..72913f15543dd 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-01-24 +date: 2024-01-25 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 783901057cfa2..9e4ab2b7272ba 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-01-24 +date: 2024-01-25 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 893698704aa8a..c2f4b2fa72734 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-01-24 +date: 2024-01-25 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 86052153114ef..b0aa37355690a 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-01-24 +date: 2024-01-25 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 a75d688e7a694..71f9bb27d9b9c 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-01-24 +date: 2024-01-25 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 646850676f7e7..6b1c17c1d00a1 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-01-24 +date: 2024-01-25 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 4855d3d293882..5d211708375c7 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-01-24 +date: 2024-01-25 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 e4fa18ac3e82d..7b27fc688472d 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-01-24 +date: 2024-01-25 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 f33a5799a3678..2c319a4d0f646 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-01-24 +date: 2024-01-25 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 c298619a3b36b..42db3b84059f1 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-01-24 +date: 2024-01-25 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 cb1a07f687aad..b084c7027d312 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-01-24 +date: 2024-01-25 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 3db071b0f047f..26d1198c78ca2 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-01-24 +date: 2024-01-25 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 6bb9f2774cc0a..554672a5d0663 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-01-24 +date: 2024-01-25 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 9f1db0f4e0791..186d8111e6f90 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-01-24 +date: 2024-01-25 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 d4dde58775fd4..e101b406a8872 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-01-24 +date: 2024-01-25 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 b4d169390a73f..bca71c970194e 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-01-24 +date: 2024-01-25 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 4b49039c5fd17..a2b54137ccf55 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-01-24 +date: 2024-01-25 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 961fd8604eee7..5d565cd43864a 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-01-24 +date: 2024-01-25 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 ce2c85c045746..3e7b318f5365a 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-01-24 +date: 2024-01-25 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 509a4a9359784..1b5f80bf73943 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-01-24 +date: 2024-01-25 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 9906b839a1cad..60096a5012988 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-01-24 +date: 2024-01-25 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 652aa076b8df8..b2af0a38eddf8 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-01-24 +date: 2024-01-25 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 1892860f5e8d3..36d18d4292427 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-01-24 +date: 2024-01-25 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 fd0d9570d570d..2d5a235d19d78 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-01-24 +date: 2024-01-25 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 3e99f6c2f1407..3e22c2d288c96 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-01-24 +date: 2024-01-25 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 882655db18cb3..128a5f77eb007 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-01-24 +date: 2024-01-25 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 fabf88dba31ae..f17449673b285 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -13494,6 +13494,10 @@ "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_ilm_explain.ts" }, + { + "plugin": "ecsDataQualityDashboard", + "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/get_results.ts" + }, { "plugin": "elasticAssistant", "path": "x-pack/plugins/elastic_assistant/server/routes/capabilities/get_capabilities_route.ts" @@ -14812,6 +14816,10 @@ "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/get_unallowed_field_values.ts" }, + { + "plugin": "ecsDataQualityDashboard", + "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_results.ts" + }, { "plugin": "logsShared", "path": "x-pack/plugins/logs_shared/server/lib/adapters/framework/kibana_framework_adapter.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index d115d07c3d35e..43ee602d879cf 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-01-24 +date: 2024-01-25 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 c6dc758599e9a..a6ea69b32448e 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-01-24 +date: 2024-01-25 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 5da88e2b75c35..640a50711e003 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-01-24 +date: 2024-01-25 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 d1b765fe58891..e23f714300c00 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-01-24 +date: 2024-01-25 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 0f5838681ea3b..401cb55d0f35c 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-01-24 +date: 2024-01-25 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 b14d47afb5513..8dd5f77b6e3da 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-01-24 +date: 2024-01-25 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 c073377f6b699..541739db3d9f7 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-01-24 +date: 2024-01-25 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 8a4dd2b6d58fa..96bf6b561cd14 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-01-24 +date: 2024-01-25 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 10b797ea17091..85ec568f8a9f5 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-01-24 +date: 2024-01-25 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 97481289f1738..dd5245db5164a 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-01-24 +date: 2024-01-25 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 7ddce5f265709..29f111bc69715 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-01-24 +date: 2024-01-25 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 4de761d77338e..5dbdef283f799 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-01-24 +date: 2024-01-25 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 aa41868646045..acd480f085307 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-01-24 +date: 2024-01-25 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 2ea94e4e0dc53..40e62e36651db 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-01-24 +date: 2024-01-25 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 11fb6c2f324bf..7f05625848969 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-01-24 +date: 2024-01-25 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 43932e313d8a1..66e9017391b19 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-01-24 +date: 2024-01-25 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 999400459e367..32abf909832d9 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-01-24 +date: 2024-01-25 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 d96e179504375..f43e521b4a871 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-01-24 +date: 2024-01-25 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 0dcb01955c134..a2eee96c9d53d 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-01-24 +date: 2024-01-25 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 d733cfa070c58..9e4780ad3d9ef 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-01-24 +date: 2024-01-25 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 ef926a6c58f0c..71943b78962f6 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-01-24 +date: 2024-01-25 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 9a7e392e1bfd6..36e7da6be37bc 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-01-24 +date: 2024-01-25 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 5f2f739c69721..efca07b5f7f22 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-01-24 +date: 2024-01-25 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 1e82b767b247e..269f4bfe2df41 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-01-24 +date: 2024-01-25 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 54311bbe8fe5e..bf00d3bb160a5 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-01-24 +date: 2024-01-25 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 0325387c5dd5c..e0cfcc383b851 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-01-24 +date: 2024-01-25 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 cd65b1d919998..f3cd90805a9ab 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-01-24 +date: 2024-01-25 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 6506f47fa44f8..a0e40de470a11 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-01-24 +date: 2024-01-25 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 e0125c59811d4..389422efc6967 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-01-24 +date: 2024-01-25 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 0bf71cd1143b7..eba1b6d73fe2f 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-01-24 +date: 2024-01-25 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 0b16d67b5d754..17204cb054d4b 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-01-24 +date: 2024-01-25 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 1b6a28b2ab6f6..4185487e38112 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-01-24 +date: 2024-01-25 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 af70d9f7ae887..6d13171549b3d 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-01-24 +date: 2024-01-25 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 0dd939d3e8007..16d648ea6e9f8 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-01-24 +date: 2024-01-25 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 fa48b5bddfae2..ea64b16fbe7bd 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-01-24 +date: 2024-01-25 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 3ba5f292e4f63..c09a6341da419 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-01-24 +date: 2024-01-25 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 3276fc97e1ba8..95d80cac59419 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-01-24 +date: 2024-01-25 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 29fc6de26dc28..9a15a9a3ad3fc 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-01-24 +date: 2024-01-25 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 fbe70dc394f8c..e05ba89dea2bd 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-01-24 +date: 2024-01-25 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 57e53cb4f8cb6..4e86dd7b0338e 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-01-24 +date: 2024-01-25 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 b62d190b834f1..36a43480010d0 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-01-24 +date: 2024-01-25 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 752d5a3394dd8..a13abe4471bd1 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-01-24 +date: 2024-01-25 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 5e7ea90436bb4..0ae04063a2010 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-01-24 +date: 2024-01-25 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 99dfd8c5a94a4..1e5b8974747e2 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-01-24 +date: 2024-01-25 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 2ef238e934cfd..416da0e58459b 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-01-24 +date: 2024-01-25 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 68b37306ffd83..14efce4595c56 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-01-24 +date: 2024-01-25 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 67592699d86b8..c14467ff78850 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-01-24 +date: 2024-01-25 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 a2051958b1d65..8d69f6e285d2e 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-01-24 +date: 2024-01-25 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 d0ae3060e0b9f..020b0f858c121 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-01-24 +date: 2024-01-25 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 56489b6588d3f..7e6974a74e255 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-01-24 +date: 2024-01-25 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 88ccdb2dfc0dc..cae625cd842eb 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-01-24 +date: 2024-01-25 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 63aa72f7567fb..c0cfa984a5638 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-01-24 +date: 2024-01-25 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 094f436f6147a..af1750c870d86 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-01-24 +date: 2024-01-25 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 0ce5eac623955..e6b64a18bb17b 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-01-24 +date: 2024-01-25 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 0e4a62e729734..5bdd6e7481f2b 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-01-24 +date: 2024-01-25 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.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 46a7bf12ef23c..912b401190e73 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-01-24 +date: 2024-01-25 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 c7c7c09dece25..0c236690f830e 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-01-24 +date: 2024-01-25 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 703eb783287b8..e4f6867961581 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-01-24 +date: 2024-01-25 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 9f93bc67c1012..564e6fdef5561 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-01-24 +date: 2024-01-25 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 37a79e3f33f25..2deedb9d0b377 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-01-24 +date: 2024-01-25 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.mdx b/api_docs/kbn_core_saved_objects_server.mdx index dc1b79d5196d8..48967e6f13de9 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-01-24 +date: 2024-01-25 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 5afc5f63bca81..8fd3263949a9f 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-01-24 +date: 2024-01-25 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 21d5d1aec8a2e..f42b3f7ecb690 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-01-24 +date: 2024-01-25 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 3f1710d7de77d..2541b63080a67 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-01-24 +date: 2024-01-25 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_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 3e993b2703890..ae9c4f77ede86 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-01-24 +date: 2024-01-25 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 5800c5162a985..3d6dd46a50b43 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-01-24 +date: 2024-01-25 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 3e67aacad86b5..3f2bfc9814b8c 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-01-24 +date: 2024-01-25 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 c9794b948d720..02c13028680f6 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-01-24 +date: 2024-01-25 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 60d2ca777733f..e038e0b21a666 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-01-24 +date: 2024-01-25 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 2024748bcd5ad..051090da200dd 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-01-24 +date: 2024-01-25 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 6fa46f9f8c180..aea668c31e550 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-01-24 +date: 2024-01-25 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 5eedcee0d3a89..61fe7d862727e 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-01-24 +date: 2024-01-25 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 c545858118c14..d3692745662c9 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-01-24 +date: 2024-01-25 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 1ed59a6d0a3ff..5ed47d8ade53b 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-01-24 +date: 2024-01-25 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 e4deac4c82acf..c42f3a405f1bd 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-01-24 +date: 2024-01-25 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 c0d6963b85456..983e26d7a6e2b 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-01-24 +date: 2024-01-25 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 07065756c3056..565fbe7e859a7 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-01-24 +date: 2024-01-25 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 230985220eaa4..2f7511d9ba794 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-01-24 +date: 2024-01-25 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 abc7efe336aa1..1df9d96d2b666 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-01-24 +date: 2024-01-25 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 40b0be84d3b24..63727770261f2 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-01-24 +date: 2024-01-25 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 45d48b6658771..43b4d3feff58c 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-01-24 +date: 2024-01-25 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 49c3a6c540871..17289705e5e56 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-01-24 +date: 2024-01-25 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 23cbdb50e298f..70ea32b31d7bb 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-01-24 +date: 2024-01-25 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 ef89fa19e5291..421c3dc53aa9f 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-01-24 +date: 2024-01-25 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 b83cadd85bfea..9bfa13255df2f 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-01-24 +date: 2024-01-25 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 507428535a3e6..20b1c112d6e17 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-01-24 +date: 2024-01-25 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 2189cd15ebd61..75fe7b4e5b159 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-01-24 +date: 2024-01-25 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_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 43f08c22b026c..5150bceb6d6c1 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-01-24 +date: 2024-01-25 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_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index 187588ee3fa96..743d2eb8a8cea 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.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 d0f6bbda11aed..e7167f0f9868c 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-01-24 +date: 2024-01-25 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 083af260ffacf..8fdfc193aeacb 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-01-24 +date: 2024-01-25 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 e13af67c0a3db..feb53eb15fddd 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-01-24 +date: 2024-01-25 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 bb9561cbedd1f..ad595ab216b72 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-01-24 +date: 2024-01-25 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 cd67b6b80d57b..885194b804f95 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-01-24 +date: 2024-01-25 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 2d07329797421..4331bbc7a03b6 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-01-24 +date: 2024-01-25 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 278313c609e5c..161639ded192d 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-01-24 +date: 2024-01-25 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 8298aab430a78..24368144274e7 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-01-24 +date: 2024-01-25 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.devdocs.json b/api_docs/kbn_data_stream_adapter.devdocs.json new file mode 100644 index 0000000000000..f9c2ca34a11ec --- /dev/null +++ b/api_docs/kbn_data_stream_adapter.devdocs.json @@ -0,0 +1,1315 @@ +{ + "id": "@kbn/data-stream-adapter", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter", + "type": "Class", + "tags": [], + "label": "DataStreamAdapter", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.kibanaVersion", + "type": "string", + "tags": [], + "label": "kibanaVersion", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.totalFieldsLimit", + "type": "number", + "tags": [], + "label": "totalFieldsLimit", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.componentTemplates", + "type": "Array", + "tags": [], + "label": "componentTemplates", + "description": [], + "signature": [ + "ClusterPutComponentTemplateRequest", + "[]" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.indexTemplates", + "type": "Array", + "tags": [], + "label": "indexTemplates", + "description": [], + "signature": [ + "IndicesPutIndexTemplateRequest", + "[]" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.installed", + "type": "boolean", + "tags": [], + "label": "installed", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.Unnamed.$1", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.DataStreamAdapterParams", + "text": "DataStreamAdapterParams" + } + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.setComponentTemplate", + "type": "Function", + "tags": [], + "label": "setComponentTemplate", + "description": [], + "signature": [ + "(params: ", + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.SetComponentTemplateParams", + "text": "SetComponentTemplateParams" + }, + ") => void" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.setComponentTemplate.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.SetComponentTemplateParams", + "text": "SetComponentTemplateParams" + } + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.setIndexTemplate", + "type": "Function", + "tags": [], + "label": "setIndexTemplate", + "description": [], + "signature": [ + "(params: ", + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.SetIndexTemplateParams", + "text": "SetIndexTemplateParams" + }, + ") => void" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.setIndexTemplate.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.SetIndexTemplateParams", + "text": "SetIndexTemplateParams" + } + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.getInstallFn", + "type": "Function", + "tags": [], + "label": "getInstallFn", + "description": [], + "signature": [ + "({ logger, pluginStop$, tasksTimeoutMs }: ", + "GetInstallFnParams", + ") => (promise: Promise, description?: string | undefined) => Promise" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.getInstallFn.$1", + "type": "Object", + "tags": [], + "label": "{ logger, pluginStop$, tasksTimeoutMs }", + "description": [], + "signature": [ + "GetInstallFnParams" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.install", + "type": "Function", + "tags": [], + "label": "install", + "description": [], + "signature": [ + "({ logger, esClient: esClientToResolve, pluginStop$, tasksTimeoutMs, }: ", + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.InstallParams", + "text": "InstallParams" + }, + ") => Promise" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapter.install.$1", + "type": "Object", + "tags": [], + "label": "{\n logger,\n esClient: esClientToResolve,\n pluginStop$,\n tasksTimeoutMs,\n }", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.InstallParams", + "text": "InstallParams" + } + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter", + "type": "Class", + "tags": [], + "label": "DataStreamSpacesAdapter", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.DataStreamSpacesAdapter", + "text": "DataStreamSpacesAdapter" + }, + " extends ", + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.DataStreamAdapter", + "text": "DataStreamAdapter" + } + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter.Unnamed.$1", + "type": "string", + "tags": [], + "label": "prefix", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.DataStreamAdapterParams", + "text": "DataStreamAdapterParams" + } + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter.install", + "type": "Function", + "tags": [], + "label": "install", + "description": [], + "signature": [ + "({ logger, esClient: esClientToResolve, pluginStop$, tasksTimeoutMs, }: ", + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.InstallParams", + "text": "InstallParams" + }, + ") => Promise" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter.install.$1", + "type": "Object", + "tags": [], + "label": "{\n logger,\n esClient: esClientToResolve,\n pluginStop$,\n tasksTimeoutMs,\n }", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.InstallParams", + "text": "InstallParams" + } + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter.installSpace", + "type": "Function", + "tags": [], + "label": "installSpace", + "description": [], + "signature": [ + "(spaceId: string) => Promise" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter.installSpace.$1", + "type": "string", + "tags": [], + "label": "spaceId", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter.getInstalledSpaceName", + "type": "Function", + "tags": [], + "label": "getInstalledSpaceName", + "description": [], + "signature": [ + "(spaceId: string) => Promise" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamSpacesAdapter.getInstalledSpaceName.$1", + "type": "string", + "tags": [], + "label": "spaceId", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_spaces_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.retryTransientEsErrors", + "type": "Function", + "tags": [], + "label": "retryTransientEsErrors", + "description": [], + "signature": [ + "(esCall: () => Promise, { logger, attempt }: { logger: ", + { + "pluginId": "@kbn/logging", + "scope": "common", + "docId": "kibKbnLoggingPluginApi", + "section": "def-common.Logger", + "text": "Logger" + }, + "; attempt?: number | undefined; }) => Promise" + ], + "path": "packages/kbn-data-stream-adapter/src/retry_transient_es_errors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.retryTransientEsErrors.$1", + "type": "Function", + "tags": [], + "label": "esCall", + "description": [], + "signature": [ + "() => Promise" + ], + "path": "packages/kbn-data-stream-adapter/src/retry_transient_es_errors.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.retryTransientEsErrors.$2", + "type": "Object", + "tags": [], + "label": "{ logger, attempt = 0 }", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/retry_transient_es_errors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.retryTransientEsErrors.$2.logger", + "type": "Object", + "tags": [], + "label": "logger", + "description": [], + "signature": [ + { + "pluginId": "@kbn/logging", + "scope": "common", + "docId": "kibKbnLoggingPluginApi", + "section": "def-common.Logger", + "text": "Logger" + } + ], + "path": "packages/kbn-data-stream-adapter/src/retry_transient_es_errors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.retryTransientEsErrors.$2.attempt", + "type": "number", + "tags": [], + "label": "attempt", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/retry_transient_es_errors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.AllowedValue", + "type": "Interface", + "tags": [], + "label": "AllowedValue", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.AllowedValue.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.AllowedValue.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapterParams", + "type": "Interface", + "tags": [], + "label": "DataStreamAdapterParams", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapterParams.kibanaVersion", + "type": "string", + "tags": [], + "label": "kibanaVersion", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.DataStreamAdapterParams.totalFieldsLimit", + "type": "number", + "tags": [], + "label": "totalFieldsLimit", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata", + "type": "Interface", + "tags": [], + "label": "EcsMetadata", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.allowed_values", + "type": "Array", + "tags": [], + "label": "allowed_values", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.AllowedValue", + "text": "AllowedValue" + }, + "[] | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.dashed_name", + "type": "string", + "tags": [], + "label": "dashed_name", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.doc_values", + "type": "CompoundType", + "tags": [], + "label": "doc_values", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.example", + "type": "CompoundType", + "tags": [], + "label": "example", + "description": [], + "signature": [ + "string | number | boolean | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.flat_name", + "type": "string", + "tags": [], + "label": "flat_name", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.ignore_above", + "type": "number", + "tags": [], + "label": "ignore_above", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.index", + "type": "CompoundType", + "tags": [], + "label": "index", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.level", + "type": "string", + "tags": [], + "label": "level", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.multi_fields", + "type": "Array", + "tags": [], + "label": "multi_fields", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.MultiField", + "text": "MultiField" + }, + "[] | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.normalize", + "type": "Array", + "tags": [], + "label": "normalize", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.required", + "type": "CompoundType", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.scaling_factor", + "type": "number", + "tags": [], + "label": "scaling_factor", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.short", + "type": "string", + "tags": [], + "label": "short", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsMetadata.properties", + "type": "Object", + "tags": [], + "label": "properties", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.FieldMap", + "type": "Interface", + "tags": [], + "label": "FieldMap", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.FieldMap.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[key: string]: { type: string; required: boolean; array?: boolean | undefined; doc_values?: boolean | undefined; enabled?: boolean | undefined; format?: string | undefined; ignore_above?: number | undefined; ... 5 more ...; properties?: Record<...> | undefined; }", + "description": [], + "signature": [ + "[key: string]: { type: string; required: boolean; array?: boolean | undefined; doc_values?: boolean | undefined; enabled?: boolean | undefined; format?: string | undefined; ignore_above?: number | undefined; multi_fields?: ", + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.MultiField", + "text": "MultiField" + }, + "[] | undefined; index?: boolean | undefined; path?: string | undefined; scaling_factor?: number | undefined; dynamic?: boolean | \"strict\" | undefined; properties?: Record | undefined; }" + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.InstallParams", + "type": "Interface", + "tags": [], + "label": "InstallParams", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.InstallParams.logger", + "type": "Object", + "tags": [], + "label": "logger", + "description": [], + "signature": [ + { + "pluginId": "@kbn/logging", + "scope": "common", + "docId": "kibKbnLoggingPluginApi", + "section": "def-common.Logger", + "text": "Logger" + } + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.InstallParams.esClient", + "type": "CompoundType", + "tags": [], + "label": "esClient", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-elasticsearch-server", + "scope": "common", + "docId": "kibKbnCoreElasticsearchServerPluginApi", + "section": "def-common.ElasticsearchClient", + "text": "ElasticsearchClient" + }, + " | Promise<", + { + "pluginId": "@kbn/core-elasticsearch-server", + "scope": "common", + "docId": "kibKbnCoreElasticsearchServerPluginApi", + "section": "def-common.ElasticsearchClient", + "text": "ElasticsearchClient" + }, + ">" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.InstallParams.pluginStop$", + "type": "Object", + "tags": [], + "label": "pluginStop$", + "description": [], + "signature": [ + "Subject", + "" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.InstallParams.tasksTimeoutMs", + "type": "number", + "tags": [], + "label": "tasksTimeoutMs", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.MultiField", + "type": "Interface", + "tags": [], + "label": "MultiField", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.MultiField.flat_name", + "type": "string", + "tags": [], + "label": "flat_name", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.MultiField.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.MultiField.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/field_maps/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetComponentTemplateParams", + "type": "Interface", + "tags": [], + "label": "SetComponentTemplateParams", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetComponentTemplateParams.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetComponentTemplateParams.fieldMap", + "type": "Object", + "tags": [], + "label": "fieldMap", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.FieldMap", + "text": "FieldMap" + } + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetComponentTemplateParams.settings", + "type": "CompoundType", + "tags": [], + "label": "settings", + "description": [], + "signature": [ + "IndicesIndexSettings", + " | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetComponentTemplateParams.dynamic", + "type": "CompoundType", + "tags": [], + "label": "dynamic", + "description": [], + "signature": [ + "boolean | \"strict\" | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetIndexTemplateParams", + "type": "Interface", + "tags": [], + "label": "SetIndexTemplateParams", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetIndexTemplateParams.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetIndexTemplateParams.componentTemplateRefs", + "type": "Array", + "tags": [], + "label": "componentTemplateRefs", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetIndexTemplateParams.namespace", + "type": "string", + "tags": [], + "label": "namespace", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetIndexTemplateParams.template", + "type": "Object", + "tags": [], + "label": "template", + "description": [], + "signature": [ + "IndicesPutIndexTemplateIndexTemplateMapping", + " | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.SetIndexTemplateParams.hidden", + "type": "CompoundType", + "tags": [], + "label": "hidden", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-data-stream-adapter/src/data_stream_adapter.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.EcsFieldMap", + "type": "Type", + "tags": [], + "label": "EcsFieldMap", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.FieldMap", + "text": "FieldMap" + } + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/ecs_field_map.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/data-stream-adapter", + "id": "def-common.ecsFieldMap", + "type": "Object", + "tags": [], + "label": "ecsFieldMap", + "description": [], + "signature": [ + { + "pluginId": "@kbn/data-stream-adapter", + "scope": "common", + "docId": "kibKbnDataStreamAdapterPluginApi", + "section": "def-common.FieldMap", + "text": "FieldMap" + } + ], + "path": "packages/kbn-data-stream-adapter/src/field_maps/ecs_field_map.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] + } +} \ No newline at end of file diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx new file mode 100644 index 0000000000000..743c120051ebb --- /dev/null +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -0,0 +1,42 @@ +--- +#### +#### 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: kibKbnDataStreamAdapterPluginApi +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-01-25 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] +--- +import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; + + + +Contact [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 80 | 0 | 80 | 1 | + +## Common + +### Objects + + +### Functions + + +### Classes + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index b44c864729dae..05261eec07d6a 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-01-24 +date: 2024-01-25 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 27becb6acbbac..24dc67dc7f43c 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-01-24 +date: 2024-01-25 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 ae4513917f992..17f33c8e69eb0 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 88c2b68619225..ecb4bf3c1c839 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-01-24 +date: 2024-01-25 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 3853654e3fff8..ba1e3569bfe26 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index bf0e9caca4e81..7a44a1558759c 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 5baf2d0b0739e..e3485b0e9ffc8 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 244b124d9672b..e27557884d230 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-01-24 +date: 2024-01-25 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 4bd170b0d49d9..d57a61fff7fdb 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-01-24 +date: 2024-01-25 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 44ac5517ea80b..a73a7bf7c016d 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-01-24 +date: 2024-01-25 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 1ca95fcc6220a..56e87da8381ff 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-01-24 +date: 2024-01-25 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 3104172a663a7..0febf21853364 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-01-24 +date: 2024-01-25 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 0b187528c3f4e..322db9b8512fd 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-01-24 +date: 2024-01-25 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 b35c058d80b30..2380f1923a215 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-01-24 +date: 2024-01-25 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 95ab5c97e76f9..deed1bf44762b 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 4005668ec17c2..f4b33d7e2a650 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 24abef2ad4db4..3f8a212c76b38 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-01-24 +date: 2024-01-25 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 9f8012d9df8cd..d96001a8eceb7 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-01-24 +date: 2024-01-25 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 610de058fa1ca..c621799bf48e3 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-01-24 +date: 2024-01-25 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 c9c6b9a904668..c71bca3c62148 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs.mdx b/api_docs/kbn_ecs.mdx index 34812893fc46c..adeb8ec0789a0 100644 --- a/api_docs/kbn_ecs.mdx +++ b/api_docs/kbn_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs title: "@kbn/ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs'] --- import kbnEcsObj from './kbn_ecs.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 8e0ba99a26465..47ad1622c33b6 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-01-24 +date: 2024-01-25 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 a0bfe8d1fa2e8..00987094c574f 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-01-24 +date: 2024-01-25 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 b4415d07a5979..7db3662180f6b 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-01-24 +date: 2024-01-25 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 9b5166fcda93d..c9b67b7a397db 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index a40f64bc5b3be..60b77f98aa581 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-01-24 +date: 2024-01-25 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 e8e15c90a70f4..dbcf14738a35d 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-01-24 +date: 2024-01-25 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 68cf95b6aafc0..d2d9345c93a4f 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-01-24 +date: 2024-01-25 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 7f99f7ea72a7f..47abd55795b15 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-01-24 +date: 2024-01-25 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 699e43f0db331..598708fd150f9 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-01-24 +date: 2024-01-25 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 8862b75727b41..2f6e82c758ae2 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index f25d18c387664..cd908f40ca901 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-01-24 +date: 2024-01-25 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 2c5fd9b15392f..c90870155356d 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-01-24 +date: 2024-01-25 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.mdx b/api_docs/kbn_expandable_flyout.mdx index 9546b76f7672b..040f0f4b62358 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index c26933d5a4da4..ccd9ffc98dd8e 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-01-24 +date: 2024-01-25 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 0768f0e5ae31d..0cd49943b9005 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-01-24 +date: 2024-01-25 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 06545a4646307..10b9db74ce601 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-01-24 +date: 2024-01-25 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_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index e450f0359d5d8..2a5982133d233 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-01-24 +date: 2024-01-25 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.devdocs.json b/api_docs/kbn_ftr_common_functional_ui_services.devdocs.json index 45d506fcafd31..d647d7dc8d83a 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.devdocs.json +++ b/api_docs/kbn_ftr_common_functional_ui_services.devdocs.json @@ -1841,7 +1841,15 @@ "label": "isEuiSwitchChecked", "description": [], "signature": [ - "(selector: string) => Promise" + "(selector: string | ", + { + "pluginId": "@kbn/ftr-common-functional-ui-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", + "section": "def-common.WebElementWrapper", + "text": "WebElementWrapper" + }, + ") => Promise" ], "path": "packages/kbn-ftr-common-functional-ui-services/services/test_subjects.ts", "deprecated": false, @@ -1850,12 +1858,19 @@ { "parentPluginId": "@kbn/ftr-common-functional-ui-services", "id": "def-common.TestSubjects.isEuiSwitchChecked.$1", - "type": "string", + "type": "CompoundType", "tags": [], "label": "selector", "description": [], "signature": [ - "string" + "string | ", + { + "pluginId": "@kbn/ftr-common-functional-ui-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", + "section": "def-common.WebElementWrapper", + "text": "WebElementWrapper" + } ], "path": "packages/kbn-ftr-common-functional-ui-services/services/test_subjects.ts", "deprecated": false, diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 92d0c4ca0a8b2..a84044e340f9c 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-01-24 +date: 2024-01-25 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 2a59a0b1fbf4f..69fa77dfe42ea 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-01-24 +date: 2024-01-25 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 fb31cbb31a1c1..6eab9e0e38e3b 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-01-24 +date: 2024-01-25 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 b52e50aaae2ec..1b9eb045e55af 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index bb0907f00c99b..1dbdd19451895 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-01-24 +date: 2024-01-25 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 224d80edf5b2d..40392bf56d03b 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-01-24 +date: 2024-01-25 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 c9b1881f41676..a10c32d4d4829 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-01-24 +date: 2024-01-25 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 691b0e858f47d..7602f9e5653ed 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-01-24 +date: 2024-01-25 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 2fc517ae980b0..cbaddaa1bac71 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-01-24 +date: 2024-01-25 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 37f00b8002ebf..00492153647ff 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-01-24 +date: 2024-01-25 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 dc6c5e6fb3da3..d2f9e1890d8d7 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-01-24 +date: 2024-01-25 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 d3b1d8c5fc02d..184a28e3a68ac 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-01-24 +date: 2024-01-25 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 66eb9e35bf6e7..70e7a5a82991e 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 206f37365d7fe..996cb5b76c7b8 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-01-24 +date: 2024-01-25 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 d9044a690a66c..85ab1829c3c41 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index c546fa9ae4e9c..694c6117e521a 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 1ee501bd37d4b..b115750bf383a 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-01-24 +date: 2024-01-25 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 3592d4341d543..c91aa0971b83f 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-01-24 +date: 2024-01-25 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 177580a4e6f4e..9d76bf8d30acf 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 6682776e3c27a..f431aa8a99dcd 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-01-24 +date: 2024-01-25 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 92139d71b0f5e..a2c485c82bc4c 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-01-24 +date: 2024-01-25 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 862c9eb685629..409fdc63a545a 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-01-24 +date: 2024-01-25 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 47b634664b12f..a6423ba78e0f7 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-01-24 +date: 2024-01-25 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 a809b2dc1dad4..c15d9ccc5da6a 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-01-24 +date: 2024-01-25 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 dd0896db12a9f..e03c0885d0072 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-01-24 +date: 2024-01-25 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.devdocs.json b/api_docs/kbn_managed_content_badge.devdocs.json new file mode 100644 index 0000000000000..9eee12d881aff --- /dev/null +++ b/api_docs/kbn_managed_content_badge.devdocs.json @@ -0,0 +1,63 @@ +{ + "id": "@kbn/managed-content-badge", + "client": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/managed-content-badge", + "id": "def-public.getManagedContentBadge", + "type": "Function", + "tags": [], + "label": "getManagedContentBadge", + "description": [], + "signature": [ + "(tooltipText: string) => { 'data-test-subj': string; badgeText: string; title: string; color: string; iconType: string; toolTipProps: ", + "EuiToolTipProps", + "; }" + ], + "path": "packages/kbn-managed-content-badge/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/managed-content-badge", + "id": "def-public.getManagedContentBadge.$1", + "type": "string", + "tags": [], + "label": "tooltipText", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-managed-content-badge/index.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [], + "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_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx new file mode 100644 index 0000000000000..b107aa4f8c3ad --- /dev/null +++ b/api_docs/kbn_managed_content_badge.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: kibKbnManagedContentBadgePluginApi +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-01-25 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] +--- +import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; + + + +Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 2 | 0 | 2 | 0 | + +## Client + +### Functions + + diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 44addd8ff3f77..a55af611af260 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-01-24 +date: 2024-01-25 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 8049670341a7d..28b41c0bbb449 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-01-24 +date: 2024-01-25 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 d0479cb093f60..a8716e1b40314 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-01-24 +date: 2024-01-25 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 9755e903242df..0d2fb423694dc 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-01-24 +date: 2024-01-25 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 189475081fc11..862bf6c246795 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-01-24 +date: 2024-01-25 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 e1322cf4ccab7..69b677b08b30f 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-01-24 +date: 2024-01-25 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 8e64330c9a7f9..50753944c4680 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-01-24 +date: 2024-01-25 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 d64652a92df54..f51212ef809f4 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-01-24 +date: 2024-01-25 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 eb1d612a26285..361845a4779fa 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-01-24 +date: 2024-01-25 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 a859152c1707c..36dcc71c0b06a 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-01-24 +date: 2024-01-25 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 9696724a47fb9..31a6719a0e4cd 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-01-24 +date: 2024-01-25 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 428c36d4b47ef..a55793f6d087d 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-01-24 +date: 2024-01-25 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 2977b60b8794a..5eebefc00a1bd 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-01-24 +date: 2024-01-25 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 080f5d173757b..22f8bd0275bb0 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-01-24 +date: 2024-01-25 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 1b9ae29cd62df..93f355497f8dd 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-01-24 +date: 2024-01-25 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 bcfd9347c5855..2db4eea0d22f2 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-01-24 +date: 2024-01-25 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 97579a3bfddba..52b5a53b7dd81 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-01-24 +date: 2024-01-25 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_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 2db82de23640f..f4c746359eaba 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-01-24 +date: 2024-01-25 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 96b8531bf5ec1..639b063807f3b 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-01-24 +date: 2024-01-25 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 403e08369f192..5fba90af108eb 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-01-24 +date: 2024-01-25 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 54668cb30c70f..2e3318999ecfa 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-01-24 +date: 2024-01-25 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 03ab25a59b5a0..50a1d9999b6a2 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-01-24 +date: 2024-01-25 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 cabae70721b7a..6844555f6a6a3 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-01-24 +date: 2024-01-25 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 1426bc9d476a8..b797b5e9462b8 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-01-24 +date: 2024-01-25 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 f30e60b931838..5849195fd9082 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-01-24 +date: 2024-01-25 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 6cd9eb1122092..af38562b5b1af 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-01-24 +date: 2024-01-25 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 25d1bbd5dd925..e62ec443a3aaa 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-01-24 +date: 2024-01-25 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 d2a93944d637d..30d8dc4b5b357 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-01-24 +date: 2024-01-25 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 278c1d01f5dc5..da4075540ba4e 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-01-24 +date: 2024-01-25 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 f7cfc7738931c..35a3b54060029 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-01-24 +date: 2024-01-25 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 f802e2c5d8d73..75547027c6bad 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-01-24 +date: 2024-01-25 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 0a1cd6ddef3a0..d6b1a4f2008cb 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-01-24 +date: 2024-01-25 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 1c05123a3e7e4..efed3c92bcaa7 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-01-24 +date: 2024-01-25 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 143ef95780659..0645a53808d71 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-01-24 +date: 2024-01-25 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 d92f7c3e50a82..f442e828cfd48 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-01-24 +date: 2024-01-25 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 9fe9c4e0d62e5..124053edcac28 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-01-24 +date: 2024-01-25 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_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 17f840cc519b7..6d835c03ff0bb 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-01-24 +date: 2024-01-25 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 b4c1c90d3ce59..61a7b3cf191b3 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-01-24 +date: 2024-01-25 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 1c783fceeb397..0b18358265d5e 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-01-24 +date: 2024-01-25 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 bf969bc9ecac8..e1e0e2792801f 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-01-24 +date: 2024-01-25 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 108d5e9a86f4c..761346132a0d8 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-01-24 +date: 2024-01-25 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 434e9961ad06e..40bb7bfffceed 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-01-24 +date: 2024-01-25 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 923f09e0c5713..9dd45ab0a92f9 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-01-24 +date: 2024-01-25 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_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 3b106be2cde29..5f7cd3dcbe78c 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-01-24 +date: 2024-01-25 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 74b402171fe6a..7067c71fbc703 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-01-24 +date: 2024-01-25 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 cb5a0ab96a250..93732a15115da 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-01-24 +date: 2024-01-25 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 89c44901664cc..7cccf05ee3f23 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-01-24 +date: 2024-01-25 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 10107e4c6d810..24779473b0823 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-01-24 +date: 2024-01-25 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 3aeeaa360d9b6..614b2a741624b 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-01-24 +date: 2024-01-25 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 524032c3e8cb1..58f90be991845 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-01-24 +date: 2024-01-25 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 c033f793883ba..0643363f93541 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-01-24 +date: 2024-01-25 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 542f80024a666..ae66ea36a2c5a 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-01-24 +date: 2024-01-25 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 69f099c8184d0..d3978651694d5 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-01-24 +date: 2024-01-25 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 8644969bf7d5c..5043b9b10a7c9 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-01-24 +date: 2024-01-25 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 49a49cb558bbc..84985db1b70b4 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-01-24 +date: 2024-01-25 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 deac575024acb..601d04367e4af 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_library.mdx b/api_docs/kbn_presentation_library.mdx index 3a0ad79299972..903ab657c4a9a 100644 --- a/api_docs/kbn_presentation_library.mdx +++ b/api_docs/kbn_presentation_library.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-library title: "@kbn/presentation-library" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-library plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-library'] --- import kbnPresentationLibraryObj from './kbn_presentation_library.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 10cb6a2ede9af..f96316a201567 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-01-24 +date: 2024-01-25 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 347572bec618d..93e2e49b0f6bd 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-01-24 +date: 2024-01-25 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 f2f18e8f37d3c..4f7771e575bdc 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-01-24 +date: 2024-01-25 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 971191d7006b1..404c9a7be2315 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 397bf35285eca..ca051eb5ff304 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-01-24 +date: 2024-01-25 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 1ae8cfa6615e6..0cba565e493df 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-01-24 +date: 2024-01-25 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 47a1a0d53ecb0..cffed5f23b1e7 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-01-24 +date: 2024-01-25 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 3e0f43f44aa18..2fd956b0eb616 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-01-24 +date: 2024-01-25 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 3f0033e92c153..bf94c1124242b 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-01-24 +date: 2024-01-25 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 76df3ff076478..cf50c477bbccc 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 0c4dff4645701..9f0f33e9a6671 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-01-24 +date: 2024-01-25 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 fccf134bb402e..64905395f120f 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-01-24 +date: 2024-01-25 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 68e6c47f67c50..aa3bd4bdd9c12 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-01-24 +date: 2024-01-25 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 cc3ec31f7d516..0aa5a10bf463b 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-01-24 +date: 2024-01-25 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 cd4f220a0d562..5b8081391c315 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 0b35cbcbf761b..b6949ebd3ab39 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-01-24 +date: 2024-01-25 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 ee63763afd2e7..17b2f8ae16ab6 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-01-24 +date: 2024-01-25 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.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index fd9b3ee6943cc..df98ecfa6f28d 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-01-24 +date: 2024-01-25 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 d99852f9f77e7..18eba7bcbe482 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-01-24 +date: 2024-01-25 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.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 72b26effbea85..9ddb289f83180 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-01-24 +date: 2024-01-25 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 84300a58e894d..61df4408b7dba 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-01-24 +date: 2024-01-25 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.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 69080d6ff18f7..e0795b078b522 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-01-24 +date: 2024-01-25 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 1de8d51a22253..0ecebaf022f43 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 8e8fc875299b8..a916bfba7a091 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-01-24 +date: 2024-01-25 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 959d0fa319581..05c847fc7a61b 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 545829ac49a88..69bf516e99dd8 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 34718ddbdff67..825f2e7e0f313 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-01-24 +date: 2024-01-25 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 dcf466321a23f..c4860ce8adaab 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.devdocs.json b/api_docs/kbn_rule_data_utils.devdocs.json index 16f2a0e746ee8..60b56e5513aa4 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -1759,7 +1759,7 @@ "label": "TechnicalRuleDataFieldName", "description": [], "signature": [ - "\"@timestamp\" | \"event.action\" | \"tags\" | \"kibana\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert.instance.id\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.producer\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.status\" | \"kibana.alert.uuid\" | \"kibana.space_ids\" | \"event.kind\" | \"kibana.alert.action_group\" | \"kibana.alert.case_ids\" | \"kibana.alert.duration.us\" | \"kibana.alert.end\" | \"kibana.alert.flapping\" | \"kibana.alert.maintenance_window_ids\" | \"kibana.alert.reason\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.tags\" | \"kibana.alert.start\" | \"kibana.alert.time_range\" | \"kibana.alert.workflow_assignee_ids\" | \"kibana.alert.workflow_status\" | \"kibana.alert.workflow_tags\" | \"kibana.version\" | \"kibana.alert.context\" | \"kibana.alert.evaluation.threshold\" | \"kibana.alert.evaluation.value\" | \"kibana.alert.evaluation.values\" | \"kibana.alert.group\" | \"ecs.version\" | \"kibana.alert.risk_score\" | \"kibana.alert.rule.author\" | \"kibana.alert.rule.created_at\" | \"kibana.alert.rule.created_by\" | \"kibana.alert.rule.description\" | \"kibana.alert.rule.enabled\" | \"kibana.alert.rule.from\" | \"kibana.alert.rule.interval\" | \"kibana.alert.rule.license\" | \"kibana.alert.rule.note\" | \"kibana.alert.rule.references\" | \"kibana.alert.rule.rule_id\" | \"kibana.alert.rule.rule_name_override\" | \"kibana.alert.rule.to\" | \"kibana.alert.rule.type\" | \"kibana.alert.rule.updated_at\" | \"kibana.alert.rule.updated_by\" | \"kibana.alert.rule.version\" | \"kibana.alert.severity\" | \"kibana.alert.suppression.docs_count\" | \"kibana.alert.suppression.end\" | \"kibana.alert.suppression.start\" | \"kibana.alert.suppression.terms.field\" | \"kibana.alert.suppression.terms.value\" | \"kibana.alert.system_status\" | \"kibana.alert.workflow_reason\" | \"kibana.alert.workflow_user\" | \"event.module\" | \"kibana.alert.rule.threat.framework\" | \"kibana.alert.rule.threat.tactic.id\" | \"kibana.alert.rule.threat.tactic.name\" | \"kibana.alert.rule.threat.tactic.reference\" | \"kibana.alert.rule.threat.technique.id\" | \"kibana.alert.rule.threat.technique.name\" | \"kibana.alert.rule.threat.technique.reference\" | \"kibana.alert.rule.threat.technique.subtechnique.id\" | \"kibana.alert.rule.threat.technique.subtechnique.name\" | \"kibana.alert.rule.threat.technique.subtechnique.reference\" | \"kibana.alert.building_block_type\" | \"kibana.alert\" | \"kibana.alert.rule\" | \"kibana.alert.suppression.terms\" | \"kibana.alert.group.field\" | \"kibana.alert.group.value\" | \"kibana.alert.rule.exceptions_list\" | \"kibana.alert.rule.namespace\"" + "\"@timestamp\" | \"event.action\" | \"tags\" | \"kibana\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert.instance.id\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.producer\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.status\" | \"kibana.alert.uuid\" | \"kibana.space_ids\" | \"event.kind\" | \"kibana.alert.action_group\" | \"kibana.alert.case_ids\" | \"kibana.alert.duration.us\" | \"kibana.alert.end\" | \"kibana.alert.flapping\" | \"kibana.alert.maintenance_window_ids\" | \"kibana.alert.reason\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.tags\" | \"kibana.alert.start\" | \"kibana.alert.time_range\" | \"kibana.alert.workflow_assignee_ids\" | \"kibana.alert.workflow_status\" | \"kibana.alert.workflow_tags\" | \"kibana.version\" | \"kibana.alert.context\" | \"kibana.alert.evaluation.threshold\" | \"kibana.alert.evaluation.value\" | \"kibana.alert.evaluation.values\" | \"kibana.alert.group\" | \"ecs.version\" | \"kibana.alert.risk_score\" | \"kibana.alert.rule.author\" | \"kibana.alert.rule.created_at\" | \"kibana.alert.rule.created_by\" | \"kibana.alert.rule.description\" | \"kibana.alert.rule.enabled\" | \"kibana.alert.rule.from\" | \"kibana.alert.rule.interval\" | \"kibana.alert.rule.license\" | \"kibana.alert.rule.note\" | \"kibana.alert.rule.references\" | \"kibana.alert.rule.rule_id\" | \"kibana.alert.rule.rule_name_override\" | \"kibana.alert.rule.to\" | \"kibana.alert.rule.type\" | \"kibana.alert.rule.updated_at\" | \"kibana.alert.rule.updated_by\" | \"kibana.alert.rule.version\" | \"kibana.alert.severity\" | \"kibana.alert.suppression.docs_count\" | \"kibana.alert.suppression.end\" | \"kibana.alert.suppression.start\" | \"kibana.alert.suppression.terms.field\" | \"kibana.alert.suppression.terms.value\" | \"kibana.alert.system_status\" | \"kibana.alert.workflow_reason\" | \"kibana.alert.workflow_user\" | \"event.module\" | \"kibana.alert.rule.threat.framework\" | \"kibana.alert.rule.threat.tactic.id\" | \"kibana.alert.rule.threat.tactic.name\" | \"kibana.alert.rule.threat.tactic.reference\" | \"kibana.alert.rule.threat.technique.id\" | \"kibana.alert.rule.threat.technique.name\" | \"kibana.alert.rule.threat.technique.reference\" | \"kibana.alert.rule.threat.technique.subtechnique.id\" | \"kibana.alert.rule.threat.technique.subtechnique.name\" | \"kibana.alert.rule.threat.technique.subtechnique.reference\" | \"kibana.alert.building_block_type\" | \"kibana.alert\" | \"kibana.alert.group.field\" | \"kibana.alert.group.value\" | \"kibana.alert.rule\" | \"kibana.alert.rule.exceptions_list\" | \"kibana.alert.rule.namespace\" | \"kibana.alert.suppression.terms\"" ], "path": "packages/kbn-rule-data-utils/src/technical_field_names.ts", "deprecated": false, diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 9fb64790a7031..0707b365a9bd4 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-01-24 +date: 2024-01-25 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 cf5aa0f0b63d9..bf575d4e0a97d 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index f22a9756301fe..8142433eccabc 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-01-24 +date: 2024-01-25 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 ee2f491091455..db51b3fce8e3a 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-01-24 +date: 2024-01-25 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 24fcb19133a41..6864a272bb24b 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-01-24 +date: 2024-01-25 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 ae225b1ef4bf5..aab3c3b6a00b6 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-01-24 +date: 2024-01-25 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 b6f26f4b61f9a..e15776f4c9776 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index f1844635fdcaa..7a98eb98bc2e2 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-01-24 +date: 2024-01-25 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.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 5dac6372a20e8..2b640b9a4cfc2 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 1f3c343e0e4fc..dec22d7fd7b96 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-01-24 +date: 2024-01-25 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_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index bd6a9a6f0d5a0..033fa6e8c09f8 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-01-24 +date: 2024-01-25 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 29539b3f754fc..ef3fecd5bba97 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-01-24 +date: 2024-01-25 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 732db748dfe73..61d4dbe34836a 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-01-24 +date: 2024-01-25 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 b4551919c461a..ba1eec292bbbb 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-01-24 +date: 2024-01-25 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_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 3a44a021e75b6..d60c0b6b9cd46 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-01-24 +date: 2024-01-25 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 0721e1faa0f13..54d2d011c53c2 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-01-24 +date: 2024-01-25 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 0cb6516b262b2..a21ad131f2ad6 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-01-24 +date: 2024-01-25 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 6dec4b18e0c1e..f9e5bfde959dc 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-01-24 +date: 2024-01-25 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 9c805b8416ebf..0d5a8ff9bf631 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-01-24 +date: 2024-01-25 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_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index b6c97bfa34c8b..fc84849614db1 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 07a273bccf528..0671e3eb3cef4 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-01-24 +date: 2024-01-25 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 1bb17cf13c0ed..334033e0e36c4 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-01-24 +date: 2024-01-25 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 c9fe2c45fe311..d32220cd9d6dc 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-01-24 +date: 2024-01-25 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 d8ccebfd7d375..4814478893a18 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-01-24 +date: 2024-01-25 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 d99b81dfc63d2..c763aee17f68d 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-01-24 +date: 2024-01-25 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 73c786ee5fc61..fc898a1a1f1f4 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-01-24 +date: 2024-01-25 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 ca4a7cb8f9f0e..958c36f8e42d5 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-01-24 +date: 2024-01-25 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 6cd74a201dd22..b6beb4614ff77 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-01-24 +date: 2024-01-25 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 6a3d40e5fff68..e4983b5b9fb81 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-01-24 +date: 2024-01-25 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 a8303d2f809da..00038ffacad32 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-01-24 +date: 2024-01-25 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 e081fbef8d422..a020dd4d69fde 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-01-24 +date: 2024-01-25 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 b762ea351f179..9456981a264a5 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-01-24 +date: 2024-01-25 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 67da7577856e7..da2bab9c6a009 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-01-24 +date: 2024-01-25 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 c3cf336d9e1a8..c45c8b4c06ee7 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index da4fe9545bbbb..78c3896088adb 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-01-24 +date: 2024-01-25 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 2582766aa4ceb..ed4c145ed971c 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-01-24 +date: 2024-01-25 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 c69a0154a3aaf..28b26d501c5fb 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-01-24 +date: 2024-01-25 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 1080d162f1871..6889909a0b201 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-01-24 +date: 2024-01-25 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 d7d0b3d2c1bc9..1c552a9894634 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-01-24 +date: 2024-01-25 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 d99291edc97e6..6df98598e5e30 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-01-24 +date: 2024-01-25 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 3753ef4e884af..18295ef820149 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-01-24 +date: 2024-01-25 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 8948dfb8c7355..f027487ef8c57 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-01-24 +date: 2024-01-25 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 fd3ef562eb5e1..33b99fca02a07 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-01-24 +date: 2024-01-25 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 0e577d8563248..9a90c707b5f25 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-01-24 +date: 2024-01-25 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 47f3f862c6128..1b3bd110832ee 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-01-24 +date: 2024-01-25 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 91dc9f54060ee..6d03d3515a42c 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-01-24 +date: 2024-01-25 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 f5565b741b609..6ad4c3b657c85 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-01-24 +date: 2024-01-25 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 29f0e161b754b..e13bf7207dd0b 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-01-24 +date: 2024-01-25 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 1bc7575aeb981..07587445a3a78 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-01-24 +date: 2024-01-25 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 04948d5c3308d..79fb9021d2c1e 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-01-24 +date: 2024-01-25 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 3c3d050348745..0cf1ee3553e75 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-01-24 +date: 2024-01-25 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 cf01ec9538871..e345fe4f84a06 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-01-24 +date: 2024-01-25 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 f035987b91a9d..246c44321f55a 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-01-24 +date: 2024-01-25 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 ecc95c83d3d6d..49cc812cb717f 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-01-24 +date: 2024-01-25 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 f8a4e80411e6a..bc92dcc3f29fc 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-01-24 +date: 2024-01-25 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 937838deb6cb2..e82619c5592ea 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-01-24 +date: 2024-01-25 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 bbd9eaf5350c0..a44a55fbe4ee3 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-01-24 +date: 2024-01-25 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 105c46f444bc8..de1cea4aa0b12 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-01-24 +date: 2024-01-25 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 c0920f3e5bc1f..d2397c027429d 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-01-24 +date: 2024-01-25 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 8ac2d412a8a55..dde26ee52e5bf 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-01-24 +date: 2024-01-25 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 86787a9a4ce01..d4eebdc97e225 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-01-24 +date: 2024-01-25 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 84bfabce5eeba..67484ba972193 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-01-24 +date: 2024-01-25 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 6662e30361f8d..9c909022f2180 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-01-24 +date: 2024-01-25 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 59bed82a25e01..f7df3a57603ae 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-01-24 +date: 2024-01-25 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 e2f9277f7b36e..77ee22dd819e1 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-01-24 +date: 2024-01-25 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 50fcdcd81327d..6128dd905b56c 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-01-24 +date: 2024-01-25 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 fde1ea4744494..fed7ec43a3976 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-01-24 +date: 2024-01-25 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 4f64959ad97a8..323e722a52b26 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-01-24 +date: 2024-01-25 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 a8818b63e2ec6..c2b19eb6ed444 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-01-24 +date: 2024-01-25 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 39796b1230e34..725e7e7971dd5 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-01-24 +date: 2024-01-25 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 a6b6f33eb244b..8d2b1e8dd27a5 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-01-24 +date: 2024-01-25 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 011c673c45b67..5a707fb5b292a 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-01-24 +date: 2024-01-25 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 d99e99fa6caf5..a4090c3abdd3b 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-01-24 +date: 2024-01-25 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 3b38e35fbf919..c9b6761f60317 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-01-24 +date: 2024-01-25 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 b72ce2502bab7..921fca4769cd2 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-01-24 +date: 2024-01-25 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 492396815b34a..b4232554d6ea9 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-01-24 +date: 2024-01-25 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 3762c77dfc468..0536992a65f6b 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-01-24 +date: 2024-01-25 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 9c9ffa5a83e4d..5187836d2dca4 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-01-24 +date: 2024-01-25 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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index f086f73e9f0b7..ce89be2890695 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-01-24 +date: 2024-01-25 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 2d07d13fafcda..b6c929baa3a58 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-01-24 +date: 2024-01-25 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 ada0da6074173..8c58fc205ea71 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-01-24 +date: 2024-01-25 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 6630f91b7d4d0..dcbb288d98787 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-01-24 +date: 2024-01-25 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 51ef50dec1f20..a7ed3a4fc28aa 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-01-24 +date: 2024-01-25 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 1513c02f537a8..08b003eeb4f6c 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-01-24 +date: 2024-01-25 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 4d2d6dcbb6ae1..d24c526347c5e 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 14c56ab0dc6b6..6debbea5a9bd8 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-01-24 +date: 2024-01-25 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 940da8f0b53e0..da60030123529 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-01-24 +date: 2024-01-25 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 bb65eb76d73a8..0c094ab2af236 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-01-24 +date: 2024-01-25 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 49141dfbfc140..3d18dc3aef58c 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-01-24 +date: 2024-01-25 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 fd5fe6abe18f8..b2b7b41baed6f 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-01-24 +date: 2024-01-25 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 998a63e373e7f..8cdd3e4080afa 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 9122a1d3f9c08..a90913354ec33 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-01-24 +date: 2024-01-25 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 6561640e613ee..82012246021c0 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-01-24 +date: 2024-01-25 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_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index c4c1c31eb3cca..619a80985bbe8 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-01-24 +date: 2024-01-25 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 ad664e75f5cb1..e921b89c724b5 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-01-24 +date: 2024-01-25 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 62be59db206ce..6eba72619cffd 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-01-24 +date: 2024-01-25 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 f89378b7cec84..359b9aa538f4d 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-01-24 +date: 2024-01-25 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 38c1f23529597..dd1d9af03f84e 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-01-24 +date: 2024-01-25 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 2375209b0561a..d3332726f24c9 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-01-24 +date: 2024-01-25 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 7dab5abfc5338..a61ac388ee0e4 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-01-24 +date: 2024-01-25 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 ea1e753f39320..3a1eb0a6c3bff 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-01-24 +date: 2024-01-25 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 0a2fabdec6979..c6f2c87724ae2 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_url_state.mdx b/api_docs/kbn_url_state.mdx index 0e655b2db5374..a3fc1680cec23 100644 --- a/api_docs/kbn_url_state.mdx +++ b/api_docs/kbn_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-url-state title: "@kbn/url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/url-state plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/url-state'] --- import kbnUrlStateObj from './kbn_url_state.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 51139c5005587..07a2a3f8e004d 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-01-24 +date: 2024-01-25 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 e33ab98448cd1..baf2ade08b238 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-01-24 +date: 2024-01-25 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 71b01e4256145..3a08186d56882 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-01-24 +date: 2024-01-25 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 843db8d01f9da..657074baaf9aa 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-01-24 +date: 2024-01-25 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 1bc7f5822570f..f7ed6cdb629b1 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-01-24 +date: 2024-01-25 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 f3eb2a2ffbb5c..7a08ede8a7ced 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-01-24 +date: 2024-01-25 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 c683956c9ffb6..05ca2bdef927f 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-01-24 +date: 2024-01-25 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 ec7ea59f50c4d..78500d6b931b5 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-01-24 +date: 2024-01-25 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 3ae658da756e3..586a139251165 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-01-24 +date: 2024-01-25 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_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index b3633e2ba050d..00a93b032ea56 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-01-24 +date: 2024-01-25 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 8c89f38c8f70c..83c6503723814 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-01-24 +date: 2024-01-25 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 27ae657544855..954c9696ec416 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-01-24 +date: 2024-01-25 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 fd31b85b7db6b..0f4f1727f7c46 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-01-24 +date: 2024-01-25 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 91745954f3575..57ff14b13cc4c 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 3049d5800a3ef..075fcd1c204e0 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 4a509d102d31d..31a4bd9659f0b 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-01-24 +date: 2024-01-25 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 0bc40d1f58957..d1e9f4d261245 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-01-24 +date: 2024-01-25 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 9840c18653e3f..fcd31c0513245 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-01-24 +date: 2024-01-25 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 d2acab1445183..8b95629aa6aae 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-01-24 +date: 2024-01-25 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 05cd0d6110977..b036c1c6ce666 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/log_explorer.mdx b/api_docs/log_explorer.mdx index 6b7c9654616b9..563ec60b74b4e 100644 --- a/api_docs/log_explorer.mdx +++ b/api_docs/log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logExplorer title: "logExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logExplorer plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logExplorer'] --- import logExplorerObj from './log_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 156cd15584165..36ca2430082be 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-01-24 +date: 2024-01-25 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 f87ab59754932..210cf71214272 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-01-24 +date: 2024-01-25 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 c1dddfccc5f07..8eb3f7be90258 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-01-24 +date: 2024-01-25 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 54b21cb5b2e86..0c37c51ba4792 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-01-24 +date: 2024-01-25 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 9c1ff43192255..02bdfff1f915b 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-01-24 +date: 2024-01-25 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 534530c454778..018bbab948aea 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-01-24 +date: 2024-01-25 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 98c6971543eba..70e2a41c489d1 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-01-24 +date: 2024-01-25 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 df0d6d085af61..4e97767e22db4 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-01-24 +date: 2024-01-25 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 4e625ddce82aa..e6c7acff5a255 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-01-24 +date: 2024-01-25 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 ed83feb75f10e..6d1c6b5a7f2c9 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-01-24 +date: 2024-01-25 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 b30e12e656e65..6643e3f417dfe 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-01-24 +date: 2024-01-25 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 55031393470bc..6b9c63fb9d24e 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-01-24 +date: 2024-01-25 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 6a60579373f44..1f0953738cfd9 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index ef4610ed3d2bf..f4f338f2c25cb 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -766,7 +766,9 @@ "section": "def-public.TopAlert", "text": "TopAlert" }, - "<{}> | undefined; alerts?: Record[] | undefined; isInApp?: boolean | undefined; observabilityRuleTypeRegistry: { register: (type: ", + "<{}> | undefined; rawAlert?: ", + "EcsFieldsResponse", + " | undefined; alerts?: Record[] | undefined; isInApp?: boolean | undefined; observabilityRuleTypeRegistry: { register: (type: ", { "pluginId": "observability", "scope": "public", @@ -784,7 +786,7 @@ }, " | undefined; list: () => string[]; }; selectedAlertId?: string | undefined; } & ", "CommonProps", - " & { as?: \"div\" | undefined; } & _EuiFlyoutProps & Omit, HTMLDivElement>, keyof _EuiFlyoutProps> & Omit, HTMLDivElement>, \"key\" | keyof React.HTMLAttributes | \"css\"> & { ref?: ((instance: HTMLDivElement | null) => void) | React.RefObject | null | undefined; }, \"type\" | \"prefix\" | \"key\" | \"id\" | \"defaultValue\" | \"security\" | \"children\" | \"ref\" | \"slot\" | \"style\" | \"title\" | \"onChange\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"className\" | \"contentEditable\" | \"contextMenu\" | \"dir\" | \"draggable\" | \"hidden\" | \"lang\" | \"placeholder\" | \"spellCheck\" | \"tabIndex\" | \"translate\" | \"radioGroup\" | \"role\" | \"about\" | \"datatype\" | \"inlist\" | \"property\" | \"resource\" | \"typeof\" | \"vocab\" | \"autoCapitalize\" | \"autoCorrect\" | \"autoSave\" | \"color\" | \"itemProp\" | \"itemScope\" | \"itemType\" | \"itemID\" | \"itemRef\" | \"results\" | \"unselectable\" | \"inputMode\" | \"is\" | \"aria-activedescendant\" | \"aria-atomic\" | \"aria-autocomplete\" | \"aria-busy\" | \"aria-checked\" | \"aria-colcount\" | \"aria-colindex\" | \"aria-colspan\" | \"aria-controls\" | \"aria-current\" | \"aria-describedby\" | \"aria-details\" | \"aria-disabled\" | \"aria-dropeffect\" | \"aria-errormessage\" | \"aria-expanded\" | \"aria-flowto\" | \"aria-grabbed\" | \"aria-haspopup\" | \"aria-hidden\" | \"aria-invalid\" | \"aria-keyshortcuts\" | \"aria-label\" | \"aria-labelledby\" | \"aria-level\" | \"aria-live\" | \"aria-modal\" | \"aria-multiline\" | \"aria-multiselectable\" | \"aria-orientation\" | \"aria-owns\" | \"aria-placeholder\" | \"aria-posinset\" | \"aria-pressed\" | \"aria-readonly\" | \"aria-relevant\" | \"aria-required\" | \"aria-roledescription\" | \"aria-rowcount\" | \"aria-rowindex\" | \"aria-rowspan\" | \"aria-selected\" | \"aria-setsize\" | \"aria-sort\" | \"aria-valuemax\" | \"aria-valuemin\" | \"aria-valuenow\" | \"aria-valuetext\" | \"dangerouslySetInnerHTML\" | \"onCopy\" | \"onCopyCapture\" | \"onCut\" | \"onCutCapture\" | \"onPaste\" | \"onPasteCapture\" | \"onCompositionEnd\" | \"onCompositionEndCapture\" | \"onCompositionStart\" | \"onCompositionStartCapture\" | \"onCompositionUpdate\" | \"onCompositionUpdateCapture\" | \"onFocus\" | \"onFocusCapture\" | \"onBlur\" | \"onBlurCapture\" | \"onChangeCapture\" | \"onBeforeInput\" | \"onBeforeInputCapture\" | \"onInput\" | \"onInputCapture\" | \"onReset\" | \"onResetCapture\" | \"onSubmit\" | \"onSubmitCapture\" | \"onInvalid\" | \"onInvalidCapture\" | \"onLoad\" | \"onLoadCapture\" | \"onError\" | \"onErrorCapture\" | \"onKeyDown\" | \"onKeyDownCapture\" | \"onKeyPress\" | \"onKeyPressCapture\" | \"onKeyUp\" | \"onKeyUpCapture\" | \"onAbort\" | \"onAbortCapture\" | \"onCanPlay\" | \"onCanPlayCapture\" | \"onCanPlayThrough\" | \"onCanPlayThroughCapture\" | \"onDurationChange\" | \"onDurationChangeCapture\" | \"onEmptied\" | \"onEmptiedCapture\" | \"onEncrypted\" | \"onEncryptedCapture\" | \"onEnded\" | \"onEndedCapture\" | \"onLoadedData\" | \"onLoadedDataCapture\" | \"onLoadedMetadata\" | \"onLoadedMetadataCapture\" | \"onLoadStart\" | \"onLoadStartCapture\" | \"onPause\" | \"onPauseCapture\" | \"onPlay\" | \"onPlayCapture\" | \"onPlaying\" | \"onPlayingCapture\" | \"onProgress\" | \"onProgressCapture\" | \"onRateChange\" | \"onRateChangeCapture\" | \"onSeeked\" | \"onSeekedCapture\" | \"onSeeking\" | \"onSeekingCapture\" | \"onStalled\" | \"onStalledCapture\" | \"onSuspend\" | \"onSuspendCapture\" | \"onTimeUpdate\" | \"onTimeUpdateCapture\" | \"onVolumeChange\" | \"onVolumeChangeCapture\" | \"onWaiting\" | \"onWaitingCapture\" | \"onAuxClick\" | \"onAuxClickCapture\" | \"onClick\" | \"onClickCapture\" | \"onContextMenu\" | \"onContextMenuCapture\" | \"onDoubleClick\" | \"onDoubleClickCapture\" | \"onDrag\" | \"onDragCapture\" | \"onDragEnd\" | \"onDragEndCapture\" | \"onDragEnter\" | \"onDragEnterCapture\" | \"onDragExit\" | \"onDragExitCapture\" | \"onDragLeave\" | \"onDragLeaveCapture\" | \"onDragOver\" | \"onDragOverCapture\" | \"onDragStart\" | \"onDragStartCapture\" | \"onDrop\" | \"onDropCapture\" | \"onMouseDown\" | \"onMouseDownCapture\" | \"onMouseEnter\" | \"onMouseLeave\" | \"onMouseMove\" | \"onMouseMoveCapture\" | \"onMouseOut\" | \"onMouseOutCapture\" | \"onMouseOver\" | \"onMouseOverCapture\" | \"onMouseUp\" | \"onMouseUpCapture\" | \"onSelect\" | \"onSelectCapture\" | \"onTouchCancel\" | \"onTouchCancelCapture\" | \"onTouchEnd\" | \"onTouchEndCapture\" | \"onTouchMove\" | \"onTouchMoveCapture\" | \"onTouchStart\" | \"onTouchStartCapture\" | \"onPointerDown\" | \"onPointerDownCapture\" | \"onPointerMove\" | \"onPointerMoveCapture\" | \"onPointerUp\" | \"onPointerUpCapture\" | \"onPointerCancel\" | \"onPointerCancelCapture\" | \"onPointerEnter\" | \"onPointerEnterCapture\" | \"onPointerLeave\" | \"onPointerLeaveCapture\" | \"onPointerOver\" | \"onPointerOverCapture\" | \"onPointerOut\" | \"onPointerOutCapture\" | \"onGotPointerCapture\" | \"onGotPointerCaptureCapture\" | \"onLostPointerCapture\" | \"onLostPointerCaptureCapture\" | \"onScroll\" | \"onScrollCapture\" | \"onWheel\" | \"onWheelCapture\" | \"onAnimationStart\" | \"onAnimationStartCapture\" | \"onAnimationEnd\" | \"onAnimationEndCapture\" | \"onAnimationIteration\" | \"onAnimationIterationCapture\" | \"onTransitionEnd\" | \"onTransitionEndCapture\" | \"data-test-subj\" | \"css\" | \"paddingSize\" | \"size\" | \"onClose\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"pushAnimation\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"as\">, \"type\" | \"prefix\" | \"key\" | \"id\" | \"defaultValue\" | \"security\" | \"alert\" | \"children\" | \"slot\" | \"style\" | \"title\" | \"onChange\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"className\" | \"contentEditable\" | \"contextMenu\" | \"dir\" | \"draggable\" | \"hidden\" | \"lang\" | \"placeholder\" | \"spellCheck\" | \"tabIndex\" | \"translate\" | \"radioGroup\" | \"role\" | \"about\" | \"datatype\" | \"inlist\" | \"property\" | \"resource\" | \"typeof\" | \"vocab\" | \"autoCapitalize\" | \"autoCorrect\" | \"autoSave\" | \"color\" | \"itemProp\" | \"itemScope\" | \"itemType\" | \"itemID\" | \"itemRef\" | \"results\" | \"unselectable\" | \"inputMode\" | \"is\" | \"aria-activedescendant\" | \"aria-atomic\" | \"aria-autocomplete\" | \"aria-busy\" | \"aria-checked\" | \"aria-colcount\" | \"aria-colindex\" | \"aria-colspan\" | \"aria-controls\" | \"aria-current\" | \"aria-describedby\" | \"aria-details\" | \"aria-disabled\" | \"aria-dropeffect\" | \"aria-errormessage\" | \"aria-expanded\" | \"aria-flowto\" | \"aria-grabbed\" | \"aria-haspopup\" | \"aria-hidden\" | \"aria-invalid\" | \"aria-keyshortcuts\" | \"aria-label\" | \"aria-labelledby\" | \"aria-level\" | \"aria-live\" | \"aria-modal\" | \"aria-multiline\" | \"aria-multiselectable\" | \"aria-orientation\" | \"aria-owns\" | \"aria-placeholder\" | \"aria-posinset\" | \"aria-pressed\" | \"aria-readonly\" | \"aria-relevant\" | \"aria-required\" | \"aria-roledescription\" | \"aria-rowcount\" | \"aria-rowindex\" | \"aria-rowspan\" | \"aria-selected\" | \"aria-setsize\" | \"aria-sort\" | \"aria-valuemax\" | \"aria-valuemin\" | \"aria-valuenow\" | \"aria-valuetext\" | \"dangerouslySetInnerHTML\" | \"onCopy\" | \"onCopyCapture\" | \"onCut\" | \"onCutCapture\" | \"onPaste\" | \"onPasteCapture\" | \"onCompositionEnd\" | \"onCompositionEndCapture\" | \"onCompositionStart\" | \"onCompositionStartCapture\" | \"onCompositionUpdate\" | \"onCompositionUpdateCapture\" | \"onFocus\" | \"onFocusCapture\" | \"onBlur\" | \"onBlurCapture\" | \"onChangeCapture\" | \"onBeforeInput\" | \"onBeforeInputCapture\" | \"onInput\" | \"onInputCapture\" | \"onReset\" | \"onResetCapture\" | \"onSubmit\" | \"onSubmitCapture\" | \"onInvalid\" | \"onInvalidCapture\" | \"onLoad\" | \"onLoadCapture\" | \"onError\" | \"onErrorCapture\" | \"onKeyDown\" | \"onKeyDownCapture\" | \"onKeyPress\" | \"onKeyPressCapture\" | \"onKeyUp\" | \"onKeyUpCapture\" | \"onAbort\" | \"onAbortCapture\" | \"onCanPlay\" | \"onCanPlayCapture\" | \"onCanPlayThrough\" | \"onCanPlayThroughCapture\" | \"onDurationChange\" | \"onDurationChangeCapture\" | \"onEmptied\" | \"onEmptiedCapture\" | \"onEncrypted\" | \"onEncryptedCapture\" | \"onEnded\" | \"onEndedCapture\" | \"onLoadedData\" | \"onLoadedDataCapture\" | \"onLoadedMetadata\" | \"onLoadedMetadataCapture\" | \"onLoadStart\" | \"onLoadStartCapture\" | \"onPause\" | \"onPauseCapture\" | \"onPlay\" | \"onPlayCapture\" | \"onPlaying\" | \"onPlayingCapture\" | \"onProgress\" | \"onProgressCapture\" | \"onRateChange\" | \"onRateChangeCapture\" | \"onSeeked\" | \"onSeekedCapture\" | \"onSeeking\" | \"onSeekingCapture\" | \"onStalled\" | \"onStalledCapture\" | \"onSuspend\" | \"onSuspendCapture\" | \"onTimeUpdate\" | \"onTimeUpdateCapture\" | \"onVolumeChange\" | \"onVolumeChangeCapture\" | \"onWaiting\" | \"onWaitingCapture\" | \"onAuxClick\" | \"onAuxClickCapture\" | \"onClick\" | \"onClickCapture\" | \"onContextMenu\" | \"onContextMenuCapture\" | \"onDoubleClick\" | \"onDoubleClickCapture\" | \"onDrag\" | \"onDragCapture\" | \"onDragEnd\" | \"onDragEndCapture\" | \"onDragEnter\" | \"onDragEnterCapture\" | \"onDragExit\" | \"onDragExitCapture\" | \"onDragLeave\" | \"onDragLeaveCapture\" | \"onDragOver\" | \"onDragOverCapture\" | \"onDragStart\" | \"onDragStartCapture\" | \"onDrop\" | \"onDropCapture\" | \"onMouseDown\" | \"onMouseDownCapture\" | \"onMouseEnter\" | \"onMouseLeave\" | \"onMouseMove\" | \"onMouseMoveCapture\" | \"onMouseOut\" | \"onMouseOutCapture\" | \"onMouseOver\" | \"onMouseOverCapture\" | \"onMouseUp\" | \"onMouseUpCapture\" | \"onSelect\" | \"onSelectCapture\" | \"onTouchCancel\" | \"onTouchCancelCapture\" | \"onTouchEnd\" | \"onTouchEndCapture\" | \"onTouchMove\" | \"onTouchMoveCapture\" | \"onTouchStart\" | \"onTouchStartCapture\" | \"onPointerDown\" | \"onPointerDownCapture\" | \"onPointerMove\" | \"onPointerMoveCapture\" | \"onPointerUp\" | \"onPointerUpCapture\" | \"onPointerCancel\" | \"onPointerCancelCapture\" | \"onPointerEnter\" | \"onPointerEnterCapture\" | \"onPointerLeave\" | \"onPointerLeaveCapture\" | \"onPointerOver\" | \"onPointerOverCapture\" | \"onPointerOut\" | \"onPointerOutCapture\" | \"onGotPointerCapture\" | \"onGotPointerCaptureCapture\" | \"onLostPointerCapture\" | \"onLostPointerCaptureCapture\" | \"onScroll\" | \"onScrollCapture\" | \"onWheel\" | \"onWheelCapture\" | \"onAnimationStart\" | \"onAnimationStartCapture\" | \"onAnimationEnd\" | \"onAnimationEndCapture\" | \"onAnimationIteration\" | \"onAnimationIterationCapture\" | \"onTransitionEnd\" | \"onTransitionEndCapture\" | \"data-test-subj\" | \"css\" | \"alerts\" | \"paddingSize\" | \"size\" | \"onClose\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"pushAnimation\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"as\" | \"isInApp\" | \"observabilityRuleTypeRegistry\" | \"selectedAlertId\"> & { ref?: ((instance: HTMLDivElement | null) => void) | React.RefObject | null | undefined; }> & { readonly _result: ({ alert, alerts, isInApp, observabilityRuleTypeRegistry, onClose, selectedAlertId, }: AlertsFlyoutProps) => JSX.Element | null; }" + " & { as?: \"div\" | undefined; } & _EuiFlyoutProps & Omit, HTMLDivElement>, keyof _EuiFlyoutProps> & Omit, HTMLDivElement>, \"key\" | keyof React.HTMLAttributes | \"css\"> & { ref?: ((instance: HTMLDivElement | null) => void) | React.RefObject | null | undefined; }, \"type\" | \"prefix\" | \"key\" | \"id\" | \"defaultValue\" | \"security\" | \"children\" | \"ref\" | \"slot\" | \"style\" | \"title\" | \"onChange\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"className\" | \"contentEditable\" | \"contextMenu\" | \"dir\" | \"draggable\" | \"hidden\" | \"lang\" | \"placeholder\" | \"spellCheck\" | \"tabIndex\" | \"translate\" | \"radioGroup\" | \"role\" | \"about\" | \"datatype\" | \"inlist\" | \"property\" | \"resource\" | \"typeof\" | \"vocab\" | \"autoCapitalize\" | \"autoCorrect\" | \"autoSave\" | \"color\" | \"itemProp\" | \"itemScope\" | \"itemType\" | \"itemID\" | \"itemRef\" | \"results\" | \"unselectable\" | \"inputMode\" | \"is\" | \"aria-activedescendant\" | \"aria-atomic\" | \"aria-autocomplete\" | \"aria-busy\" | \"aria-checked\" | \"aria-colcount\" | \"aria-colindex\" | \"aria-colspan\" | \"aria-controls\" | \"aria-current\" | \"aria-describedby\" | \"aria-details\" | \"aria-disabled\" | \"aria-dropeffect\" | \"aria-errormessage\" | \"aria-expanded\" | \"aria-flowto\" | \"aria-grabbed\" | \"aria-haspopup\" | \"aria-hidden\" | \"aria-invalid\" | \"aria-keyshortcuts\" | \"aria-label\" | \"aria-labelledby\" | \"aria-level\" | \"aria-live\" | \"aria-modal\" | \"aria-multiline\" | \"aria-multiselectable\" | \"aria-orientation\" | \"aria-owns\" | \"aria-placeholder\" | \"aria-posinset\" | \"aria-pressed\" | \"aria-readonly\" | \"aria-relevant\" | \"aria-required\" | \"aria-roledescription\" | \"aria-rowcount\" | \"aria-rowindex\" | \"aria-rowspan\" | \"aria-selected\" | \"aria-setsize\" | \"aria-sort\" | \"aria-valuemax\" | \"aria-valuemin\" | \"aria-valuenow\" | \"aria-valuetext\" | \"dangerouslySetInnerHTML\" | \"onCopy\" | \"onCopyCapture\" | \"onCut\" | \"onCutCapture\" | \"onPaste\" | \"onPasteCapture\" | \"onCompositionEnd\" | \"onCompositionEndCapture\" | \"onCompositionStart\" | \"onCompositionStartCapture\" | \"onCompositionUpdate\" | \"onCompositionUpdateCapture\" | \"onFocus\" | \"onFocusCapture\" | \"onBlur\" | \"onBlurCapture\" | \"onChangeCapture\" | \"onBeforeInput\" | \"onBeforeInputCapture\" | \"onInput\" | \"onInputCapture\" | \"onReset\" | \"onResetCapture\" | \"onSubmit\" | \"onSubmitCapture\" | \"onInvalid\" | \"onInvalidCapture\" | \"onLoad\" | \"onLoadCapture\" | \"onError\" | \"onErrorCapture\" | \"onKeyDown\" | \"onKeyDownCapture\" | \"onKeyPress\" | \"onKeyPressCapture\" | \"onKeyUp\" | \"onKeyUpCapture\" | \"onAbort\" | \"onAbortCapture\" | \"onCanPlay\" | \"onCanPlayCapture\" | \"onCanPlayThrough\" | \"onCanPlayThroughCapture\" | \"onDurationChange\" | \"onDurationChangeCapture\" | \"onEmptied\" | \"onEmptiedCapture\" | \"onEncrypted\" | \"onEncryptedCapture\" | \"onEnded\" | \"onEndedCapture\" | \"onLoadedData\" | \"onLoadedDataCapture\" | \"onLoadedMetadata\" | \"onLoadedMetadataCapture\" | \"onLoadStart\" | \"onLoadStartCapture\" | \"onPause\" | \"onPauseCapture\" | \"onPlay\" | \"onPlayCapture\" | \"onPlaying\" | \"onPlayingCapture\" | \"onProgress\" | \"onProgressCapture\" | \"onRateChange\" | \"onRateChangeCapture\" | \"onSeeked\" | \"onSeekedCapture\" | \"onSeeking\" | \"onSeekingCapture\" | \"onStalled\" | \"onStalledCapture\" | \"onSuspend\" | \"onSuspendCapture\" | \"onTimeUpdate\" | \"onTimeUpdateCapture\" | \"onVolumeChange\" | \"onVolumeChangeCapture\" | \"onWaiting\" | \"onWaitingCapture\" | \"onAuxClick\" | \"onAuxClickCapture\" | \"onClick\" | \"onClickCapture\" | \"onContextMenu\" | \"onContextMenuCapture\" | \"onDoubleClick\" | \"onDoubleClickCapture\" | \"onDrag\" | \"onDragCapture\" | \"onDragEnd\" | \"onDragEndCapture\" | \"onDragEnter\" | \"onDragEnterCapture\" | \"onDragExit\" | \"onDragExitCapture\" | \"onDragLeave\" | \"onDragLeaveCapture\" | \"onDragOver\" | \"onDragOverCapture\" | \"onDragStart\" | \"onDragStartCapture\" | \"onDrop\" | \"onDropCapture\" | \"onMouseDown\" | \"onMouseDownCapture\" | \"onMouseEnter\" | \"onMouseLeave\" | \"onMouseMove\" | \"onMouseMoveCapture\" | \"onMouseOut\" | \"onMouseOutCapture\" | \"onMouseOver\" | \"onMouseOverCapture\" | \"onMouseUp\" | \"onMouseUpCapture\" | \"onSelect\" | \"onSelectCapture\" | \"onTouchCancel\" | \"onTouchCancelCapture\" | \"onTouchEnd\" | \"onTouchEndCapture\" | \"onTouchMove\" | \"onTouchMoveCapture\" | \"onTouchStart\" | \"onTouchStartCapture\" | \"onPointerDown\" | \"onPointerDownCapture\" | \"onPointerMove\" | \"onPointerMoveCapture\" | \"onPointerUp\" | \"onPointerUpCapture\" | \"onPointerCancel\" | \"onPointerCancelCapture\" | \"onPointerEnter\" | \"onPointerEnterCapture\" | \"onPointerLeave\" | \"onPointerLeaveCapture\" | \"onPointerOver\" | \"onPointerOverCapture\" | \"onPointerOut\" | \"onPointerOutCapture\" | \"onGotPointerCapture\" | \"onGotPointerCaptureCapture\" | \"onLostPointerCapture\" | \"onLostPointerCaptureCapture\" | \"onScroll\" | \"onScrollCapture\" | \"onWheel\" | \"onWheelCapture\" | \"onAnimationStart\" | \"onAnimationStartCapture\" | \"onAnimationEnd\" | \"onAnimationEndCapture\" | \"onAnimationIteration\" | \"onAnimationIterationCapture\" | \"onTransitionEnd\" | \"onTransitionEndCapture\" | \"data-test-subj\" | \"css\" | \"paddingSize\" | \"size\" | \"onClose\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"pushAnimation\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"as\">, \"type\" | \"prefix\" | \"key\" | \"id\" | \"defaultValue\" | \"security\" | \"alert\" | \"children\" | \"slot\" | \"style\" | \"title\" | \"onChange\" | \"defaultChecked\" | \"suppressContentEditableWarning\" | \"suppressHydrationWarning\" | \"accessKey\" | \"className\" | \"contentEditable\" | \"contextMenu\" | \"dir\" | \"draggable\" | \"hidden\" | \"lang\" | \"placeholder\" | \"spellCheck\" | \"tabIndex\" | \"translate\" | \"radioGroup\" | \"role\" | \"about\" | \"datatype\" | \"inlist\" | \"property\" | \"resource\" | \"typeof\" | \"vocab\" | \"autoCapitalize\" | \"autoCorrect\" | \"autoSave\" | \"color\" | \"itemProp\" | \"itemScope\" | \"itemType\" | \"itemID\" | \"itemRef\" | \"results\" | \"unselectable\" | \"inputMode\" | \"is\" | \"aria-activedescendant\" | \"aria-atomic\" | \"aria-autocomplete\" | \"aria-busy\" | \"aria-checked\" | \"aria-colcount\" | \"aria-colindex\" | \"aria-colspan\" | \"aria-controls\" | \"aria-current\" | \"aria-describedby\" | \"aria-details\" | \"aria-disabled\" | \"aria-dropeffect\" | \"aria-errormessage\" | \"aria-expanded\" | \"aria-flowto\" | \"aria-grabbed\" | \"aria-haspopup\" | \"aria-hidden\" | \"aria-invalid\" | \"aria-keyshortcuts\" | \"aria-label\" | \"aria-labelledby\" | \"aria-level\" | \"aria-live\" | \"aria-modal\" | \"aria-multiline\" | \"aria-multiselectable\" | \"aria-orientation\" | \"aria-owns\" | \"aria-placeholder\" | \"aria-posinset\" | \"aria-pressed\" | \"aria-readonly\" | \"aria-relevant\" | \"aria-required\" | \"aria-roledescription\" | \"aria-rowcount\" | \"aria-rowindex\" | \"aria-rowspan\" | \"aria-selected\" | \"aria-setsize\" | \"aria-sort\" | \"aria-valuemax\" | \"aria-valuemin\" | \"aria-valuenow\" | \"aria-valuetext\" | \"dangerouslySetInnerHTML\" | \"onCopy\" | \"onCopyCapture\" | \"onCut\" | \"onCutCapture\" | \"onPaste\" | \"onPasteCapture\" | \"onCompositionEnd\" | \"onCompositionEndCapture\" | \"onCompositionStart\" | \"onCompositionStartCapture\" | \"onCompositionUpdate\" | \"onCompositionUpdateCapture\" | \"onFocus\" | \"onFocusCapture\" | \"onBlur\" | \"onBlurCapture\" | \"onChangeCapture\" | \"onBeforeInput\" | \"onBeforeInputCapture\" | \"onInput\" | \"onInputCapture\" | \"onReset\" | \"onResetCapture\" | \"onSubmit\" | \"onSubmitCapture\" | \"onInvalid\" | \"onInvalidCapture\" | \"onLoad\" | \"onLoadCapture\" | \"onError\" | \"onErrorCapture\" | \"onKeyDown\" | \"onKeyDownCapture\" | \"onKeyPress\" | \"onKeyPressCapture\" | \"onKeyUp\" | \"onKeyUpCapture\" | \"onAbort\" | \"onAbortCapture\" | \"onCanPlay\" | \"onCanPlayCapture\" | \"onCanPlayThrough\" | \"onCanPlayThroughCapture\" | \"onDurationChange\" | \"onDurationChangeCapture\" | \"onEmptied\" | \"onEmptiedCapture\" | \"onEncrypted\" | \"onEncryptedCapture\" | \"onEnded\" | \"onEndedCapture\" | \"onLoadedData\" | \"onLoadedDataCapture\" | \"onLoadedMetadata\" | \"onLoadedMetadataCapture\" | \"onLoadStart\" | \"onLoadStartCapture\" | \"onPause\" | \"onPauseCapture\" | \"onPlay\" | \"onPlayCapture\" | \"onPlaying\" | \"onPlayingCapture\" | \"onProgress\" | \"onProgressCapture\" | \"onRateChange\" | \"onRateChangeCapture\" | \"onSeeked\" | \"onSeekedCapture\" | \"onSeeking\" | \"onSeekingCapture\" | \"onStalled\" | \"onStalledCapture\" | \"onSuspend\" | \"onSuspendCapture\" | \"onTimeUpdate\" | \"onTimeUpdateCapture\" | \"onVolumeChange\" | \"onVolumeChangeCapture\" | \"onWaiting\" | \"onWaitingCapture\" | \"onAuxClick\" | \"onAuxClickCapture\" | \"onClick\" | \"onClickCapture\" | \"onContextMenu\" | \"onContextMenuCapture\" | \"onDoubleClick\" | \"onDoubleClickCapture\" | \"onDrag\" | \"onDragCapture\" | \"onDragEnd\" | \"onDragEndCapture\" | \"onDragEnter\" | \"onDragEnterCapture\" | \"onDragExit\" | \"onDragExitCapture\" | \"onDragLeave\" | \"onDragLeaveCapture\" | \"onDragOver\" | \"onDragOverCapture\" | \"onDragStart\" | \"onDragStartCapture\" | \"onDrop\" | \"onDropCapture\" | \"onMouseDown\" | \"onMouseDownCapture\" | \"onMouseEnter\" | \"onMouseLeave\" | \"onMouseMove\" | \"onMouseMoveCapture\" | \"onMouseOut\" | \"onMouseOutCapture\" | \"onMouseOver\" | \"onMouseOverCapture\" | \"onMouseUp\" | \"onMouseUpCapture\" | \"onSelect\" | \"onSelectCapture\" | \"onTouchCancel\" | \"onTouchCancelCapture\" | \"onTouchEnd\" | \"onTouchEndCapture\" | \"onTouchMove\" | \"onTouchMoveCapture\" | \"onTouchStart\" | \"onTouchStartCapture\" | \"onPointerDown\" | \"onPointerDownCapture\" | \"onPointerMove\" | \"onPointerMoveCapture\" | \"onPointerUp\" | \"onPointerUpCapture\" | \"onPointerCancel\" | \"onPointerCancelCapture\" | \"onPointerEnter\" | \"onPointerEnterCapture\" | \"onPointerLeave\" | \"onPointerLeaveCapture\" | \"onPointerOver\" | \"onPointerOverCapture\" | \"onPointerOut\" | \"onPointerOutCapture\" | \"onGotPointerCapture\" | \"onGotPointerCaptureCapture\" | \"onLostPointerCapture\" | \"onLostPointerCaptureCapture\" | \"onScroll\" | \"onScrollCapture\" | \"onWheel\" | \"onWheelCapture\" | \"onAnimationStart\" | \"onAnimationStartCapture\" | \"onAnimationEnd\" | \"onAnimationEndCapture\" | \"onAnimationIteration\" | \"onAnimationIterationCapture\" | \"onTransitionEnd\" | \"onTransitionEndCapture\" | \"data-test-subj\" | \"css\" | \"alerts\" | \"paddingSize\" | \"size\" | \"onClose\" | \"maxWidth\" | \"ownFocus\" | \"hideCloseButton\" | \"closeButtonProps\" | \"closeButtonPosition\" | \"maskProps\" | \"outsideClickCloses\" | \"side\" | \"pushMinBreakpoint\" | \"pushAnimation\" | \"focusTrapProps\" | \"includeFixedHeadersInFocusTrap\" | \"as\" | \"rawAlert\" | \"isInApp\" | \"observabilityRuleTypeRegistry\" | \"selectedAlertId\"> & { ref?: ((instance: HTMLDivElement | null) => void) | React.RefObject | null | undefined; }> & { readonly _result: ({ alert, rawAlert, alerts, isInApp, observabilityRuleTypeRegistry, onClose, selectedAlertId, }: AlertsFlyoutProps) => JSX.Element | null; }" ], "path": "x-pack/plugins/observability/public/index.ts", "deprecated": false, diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 4cefd6e68d53e..241c3a7f0d2be 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.devdocs.json b/api_docs/observability_a_i_assistant.devdocs.json index ba4ea839a1fc8..1c17941059fad 100644 --- a/api_docs/observability_a_i_assistant.devdocs.json +++ b/api_docs/observability_a_i_assistant.devdocs.json @@ -803,8 +803,6 @@ ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", - "IntersectionC", - "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -846,13 +844,7 @@ "PartialC", "<{ functionCall: ", "StringC", - "; }>]>; }>, ", - "PartialC", - "<{ query: ", - "TypeC", - "<{ stream: ", - "Type", - "; }>; }>]> | undefined; handler: ({}: ", + "; }>]>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -862,10 +854,8 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<", "Readable", - " | ", - "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }, TEndpoint> & Omit & { signal: AbortSignal | null; }>) => Promise<", @@ -1309,8 +1299,6 @@ ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", - "IntersectionC", - "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -1352,13 +1340,7 @@ "PartialC", "<{ functionCall: ", "StringC", - "; }>]>; }>, ", - "PartialC", - "<{ query: ", - "TypeC", - "<{ stream: ", - "Type", - "; }>; }>]> | undefined; handler: ({}: ", + "; }>]>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -1368,10 +1350,8 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<", "Readable", - " | ", - "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }, TEndpoint>>" @@ -2055,8 +2035,6 @@ ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", - "IntersectionC", - "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -2098,13 +2076,7 @@ "PartialC", "<{ functionCall: ", "StringC", - "; }>]>; }>, ", - "PartialC", - "<{ query: ", - "TypeC", - "<{ stream: ", - "Type", - "; }>; }>]> | undefined; handler: ({}: ", + "; }>]>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -2114,10 +2086,8 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<", "Readable", - " | ", - "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", @@ -2570,8 +2540,6 @@ ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", - "IntersectionC", - "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -2613,13 +2581,7 @@ "PartialC", "<{ functionCall: ", "StringC", - "; }>]>; }>, ", - "PartialC", - "<{ query: ", - "TypeC", - "<{ stream: ", - "Type", - "; }>; }>]> | undefined; handler: ({}: ", + "; }>]>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -2629,10 +2591,8 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<", "Readable", - " | ", - "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }[TEndpoint] extends { endpoint: any; params?: infer TRouteParamsRT extends ", @@ -3229,8 +3189,6 @@ ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; \"POST /internal/observability_ai_assistant/chat\": { endpoint: \"POST /internal/observability_ai_assistant/chat\"; params?: ", - "IntersectionC", - "<[", "TypeC", "<{ body: ", "IntersectionC", @@ -3272,13 +3230,7 @@ "PartialC", "<{ functionCall: ", "StringC", - "; }>]>; }>, ", - "PartialC", - "<{ query: ", - "TypeC", - "<{ stream: ", - "Type", - "; }>; }>]> | undefined; handler: ({}: ", + "; }>]>; }> | undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", " & { params: { body: { messages: ", { @@ -3288,10 +3240,8 @@ "section": "def-common.Message", "text": "Message" }, - "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; } & { query?: { stream: boolean; } | undefined; }; }) => Promise<", + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<", "Readable", - " | ", - "ChatCompletion", ">; } & ", "ObservabilityAIAssistantRouteCreateOptions", "; }" diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 62afbcdcf80e3..ee4ad64330ab1 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_log_explorer.mdx b/api_docs/observability_log_explorer.mdx index 88d7a71c985e4..54696f7c22545 100644 --- a/api_docs/observability_log_explorer.mdx +++ b/api_docs/observability_log_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogExplorer title: "observabilityLogExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogExplorer plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogExplorer'] --- import observabilityLogExplorerObj from './observability_log_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 5fb75efe87b79..50c742ccce704 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-01-24 +date: 2024-01-25 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 88c5c1b883d3e..06df629258a9b 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-01-24 +date: 2024-01-25 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 9198591bd4f5b..f76ac891945cf 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-01-24 +date: 2024-01-25 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 5f8b573b2f647..77a97d63c510f 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-01-24 +date: 2024-01-25 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 55eaeec71381a..5a7435b1509a2 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 747 | 639 | 41 | +| 749 | 641 | 41 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 79311 | 230 | 67909 | 1706 | +| 79402 | 230 | 67997 | 1708 | ## Plugin Directory @@ -148,7 +148,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 23 | 0 | 23 | 7 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds a standardized Presentation panel which allows any forward ref component to interface with various Kibana systems. | 11 | 0 | 11 | 3 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 219 | 2 | 164 | 11 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Presentation Utility Plugin is a set of common, shared components and toolkits for solutions within the Presentation space, (e.g. Dashboards, Canvas). | 220 | 2 | 165 | 11 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 16 | 1 | 16 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 22 | 0 | 22 | 7 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 23 | 0 | 23 | 0 | @@ -166,7 +166,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 32 | 0 | 8 | 4 | | searchprofiler | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-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. | 402 | 0 | 196 | 2 | -| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 186 | 0 | 117 | 36 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 193 | 0 | 124 | 37 | | | [@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 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | The core Serverless plugin, providing APIs to Serverless Project plugins. | 21 | 0 | 20 | 0 | @@ -229,7 +229,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 23 | 0 | 22 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 33 | 0 | 33 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 31 | 0 | 31 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 94 | 0 | 92 | 1 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 95 | 0 | 90 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 73 | 0 | 73 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 98 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 1 | 0 | 0 | 0 | @@ -432,6 +432,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 26 | 0 | 26 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 14 | 0 | 9 | 0 | +| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 80 | 0 | 80 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 44 | 0 | 43 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 5 | 0 | 5 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 5 | 0 | 5 | 0 | @@ -495,6 +496,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 172 | 0 | 172 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 27 | 0 | 1 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 8 | 0 | 8 | 0 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 6 | 0 | 1 | 1 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 11 | 0 | 10 | 2 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 9 | 0 | 6 | 2 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index f3d0d0bb4853c..fd0cbb727e1c1 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.devdocs.json b/api_docs/presentation_util.devdocs.json index e48ef03b798db..1f5e66c1067a5 100644 --- a/api_docs/presentation_util.devdocs.json +++ b/api_docs/presentation_util.devdocs.json @@ -2546,6 +2546,20 @@ "path": "src/plugins/presentation_util/public/components/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "presentationUtil", + "id": "def-public.SaveModalDashboardProps.mustCopyOnSaveMessage", + "type": "string", + "tags": [], + "label": "mustCopyOnSaveMessage", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "src/plugins/presentation_util/public/components/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 59e4f63d90f66..3e4d575f02507 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 219 | 2 | 164 | 11 | +| 220 | 2 | 165 | 11 | ## Client diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 18dd7f886c652..90994c7354485 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-01-24 +date: 2024-01-25 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 fa66d204b754e..066f19c63a20d 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-01-24 +date: 2024-01-25 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 04c42bc699604..7e668dcafdfa6 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-01-24 +date: 2024-01-25 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 1ceb6d9e94c99..be6ffb1d1a119 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-01-24 +date: 2024-01-25 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 da213b8749929..59f89302439af 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-01-24 +date: 2024-01-25 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 749c95845f692..845b81075f97c 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-01-24 +date: 2024-01-25 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 139e194c06678..d28d51b96f13e 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-01-24 +date: 2024-01-25 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 27900154c4b59..08edd4ccb3b81 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-01-24 +date: 2024-01-25 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 5fb2bf1641586..c69155c131bd0 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-01-24 +date: 2024-01-25 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 bf221f57bdff1..1ffac664f01c4 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-01-24 +date: 2024-01-25 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 9239e145fa3ed..3f553ad805e82 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-01-24 +date: 2024-01-25 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 bb5c77b59703c..9f7c529df508b 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-01-24 +date: 2024-01-25 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 91aee2b16f97c..a6dbcfca67e0f 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-01-24 +date: 2024-01-25 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 c630166c0bdfa..05ba15eb093ff 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-01-24 +date: 2024-01-25 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 2b885796c9a91..d257ec8a44510 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 2fe1959a4ce66..ec9f8310e7d5d 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index 527ff6217e191..3e28b4c302d1c 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -1874,7 +1874,80 @@ } ], "enums": [], - "misc": [], + "misc": [ + { + "parentPluginId": "securitySolution", + "id": "def-public.AddIntegrationsSteps", + "type": "string", + "tags": [], + "label": "AddIntegrationsSteps", + "description": [], + "path": "x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "securitySolution", + "id": "def-public.CreateProjectSteps", + "type": "string", + "tags": [], + "label": "CreateProjectSteps", + "description": [], + "path": "x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "securitySolution", + "id": "def-public.EnablePrebuiltRulesSteps", + "type": "string", + "tags": [], + "label": "EnablePrebuiltRulesSteps", + "description": [], + "path": "x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "securitySolution", + "id": "def-public.OverviewSteps", + "type": "string", + "tags": [], + "label": "OverviewSteps", + "description": [], + "path": "x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "securitySolution", + "id": "def-public.ViewAlertsSteps", + "type": "string", + "tags": [], + "label": "ViewAlertsSteps", + "description": [], + "path": "x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "securitySolution", + "id": "def-public.ViewDashboardSteps", + "type": "string", + "tags": [], + "label": "ViewDashboardSteps", + "description": [], + "path": "x-pack/plugins/security_solution/public/common/components/landing_page/onboarding/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], "objects": [], "setup": { "parentPluginId": "securitySolution", @@ -2124,6 +2197,20 @@ "trackAdoption": false, "children": [], "returnComment": [] + }, + { + "parentPluginId": "securitySolution", + "id": "def-public.PluginStart.setOnboardingPageSettings", + "type": "Object", + "tags": [], + "label": "setOnboardingPageSettings", + "description": [], + "signature": [ + "OnboardingPageService" + ], + "path": "x-pack/plugins/security_solution/public/types.ts", + "deprecated": false, + "trackAdoption": false } ], "lifecycle": "start", diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 8370607653106..837507e0cdf0d 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 186 | 0 | 117 | 36 | +| 193 | 0 | 124 | 37 | ## Client @@ -37,6 +37,9 @@ Contact [@elastic/security-solution](https://github.com/orgs/elastic/teams/secur ### Interfaces +### Consts, variables and types + + ## Server ### Setup diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 911db36f28291..12cab286636c4 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-01-24 +date: 2024-01-25 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 bd591d93554a8..98f0409d7f38d 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-01-24 +date: 2024-01-25 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 f08e0a3a5704b..73e66dc30aee1 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-01-24 +date: 2024-01-25 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 32ea9344b1b9c..f285c2b09109b 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-01-24 +date: 2024-01-25 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 11b63b6189299..af097856f688a 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-01-24 +date: 2024-01-25 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 5025128a06350..3a3f77a362c88 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-01-24 +date: 2024-01-25 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 6d1aa9cdbf539..5c653325b0017 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index fb6daf6a075da..0b408a9380625 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-01-24 +date: 2024-01-25 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 8fd2470d726ca..0e769647833a7 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-01-24 +date: 2024-01-25 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 ade169d549cac..d798541cfe219 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-01-24 +date: 2024-01-25 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 571f5438ce3f8..1ed92fcb49496 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-01-24 +date: 2024-01-25 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 8ef730544acf9..84b95e579f2e8 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-01-24 +date: 2024-01-25 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 bc75763dd4a44..3d7f6e3e8fb17 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-01-24 +date: 2024-01-25 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 da2e4bd3e456e..ded8337c8af94 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-01-24 +date: 2024-01-25 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 68c849a2b1bde..db37f8bd51260 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-01-24 +date: 2024-01-25 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 3c48995ca801d..8c18ed7f316fa 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index 970343d7bbab9..5d4934091441d 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 424ceb625da97..bcd36b82d30e2 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-01-24 +date: 2024-01-25 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 b68ae37498756..79bfdd6cc9f5f 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-01-24 +date: 2024-01-25 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 3864f0de24bee..4800bc1c03bc0 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.devdocs.json b/api_docs/triggers_actions_ui.devdocs.json index cf3e20ce5204e..43889de19ef3d 100644 --- a/api_docs/triggers_actions_ui.devdocs.json +++ b/api_docs/triggers_actions_ui.devdocs.json @@ -3058,7 +3058,7 @@ "description": [], "signature": [ "BasicFields", - " & { \"@timestamp\"?: string[] | undefined; \"event.action\"?: string[] | undefined; tags?: string[] | undefined; kibana?: string[] | undefined; \"kibana.alert.rule.rule_type_id\"?: string[] | undefined; \"kibana.alert.rule.consumer\"?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string[] | undefined; \"kibana.alert.instance.id\"?: string[] | undefined; \"kibana.alert.rule.category\"?: string[] | undefined; \"kibana.alert.rule.name\"?: string[] | undefined; \"kibana.alert.rule.producer\"?: string[] | undefined; \"kibana.alert.rule.uuid\"?: string[] | undefined; \"kibana.alert.status\"?: string[] | undefined; \"kibana.alert.uuid\"?: string[] | undefined; \"kibana.space_ids\"?: string[] | undefined; \"event.kind\"?: string[] | undefined; \"kibana.alert.action_group\"?: string[] | undefined; \"kibana.alert.case_ids\"?: string[] | undefined; \"kibana.alert.duration.us\"?: string[] | undefined; \"kibana.alert.end\"?: string[] | undefined; \"kibana.alert.flapping\"?: string[] | undefined; \"kibana.alert.maintenance_window_ids\"?: string[] | undefined; \"kibana.alert.reason\"?: string[] | undefined; \"kibana.alert.rule.parameters\"?: string[] | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.start\"?: string[] | undefined; \"kibana.alert.time_range\"?: string[] | undefined; \"kibana.alert.workflow_assignee_ids\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string[] | undefined; \"kibana.alert.workflow_tags\"?: string[] | undefined; \"kibana.version\"?: string[] | undefined; \"kibana.alert.context\"?: string[] | undefined; \"kibana.alert.evaluation.threshold\"?: string[] | undefined; \"kibana.alert.evaluation.value\"?: string[] | undefined; \"kibana.alert.evaluation.values\"?: string[] | undefined; \"kibana.alert.group\"?: string[] | undefined; \"ecs.version\"?: string[] | undefined; \"kibana.alert.risk_score\"?: string[] | undefined; \"kibana.alert.rule.author\"?: string[] | undefined; \"kibana.alert.rule.created_at\"?: string[] | undefined; \"kibana.alert.rule.created_by\"?: string[] | undefined; \"kibana.alert.rule.description\"?: string[] | undefined; \"kibana.alert.rule.enabled\"?: string[] | undefined; \"kibana.alert.rule.from\"?: string[] | undefined; \"kibana.alert.rule.interval\"?: string[] | undefined; \"kibana.alert.rule.license\"?: string[] | undefined; \"kibana.alert.rule.note\"?: string[] | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string[] | undefined; \"kibana.alert.rule.rule_name_override\"?: string[] | undefined; \"kibana.alert.rule.to\"?: string[] | undefined; \"kibana.alert.rule.type\"?: string[] | undefined; \"kibana.alert.rule.updated_at\"?: string[] | undefined; \"kibana.alert.rule.updated_by\"?: string[] | undefined; \"kibana.alert.rule.version\"?: string[] | undefined; \"kibana.alert.severity\"?: string[] | undefined; \"kibana.alert.suppression.docs_count\"?: string[] | undefined; \"kibana.alert.suppression.end\"?: string[] | undefined; \"kibana.alert.suppression.start\"?: string[] | undefined; \"kibana.alert.suppression.terms.field\"?: string[] | undefined; \"kibana.alert.suppression.terms.value\"?: string[] | undefined; \"kibana.alert.system_status\"?: string[] | undefined; \"kibana.alert.workflow_reason\"?: string[] | undefined; \"kibana.alert.workflow_user\"?: string[] | undefined; \"event.module\"?: string[] | undefined; \"kibana.alert.rule.threat.framework\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.id\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.name\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.reference\"?: string[] | undefined; \"kibana.alert.building_block_type\"?: string[] | undefined; \"kibana.alert\"?: string[] | undefined; \"kibana.alert.rule\"?: string[] | undefined; \"kibana.alert.suppression.terms\"?: string[] | undefined; \"kibana.alert.group.field\"?: string[] | undefined; \"kibana.alert.group.value\"?: string[] | undefined; \"kibana.alert.rule.exceptions_list\"?: string[] | undefined; \"kibana.alert.rule.namespace\"?: string[] | undefined; } & { [x: string]: unknown[]; }" + " & { \"@timestamp\"?: string[] | undefined; \"event.action\"?: string[] | undefined; tags?: string[] | undefined; kibana?: string[] | undefined; \"kibana.alert.rule.rule_type_id\"?: string[] | undefined; \"kibana.alert.rule.consumer\"?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string[] | undefined; \"kibana.alert.instance.id\"?: string[] | undefined; \"kibana.alert.rule.category\"?: string[] | undefined; \"kibana.alert.rule.name\"?: string[] | undefined; \"kibana.alert.rule.producer\"?: string[] | undefined; \"kibana.alert.rule.uuid\"?: string[] | undefined; \"kibana.alert.status\"?: string[] | undefined; \"kibana.alert.uuid\"?: string[] | undefined; \"kibana.space_ids\"?: string[] | undefined; \"event.kind\"?: string[] | undefined; \"kibana.alert.action_group\"?: string[] | undefined; \"kibana.alert.case_ids\"?: string[] | undefined; \"kibana.alert.duration.us\"?: string[] | undefined; \"kibana.alert.end\"?: string[] | undefined; \"kibana.alert.flapping\"?: string[] | undefined; \"kibana.alert.maintenance_window_ids\"?: string[] | undefined; \"kibana.alert.reason\"?: string[] | undefined; \"kibana.alert.rule.parameters\"?: string[] | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.start\"?: string[] | undefined; \"kibana.alert.time_range\"?: string[] | undefined; \"kibana.alert.workflow_assignee_ids\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string[] | undefined; \"kibana.alert.workflow_tags\"?: string[] | undefined; \"kibana.version\"?: string[] | undefined; \"kibana.alert.context\"?: string[] | undefined; \"kibana.alert.evaluation.threshold\"?: string[] | undefined; \"kibana.alert.evaluation.value\"?: string[] | undefined; \"kibana.alert.evaluation.values\"?: string[] | undefined; \"kibana.alert.group\"?: string[] | undefined; \"ecs.version\"?: string[] | undefined; \"kibana.alert.risk_score\"?: string[] | undefined; \"kibana.alert.rule.author\"?: string[] | undefined; \"kibana.alert.rule.created_at\"?: string[] | undefined; \"kibana.alert.rule.created_by\"?: string[] | undefined; \"kibana.alert.rule.description\"?: string[] | undefined; \"kibana.alert.rule.enabled\"?: string[] | undefined; \"kibana.alert.rule.from\"?: string[] | undefined; \"kibana.alert.rule.interval\"?: string[] | undefined; \"kibana.alert.rule.license\"?: string[] | undefined; \"kibana.alert.rule.note\"?: string[] | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string[] | undefined; \"kibana.alert.rule.rule_name_override\"?: string[] | undefined; \"kibana.alert.rule.to\"?: string[] | undefined; \"kibana.alert.rule.type\"?: string[] | undefined; \"kibana.alert.rule.updated_at\"?: string[] | undefined; \"kibana.alert.rule.updated_by\"?: string[] | undefined; \"kibana.alert.rule.version\"?: string[] | undefined; \"kibana.alert.severity\"?: string[] | undefined; \"kibana.alert.suppression.docs_count\"?: string[] | undefined; \"kibana.alert.suppression.end\"?: string[] | undefined; \"kibana.alert.suppression.start\"?: string[] | undefined; \"kibana.alert.suppression.terms.field\"?: string[] | undefined; \"kibana.alert.suppression.terms.value\"?: string[] | undefined; \"kibana.alert.system_status\"?: string[] | undefined; \"kibana.alert.workflow_reason\"?: string[] | undefined; \"kibana.alert.workflow_user\"?: string[] | undefined; \"event.module\"?: string[] | undefined; \"kibana.alert.rule.threat.framework\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.id\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.name\"?: string[] | undefined; \"kibana.alert.rule.threat.tactic.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.reference\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.id\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.name\"?: string[] | undefined; \"kibana.alert.rule.threat.technique.subtechnique.reference\"?: string[] | undefined; \"kibana.alert.building_block_type\"?: string[] | undefined; \"kibana.alert\"?: string[] | undefined; \"kibana.alert.group.field\"?: string[] | undefined; \"kibana.alert.group.value\"?: string[] | undefined; \"kibana.alert.rule\"?: string[] | undefined; \"kibana.alert.rule.exceptions_list\"?: string[] | undefined; \"kibana.alert.rule.namespace\"?: string[] | undefined; \"kibana.alert.suppression.terms\"?: string[] | undefined; } & { [x: string]: unknown[]; }" ], "path": "x-pack/plugins/triggers_actions_ui/public/types.ts", "deprecated": false, diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 7828166fa71ca..22f705e03b410 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-01-24 +date: 2024-01-25 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 94d4719c14156..f619d15bdbaa5 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-01-24 +date: 2024-01-25 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 133ae106ef486..f136f60e27384 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-01-24 +date: 2024-01-25 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 583c90b2996d3..027ec24180f6d 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-01-24 +date: 2024-01-25 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 7ed165e36b779..9b4f9e98992ce 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-01-24 +date: 2024-01-25 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 6a2c31d182b44..107a8508f3010 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-01-24 +date: 2024-01-25 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 fa712d02dc2b3..51dec929bd229 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-01-24 +date: 2024-01-25 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 9d8b0bfc686db..abab1e44f0198 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-01-24 +date: 2024-01-25 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 be8c06c8e7170..b4c61edea3d50 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-01-24 +date: 2024-01-25 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 8e6307ba3f143..361d4e977d609 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-01-24 +date: 2024-01-25 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 f31a7ee114e83..715afd7b81628 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-01-24 +date: 2024-01-25 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 4c65486223982..f5939e427522f 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-01-24 +date: 2024-01-25 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 d6726f44665cf..f77c5bada1197 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-01-24 +date: 2024-01-25 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 86d23f5309c07..cf669993c4314 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-01-24 +date: 2024-01-25 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 c9663713193bf..9996f214e0615 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-01-24 +date: 2024-01-25 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 3cf1af08cda4d..4f78b280be5cc 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-01-24 +date: 2024-01-25 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 429c019ccd0b7..3aea7769b1cef 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-01-24 +date: 2024-01-25 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 fe0dcafe76e24..afd006b2c8e7f 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-01-24 +date: 2024-01-25 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 099f857fc8dda..80eacf7fbd380 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-01-24 +date: 2024-01-25 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 72a974ffdf53e..8c0ade01fe8bc 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-01-24 +date: 2024-01-25 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 dbb4f1d635a89..aa68fb0758a27 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-01-24 +date: 2024-01-25 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 536572bbf496f..edf70f1cd782d 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-01-24 +date: 2024-01-25 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From c5d4ffd8b7c6103beb515f3825cb9256a4971805 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 25 Jan 2024 09:30:43 +0100 Subject: [PATCH 023/113] [SLOs] Hide view in app in slo alerts table in slo details page (#175441) ## Summary Fixes https://github.com/elastic/kibana/issues/155731 Since we are already on SLO details page, it doesn't make sense to show view in app button in flyout or in columns actions. image --- .../use_get_alert_flyout_components.tsx | 9 ++++++-- .../alerts/components/alert_actions.test.tsx | 10 ++++++--- .../pages/alerts/components/alert_actions.tsx | 21 ++++++++++++------- .../components/slo_detail_alerts.tsx | 4 ++-- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/observability/public/components/alerts_flyout/use_get_alert_flyout_components.tsx b/x-pack/plugins/observability/public/components/alerts_flyout/use_get_alert_flyout_components.tsx index 460a109b14c28..2d7e7545db736 100644 --- a/x-pack/plugins/observability/public/components/alerts_flyout/use_get_alert_flyout_components.tsx +++ b/x-pack/plugins/observability/public/components/alerts_flyout/use_get_alert_flyout_components.tsx @@ -8,6 +8,9 @@ import React, { useCallback, useMemo } from 'react'; import { AlertsTableFlyoutBaseProps } from '@kbn/triggers-actions-ui-plugin/public'; +import { useRouteMatch } from 'react-router-dom'; +import { SLO_ALERTS_TABLE_ID } from '../../pages/slo_details/components/slo_detail_alerts'; +import { SLO_DETAIL_PATH } from '../../../common/locators/paths'; import type { ObservabilityRuleTypeRegistry } from '../../rules/create_observability_rule_type_registry'; import { AlertsFlyoutHeader } from './alerts_flyout_header'; import { AlertsFlyoutBody } from './alerts_flyout_body'; @@ -19,6 +22,7 @@ export { AlertsFlyout } from './alerts_flyout'; export const useGetAlertFlyoutComponents = ( observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry ) => { + const isSLODetailsPage = useRouteMatch(SLO_DETAIL_PATH); const body = useCallback( (props: AlertsTableFlyoutBaseProps) => { const alert = parseAlert(observabilityRuleTypeRegistry)(props.alert); @@ -37,10 +41,11 @@ export const useGetAlertFlyoutComponents = ( const footer = useCallback( (props: AlertsTableFlyoutBaseProps) => { + const isInApp = Boolean(SLO_ALERTS_TABLE_ID === props.id && isSLODetailsPage); const alert = parseAlert(observabilityRuleTypeRegistry)(props.alert); - return ; + return ; }, - [observabilityRuleTypeRegistry] + [isSLODetailsPage, observabilityRuleTypeRegistry] ); return useMemo( diff --git a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx index ab7080e1d6d60..33a00564bc7e9 100644 --- a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.test.tsx @@ -23,6 +23,8 @@ import { noop } from 'lodash'; import { EuiDataGridCellValueElementProps } from '@elastic/eui/src/components/datagrid/data_grid_types'; import { waitFor } from '@testing-library/react'; import { AlertsTableQueryContext } from '@kbn/triggers-actions-ui-plugin/public/application/sections/alerts_table/contexts/alerts_table_context'; +import { Router } from '@kbn/shared-ux-router'; +import { createMemoryHistory } from 'history'; const refresh = jest.fn(); const caseHooksReturnedValue = { @@ -114,9 +116,11 @@ describe('ObservabilityActions component', () => { }; const wrapper = mountWithIntl( - - - + + + + + ); await act(async () => { await nextTick(); diff --git a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx index ca5bdff47bac1..e54c0f060d2c1 100644 --- a/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx +++ b/x-pack/plugins/observability/public/pages/alerts/components/alert_actions.tsx @@ -21,8 +21,10 @@ import { AttachmentType } from '@kbn/cases-plugin/common'; import { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { TimelineNonEcsData } from '@kbn/timelines-plugin/common'; import type { AlertActionsProps } from '@kbn/triggers-actions-ui-plugin/public/types'; +import { useRouteMatch } from 'react-router-dom'; +import { SLO_ALERTS_TABLE_ID } from '../../slo_details/components/slo_detail_alerts'; import { RULE_DETAILS_PAGE_ID } from '../../rule_details/constants'; -import { paths } from '../../../../common/locators/paths'; +import { paths, SLO_DETAIL_PATH } from '../../../../common/locators/paths'; import { isAlertDetailsEnabledPerApp } from '../../../utils/is_alert_details_enabled'; import { useKibana } from '../../../utils/kibana_react'; import { parseAlert } from '../helpers/parse_alert'; @@ -40,7 +42,10 @@ export function AlertActions({ observabilityRuleTypeRegistry, ...customActionsProps }: ObservabilityAlertActionsProps) { - const { alert, refresh } = customActionsProps; + const { alert, refresh, id } = customActionsProps; + const isSLODetailsPage = useRouteMatch(SLO_DETAIL_PATH); + + const isInApp = Boolean(id === SLO_ALERTS_TABLE_ID && isSLODetailsPage); const { cases: { helpers: { getRuleIdFromEvent, canUseCases }, @@ -183,7 +188,7 @@ export function AlertActions({ return ( <> - {viewInAppUrl ? ( + {viewInAppUrl && !isInApp ? ( - ) : ( - - )} + ) : null} - + Date: Thu, 25 Jan 2024 10:30:02 +0100 Subject: [PATCH 024/113] Update Kibana code editor dependencies (#171720) ## Summary This PR started out as an attempt to resolve https://github.com/elastic/kibana/issues/166559; which it does, the appropriate colours for the message prompt displayed when an edit attempt on read only content is made in the code editor for both dark and light mode are now set; ### Light mode Screenshot 2023-11-22 at 11 30 17 ### Dark mode Screenshot 2023-11-22 at 11 29 31 #### Noteworthy** - See https://code.visualstudio.com/api/references/theme-color for more clarification on the style definitions added to this PR - There's also been accommodation made for consumers of the code editor to provide their own custom message through the prop `readOnlyMessage`. - That been said it's worth pointing out that this PR updates react-monaco-editor and monaco-editor packages to their latest version, primarily because the functionality that provides support to provide customization for the providing a color scheme that would support in our use case for setting colors for dark mode and light mode appropriately, shipped in version 0.40.0 of monaco editor, also for react-monaco-editor prior to it's current latest the pinned version of monaco editor was 0.38.0. - Monaco-yaml is also updated in the PR, matching the change in expectation of the underlying monaco-editor api. ~- Updates to the packages referenced above, in turn caused the installed version of prettier to be updated to the latest minor version 2.8.8. This change caused some lint changes to the project files where parentheses were added to types with Index Access on another type created using the typeof operator (more context [here](https://github.com/prettier/prettier/issues/14990)), for this reason I've opted to lockdown prettier version, so that this PR only contains the changes required for updating the code editor. A subsequent PR will be created to revert the package lockdown so that PR contains only the lint changes that will occur.~ ### Checklist - [x] 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) - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) --------- Co-authored-by: Aleh Zasypkin Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../common/example_currency_format.ts | 1 + package.json | 9 +- packages/kbn-babel-preset/BUILD.bazel | 2 +- packages/kbn-babel-preset/common_preset.js | 2 +- packages/kbn-monaco/BUILD.bazel | 1 + packages/kbn-monaco/index.ts | 1 + .../kbn-monaco/src/__jest__/jest.mocks.ts | 2 +- packages/kbn-monaco/src/__jest__/types.ts | 2 +- .../src/common/diagnostics_adapter.ts | 4 +- packages/kbn-monaco/src/monaco_imports.ts | 18 +-- packages/kbn-monaco/src/register_globals.ts | 8 +- packages/kbn-monaco/src/xjson/language.ts | 2 +- packages/kbn-monaco/src/yaml/constants.ts | 9 ++ packages/kbn-monaco/src/yaml/index.ts | 27 ++++ .../kbn-monaco/src/yaml/worker/yaml.worker.ts | 9 ++ packages/kbn-monaco/webpack.config.js | 48 ++++++- packages/kbn-test/jest-preset.js | 4 +- packages/kbn-ui-shared-deps-src/BUILD.bazel | 1 + .../kbn-ui-shared-deps-src/webpack.config.js | 17 +++ .../__snapshots__/code_editor.test.tsx.snap | 4 + .../code_editor/impl/code_editor.tsx | 53 +++++-- .../code_editor/impl/editor.styles.ts | 4 + .../impl/languages/grok/language.test.ts | 28 +++- .../code_editor/mocks/monaco_mock/index.tsx | 4 +- .../url_template_editor.tsx | 4 +- .../__snapshots__/inspect.test.tsx.snap | 4 +- .../object_view/components/inspect.tsx | 4 +- .../replaced_vislib_chart_types/_timelion.ts | 6 +- test/functional/services/monaco_editor.ts | 19 ++- test/tsconfig.json | 1 + .../cases/public/common/mock/match_media.ts | 6 +- .../hooks/use_config_model.ts | 62 +++++---- .../cypress/e2e/fleet_settings_outputs.cy.ts | 8 +- .../prompt_editor/prompt_editor_function.tsx | 2 +- .../public/common/mock/match_media.ts | 6 +- .../connector_types/tines/tines_params.tsx | 19 ++- .../functional/apps/api_keys/home_page.ts | 5 +- .../apps/security/doc_level_security_roles.ts | 27 ++-- .../functional/page_objects/security_page.ts | 6 +- .../test/functional/services/actions/tines.ts | 7 +- .../cypress/tasks/create_new_rule.ts | 11 +- .../cypress/tasks/discover.ts | 18 ++- yarn.lock | 129 ++++++++++++------ 43 files changed, 426 insertions(+), 178 deletions(-) create mode 100644 packages/kbn-monaco/src/yaml/constants.ts create mode 100644 packages/kbn-monaco/src/yaml/index.ts create mode 100644 packages/kbn-monaco/src/yaml/worker/yaml.worker.ts diff --git a/examples/field_formats_example/common/example_currency_format.ts b/examples/field_formats_example/common/example_currency_format.ts index 9134a4cf5f926..968bb0febb556 100644 --- a/examples/field_formats_example/common/example_currency_format.ts +++ b/examples/field_formats_example/common/example_currency_format.ts @@ -34,6 +34,7 @@ export class ExampleCurrencyFormat extends FieldFormat { return new Intl.NumberFormat(undefined, { style: 'currency', currency: this.param('currency'), + currencyDisplay: 'narrowSymbol', }).format(val); }; } diff --git a/package.json b/package.json index f67fead47293d..b7b875f739b24 100644 --- a/package.json +++ b/package.json @@ -1012,8 +1012,8 @@ "moment": "^2.29.4", "moment-duration-format": "^2.3.2", "moment-timezone": "^0.5.43", - "monaco-editor": "^0.24.0", - "monaco-yaml": "3.2.1", + "monaco-editor": "^0.44.0", + "monaco-yaml": "^5.1.0", "mustache": "^2.3.2", "node-fetch": "^2.6.7", "node-forge": "^1.3.1", @@ -1057,7 +1057,7 @@ "react-is": "^17.0.2", "react-markdown": "^6.0.3", "react-moment-proptypes": "^1.7.0", - "react-monaco-editor": "^0.41.2", + "react-monaco-editor": "^0.54.0", "react-popper-tooltip": "^3.1.1", "react-redux": "^7.2.8", "react-resizable": "^3.0.4", @@ -1139,12 +1139,13 @@ "@babel/generator": "^7.23.6", "@babel/helper-plugin-utils": "^7.22.5", "@babel/parser": "^7.23.6", - "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-numeric-separator": "^7.23.4", "@babel/plugin-transform-runtime": "^7.23.6", "@babel/preset-env": "^7.23.6", "@babel/preset-react": "^7.23.3", diff --git a/packages/kbn-babel-preset/BUILD.bazel b/packages/kbn-babel-preset/BUILD.bazel index a8ae67bfea870..90344e7c8756d 100644 --- a/packages/kbn-babel-preset/BUILD.bazel +++ b/packages/kbn-babel-preset/BUILD.bazel @@ -25,7 +25,7 @@ NPM_MODULE_EXTRA_FILES = [ ] RUNTIME_DEPS = [ - "@npm//@babel/plugin-proposal-class-properties", + "@npm//@babel/plugin-transform-class-properties", "@npm//@babel/plugin-proposal-export-namespace-from", "@npm//@babel/plugin-proposal-nullish-coalescing-operator", "@npm//@babel/plugin-proposal-optional-chaining", diff --git a/packages/kbn-babel-preset/common_preset.js b/packages/kbn-babel-preset/common_preset.js index f8ce4c6353797..6590692c4f70c 100644 --- a/packages/kbn-babel-preset/common_preset.js +++ b/packages/kbn-babel-preset/common_preset.js @@ -21,7 +21,7 @@ module.exports = () => ({ // TECHNICALLY stage 2, but for all intents and purposes it's stage 3 // // See https://github.com/babel/proposals/issues/12 for progress - require.resolve('@babel/plugin-proposal-class-properties'), + require.resolve('@babel/plugin-transform-class-properties'), // Optional Chaining proposal is stage 4 (https://github.com/tc39/proposal-optional-chaining) // Need this since we are using TypeScript 3.7+ diff --git a/packages/kbn-monaco/BUILD.bazel b/packages/kbn-monaco/BUILD.bazel index 2ca10b073fd18..232ebdb2ba39b 100644 --- a/packages/kbn-monaco/BUILD.bazel +++ b/packages/kbn-monaco/BUILD.bazel @@ -36,6 +36,7 @@ webpack_cli( data = SRCS + SHARED_DEPS + [ "//:.browserslistrc", "//packages/kbn-babel-preset", + "@npm//terser-webpack-plugin", "@npm//@babel/runtime", "@npm//babel-loader", "@npm//raw-loader", diff --git a/packages/kbn-monaco/index.ts b/packages/kbn-monaco/index.ts index e2e3c32d9d0fd..c764bc679c1ab 100644 --- a/packages/kbn-monaco/index.ts +++ b/packages/kbn-monaco/index.ts @@ -25,6 +25,7 @@ export type { ESQLCallbacks } from './src/esql'; export * from './src/painless'; /* eslint-disable-next-line @kbn/eslint/module_migration */ import * as BarePluginApi from 'monaco-editor/esm/vs/editor/editor.api'; +export { YAML_LANG_ID, configureMonacoYamlSchema } from './src/yaml'; import { registerLanguage } from './src/helpers'; diff --git a/packages/kbn-monaco/src/__jest__/jest.mocks.ts b/packages/kbn-monaco/src/__jest__/jest.mocks.ts index 1df4f9b115002..5f2894541c1a8 100644 --- a/packages/kbn-monaco/src/__jest__/jest.mocks.ts +++ b/packages/kbn-monaco/src/__jest__/jest.mocks.ts @@ -13,7 +13,7 @@ const createMockModel = (ID: string) => { uri: '', id: 'mockModel', value: '', - getModeId: () => ID, + getLanguageId: () => ID, changeContentListeners: [], setValue(newValue) { this.value = newValue; diff --git a/packages/kbn-monaco/src/__jest__/types.ts b/packages/kbn-monaco/src/__jest__/types.ts index 929964c5300fc..71c82cc067857 100644 --- a/packages/kbn-monaco/src/__jest__/types.ts +++ b/packages/kbn-monaco/src/__jest__/types.ts @@ -11,7 +11,7 @@ export interface MockIModel { id: string; value: string; changeContentListeners: Array<() => void>; - getModeId: () => string; + getLanguageId: () => string; setValue: (value: string) => void; getValue: () => string; onDidChangeContent: (handler: () => void) => void; diff --git a/packages/kbn-monaco/src/common/diagnostics_adapter.ts b/packages/kbn-monaco/src/common/diagnostics_adapter.ts index e0169f49e7d0d..5dedce11bf54c 100644 --- a/packages/kbn-monaco/src/common/diagnostics_adapter.ts +++ b/packages/kbn-monaco/src/common/diagnostics_adapter.ts @@ -36,10 +36,10 @@ export class DiagnosticsAdapter { const onModelAdd = (model: monaco.editor.IModel): void => { let handle: any; - if (model.getModeId() === this.langId) { + if (model.getLanguageId() === this.langId) { model.onDidChangeContent(() => { // Do not validate if the language ID has changed - if (model.getModeId() !== this.langId) { + if (model.getLanguageId() !== this.langId) { return; } diff --git a/packages/kbn-monaco/src/monaco_imports.ts b/packages/kbn-monaco/src/monaco_imports.ts index cebdb7ffa1045..f6f89990995eb 100644 --- a/packages/kbn-monaco/src/monaco_imports.ts +++ b/packages/kbn-monaco/src/monaco_imports.ts @@ -10,18 +10,18 @@ import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; import 'monaco-editor/esm/vs/base/common/worker/simpleWorker'; -import 'monaco-editor/esm/vs/base/worker/defaultWorkerFactory'; +import 'monaco-editor/esm/vs/base/browser/defaultWorkerFactory'; -import 'monaco-editor/esm/vs/editor/browser/controller/coreCommands.js'; +import 'monaco-editor/esm/vs/editor/browser/coreCommands.js'; import 'monaco-editor/esm/vs/editor/browser/widget/codeEditorWidget.js'; -import 'monaco-editor/esm/vs/editor/contrib/wordOperations/wordOperations.js'; // Needed for word-wise char navigation -import 'monaco-editor/esm/vs/editor/contrib/linesOperations/linesOperations.js'; // Needed for enabling shortcuts of removing/joining/moving lines -import 'monaco-editor/esm/vs/editor/contrib/folding/folding.js'; // Needed for folding -import 'monaco-editor/esm/vs/editor/contrib/suggest/suggestController.js'; // Needed for suggestions -import 'monaco-editor/esm/vs/editor/contrib/hover/hover.js'; // Needed for hover -import 'monaco-editor/esm/vs/editor/contrib/parameterHints/parameterHints.js'; // Needed for signature -import 'monaco-editor/esm/vs/editor/contrib/bracketMatching/bracketMatching.js'; // Needed for brackets matching highlight +import 'monaco-editor/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js'; // Needed for word-wise char navigation +import 'monaco-editor/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js'; // Needed for enabling shortcuts of removing/joining/moving lines +import 'monaco-editor/esm/vs/editor/contrib/folding/browser/folding.js'; // Needed for folding +import 'monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestController.js'; // Needed for suggestions +import 'monaco-editor/esm/vs/editor/contrib/hover/browser/hover.js'; // Needed for hover +import 'monaco-editor/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js'; // Needed for signature +import 'monaco-editor/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js'; // Needed for brackets matching highlight import 'monaco-editor/esm/vs/language/json/monaco.contribution.js'; import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution.js'; // Needed for basic javascript support diff --git a/packages/kbn-monaco/src/register_globals.ts b/packages/kbn-monaco/src/register_globals.ts index ad5645df31bef..159563a8d0d9c 100644 --- a/packages/kbn-monaco/src/register_globals.ts +++ b/packages/kbn-monaco/src/register_globals.ts @@ -11,6 +11,7 @@ import { PainlessLang } from './painless'; import { SQLLang } from './sql'; import { monaco } from './monaco_imports'; import { ESQL_THEME_ID, ESQLLang, buildESQlTheme } from './esql'; +import { YAML_LANG_ID } from './yaml'; import { registerLanguage, registerTheme } from './helpers'; export const DEFAULT_WORKER_ID = 'default'; @@ -19,7 +20,7 @@ const langSpecificWorkerIds = [ PainlessLang.ID, ESQLLang.ID, monaco.languages.json.jsonDefaults.languageId, - 'yaml', + YAML_LANG_ID, ]; /** @@ -37,9 +38,8 @@ registerTheme(ESQL_THEME_ID, buildESQlTheme()); const monacoBundleDir = (window as any).__kbnPublicPath__?.['kbn-monaco']; -// @ts-ignore window.MonacoEnvironment = { - // needed for functional tests so that we can get value from 'editor' + // @ts-expect-error needed for functional tests so that we can get value from 'editor' monaco, getWorkerUrl: monacoBundleDir ? (_: string, languageId: string) => { @@ -48,5 +48,5 @@ window.MonacoEnvironment = { : DEFAULT_WORKER_ID; return `${monacoBundleDir}${workerId}.editor.worker.js`; } - : () => undefined, + : () => '', }; diff --git a/packages/kbn-monaco/src/xjson/language.ts b/packages/kbn-monaco/src/xjson/language.ts index 6ec9b1149c707..0f5a556585114 100644 --- a/packages/kbn-monaco/src/xjson/language.ts +++ b/packages/kbn-monaco/src/xjson/language.ts @@ -46,7 +46,7 @@ monaco.languages.onLanguage(ID, async () => { }; const onModelAdd = (model: monaco.editor.IModel) => { - if (model.getModeId() !== ID) { + if (model.getLanguageId() !== ID) { return; } diff --git a/packages/kbn-monaco/src/yaml/constants.ts b/packages/kbn-monaco/src/yaml/constants.ts new file mode 100644 index 0000000000000..c58fca1b43184 --- /dev/null +++ b/packages/kbn-monaco/src/yaml/constants.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 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. + */ + +export const ID = 'yaml'; diff --git a/packages/kbn-monaco/src/yaml/index.ts b/packages/kbn-monaco/src/yaml/index.ts new file mode 100644 index 0000000000000..ae059cf1b8000 --- /dev/null +++ b/packages/kbn-monaco/src/yaml/index.ts @@ -0,0 +1,27 @@ +/* + * 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 { type MonacoYamlOptions } from 'monaco-yaml'; +import { monaco } from '../monaco_imports'; + +export { ID as YAML_LANG_ID } from './constants'; + +const monacoYamlDefaultOptions: MonacoYamlOptions = { + completion: true, + hover: true, + validate: true, +}; + +export const configureMonacoYamlSchema = async (schemas: MonacoYamlOptions['schemas']) => { + const { configureMonacoYaml } = await import(/* webpackChunkName: "monaco-yaml" */ 'monaco-yaml'); + + return configureMonacoYaml(monaco, { + ...monacoYamlDefaultOptions, + schemas, + }); +}; diff --git a/packages/kbn-monaco/src/yaml/worker/yaml.worker.ts b/packages/kbn-monaco/src/yaml/worker/yaml.worker.ts new file mode 100644 index 0000000000000..6103c778de486 --- /dev/null +++ b/packages/kbn-monaco/src/yaml/worker/yaml.worker.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 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 'monaco-yaml/yaml.worker.js'; diff --git a/packages/kbn-monaco/webpack.config.js b/packages/kbn-monaco/webpack.config.js index 7d5d137a65b93..8e3ce95eb2bd2 100644 --- a/packages/kbn-monaco/webpack.config.js +++ b/packages/kbn-monaco/webpack.config.js @@ -14,23 +14,32 @@ const getWorkerEntry = (language) => { return 'monaco-editor/esm/vs/editor/editor.worker.js'; case 'json': return 'monaco-editor/esm/vs/language/json/json.worker.js'; - case 'yaml': - return 'monaco-yaml/lib/esm/yaml.worker.js'; default: return path.resolve(__dirname, 'src', language, 'worker', `${language}.worker.ts`); } }; -const getWorkerConfig = (language) => ({ +/** + * @param {string[]} languages - list of supported languages to build workers for + * @returns {import('webpack').Configuration} + */ +const workerConfig = (languages) => ({ mode: process.env.NODE_ENV || 'development', - entry: getWorkerEntry(language), + entry: languages.reduce((entries, language) => { + entries[language] = getWorkerEntry(language); + return entries; + }, {}), devtool: process.env.NODE_ENV === 'production' ? false : '#cheap-source-map', output: { path: path.resolve(__dirname, 'target_workers'), - filename: `${language}.editor.worker.js`, + filename: ({ chunk }) => `${chunk.name}.editor.worker.js`, }, resolve: { extensions: ['.js', '.ts', '.tsx'], + alias: { + // swap default umd import for the esm one provided in vscode-uri package + 'vscode-uri$': require.resolve('vscode-uri').replace(/\/umd\/index.js/, '/esm/index.mjs'), + }, }, stats: 'errors-only', module: { @@ -47,8 +56,35 @@ const getWorkerConfig = (language) => ({ }, }, }, + { + /** + * further process the modules exported by monaco-editor and monaco-yaml + * because their exports leverage some none-standard language APIs at this time. + */ + test: /(monaco-editor\/esm\/vs\/language|monaco-yaml|vscode-uri)\/.*m?(t|j)sx?$/, + use: { + loader: 'babel-loader', + options: { + babelrc: false, + envName: process.env.NODE_ENV || 'development', + presets: [require.resolve('@kbn/babel-preset/webpack_preset')], + }, + }, + }, + ], + }, + optimization: { + minimizer: [ + (compiler) => { + const TerserPlugin = require('terser-webpack-plugin'); + new TerserPlugin({ + // exclude this file from being processed by terser, + // because attempts at tree shaking actually botches up the file + exclude: /monaco-editor[\\/]esm[\\/]vs[\\/]base[\\/]common[\\/]map.js/, + }).apply(compiler); + }, ], }, }); -module.exports = ['default', 'json', 'painless', 'xjson', 'esql', 'yaml'].map(getWorkerConfig); +module.exports = workerConfig(['default', 'json', 'painless', 'xjson', 'esql', 'yaml']); diff --git a/packages/kbn-test/jest-preset.js b/packages/kbn-test/jest-preset.js index 73c5ffdf7257d..d3795c775ea21 100644 --- a/packages/kbn-test/jest-preset.js +++ b/packages/kbn-test/jest-preset.js @@ -103,9 +103,9 @@ module.exports = { // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation transformIgnorePatterns: [ - // ignore all node_modules except monaco-editor and react-monaco-editor which requires babel transforms to handle dynamic import() + // ignore all node_modules except monaco-editor, monaco-yaml and react-monaco-editor which requires babel transforms to handle dynamic import() // since ESM modules are not natively supported in Jest yet (https://github.com/facebook/jest/issues/4842) - '[/\\\\]node_modules(?![\\/\\\\](byte-size|monaco-editor|monaco-yaml|vscode-languageserver-types|react-monaco-editor|d3-interpolate|d3-color|langchain|langsmith|@cfworker|gpt-tokenizer))[/\\\\].+\\.js$', + '[/\\\\]node_modules(?![\\/\\\\](byte-size|monaco-editor|monaco-yaml|monaco-languageserver-types|monaco-marker-data-provider|monaco-worker-manager|vscode-languageserver-types|react-monaco-editor|d3-interpolate|d3-color|langchain|langsmith|@cfworker|gpt-tokenizer))[/\\\\].+\\.js$', 'packages/kbn-pm/dist/index.js', '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith))/dist/[/\\\\].+\\.js$', '[/\\\\]node_modules(?![\\/\\\\](langchain|langsmith))/dist/util/[/\\\\].+\\.js$', diff --git a/packages/kbn-ui-shared-deps-src/BUILD.bazel b/packages/kbn-ui-shared-deps-src/BUILD.bazel index 9e62a7418f153..fd93f01a0eed5 100644 --- a/packages/kbn-ui-shared-deps-src/BUILD.bazel +++ b/packages/kbn-ui-shared-deps-src/BUILD.bazel @@ -16,6 +16,7 @@ webpack_cli( "@npm//babel-loader", "@npm//css-loader", "@npm//url-loader", + "@npm//@babel/plugin-transform-numeric-separator", "//packages/kbn-ui-shared-deps-npm", "//packages/kbn-babel-register", "//packages/kbn-babel-preset", diff --git a/packages/kbn-ui-shared-deps-src/webpack.config.js b/packages/kbn-ui-shared-deps-src/webpack.config.js index ce6d6be6fa448..2f81dc5e1d8e5 100644 --- a/packages/kbn-ui-shared-deps-src/webpack.config.js +++ b/packages/kbn-ui-shared-deps-src/webpack.config.js @@ -84,6 +84,23 @@ module.exports = { presets: [require.resolve('@kbn/babel-preset/webpack_preset')], }, }, + { + /** + * further process the modules exported by both monaco-editor and monaco-yaml, because; + * 1). they both use non-standard language APIs + * 2). monaco-yaml exports it's src as is see, https://www.npmjs.com/package/monaco-yaml#does-it-work-without-a-bundler + */ + test: /(monaco-editor\/esm\/vs\/|monaco-languageserver-types|monaco-marker-data-provider|monaco-worker-manager).*(t|j)sx?$/, + use: { + loader: 'babel-loader', + options: { + babelrc: false, + envName: process.env.NODE_ENV || 'development', + presets: [require.resolve('@kbn/babel-preset/webpack_preset')], + plugins: [require.resolve('@babel/plugin-transform-numeric-separator')], + }, + }, + }, ], }, diff --git a/packages/shared-ux/code_editor/impl/__snapshots__/code_editor.test.tsx.snap b/packages/shared-ux/code_editor/impl/__snapshots__/code_editor.test.tsx.snap index 4fb960f82cc7d..39e735237808a 100644 --- a/packages/shared-ux/code_editor/impl/__snapshots__/code_editor.test.tsx.snap +++ b/packages/shared-ux/code_editor/impl/__snapshots__/code_editor.test.tsx.snap @@ -293,11 +293,13 @@ exports[` is rendered 1`] = ` is rendered 1`] = `